ООО Разумный дом
Существует множество задач, в которых необходимо управлять светильниками от различных типов кнопок, выключателей и датчиков. Ниже будет описание для подключения: кнопок, выключателей, энкодеров, резисторов и датчиков.
Сконфигурировать входы и выходы модуля можно с помощью сценариев.
Описанные ниже сценарии подходят к диммерам DDM845R, DDM8410R, DDL04R, DDL84R. А так же их можно применить и к реле DRM88R и DRM21R, но у реле выходы будут иметь дискретное значение 0 или 1, в отличии от диммера со значением 0...1023. Но сценарии написаны на примере модуля диммера DDM845R.
На выходе может быть подключен светильник (менять яркость), электродвигатель (менять частоту вращения), привод шибера для вентиляции (менять поток воздуха) и другие типы нагрузок. Но для простоты понимания я буду писать применительно к светильнику и менять будем яркость.
Подключение модуля
Подключаем модуль согласно схеме.Подключить модуль диммера можно не только к ПК через интерфейс MXB11 или MXB12, но и к контроллерам. Ниже будут описаны способы программирования с помощью различных источников команд.
Запись сценариев с помощью ПК
1. Для записи сценариев в модуле с ПК необходимо его подключить к ПК через интерфейс MXB12.
2. Загружаем и устанавливаем программу с сайта. https://razumdom.ru/upload/iblock/135/RDC_Modbus_41.zip
3. После установки программы загружаем файлы профиля https://razumdom.ru/upload/iblock/e17/Resources.zip
Распаковываем архив и переписываем файлы в папку программы: c:\Program Files (x86)\RazumDom\RDControl MB41\Resources\
4. Запускаем программу: Пуск - Разумный дом - RDCMB4.1
5. Программа попросит ключ активации. Нужно ввести www.razumdom.ru
6. Нажать в Меню Файл - Создать решение. Указать имя файла и сохранить.
Нажать кнопку Настройки - Настройки порта
7. Нажать в Меню Устройства - Включить опрос устройств.
8. Нажать в Меню Устройства - Поиск устройств. После того, как программа найдет устройство, нажать Завершить поиск.
9. Нажать на строку Устройство DDM845R и нажать закладку Сценарии. Нажать кнопку внизу Считать.
10. В поле сценарии нужно нажать и выбрать тип сценария. В поле Входные данные указать необходимые параметры для выбранного типа сценария.
11. После написания всех необходимых строк сценария нужно обязательно нажать кнопку Записать.
После этого сценарии начнут сразу же выполняться. Перезагружать модуль не нужно.
Запись сценариев с помощью контроллера Wiren Board
Это усложняет написание, но делает его универсальным в качестве применения других средств программирования. Можно написать так же с контроллера WirenBoard. Все коды сценариев описаны в инструкции.
Например.
Нужно открыть инструкцию https://razumdom.ru/upload/iblock/45e/DDM44Rv3_230817.pdf
Страница 22.
Строка IF (DI 1 == Const 0) THEN HR 40 = Const 0 однократно будет записана следующим образом:
HR100=7;
HR101=2;
HR102=1;
HR103=0;
HR104=0;
HR105=0;
HR106=3;
HR107=40;
HR108=0;
HR109=0;
HR110=0;
HR111=0;
HR112=0
Командами с контроллера WirenBoard:
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r100 7
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r101 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r102 1
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r103 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r104 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r105 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r106 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r107 40
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r108 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r109 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r110 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r111 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r112 0
Следующая строка будет записана в регистры HR120 - HR132.
IF (DI 1 == Const 1) THEN HR 40 = Const 1000 однократно
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r120 7
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r121 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r122 1
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r123 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r124 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r125 1
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r126 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r127 40
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r128 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r129 1023
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r130 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r131 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r132 0
И далее через каждые 20 регистров.
Запись сценариев с помощью MQTT контроллера DRM88ER
Так же сценарии можно записать кодами в регистры Modbus HR100... с помощью контроллера DRM88ER.Это сложнее, чем писать программу в самом контроллере, но дает возможность быстро поменять программу не отключая его от контроллера и без подключения к ПК. Так же можно менять сценарии удаленно через Интернет. Все коды сценариев описаны в инструкции.
Возьмем тот же самый пример.
Нужно открыть инструкцию https://razumdom.ru/upload/iblock/45e/DDM44Rv3_230817.pdf
Страница 22.
Строка IF (DI 1 == Const 0) THEN HR 40 = Const 0 однократно будет записана следующим образом:
HR100=7;
HR101=2;
HR102=1;
HR103=0;
HR104=0;
HR105=0;
HR106=3;
HR107=40;
HR108=0;
HR109=0;
HR110=0;
HR111=0;
HR112=0
В модуле DRM88ER делаем следующее:
1. В браузере заходим на страницу устройства и авторизуемся.
Затем в меню открываем пункт Modbus.
2. Нужно ввести параметры:
- Адрес - это адрес контроллера и он должен отличаться от адреса диммера иначе MASTER работать не будет;
- Скорость и опции должны совпадать с параметрами диммера;
- Режим работы устанавливаем - MASTER.
3. После нажатия кнопки ПРИМЕНИТЬ ниже откроется ещё раздел для Управления устройствами.
4. В разделе Управление устройствами нужно ввести:
- адрес диммера -34;
- функция Write HR;
- регистр - 100;
- значение - 7;
- ответ запишем в регистр IR20. В ответе будет подтверждение приема OK или ошибка ERROR.
5. Нажимаем кнопку ОТПРАВИТЬ. Значение одного регистра запишется в модуль диммера. HR100 = 7
6. Затем нужно вписать: регистр - 101 и значение - 2, нажать кнопку ОТПРАВИТЬ.
И так далее по одному регистру.
Для включения сценариев в диммере нужно указать:
- адрес диммера -34;
- функция Write HR;
- регистр - 2691;
- значение - 1;
И нажать кнопку ОТПРАВИТЬ.
Предварительная настройка модуля
Включение сценариев.Сценарии могут быть выключены, включены или выходы могут иметь прямое управление от входов и устанавливается это в регистре HR2691.
В этом регистре можно установить взаимосвязь входов и выходов.
0 – Входы и выходы независимы, сценарии отключены.
1 – Сценарии включены. Взаимодействие входов и выходов через сценарии.
2 – Все входы настроены как кнопки. При четном нажатии включается соответствующий канал, при
нечетном выключается. При удержании кнопки уровень в канале увеличивается или уменьшается.
Вход синхронизируется с выходом. Если включить выход от кнопки, затем дистанционно выключить, то
при нажатии кнопки снова пойдет команда включить. Первый вход переключает первый выход,
восьмой вход переключает восьмой выход. Связь жесткая и поменять нельзя.
3 – Все входы настроены как переключатели. При замыкании входа включается соответствующий канал
на максимальный уровень, при размыкании входа выключается выход. Связь входа с выходом жесткая
и поменять нельзя.
Чтобы включить сценарии нужно в регистр HR2691 записать значение 1.
Значения датчиков.
Данные с АЦП приходят в регистры IR1 - IR8. Эти данные нужно пересчитать в единицы измерения. Пересчитанные данные записываются в регистры IR11 - IR18. Пересчитываются они с помощью коэффициентов и формулы линейной функции. Пример использования расчета аналоговых входов здесь.
Изменение скорости.
После записи значений уровня в регистры HR40, HR41, HR42, HR43 в диапазоне значений от 0 до 1023 выходы будут меняться не сразу, а с плавным нарастанием или убыванием. Что бы изменить скорость или сделать мгновенной, нужно в регистры HR34, HR35, HR36, HR37 записать значение скорости. В этих регистрах устанавливается время в миллисекундах при инкременте или декркменте уровня. При увеличении или уменьшении уровня на единицу модуль ожидает время, указанное в этих регистрах. Например, при установленном значении 10, увеличение на 1 (инкремент) будет происходить через 10 миллисекунд. И от 0 до 1023 (100%) уровень поднимется через 10230 миллисекунд, т.е. через 10 секунд. Для быстрого изменения нужно указать значение 0.
А теперь напишем несколько сценариев для разных типов входов
В модуле есть множество элементарных сценариев, на которых можно создать необходимые действия. А так же есть и специальные сценарии, которые содержат несколько элементарных сценариев и выполняют конкретные действия.В сценариях будем использовать переменные, которые хранятся в регистрах IR20 - IR999. В регистрах IR0-IR19 хранятся значения аналоговых входов.
Поскольку средствами Modbus регистры IR0 - IR999можно только читать, то в модулях сделано зеркало этих регистров в другом диапазоне HR3000 - HR3999. Они полностью дублируют регистры IR как для чтения, так и для записи.
Выключатель
0: | Если | IF (DI 1 == Const 0) THEN HR 40 = Const 0 однократно |
|
1: | Если | IF (DI 1 == Const 1) THEN HR 40 = Const 1000 однократно |
|
2: | Если | IF (DI 2 == Const 0) THEN HR 41 = Const 0 однократно |
|
3: | Если | IF (DI 2 == Const 1) THEN HR 41 = Const 1000 однократно |
|
4: | Если | IF (DI 3 == Const 0) THEN HR 42 = Const 0 однократно |
|
5: | Если | IF (DI 3 == Const 1) THEN HR 42 = Const 1000 однократно |
|
6: | Если | IF (DI 4 == Const 0) THEN HR 43 = Const 0 однократно |
|
7: | Если | IF (DI 4 == Const 1) THEN HR 43 = Const 1000 однократно |
|
Сценарий сделан с использованием команд IF. Первое условие проверяет кнопку на замыкание, второе условие проверяет кнопку на размыкание. Оба условия однократного действия и не держат выходной регистр в одном и том же положении. Выход может переключаться командами Modbus.
Кнопка диммирования
На входы 1, 2, 3, 4 подключены кнопки относительно клеммы GND.Кратковременное нажатие включает и выключает светильник. Длительное нажатие (больше 1000мс) увеличивает или уменьшает яркость светильника. Кнопка будет включать и выключать в момент отпускания, что придаст ощущение задержки включения.
0: | Триггер | выход: HR 40, вход: DI 1, порог: 1, время, мс: 1000, нижняя 300, верхняя 1000 |
|
1: | Триггер | выход: HR 41, вход: DI 2, порог: 1, время, мс: 1000, нижняя 300, верхняя 1000 |
|
2: | Триггер | выход: HR 42, вход: DI 3, порог: 1, время, мс: 1000, нижняя 300, верхняя 1000 |
|
3: | Триггер | выход: HR 43, вход: DI 4, порог: 1, время, мс: 1000, нижняя 300, верхняя 1000 |
|
Время удержания кнопки до переключения в режим диммирования 1000 миллисекунд.
Нижняя граница, которую перепрыгнет уровень 300 и верхняя граница, которую перепрыгнет уровень 1000. Нижняя и верхняя граница диммирования стали доступны только с версии 3.31.
Для увеличения скорости включения светильника нужно в регистрах HR34, HR35, HR36, HR37 записать значение 0.
Кнопка без диммирования
На входы 1, 2, 3, 4 подключены кнопки относительно клеммы GND.Кратковременное нажатие включает и выключает светильник. Кнопка будет включать и выключать в момент нажатия.
0: | Если | IF (DI 1 == Const 1) THEN CALL 5 однократно |
|
1: | Если | IF (DI 2 == Const 1) THEN CALL 7 однократно |
|
2: | Если | IF (DI 3 == Const 1) THEN CALL 9 однократно |
|
3: | Если | IF (DI 4 == Const 1) THEN CALL 11 однократно |
|
4: | Переход | GOTO 0 |
|
5: | Если | IF (HR 40 < Const 300) THEN HR 40 = Const 1000 регулярно ELSE = Const 0 |
|
6: | Возврат | RETURN |
|
7: | Если | IF (HR 41 < Const 300) THEN HR 41 = Const 1000 регулярно ELSE = Const 0 |
|
8: | Возврат | RETURN |
|
9: | Если | IF (HR 42 < Const 300) THEN HR 42 = Const 1000 регулярно ELSE = Const 0 |
|
10: | Возврат | RETURN |
|
11: | Если | IF (HR 43 < Const 300) THEN HR 43 = Const 1000 регулярно ELSE = Const 0 |
|
12: | Возврат | RETURN |
|
Используются команды вызова подпрограммы CALL и возврата RETURN. Условия однократного действия и не держат выходной регистр в одном и том же положении. Выход может переключаться командами Modbus.
Две кнопки диммирования
Для диммирования используются две кнопки, двойные "кнопки жалюзи", "перекидная" или "качелька". На вход DI1 подключена кнопка включить и увеличить яркость. На вход DI2 подключена кнопка выключить и уменьшить яркость. Все кнопки подключены относительно клеммы GND.
0: | Диммер | кнопка ON DI 1, кнопка OFF 2, выход диммирования HR 40 |
|
1: | Диммер | кнопка ON DI 3, кнопка OFF 4, выход диммирования HR 41 |
|
2: | Диммер | кнопка ON DI 5, кнопка OFF 6, выход диммирования HR 42 |
|
3: | Диммер | кнопка ON DI 7, кнопка OFF 8, выход диммирования HR 43 |
|
При кратковременном нажатии (менее 1 секунды) на кнопку OFF значение выхода уменьшается до нуля. При удержании кнопки OFF значение выхода медленно уменьшается до нуля.
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r101 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r102 1
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r103 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r104 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r105 40
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r120 21
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r121 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r122 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r123 4
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r124 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r125 41
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r140 21
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r141 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r142 5
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r143 6
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r144 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r145 42
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r160 21
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r161 2
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r162 7
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r163 8
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r164 3
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a34 -t0x06 -r165 43
Относительный энкодер
Энкодер это элемент очень похожий на переменный резистор. Но, в отличии от резистора, у него внутри дорожки имитирующие две кнопки. При вращении кнопки нажимаются по очереди со смещением в 90 градусов.Я в качестве энкодера использовал PEC12R со встроенной кнопкой. PEC12R.pdf
На входы 1, 2, относительно контакта G подключены контакты энкодера. При вращении по часовой стрелке значение HR40 увеличивается, а при вращении против часовой стрелки - уменьшается.
На вход 3, относительно контакта G подключена центральная кнопка ручки энкодера. Эта кнопка включает и выключает выход HR40.
0: | Если | IF (DI 1 == Const 1) THEN GOTO 3 однократно |
|
1: | Если | IF (DI 3 == Const 1) THEN GOTO 10 однократно |
|
2: | Переход | GOTO 0 |
|
3: | Если | IF (DI 2 == Const 1) THEN CALL 6 регулярно |
|
4: | Если | IF (DI 2 == Const 0) THEN CALL 8 регулярно |
|
5: | Переход | GOTO 0 |
|
6: | MATH | HR 40 = HR 40 + Const 10 |
|
7: | Возврат | RETURN |
|
8: | MATH | HR 40 = HR 40 - Const 10 |
|
9: | Возврат | RETURN |
|
10: | Если | IF (HR 40 < Const 300) THEN HR 40 = Const 1000 регулярно ELSE = Const 0 |
|
11: | Переход | GOTO 0 |
|
В следующем варианте используются 4 энкодера, подключенные ко входам: 1) 1,2; 2) 3,4; 3) 5,6; 4) 7,8.
Энкодеры управляют выходами HR40, HR41, HR42, HR43.
0 | Если И | IF ((DI 1 == 0) AND (DI 2 == 1)) THEN GOTO 10 |
|
1 | Если И | IF ((DI 1 == 1) AND (DI 2 == 0)) THEN GOTO 13 |
|
2 | Если И | IF ((DI 3 == 0) AND (DI 4 == 1)) THEN GOTO 16 |
|
3 | Если И | IF ((DI 3 == 1) AND (DI 4 == 0)) THEN GOTO 19 |
|
4 | Если И | IF ((DI 5 == 0) AND (DI 6 == 1)) THEN GOTO 22 |
|
5 | Если И | IF ((DI 5 == 1) AND (DI 6 == 0)) THEN GOTO 25 |
|
6 | Если И | IF ((DI 7 == 0) AND (DI 8 == 1)) THEN GOTO 28 |
|
7 | Если И | IF ((DI 7 == 0) AND (DI 8 == 1)) THEN GOTO 31 |
|
8 | NOP | NOP |
|
9 | Переход | GOTO 0 |
|
10 | Если | IF (HR 40 >= 10) THEN GOTO 11 регулярно ELSE = 0 |
|
11 | MATH | HR 40 = HR 40 - 10 |
|
12 | Переход | GOTO 0 |
|
13 | Если | IF (HR 40 < 1010) THEN GOTO 14 регулярно ELSE = 0 |
|
14 | MATH | HR 40 = HR 40 + 10 |
|
15 | Переход | GOTO 0 |
|
16 | Если | IF (HR 41 >= 10) THEN GOTO 17 регулярно ELSE = 0 |
|
17 | MATH | HR 41 = HR 41 - 10 |
|
18 | Переход | GOTO 0 |
|
19 | Если | IF (HR 41 < 1010) THEN GOTO 20 однократно ELSE = 0 |
|
20 | MATH | HR 41 = HR 41 + 10 |
|
21 | Переход | GOTO 0 |
|
22 | Если | IF (HR 42 >= 10) THEN GOTO 23регулярно ELSE = 0 |
|
23 | MATH | HR 42 = HR 42 - 10 |
|
24 | Переход | GOTO 0 |
|
25 | Если | IF (HR 42 < 1010) THEN GOTO 26 регулярно ELSE = 0 |
|
26 | MATH | HR 42 = HR 42 + 10 |
|
27 | Переход | GOTO 0 |
|
28 | Если | IF (HR 43 >= 10) THEN GOTO 29 регулярно ELSE = 0 |
|
29 | MATH | HR 43 = HR 43 - 10 |
|
30 | Переход | GOTO 0 |
|
31 | Если | IF (HR 43 < 1010) THEN GOTO 32 регулярно ELSE = 0 |
|
32 | MATH | HR 43 = HR 43 + 10 |
|
33 | Переход | GOTO 0 |
|
В Сценарии используются команды условия IF, переход GOTO и вызов функции CALL и RETURN.
Сценарий написан для одного выхода HR40. Аналогично можно дописать и для других выходов.
Еще вариант, от одного энкодера, подключенного к DI1 и DI2 увеличиваются и уменьшаются значения сразу четырех каналов HR40 - HR43 с ограничением в предельных значениях 0 и 1023.
0 | Если И | IF ((DI 1 == 0) AND (DI 2 == 1)) THEN CALL 6 |
|
1 | Если И | IF ((DI 1 == 1) AND (DI 2 == 0)) THEN CALL 15 |
|
2 | NOP | NOP |
|
3 | NOP | NOP |
|
4 | NOP | NOP |
|
5 | Переход | GOTO 0 |
|
6 | Если | IF (HR 40 > 1020) THEN GOTO 8 регулярно |
|
7 | MATH | HR 40 = HR 40 + 10 |
|
8 | Если | IF (HR 41 > 1020) THEN GOTO 10 регулярно |
|
9 | MATH | HR 41 = HR 41 + 10 |
|
10 | Если | IF (HR 42 > 1020) THEN GOTO 12 регулярно |
|
11 | MATH | HR 42 = HR 42 + 10 |
|
12 | Если | IF (HR 43 > 1020) THEN GOTO 14 регулярно |
|
13 | MATH | HR 43 = HR 43 + 10 |
|
14 | Возврат | RETURN |
|
15 | Если | IF (HR 40 < 10) THEN GOTO 17 регулярно |
|
16 | MATH | HR 40 = HR 40 - 10 |
|
17 | Если | IF (HR 41 < 10) THEN GOTO 19 регулярно |
|
18 | MATH | HR 41 = HR 41 - 10 |
|
19 | Если | IF (HR 42 < 10) THEN GOTO 21 регулярно |
|
20 | MATH | HR 42 = HR 42 - 10 |
|
21 | Если | IF (HR 43 < 10) THEN GOTO 23 регулярно |
|
22 | MATH | HR 43 = HR 43 - 10 |
|
23 | Возврат | RETURN |
|
Аналоговый датчик
На входы 1, 2, 3, 4 подключены переменные резисторы номиналом 10 кОм относительно клеммы GND.Измеряем входное напряжение и посылаем значение на выход. Выполним математическую операцию HR40 = IR1 / 4.
Если светодиодный светильник работает в диапазоне от 300 до 700, тогда добавим смещение.
0: | MATH | IR 101 = IR 1 / Const 10 |
|
1: | MATH | HR 40 = IR 101 + Const 300 |
|
2: | MATH | IR 102 = IR 2 / Const 10 |
|
3: | MATH | HR 41 = IR 102 + Const 300 |
|
4: | MATH | IR 103 = IR 3 / Const 10 |
|
5: | MATH | HR 42 = IR 103 + Const 300 |
|
6: | MATH | IR 104 = IR 4 / Const 10 |
|
7: | MATH | HR 43 = IR 104 + Const 300 |
|
Что бы развернуть резистор в обратную сторону нужно сделать вычитание
0: | MATH | IR 101 = IR 1 / Const 10 |
|
1: | MATH | HR 40 = Const 700 - IR 101 |
|
Аналоговый регулятор на фотодатчике
В качестве датчика будет использоваться фототранзистор. Аналогично можно использовать и датчик температуры LM235, PT1000, NTC, датчик влажности, давления и другие.Датчик подключен ко входу 8. Предварительно нужно калькулятором пересчитать значения АЦП в значения Люксы. И уже значения будем брать из регистра IR18.
Сценарий для порогового переключения выхода.
0: | Если | IF (IR 18 < Const 300) THEN HR 40 = Const 1000 однократно |
|
1: | Если | IF (IR 18 > Const 400) THEN HR 40 = Const 0 однократно |
|
Используется команды Если IF для нижнего и для верхнего порога переключения. Условия однократного действия и не держат выходной регистр в одном и том же положении. Выход может переключаться командами Modbus.
Добавим плавную регулировку яркости светильника в диапазоне измерения уровня освещенности от 200 до 500 Люкс.
0: | Если | IF (IR 18 < Const 200) THEN IR 40 = Const 1000 однократно |
|
1: | Если | IF (IR 18 > Const 500) THEN IR 40 = Const 0 однократно |
|
2: | Если | IF (IR 18 > Const 200) THEN GOTO 4 = Const 0 регулярно |
|
3: | Переход | GOTO 0 |
|
4: | Если | IF (IR 18 < Const 500) THEN GOTO 6 = Const 0 регулярно |
|
5: | Переход | GOTO 0 |
|
6: | MATH | IR 20 = IR 18 - Const 200 |
|
7: | MATH | IR 20 = Const 300 - IR 20 |
|
8: | MATH | HR 40 = IR 20 * Const 3 |
|
9: | Переход | GOTO 0 |
|
Средняя температура от двух датчиков
В разных местах комнаты температура может сильно отличаться.Ко входу 1 подключен датчик температуры, который установлен возле пола.
Ко входу 2 подключен датчик температуры, который установлен возле потолка.
К выходу 1 подключен обогреватель.
0: | MATH | IR 111 = IR 11 MED IR 12 |
|
1: | Если | IF (IR 111 < Const 22) THEN HR 40 = Const 1000 однократно |
|
2: | Если | IF (IR 111 > Const 25) THEN HR 40 = Const 0 однократно |
|
Статистика изменения температуры за сутки
Вычисляем среднюю температуру от двух датчиков и записываем в массив. Всего в блоке доступно 980 ячеек ОЗУ от IR20 до IR999. В сутках 60*24=1440 минут, поэтому записывать будем раз в две минуты. Запись будет в массив IR100... IR819.0: | MATH | IR 21 = IR 9008 * Const 60 | часы * 60 |
1: | MATH | IR 21 = IR 21 + IR 9009 | плюс минуты |
2: | MATH | IR 21 = IR 21 / Const 2 | раз в две минуты |
3: | MATH | IR 22 = IR 21 + Const 100 | к счетчику минут прибавил 100 (100...819) |
4: | Если | IF (IR 22 != IR 23) THEN GOTO 6 однократно | если минуты изменились |
5: | Переход | GOTO 0 | конец цикла и переход в начало |
6: | MATH | IR 24 = IR 11 MED IR 12 | средняя температура от двух датчиков |
7: | Массив | IR[IR 22] = IR 24 | запись в массив IR[100] ... IR[819] |
8: | MATH | IR 23 = IR 22 | сохраняем копию минут |
9: | Переход | GOTO 0 | конец функции |
На следующие сутки значение будет переписываться на новые.
При необходимости можно сделать очистку предыдущих данных в начале суток в 00:00.
0: | MATH | IR 21 = IR 9008 * Const 60 | часы * 60 |
1: | MATH | IR 21 = IR 21 + IR 9009 | плюс минуты |
2: | MATH | IR 21 = IR 21 / Const 2 | раз в две минуты |
3: | MATH | IR 22 = IR 21 + Const 100 | к счетчику минут прибавил 100 (100...819) |
4: | Если | IF (IR 22 != IR 23) THEN GOTO 7 однократно | если минуты изменились |
5: | Если | IF (IR 22 == Const 100) THEN GOTO 11 однократно | выполнится в начале цикла в 00:00 |
6: | Переход | GOTO 0 | конец цикла и переход в начало |
7: | MATH | IR 24 = IR 11 MED IR 12 | средняя температура от двух датчиков |
8: | Массив | IR[IR 22] = IR 24 | запись в массив IR[100] ... IR[819] |
9: | MATH | IR 23 = IR 22 | сохраняем копию минут |
10: | Переход | GOTO 0 | конец функции |
11: | Цикл | FOR (IR25 = Const 100 TO 819) GOTO 13 | Цикл от 100 до 820 |
12: | Массив | IR[IR 25] = Const 0 | запись в массив IR[100] ... IR[819] |
13: | Переход | GOTO 0 | конец функции |
Встроенные сценарии позволяют реализовать множество различных функций управления диммером и комбинировать различные типы входов с произвольными выходами.