Статті бази ▾ ← Усі бази знань
Автоматика oCBot
Концепція та філософія12 Ласкаво просимо до екосистеми oCBotЗвідки взявся oCBotІдеологія oCBotСфери призначення та режими роботиПериферійні пристроїСвобода периферіїБазові скрипти автоматизаціїВіртуальні панелі оператораСкладні сценарії та логіка автоматизаціїМультиконтролерністьЗагальний огляд автоматики oCBotАрхітектура та опис
Підтримувані контролери18 Контролер Kincony KC868-A6Підключення живлення й USB на KC868-A6Реле й аналогові виходи KC868-A6Сухі контакти й аналогові входи KC868-A6Шини й роз'єми KC868-A6: RS485, I2C, 1-Wire і рештаЩо зайнято на ESP32 у KC868-A6: карта GPIOЯк зібрати щиток на KC868-A6Як прогнати сценарії без куба: тестовий стенд для KC868-A6Контролер Kincony KC868-A16Підключення живлення й USB на KC868-A16Силові виходи KC868-A16: MOSFET замість релеСухі контакти й аналогові входи KC868-A16Шини й мережа KC868-A16: Ethernet, RS485, I2C, 1-WireЩо зайнято на ESP32 у KC868-A16: карта GPIOЯк зібрати щиток на KC868-A16Як прогнати сценарії без куба: тестовий стенд для KC868-A16Контролер WT32-ETH01Універсальний ESP32 DevKit (Custom)
Каталог периферійних пристроїв9 Датчики температуриДатчики тискуДатчики рівня рідиниДатчики потоку (витратоміри)Виконавчі механізми (Клапани, Насоси, ТЕНи)Датчики середовища (Вологість, Світло, Тиск)Датчики електричні та вагиОргани керування (Кнопки, Енкодери)Електродвигуни та вентилятори
Складання та Перший запуск (DIY)20 Збирання контролера oCBot своїми рукамиПервинне прошивання та запуск контролераШвидке підключення Wi-Fi через BluetoothПідключення ТЕНів та регуляторів потужностіВибір та підключення електромагнітних клапанівКілька плат PCA9685 на одній шиніПін OE — апаратне зняття всіх виходівПлата PCA9685 зблизька — що на ній є і навіщоПлата розширення PCA9685 — 16 каналів ШІМСервопривід і плата розширення — чому це не працюєТвердотілки на платі розширенняПідключення LCD та OLED дисплеїв по шині I2CДвигун і частотний перетворювач: силове підключенняПромисловий протокол RS485 (Modbus RTU)Частотник AE200 (Yingshida) по Modbus: клеми, параметри й регістр завдання частотиЧастотник CFM310 по Modbus: панель RS485, сервісне меню і три регістриЧастотник Ennera FCE по Modbus: налаштування і діагностикаЧастотник без Modbus (900E): пуск реле й оберти 0–10 ВКалібрування ваг на тензодатчиках (HX711)Усунення типових несправностей
Робота з веб-інтерфейсом17 Головна сторінка (Home)Діаграма процесу (Flow)Сценарії автоматизаціїРедактор скриптівПульти оператораДизайнер пультів HMI DesignerПериферіяПлати та шиниЗагальні налаштуванняОбладнанняТочки монтажуНалаштування графіківОновлення прошивкиНалаштування Wi-FiЛогиПорталПро програму
Написання сценаріїв (C++ Скрипти)10 Огляд скриптівМій перший сценарій: Крок за крокомШІМ-відбір: Як налаштувати клапан правильноНалаштування ПІД-регулятора для стабілізаціїАвтоматизація температурних пауз при затиранні солодуСкрипт ББКРегулювання тискуРозрахунок ABV за температурою париСкрипт «Розрахунок ABV»ABV у сценаріях
Безпека, Хмара та Інтеграція5 Система безпеки oCBot: Захист від аварійСтворення хмарного кабінету UA DistilleryЯк опублікувати звіт про перегонкуШеринг кастомних пультів оператора (HMI)Інтеграція з Home Assistant та MQTT
База знаньАвтоматика oCBotБезпека, Хмара та Інтеграція

Система безпеки oCBot: Захист від аварій

Дистиляція та ректифікація, це процеси, пов'язані з нагріванням горючих рідин та виділенням легкозаймистих спиртових парів. Тому безпека є найважливішим аспектом побудови та експлуатації будь-якої автоматики. oCBot містить гнучкі інструменти для автоматичного виявлення аварійних ситуацій та миттєвого знеструмлення системи.


