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

Строка 84: Строка 84:


Подробное описание и использования модуля, а также карта регистров, описаны в разделе [[WB-MSx_Consumer_IR_Manual]].  
Подробное описание и использования модуля, а также карта регистров, описаны в разделе [[WB-MSx_Consumer_IR_Manual]].  
[[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]]
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в [[#Карта регистров флагов (Coils) | Карта регистров флагов (Coils)]].
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
* запись сигнала в память с пульта ДУ,
* воспроизведение сигнала из памяти,
* редактирование сигнала в памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
=== Постоянный режим ===
В текущей прошивке в постоянном режиме устройство может хранить 7 ИК-сигналов. Сигналы нумеруются с 0 до 6.
==== Запись сигнала в постоянную память с пульта ДУ ====
'''Примечение:''' Подробно о работе в режиме командной строки рассказано в разделе [[#Управление модулем из командной строки|Управление модулем из командной строки]].
Чтобы записать сигнал под номером <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 не будут доступны.
=== Обмен данными ===
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления WB-MR6C используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе [[#Управление_по_Modbus|Управление по Modbus]].
В датчиках с версией прошивки 3.1.0 и позднее эти настройки можно изменить - смотрите таблицу регистров Modbus.


=== Дополнительные Функции===
=== Дополнительные Функции===
5813

правок