WB-MIR v2 - Modbus IR Remote Control: различия между версиями

Нет описания правки
Строка 7: Строка 7:
Обучаемый модуль с ИК-приёмопередатчиком для управления по ИК-каналу различными устройствами, включая кондиционеры, телевизоры и т.п.
Обучаемый модуль с ИК-приёмопередатчиком для управления по ИК-каналу различными устройствами, включая кондиционеры, телевизоры и т.п.
Управление модулем производится с контроллера или ПК по шине RS-485 командами по протоколу MODBUS.
Управление модулем производится с контроллера или ПК по шине RS-485 командами по протоколу MODBUS.
== Принцип работы ==
Сигнал с пульта ДУ записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. В текущей модификации устройство может хранить до 7 сигналов в постоянной памяти и один — в оперативном буфере. ИК-сигнал может быть также записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.
Устройство имеет два режима работы: постоянный и оперативный.
В постоянном режиме записанные сигналы хранятся в Flash-ПЗУ устройства. В устройстве можно хранить не более 7 сигналов (в текущей версии прошивки 3.4.0). Сигналы, записанные в ПЗУ, сохраняются при отключении питания. Стоит отметить. что при каждой перезаписи сигнала расходуется физический ресурс ПЗУ процессора устройства — всего можно перезаписать сигнал не более 1000 раз.
В оперативном режиме сигнал (только один) находится в оперативной памяти устройства. Он записывается туда Modbus-командой с внешнего устройства (например, контроллера [[Wiren Board]]). Сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
==Способ хранения сигнала==
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.


== Входы ==
== Входы ==
Строка 25: Строка 12:
D некоторых моделях присутствует внутренний датчик температуры DS18B20 в корпусе TO-92, распаяный в верхней левой части платы модуля (вид сверху корпуса датчика нанесен в этом месте шелкографией).
D некоторых моделях присутствует внутренний датчик температуры DS18B20 в корпусе TO-92, распаяный в верхней левой части платы модуля (вид сверху корпуса датчика нанесен в этом месте шелкографией).