Дворівнева концепція безпеки#

Система безпеки в oCBot побудована за гнучким дворівневим принципом:

  1. Конфігурація на рівні периферії: Ще на етапі налаштування обладнання та давачів у веб-інтерфейсі ви маєте можливість призначити будь-який давач або фізичний пристрій як потенційне джерело аварії. Це дає змогу визначити межі безпечної роботи (наприклад, критичні температури чи стани контактів) безпосередньо для кожного пристрою, позначивши відповідний чекбокс.

    Налаштування аварійності давача на рівні периферії

  2. Логіка на рівні сценаріїв та скриптів: У C++ скриптах та сценаріях автоматизації ці давачі використовуються для реагування на події в реальному часі. У налаштуваннях скрипта на вкладці «Безпека» («Аварії») ви можете описувати будь-які умови та алгоритми порівняння, ініціюючи аварійне зупинення (triggerEmergencyShutdown) при виході показників за встановлені межі.

    Вкладка безпеки в налаштуваннях скрипта

Такий підхід гарантує повну свободу налаштування та дозволяє адаптувати безпеку під особливості будь-якого процесу.


Основні типи аварійних давачів#

Для захисту обладнання та приміщення рекомендується встановити та налаштувати такі давачі:

1. Давач температури ТСА (Трубка Зв'язку з Атмосферою)#

2. Давач розливу рідини (протікання)#

3. Давач надлишкового тиску в кубі#


Важливо

давачі безпеки повинні мати найвищий пріоритет обробки в коді. Опитування цих давачів та реакція на аварію мають відбуватися постійно, незалежно від стану виконання основного алгоритму перегонки.


Приклад реалізації безпеки у кастомному скрипті oCBot#

Для гарантування безпеки у сценаріях використовують блок перевірки умов у методі loop(). Ось приклад безпечного циклу перегонки:

#include "OcbScript.h"

class SafeDistillation : public OcbScript {
private:
    int tsaSensorId;       // давач температури ТСА (DS18B20)
    int leakSensorId;      // давач розливу на підлозі (цифровий пін)
    int heaterRelayId;     // Реле нагріву (ТЕН)
    int waterValveId;      // Клапан подачі води охолодження

    const float maxTsaTemp = 48.0; // Максимально допустима температура ТСА

public:
    SafeDistillation() {
        tsaSensorId = 1;
        leakSensorId = 4;
        heaterRelayId = 2;
        waterValveId = 5;
    }

    void init() override {
        logMessage("Сценарій з контролем безпеки запущено.");
    }

    void loop() override {
        // 1. Зчитуємо показники безпеки
        float tsaTemp = getPeripheralValue(tsaSensorId);
        bool isLeaking = (getPeripheralValue(leakSensorId) > 0.5); // 1.0 - протікання

        // 2. Перевірка на аварійні ситуації
        if (tsaTemp > maxTsaTemp) {
            triggerEmergencyShutdown("АВАРІЯ: Перегрів ТСА! Температура: " + String(tsaTemp, 1) + "°C");
            return;
        }

        if (isLeaking) {
            triggerEmergencyShutdown("АВАРІЯ: Виявлено протікання рідини на підлозі!");
            return;
        }

        // 3. Основний алгоритм перегонки (якщо все безпечно)
        // Наприклад, тримаємо ТЕН увімкненим
        setPeripheralValue(heaterRelayId, 1.0);
    }

    // Функція негайного безпечного вимкнення обладнання
    void triggerEmergencyShutdown(String reason) {
        setPeripheralValue(heaterRelayId, 0.0); // Знеструмлюємо ТЕН
        setPeripheralValue(waterValveId, 0.0);   // Перекриваємо воду або залишаємо для охолодження куба (залежно від логіки)
        
        logMessage(reason);
        logMessage("СИСТЕМА ЗУПИНЕНА! ВСІ НАГРІВАЧІ ВИМКНЕНО!");
        
        stopScript(); // Зупиняємо роботу автоматики
    }
};

Увага

Ніколи не покладайтеся виключно на програмне забезпечення для захисту від надлишкового тиску! На кришці вашого перегінного куба обов'язково повинен бути встановлений механічний підривний (скидний) клапан безпеки, налаштований на тиск спрацьовування не більше 50 кПа (для побутових дистиляторів).