Demostand: различия между версиями

 
(не показаны 64 промежуточные версии 6 участников)
Строка 1: Строка 1:
Страница находится в процессе наполнения
{{DISPLAYTITLE: Демонстрационный стенд автоматизации с оборудованием Wiren Board}}
 
[[Файл:Demostand.jpg|500px|thumb|Демонстрационный стенд, вид спереди]]
[[Файл:Demostand-back.jpg|500px|thumb|Демонстрационный стенд, вид сзади]]
==Общая информация==
==Общая информация==
Фото
Демонстрационный стенд можно посмотреть в нашем офисе.


==Подключённые устройства==
==Подключённые устройства==
<gallery mode="packed" heights="150px">
Image: Demostand Devices RS485.jpg | Устройства на шине RS-485
Image: Demostand Devices WB6 + IO Modules.jpg | Контроллер с боковыми модулями ввода/вывода
Image: Demostand Devices Peripherals.jpg | Устройства для взаимодействия и датчики
</gallery>
{| class="wikitable"
{| class="wikitable"
! colspan="2" |Modbus устройства
! colspan="2" |Modbus устройства
! colspan="2" |Пристыковочные модули
|-
|-
|Модель
|[[WB-MR6C v.2 Modbus Relay Modules|WB-MR6C]]
|Описание
|6-канальный релейный модуль. Входы типа «Сухой контакт»
|Модель
|-
|Описание
|[[WB-MRWL3_Modbus_Relay_Module|WB-MRWL3]]
|Очень мощный 3-канальный релейный модуль. Входы вида «Сухой контакт»
|-
|[[WB-MDM3 230V Modbus Dimmer|WB-MDM3]]
|3-канальный диммер светодиодных ламп и ламп накаливания 230 В
|-
|[[WB-MRGBW-D Modbus LED Dimmer|WB-MRGBW-D]]
|4-канальный диммер светодиодных лент (на дин-рейку). Допустимый ток 3А на канал.
Отдельный канал для управления белыми лентами.
|-
|[[Power_Meter_WB-MAP12H| WB-MAP12H]]
|Многоканальный счётчик электроэнергии.
|-
|[[WB-MIR v2 - Modbus IR Remote Control| WB-MIR v.2]]
|Модуль для управления устройствами посредством ИК сигналов, оснащён входом для температурного датчика.
|-
! colspan="2" |Датчики
|-
|[[WB-MSW v.3 Modbus Sensor|WB-MSW v.3]]
|Универсальный настенный датчик.
|-
|WB-MS/THLS
|Цифровой датчик температуры, влажности, освещённости и звукового давления с двумя входами для подключения 1-Wire датчиков.
|-
|[[Датчик газа WB-MSGR | WB-MSGR ]]
|Комбинированный электрохимический датчик газов со встроенным реле.
|-
|[[WB-M1W2 1-Wire to Modbus Temperature Measurement Module|WB-M1W2 ]]
|Модуль для заведения двух 1-Wire датчиков в шину RS-485 и их опроса по протоколу Modbus.
|-
! colspan="2" |Боковые модули ввода/вывода
|-
|-
|WB-MR6HV/I
|[[WBIO-DO-R10A-8 Relay Module | WBIO-DO-R10A-8]]
|Мощный 6-ти канальный релейный модуль. Входы 220В. [[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR6/ Купить.]
|Релейный модуль. До 7А/230В на канал. Идеален для управления освещением/контакторами/моторами.  
|WBIO-R10A8
|Релейный модуль. До 7А/230В на канал. Идеален для
управления освещением/контакторами/моторами. [[Подробнее.]] [https://wirenboard.com/ru/product/WBIO-DO-R10A-8/ Купить.]
|-
|-
|WB-MR3LV/I
|[[WBIO-DO-HS-8 Discrete Outputs | WBIO-DO-HS-8]]
|Мощный 3-х канальный релейный модуль. Входы вида "Сухой контакт" [[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|WBIO-HS-8
|Модуль с 8 выходами вида "High Side Switch"
|Модуль с 8 выходами вида "High Side Switch"
[[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|-
|-
|WB-MDM2
|[[WBIO-DI-WD-14 Discrete Inputs | WBIO-DI-WD-14]]
|Диммер ламп (как накаливания, так и светодиодных).
|Универсальный модуль дискретных входов
Номинальная мощность до 400Вт. [[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|-
|WBIO-R1G16
|[[WBIO-DI-HVD-16 16-Channel 230V Detector Module | WBIO-DI-HVD-16]]
|Релейный модуль с 16-ю выходами и общим каналом.
|Модуль содержит 16 входов для детектирования высокого напряжения (220В).
[[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|}
 
==Правила==
При написании своих правил через движок WB-Rules, важно помнить, что код в правилах выполняется '''асинхронно'''.
 
Если, в привычном понимании, выполнение кода идёт сверху-вниз, то в данном случае, выполнением управляет событийная модель: когда происходит то или иное событие (изменение показаний датчика/срабатывание таймера/нажатие на кнопку), то выполняется соответствующий кусок кода, отвечающий за обработку этого события. Подробнее о работе движка правил и типовых конструкциях обработки событий можно узнать из [[движок правил wb-rules|соответствующей статьи.]]
 
Для управления стендом были созданы виртуальные устройства. Логика управления стендом выглядят следующим образом: нажатие на кнопку/переключение в веб-интерфейсе → срабатывание виртуального устройства → выполнение правила.
 
==Схема подключения==
 
Цвета соединений на схеме условные и не совпадают с цветами проводов в устройстве.
<gallery mode="traditional " widths ="500px" heights="350px">
Image: Demo stand left.png|| Схема подключения устройств на демонстрационном стенде: левая сторон
Image: Demo stand right.png| Схема подключения устройств на демонстрационном стенде: правая сторона
</gallery>
 
==SVG Дашборд==
В веб-интерфейсе контроллера Wiren Board можно создавать [[SVG-Dashboards | SVG-дашбрды]], это позволяет создать интерактивную мнемосхему.
 
В веб-интерфейсе демонстрационного стенда в режиме реального времени видно положение автоматов, реле, контакторов и нагрузок на стенде. Так же есть возможность переключать реле нажатием на интерактивные области (подсвечены фиолетовым).  
[[Файл:Mnemo.png|1280px|thumb|center|SVG мнемосхема]]
 
==Файлы для скачивания==
По ссылкам ниже вы можете скачать схему подключения в форматах <br>
'''Corel Draw 2018:''' [[Media:Demostand.cdr.zip|Demostand.cdr.zip]]
 
'''Corel Draw PDF:''' [[Media:Demo stand.pdf|Demostand.pdf]]
 
'''SVG мнемосхема:''' [[Media:Demo stand.svg.zip|Demostand.svg.zip]]
 
==Таблицы MQTT Топиков==
{| class="wikitable"
! colspan="2" |WBIO-DO-R10A-8
|-
|wb-gpio/EXT1_R3A1
|Контактор NO: Лампы, Вентиляция, Индикаторы
|-
|wb-gpio/EXT1_R3A2
|Контактор NC: Розетки
|-
|wb-gpio/EXT1_R3A3
|Индикатор 1 (Розетка 1)
|-
|wb-gpio/EXT1_R3A4
|Индикатор 2 (Розетка 2)
|-
|wb-gpio/EXT1_R3A5
|Индикатор 3
|-
|wb-gpio/EXT1_R3A6
|Индикатор 4
|-
|wb-gpio/EXT1_R3A7
|Индикатор 5
|-
|wb-gpio/EXT1_R3A8
|Вентилятор
|}
 
{| class="wikitable"
! colspan="2" |WBIO-DO-HS-8
|-
|wb-gpio/EXT2_HS1
|Подсветка кнопки 1 (Розетка 1)
|-
|wb-gpio/EXT2_HS2
|Подсветка кнопки 2 (Розетка 2)
|-
|wb-gpio/EXT2_HS3
|Подсветка кнопки 3
|-
|wb-gpio/EXT2_HS4
|Подсветка кнопки 4
|-
|wb-gpio/EXT2_HS5
|Подсветка кнопки 5
|}
 
{| class="wikitable"
! colspan="2" |WBIO-DI-HVD-16
|-
|wb-gpio/EXT3_IN1
|Автомат: Розетка 1
|-
|-
|WB-MRGBW-D
|wb-gpio/EXT3_IN2
|Диммер RGB-лент. Допустимый ток 3А на канал.
|Автомат: Контроллер, Контакторы
Отдельный канал для управления белыми лентами. [[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|WBIO-DI-DR14
|Модуль содержит 8 входов вида "Сухой контакт"
[[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|-
|-
|WB-MAP6S
|wb-gpio/EXT3_IN3
|6-ти канальный счётчик электроэнергии.
|Контактор NO: Лампы, Вентиляция, Индикаторы
[[Страница с документацией.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|WBE2-DI-DR-3
|Модуль расширения на 3 входа вида "Cухой кнтакт"
Вставляются внутрь корпуса Wiren Board [[Подробнее.]] [https://wirenboard.com/ru/product/WB-MR3/ Купить.]
|-
|-
|WB-MRM2mini/no
|wb-gpio/EXT3_IN4
|
|Автомат: Ввод
|-
|-
|WB-MIR
|wb-gpio/EXT3_IN5
|
|Автомат 3\3: Индикаторы
|-
|-
! colspan="2" |Датчики
|wb-gpio/EXT3_IN6
|Автомат 1\3: Лампы
|-
|-
|WB-MSW2
|wb-gpio/EXT3_IN7
|
|Автомат 2\3: Вентиляция
|-
|-
|WB-MSW/THLS
|wb-gpio/EXT3_IN8
|
|Автомат: Розетка 2
|-
|-
|WB-MSGR
|wb-gpio/EXT3_IN9
|
|Напряжение на розетке 2
|-
|-
|WB-M1W2
|wb-gpio/EXT3_IN10
|
|Напряжение на розетке 1
|}
|}


==Правила==
{| class="wikitable"
! colspan="2" |WBIO-DI-WD-14
|-
|wb-gpio/EXT4_IN1
|Кнопка 1
|-
|wb-gpio/EXT4_IN2
|Кнопка 2
|-
|wb-gpio/EXT4_IN3
|Кнопка 3
|-
|wb-gpio/EXT4_IN4
|Кнопка 4
|-
|wb-gpio/EXT4_IN5
|Кнопка 5
|-
|wb-gpio/EXT4_IN6
|Выключатель 1
|-
|wb-gpio/EXT4_IN7
|Выключатель 2
|-
|wb-gpio/EXT4_IN8
|Выключатель 3
|-
|wb-gpio/EXT4_IN9
|Датчик движения
|}


====Датчик движения====
{| class="wikitable"
<div class="mw-collapsible mw-collapsed">
! colspan="2" |WB-MRWL3
Показать код
|-
<div class="mw-collapsible-content">
|wb-mr3_29/K1
<code>
|Реле Розетки 1
    defineAlias("movement_lamp", "wb-gpio/EXT1_R3A2");
|-
    defineAlias("movement_virtual_switch", "movement_sensor_control/Иммитация движения");
|wb-mr3_29/K2
    defineAlias("movement_timeout_before", "movement_sensor_control/Задержка после начала движения");
|Реле Розетки 2
    defineAlias("movement_timeout_after", "movement_sensor_control/Задержка после прекращения движения");
|}
   
    var motion_timer_before = null;
    var motion_timer_after = null;
   
    defineVirtualDevice("movement_sensor_control", {
        title: "Датчик движения",
        cells: {
            "Иммитация движения": {
                type: "switch",
                value: false
            },
            "Задержка после начала движения": {
                type: "range",
                value: 2,
                min: 1,
                max: 10
            },
            "Задержка после прекращения движения": {
                type: "range",
                value: 2,
                min: 1,
                max: 10
            }
   
   
        }
    });
   
    defineRule("physical_movement_to_virtual_switch", {
        whenChanged: "wb-gpio/EXT5_DR8",
        then: function(newValue, devName, cellName) {
            movement_virtual_switch = newValue;
   
        }
    });
   
   
    defineRule("movement_handler", {
        whenChanged: "movement_sensor_control/Иммитация движения",
        then: function(newValue, devName, cellName) {
            if (newValue == true) {
                if (motion_timer_before) {
                    clearTimeout(motion_timer_before);
                }
                motion_timer_before = setTimeout(function() {
                    movement_lamp = 1;
                    motion_timer_before = null;
                }, movement_timeout_before * 1000);
            } else {
                if (motion_timer_after) {
                    clearTimeout(motion_timer_after);
                }
                motion_timer_after = setTimeout(function() {
                    movement_lamp = 0;
                    motion_timer_after = null;
                }, movement_timeout_after * 1000);
            }
        }
    });
</code>
</div></div>


====Управление освещением====
{| class="wikitable"
<div class="mw-collapsible mw-collapsed">
! colspan="2" |WB-MDM3
Код правила
|-
<div class="mw-collapsible-content">
|wb-mdm2_2/Channel 1
<code>
|Лампа 1
        defineAlias("small_light_switcher", "wb-msgr_9/Relay");
|-
        defineAlias("lamp1_switcher", "wb-gpio/EXT2_K1");
|wb-mdm2_2/Channel 2
       
|Лампа 2
        var FORCE_ILLUMINANCE_FLAG = false;
|}
        var FORCE_LAMP_FLAG = false;
       
       
        defineVirtualDevice("switch_small_light", {
            title: "Управление освещением",
            cells: {
                "Принудительное освещение датчика": {
                    type: "switch",
                    value: false
                },
                "Включить освещение вручную": {
                    type: "switch",
                    value: false
                },
                "Уровень освещения днём": {
                    type: "range",
                    value: 500,
                    max: 1000
                }
       
            }
        });
       
       
        defineRule("small_light_control", {
            whenChanged: "switch_small_light/Принудительное освещение датчика",
            then: function(newValue, devName, cellName) {
                if (newValue == true) {
                    small_light_switcher = 1;
                    FORCE_ILLUMINANCE_FLAG = true;
                    dev["switch_small_light/Включить освещение вручную"] = false
                } else {
                    small_light_switcher = 0;
                    FORCE_ILLUMINANCE_FLAG = false;
                }
            }
        });
       
       
        defineRule("manual_light_control", {
            whenChanged: "switch_small_light/Включить освещение вручную",
            then: function(newValue, devName, cellName) {
                if (MANUAL_SWITCHER_1_FLAG == false) {
                if (newValue == true) {
                    lamp1_switcher = 1;
                    FORCE_LAMP_FLAG = true;
                    dev["switch_small_light/Принудительное освещение датчика"] = false
                } else {
                    lamp1_switcher = 0;
                    FORCE_LAMP_FLAG = false;
            }
                }
            }
        });
       
       
       
       
        defineRule("illuminance_ms_thls", {
            whenChanged: "wb-ms-thls-v2_8/Illuminance",
            then: function(newValue, devName, cellName) {
                if (MANUAL_SWITCHER_1_FLAG == false) {
                if (FORCE_ILLUMINANCE_FLAG == false && FORCE_LAMP_FLAG == false) {
                    if (newValue < dev["switch_small_light"]["Уровень освещения днём"]) {
                        lamp1_switcher = 1;
                    } else {
                        if (newValue > dev["switch_small_light"]["Уровень освещения днём"]) {
       
                            lamp1_switcher = 0;
                }
                        }
                    }
                }
            }
        });
</code>
</div></div>


====Ручное управление выключателями====
{| class="wikitable"
! colspan="2" |WB-MR6C
|-
|wb-m6с_3/K1
|Лампа 3
|}


<div class="mw-collapsible mw-collapsed">
{| class="wikitable"
Код правила
! colspan="2" |WB-MAP12H
<div class="mw-collapsible-content">
|-
<code>
|wb-map12h_42/Ch 1 L1
    defineAlias("lamp1_switcher_control", "wb-gpio/EXT2_K1");
|Автомат: Контроллер, Контакторы
    defineAlias("lamp2_switcher_control", "wb-mdm2_2/Channel 1");
|-
    defineAlias("lamp3_switcher_control", "wb-mr3_3/K1");
|wb-map12h_42/Ch 1 L2
   
|Автомат 1\3: Лампы
    var MANUAL_SWITCHER_1_FLAG = false;
|-
    var MANUAL_SWITCHER_2_FLAG = false;
|wb-map12h_42/Ch 1 L3
    var MANUAL_SWITCHER_3_FLAG = false;
|Автомат 2\3: Вентиляция
       
|-
   
|wb-map12h_42/Ch 2 L1
    defineRule("switcher_1", {
|Автомат 3\3: Индикаторы
        whenChanged: "wb-gpio/EXT5_DR1",
|-
        then: function(newValue, devName, cellName) {
|wb-map12h_42/Ch 2 L2
        if (newValue == true) {
|Автомат: Розетка 1
            MANUAL_SWITCHER_1_FLAG = true;
|-
          lamp1_switcher_control = 1;
|wb-map12h_42/Ch 2 L3
        }
|Автомат: Розетка 2
        else {
|}
        MANUAL_SWITCHER_1_FLAG = false;
        lamp1_switcher_control = 0;
        }
        }
    });
   
   
   
    defineRule("switcher_2", {
        whenChanged: "wb-gpio/EXT5_DR2",
        then: function(newValue, devName, cellName) {
        if (newValue == true) {
            MANUAL_SWITCHER_2_FLAG = true;
          lamp2_switcher_control = 100;
        }
        else {
        MANUAL_SWITCHER_2_FLAG = false;
        lamp2_switcher_control = 0;
        }
        }
    });
   
   
   
    defineRule("switcher_3", {
        whenChanged: "wb-gpio/EXT5_DR3",
        then: function(newValue, devName, cellName) {
        if (newValue == true) {
            MANUAL_SWITCHER_3_FLAG = true;
          lamp3_switcher_control = 1;
        }
        else {
        MANUAL_SWITCHER_3_FLAG = false;
        lamp3_switcher_control = 0;
        }
        }
    });
</code>
</div></div>


====Имитация управления кондиционером====
{| class="wikitable"
<div class="mw-collapsible mw-collapsed">
! colspan="2" |WB-M1W2
Код правила
|-
<div class="mw-collapsible-content">
|wb-m1w2_72/External Sensor 1
<code>
|1-wire 2
    defineAlias("virtual_dimmer", "climate_system_control/Диммирование нагревателя");
|-
    defineAlias("physical_dimmer", "wb-mdm2_2/Channel 1");
|wb-m1w2_72/External Sensor 2
    defineAlias("temperature_sensor", "wb-m1w2_7/External Sensor 2")
|1-wire 1
    defineAlias("low_temp_value", "climate_system_control/Слишком низкая температура");
|}
    defineAlias("norm_temp_value", "climate_system_control/Комфортная температура");
    defineAlias("high_temp_value", "climate_system_control/Слишком высокая температура");
   
    defineAlias("turn_on_red", "wb-mir-simple_10/Play from ROM1");
    defineAlias("turn_on_green", "wb-mir-simple_10/Play from ROM3");
    defineAlias("turn_on_blue", "wb-mir-simple_10/Play from ROM2");
   
    defineVirtualDevice("climate_system_control", {
        title: "Управление климатом",
        cells: {
            "Диммирование нагревателя": {
                type: "range",
                value: 20,
                min: 1,
                max: 100
            },
            "Слишком низкая температура": {
                type: "range",
                value: 24,
                min: 1,
                max: 35
            },
            "Слишком высокая температура": {
                type: "range",
                value: 28,
                min: 1,
                max: 45
            }
   
   
   
   
        }
    });
   
   
   
    defineRule("virtual_dimmer_to_physical", {
        whenChanged: "climate_system_control/Диммирование нагревателя",
        then: function(newValue, devName, cellName) {
            if (MANUAL_SWITCHER_2_FLAG == false) {
                physical_dimmer = newValue;
            }
        }
    });
   
   
   
    defineRule("indicate_temp", {
        whenChanged: "wb-m1w2_7/External Sensor 2",
        then: function(newValue, devName, cellName) {
            log(newValue);
            if (newValue <= low_temp_value) {
                turn_on_blue = 1;
                log("Low");
            }
   
            if ((newValue > low_temp_value) && (newValue < high_temp_value)) {
                turn_on_green = 1;
                log("normal");
            }
   
            if (newValue >= high_temp_value) {
                log(high_temp_value);
                turn_on_red = 1;
                log("High");
            }
        }
    });
</code>
</div></div>


====Управление вентилятором и миниреле====
{| class="wikitable"
<div class="mw-collapsible mw-collapsed">
! colspan="2" |WB-MIR v.2
Код правила
|-
<div class="mw-collapsible-content">
|wb-mir_10/External Temperature Sensor
<code>
|1-wire 3
    defineAlias("relay1_control", "wb-mrm2_11/Relay 1");
|}
    defineAlias("relay_button_lamp", "wb-gpio/EXT3_HS4");
   
    defineAlias("fan_control", "wb-gpio/EXT3_HS5");
    defineAlias("fan_button_lamp", "wb-gpio/EXT3_HS6");
    defineAlias("virtual_fan_switch", "virtual_fan/Включить вручную");
    defineAlias("virtual_mrm2_mini_switch", "virtual_mrm2_mini/Включить вручную");
   
    defineVirtualDevice("virtual_fan", {
        title: "Управление вентилятором",
        cells: {
            "Включить вручную": {
                type: "switch",
                value: false
            }
        }
    });
   
    defineVirtualDevice("virtual_mrm2_mini", {
        title: "Управление миниреле",
        cells: {
            "Включить вручную": {
                type: "switch",
                value: false
            }
        }
    });
   
   
    defineRule("fan_virtual_to_physical", {
        whenChanged: "virtual_fan/Включить вручную",
        then: function(newValue, devName, cellName) {
            fan_control = newValue;
            fan_button_lamp = newValue;
   
        }
    });
   
   
    defineRule("mrm2_mini_virtual_to_physical", {
        whenChanged: "virtual_mrm2_mini/Включить вручную",
        then: function(newValue, devName, cellName) {
            relay1_control = newValue;
            relay_button_lamp = newValue;
   
        }
    });
   
   
   
    defineRule("fan_manual_turn_on", {
        whenChanged: "wb-gpio/EXT5_DR7",
        then: function(newValue, devName, cellName) {
            if (newValue == true) {
                virtual_fan_switch = !virtual_fan_switch;
   
            }
        }
    });
   
   
   
    defineRule("mini_relay_manual_turnon", {
        whenChanged: "wb-gpio/EXT5_DR9",
        then: function(newValue, devName, cellName) {
            if (newValue == true) {
                virtual_mrm2_mini_switch = !virtual_mrm2_mini_switch;
   
            }
        }
    });
</code>
</div></div>