== Обучение и использование модуля ==
[[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]]
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в [[#Карта регистров флагов (Coils) | Карта регистров флагов (Coils)]].
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
* запись сигнала в память с пульта ДУ,
* воспроизведение сигнала из памяти,
* редактирование сигнала в памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
=== Постоянный режим ===
D текущей прошивке в постоянном режиме устройство может хранить 7 ИК-сигналов. Сигналы нумеруются с 0 до 6</code>.
==== Запись сигнала в постоянную память с пульта ДУ ====
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
<syntaxhighlight lang="bash">
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 1
#Нажимаем кнопку на пульте ДУ
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 0
#Завершаем запись сигнала с номером 1
</syntaxhighlight>
==== Воспроизведение сигнала из постоянной памяти ====
Чтобы воспроизвести сигнал под номером <code>i</code> из памяти, запишите 1 в регистр флага по адресу <code>5100 + i</code>. Если сигнал под номером <code>i</code> не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5100 + i</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
<syntaxhighlight lang="bash">
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1
</syntaxhighlight>
==== Редактирование сигнала в постоянной памяти ====
Чтобы отредактировать сигнал под номером <code>i</code> или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу <code>5200 + i</code>. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок) будет записан в подряд идущие регистры хранения, начиная с регистра <code>2000</code>. В конце последовательности будут два подряд идущих регистра хранения, содержащих 0. Если сигнал под номером <code>i</code> не был записан ранее, в регистрах хранения <code>2000</code> и <code>2001</code> будут находиться 0. Для внесения изменений в последовательность (в том числе для записи команды по Modbus) нужно записать правильную последовательность в данные регистры хранения с помощью команд <code>WRITE_SINGLE_REGISTER</code> и <code>WRITE_MULTI_REGISTERS</code>. В конце изменённой последовательности всё также должен быть маркер конца последовательности - два подряд идущих регистра хранения, содержащих 0. Чтобы удалить сигнал, запишите в первые два регистра хранения (<code>2000</code> и <code>2001</code>) 0. После окончания редактирования запишите 0 в регистр флагов по адресу <code>5200 + i</code>. До тех пор пока в регистре флагов по адресу <code>5200 + i</code> не будет стоять 0, никакие другие операции, в том числе и над другими сигналами, не будут доступны.
==== Удаление всех сигналов из постоянной памяти ====
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>.
=== Оперативный режим ===
==== Запись сигнала в оперативную память с пульта ДУ ====
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу <code>5001</code>. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу <code>2000</code> и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства!
==== Воспроизведение сигнала из оперативной памяти ====
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу <code>5002</code>. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с <code>2000</code>. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5002</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.


== Технические характеристики ==
== Технические характеристики ==
Строка 116: Строка 66:
| до 98%,без конденсата влаги
| до 98%,без конденсата влаги
|}
|}
== Принцип работы ==
Сигнал с пульта ДУ записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. В текущей модификации устройство может хранить до 7 сигналов в постоянной памяти и один — в оперативном буфере. ИК-сигнал может быть также записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.
Устройство имеет два режима работы: постоянный и оперативный.
В постоянном режиме записанные сигналы хранятся в Flash-ПЗУ устройства. В устройстве можно хранить не более 7 сигналов (в текущей версии прошивки 3.4.0). Сигналы, записанные в ПЗУ, сохраняются при отключении питания. Стоит отметить. что при каждой перезаписи сигнала расходуется физический ресурс ПЗУ процессора устройства — всего можно перезаписать сигнал не более 1000 раз.
В оперативном режиме сигнал (только один) находится в оперативной памяти устройства. Он записывается туда Modbus-командой с внешнего устройства (например, контроллера [[Wiren Board]]). Сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
==Способ хранения сигнала==
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.
== Обучение и использование модуля ==
[[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]]
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в [[#Карта регистров флагов (Coils) | Карта регистров флагов (Coils)]].
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
* запись сигнала в память с пульта ДУ,
* воспроизведение сигнала из памяти,
* редактирование сигнала в памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
=== Постоянный режим ===
D текущей прошивке в постоянном режиме устройство может хранить 7 ИК-сигналов. Сигналы нумеруются с 0 до 6</code>.
==== Запись сигнала в постоянную память с пульта ДУ ====
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
<syntaxhighlight lang="bash">
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 1
#Нажимаем кнопку на пульте ДУ
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 0
#Завершаем запись сигнала с номером 1
</syntaxhighlight>
==== Воспроизведение сигнала из постоянной памяти ====
Чтобы воспроизвести сигнал под номером <code>i</code> из памяти, запишите 1 в регистр флага по адресу <code>5100 + i</code>. Если сигнал под номером <code>i</code> не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5100 + i</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
<syntaxhighlight lang="bash">
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1
</syntaxhighlight>
==== Редактирование сигнала в постоянной памяти ====
Чтобы отредактировать сигнал под номером <code>i</code> или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу <code>5200 + i</code>. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок) будет записан в подряд идущие регистры хранения, начиная с регистра <code>2000</code>. В конце последовательности будут два подряд идущих регистра хранения, содержащих 0. Если сигнал под номером <code>i</code> не был записан ранее, в регистрах хранения <code>2000</code> и <code>2001</code> будут находиться 0. Для внесения изменений в последовательность (в том числе для записи команды по Modbus) нужно записать правильную последовательность в данные регистры хранения с помощью команд <code>WRITE_SINGLE_REGISTER</code> и <code>WRITE_MULTI_REGISTERS</code>. В конце изменённой последовательности всё также должен быть маркер конца последовательности - два подряд идущих регистра хранения, содержащих 0. Чтобы удалить сигнал, запишите в первые два регистра хранения (<code>2000</code> и <code>2001</code>) 0. После окончания редактирования запишите 0 в регистр флагов по адресу <code>5200 + i</code>. До тех пор пока в регистре флагов по адресу <code>5200 + i</code> не будет стоять 0, никакие другие операции, в том числе и над другими сигналами, не будут доступны.
==== Удаление всех сигналов из постоянной памяти ====
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>.
=== Оперативный режим ===
==== Запись сигнала в оперативную память с пульта ДУ ====
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу <code>5001</code>. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу <code>2000</code> и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства!
==== Воспроизведение сигнала из оперативной памяти ====
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу <code>5002</code>. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с <code>2000</code>. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5002</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.


=== Обмен данными ===
=== Обмен данными ===
5813

правок