WB-MSx Consumer IR Manual: различия между версиями
Kilpio (обсуждение | вклад) |
|||
(не показаны 93 промежуточные версии 10 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS, WB-MSW, WB-MIR}} | |||
= Назначение = | |||
{{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }} | Инфракрасный приёмопередатчик, установленный в устройствах WB-MS, WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с бытовых пультов ДУ и дальнейшего управления бытовой техникой, в том числе кондиционерами, телевизорами и т.д. | ||
'''Внимание! Пока что управление возможно только с небольшого расстояния (до 1 метра).''' | |||
== Принцип работы == | |||
Сигнал с пульта ДУ записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. В текущей модификации устройство может хранить до 7 сигналов в постоянной памяти и один — в оперативном буфере. ИК-сигнал может быть также записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus. | |||
Устройство имеет два режима работы: постоянный и оперативный. | |||
В постоянном режиме записанные сигналы хранятся в Flash-ПЗУ устройства. Сигналы, записанные в ПЗУ, сохраняются при отключении питания.Стоит отметить, что при каждой перезаписи сигнала расходуется физический ресурс ПЗУ процессора устройства — всего можно перезаписать сигнал не более 1000 раз. | |||
==Способ представления и хранения сигнала== | |||
==Способ представления и хранения сигнала== | |||
[[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]] | [[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]] | ||
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0. | Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0. | ||
В оперативном режиме сигнал (только один) находится в оперативной памяти устройства. Он записывается туда Modbus-командой с пульта управления или с внешнего устройства по Modbus (например, контроллера [[Wiren Board]]). Сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется. | |||
В оперативном режиме | |||
== Управление модулем по Modbus == | == Управление модулем по Modbus == | ||
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в [[#Карта регистров флагов (Coils)|Карта регистров флагов (Coils)]]. | |||
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки | |||
=== Обмен данными === | === Обмен данными === | ||
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления модулем используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. | На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления модулем используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе [[#Управление_по_Modbus|Управление по Modbus]]. | ||
В датчиках с версией прошивки 3.1.0 и позднее также можно изменить настройки параметров обмена данными — смотрите таблицу регистров Modbus. | |||
В | |||
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами: | Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами: | ||
* запись сигнала в память с пульта ДУ, | * запись сигнала в память с пульта ДУ, | ||
* воспроизведение сигнала из памяти, | * воспроизведение сигнала из памяти, | ||
* редактирование сигнала в | * редактирование сигнала в памяти. | ||
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. | В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. | ||
=== | === Постоянный режим === | ||
В текущей прошивке в постоянном режиме устройство может хранить 7 ИК-сигналов. Сигналы нумеруются с 0 до 6. | |||
==== Запись сигнала в постоянную память с пульта ДУ ==== | |||
==== Запись сигнала в постоянную память с пульта ДУ ==== | |||
'''Примечение:''' Подробно о работе в режиме командной строки рассказано в разделе [[#Управление модулем из командной строки|Управление модулем из командной строки]]. | '''Примечение:''' Подробно о работе в режиме командной строки рассказано в разделе [[#Управление модулем из командной строки|Управление модулем из командной строки]]. | ||
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>. | |||
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ | #Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16 | ||
root@wirenboard:~# modbus_client --debug - | root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 1 | ||
# | #Нажимаем кнопку на пульте ДУ | ||
root@wirenboard:~# modbus_client --debug - | root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 0 | ||
#Завершаем запись сигнала с номером 1 | #Завершаем запись сигнала с номером 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Воспроизведение сигнала из постоянной памяти ==== | ==== Воспроизведение сигнала из постоянной памяти ==== | ||
Чтобы воспроизвести сигнал под номером <code>i</code> из памяти, запишите 1 в регистр флага по адресу <code>5100 + i</code>. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5100 + i</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны. | Чтобы воспроизвести сигнал под номером <code>i</code> из памяти, запишите 1 в регистр флага по адресу <code>5100 + i</code>. Если сигнал под номером <code>i</code> не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5100 + i</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ | #Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16 | ||
root@wirenboard:~# modbus_client --debug - | root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Редактирование сигнала в постоянной памяти ==== | ==== Редактирование сигнала в постоянной памяти ==== | ||
Чтобы отредактировать сигнал под номером <code>i</code> или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу <code>5200 + i</code>. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок | Чтобы отредактировать сигнал под номером <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>5000</code>. | ||
== Оперативный режим == | |||
== Оперативный режим == | |||
=== Запись сигнала в оперативную память с пульта ДУ === | === Запись сигнала в оперативную память с пульта ДУ === | ||
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу <code>5001</code>. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу <code>2000</code> и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства! | Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу <code>5001</code>. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу <code>2000</code> и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства! | ||
=== Воспроизведение сигнала из оперативной памяти === | === Воспроизведение сигнала из оперативной памяти === | ||
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу <code>5002</code>. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с <code>2000</code>. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5002</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны. | Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу <code>5002</code>. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с <code>2000</code>. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5002</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны. | ||
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в [[#Карта регистров флагов | Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в [[#Карта регистров флагов (Coils)]]). Есть 3 типа операций с сигналами: | ||
* запись сигнала в память с пульта ДУ, | * запись сигнала в память с пульта ДУ, | ||
* воспроизведение сигнала из памяти, | * воспроизведение сигнала из памяти, | ||
* редактирование сигнала в памяти. | * редактирование сигнала в памяти. | ||
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. | |||
=== Удаление всех сигналов из постоянной памяти === | === Удаление всех сигналов из постоянной памяти === | ||
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>. | Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>. | ||
== | == Оперативный режим == | ||
=== Запись сигнала в оперативную память с пульта ДУ === | |||
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу <code>5001</code>. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу <code>2000</code> и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства! | |||
=== Воспроизведение сигнала из оперативной памяти === | |||
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу <code>5002</code>. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с <code>2000</code>. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу <code>5002</code> будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны. | |||
=== | |||
=== | |||
== Управление по Modbus == | |||
== | |||
Подробно о работе с модулем по протоколу Modbus написано в разделе [[Sensors_Modbus_Management|Управление датчиками Wirenboard по протоколу Modbus]]. | |||
Карта регистров устройства выглядит следующим образом: | |||
=== Карта регистров хранения (Holding Registers)=== | |||
{| border="1" class="wikitable" style="text-align:center" | {| border="1" class="wikitable" style="text-align:center" | ||
! | !Регистр/ адрес | ||
!тип | |||
!чтение/ запись | |||
!значение по умолчанию | |||
!формат | |||
!назначение | |||
|- | |- | ||
| | |6 | ||
|input | |||
|R | |||
|0x7FFF — датчик не подключен или неисправен | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|- | |- | ||
| | |7 | ||
|input | |||
|R | |||
|0x7FFF — датчик не подключен или неисправен | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|- | |- | ||
| | | 110 || holding || RW || 96 (0x60) || baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | ||
|- | |- | ||
| | | 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even) | ||
|- | |- | ||
| | | 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2 | ||
|- | |- | ||
| | | 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния | ||
|- | |- | ||
| | | 121 (0x79) || input || R || - || mV || текущее напряжение питания модуля | ||
|- | |- | ||
| | | 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства | ||
|- | |- | ||
| | | 200-206 || input || R || {'W','B','M','I',R,0} || || сигнатура | ||
|- | |- | ||
| | | 220-241 || input || R || || __date__ __time__|| дата сборки прошивки | ||
|- | |||
| 250-269 || input || R || || строка, null-terminated || версия прошивки | |||
|- | |||
| 270-271 || input || R || || 32-bit unsigned int || уникальный идентификатор (S/N) | |||
|- | |||
| 2000-2509 || holding || RW || || || Буфер периодов IR-приемопередатчика | |||
|- | |- | ||
|} | |} | ||
==Карта регистров флагов (Coils)== | |||
{| border="1" class="wikitable" style="text-align:center" | |||
!Начальный адрес || Количество || Назначение || В модификациях | |||
|- | |||
| 5000 || 1 || style="text-align:left" | Очистка всех банков ИК-команд || I | |||
|- | |||
| 5001 || 1 || style="text-align:left" | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509), без сохранения в банк команд || I | |||
|- | |||
| 5002 || 1 || style="text-align:left" | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) || I | |||
|- | |||
| 5100 (в прошивке 3.1.0 и ранее - 0) || number_of_banks || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка || I | |||
|- | |||
| 5200 (в прошивке 3.1.0 и ранее - 1000) || number_of_banks|| style="text-align:left" | Чтение и запись в банки команд IR || I | |||
|- | |||
| 5300 (в прошивке 3.1.0 и ранее - 2000)|| number_of_banks || style="text-align:left" | Запись в банк команд IR использую IR-приёмник || I | |||
|- | |||
|} |
Версия 15:08, 24 апреля 2017
Назначение
Инфракрасный приёмопередатчик, установленный в устройствах WB-MS, WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с бытовых пультов ДУ и дальнейшего управления бытовой техникой, в том числе кондиционерами, телевизорами и т.д.
Внимание! Пока что управление возможно только с небольшого расстояния (до 1 метра).
Принцип работы
Сигнал с пульта ДУ записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. В текущей модификации устройство может хранить до 7 сигналов в постоянной памяти и один — в оперативном буфере. ИК-сигнал может быть также записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.
Устройство имеет два режима работы: постоянный и оперативный.
В постоянном режиме записанные сигналы хранятся в Flash-ПЗУ устройства. Сигналы, записанные в ПЗУ, сохраняются при отключении питания.Стоит отметить, что при каждой перезаписи сигнала расходуется физический ресурс ПЗУ процессора устройства — всего можно перезаписать сигнал не более 1000 раз.
Способ представления и хранения сигнала
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более 65535 * 10 мкс = 655350 мкс = 0,655 секунд
. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.
В оперативном режиме сигнал (только один) находится в оперативной памяти устройства. Он записывается туда Modbus-командой с пульта управления или с внешнего устройства по Modbus (например, контроллера Wiren Board). Сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
Управление модулем по Modbus
Внимание! Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в Карта регистров флагов (Coils).
Обмен данными
На физическом уровне модуль подключается через интерфейс RS-485. Для управления модулем используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу Протокол Modbus. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе Управление по Modbus.
В датчиках с версией прошивки 3.1.0 и позднее также можно изменить настройки параметров обмена данными — смотрите таблицу регистров Modbus.
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
- запись сигнала в память с пульта ДУ,
- воспроизведение сигнала из памяти,
- редактирование сигнала в памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке BUSY
.
Постоянный режим
В текущей прошивке в постоянном режиме устройство может хранить 7 ИК-сигналов. Сигналы нумеруются с 0 до 6.
Запись сигнала в постоянную память с пульта ДУ
Примечение: Подробно о работе в режиме командной строки рассказано в разделе Управление модулем из командной строки.
Чтобы записать сигнал под номером i
с пульта ДУ в память, запишите 1 в регистр флагов по адресу 5300 + i
. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу 5300 + i
.
#Начинаем запись сигнала с номером 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
Воспроизведение сигнала из постоянной памяти
Чтобы воспроизвести сигнал под номером i
из памяти, запишите 1 в регистр флага по адресу 5100 + i
. Если сигнал под номером i
не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5100 + i
будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1
Редактирование сигнала в постоянной памяти
Чтобы отредактировать сигнал под номером i
или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу 5200 + i
. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок) будет записан в подряд идущие регистры хранения, начиная с регистра 2000
. В конце последовательности будут два подряд идущих регистра хранения, содержащих 0. Если сигнал под номером i
не был записан ранее, в регистрах хранения 2000
и 2001
будут находиться 0. Для внесения изменений в последовательность (в том числе для записи команды по Modbus) нужно записать правильную последовательность в данные регистры хранения с помощью команд WRITE_SINGLE_REGISTER
и WRITE_MULTI_REGISTERS
. В конце изменённой последовательности всё также должен быть маркер конца последовательности - два подряд идущих регистра хранения, содержащих 0. Чтобы удалить сигнал, запишите в первые два регистра хранения (2000
и 2001
) 0. После окончания редактирования запишите 0 в регистр флагов по адресу 5200 + i
. До тех пор пока в регистре флагов по адресу 5200 + i
не будет стоять 0, никакие другие операции, в том числе и над другими сигналами, не будут доступны.
Удаление всех сигналов из постоянной памяти
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу 5000
.
Оперативный режим
Запись сигнала в оперативную память с пульта ДУ
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу 5001
. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу 2000
и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства!
Воспроизведение сигнала из оперативной памяти
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу 5002
. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с 2000
. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5002
будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в #Карта регистров флагов (Coils)). Есть 3 типа операций с сигналами:
- запись сигнала в память с пульта ДУ,
- воспроизведение сигнала из памяти,
- редактирование сигнала в памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке BUSY
.
Удаление всех сигналов из постоянной памяти
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу 5000
.
Оперативный режим
Запись сигнала в оперативную память с пульта ДУ
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу 5001
. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу 2000
и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства!
Воспроизведение сигнала из оперативной памяти
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу 5002
. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с 2000
. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5002
будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
Управление по Modbus
Подробно о работе с модулем по протоколу Modbus написано в разделе Управление датчиками Wirenboard по протоколу Modbus. Карта регистров устройства выглядит следующим образом:
Карта регистров хранения (Holding Registers)
Регистр/ адрес | тип | чтение/ запись | значение по умолчанию | формат | назначение |
---|---|---|---|---|---|
6 | input | R | 0x7FFF — датчик не подключен или неисправен | °C × 16 (signed) | Температура с внешнего датчика |
7 | input | R | 0x7FFF — датчик не подключен или неисправен | °C × 16 (signed) | Температура с внешнего датчика |
110 | holding | RW | 96 (0x60) | baud rate / 100 | скорость порта RS-485, делённая на 100. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
111 | holding | RW | 0 | настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even) | |
112 | holding | RW | 2 | количество стоп-битов порта RS-485. Допустимые значения: 1, 2 | |
120 (0x78) | holding | RW | 0 | отличное от 0 | запись в регистр вызывает перезагрузку модуля без сохранения состояния |
121 (0x79) | input | R | - | mV | текущее напряжение питания модуля |
128 (0x80) | holding | RW | 1 | Modbus-адрес устройства | |
200-206 | input | R | {'W','B','M','I',R,0} | сигнатура | |
220-241 | input | R | __date__ __time__ | дата сборки прошивки | |
250-269 | input | R | строка, null-terminated | версия прошивки | |
270-271 | input | R | 32-bit unsigned int | уникальный идентификатор (S/N) | |
2000-2509 | holding | RW | Буфер периодов IR-приемопередатчика |
Карта регистров флагов (Coils)
Начальный адрес | Количество | Назначение | В модификациях |
---|---|---|---|
5000 | 1 | Очистка всех банков ИК-команд | I |
5001 | 1 | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509), без сохранения в банк команд | I |
5002 | 1 | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) | I |
5100 (в прошивке 3.1.0 и ранее - 0) | number_of_banks | Воспроизведение ИК-команды из соответствующего банка | I |
5200 (в прошивке 3.1.0 и ранее - 1000) | number_of_banks | Чтение и запись в банки команд IR | I |
5300 (в прошивке 3.1.0 и ранее - 2000) | number_of_banks | Запись в банк команд IR использую IR-приёмник | I |