WB-MSx Consumer IR Manual: различия между версиями

17 674 байта добавлено ,  10 месяцев назад
поправил
(поправил)
 
(не показано 115 промежуточных версий 11 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}}
<languages/>
= Назначение =
<translate>
Инфракрасный приёмопередатчик, установленный в устройствах WB-MS/WB-MSW/WB-MSW2 модификации I, предназначен для записи сигналов с бытовых пультов ДУ и дальнейшего управления бытовой техникой, в том числе кондиционерами, телевизорами и т.д.
{{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }}


'''Внимание! Пока что управление возможно только с небольшого расстояния (до 1 метра).'''
== Назначение == <!--T:1-->
= Принцип работы =
Инфракрасный приёмопередатчик, установленный в устройствах WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с ИК-пультов ДУ бытовых устройств и дальнейшего управления бытовой техникой: кондиционерами, телевизорами и т.д. Модули WB-MIR v.2 и WB-MSW v.3 (WB-MSW v.4) поддерживают около 80 ИК-команд (зависит от объема занимаемой в памяти).  
Сигнал с пульта ДУ сигнал записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. Можно хранить несколько сигналов. Также сигнал может быть записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.


Устройство имеет два режима работы: постоянный и оперативный.
'''Внимание! Все модули, кроме WB-MSW v.3 (WB-MSW v.4), обеспечивают управление возможно только с небольшого расстояния (< 1 метра).'''
== Принцип работы == <!--T:2-->
=== Описание ===
Записываете управляющий сигнал с пульта дистанционного управления устройством в память модуля и потом воспроизводите его.


В постоянном режиме записанные сигналы хранятся в ПЗУ устройства. В устройстве можно хранить не более <code>number_of_banks</code> сигналов (это значение варьируется в зависимости от версии прошивки, но составляет не менее 6). Записанные в ПЗУ сигналы сохраняются при отключении питания. Однако при каждой перезаписи сигнала на новый расходуется физический ресурс ПЗУ - всего можно перезаписать сигнал не более 1000 раз.
Вы можете записать сигнал в одну из двух видов памяти:
* Постоянную — записанные команды хранятся в ROM-буферах, которые записываются в ПЗУ модуля и сохраняются при отключении питания.
* Оперативную — это RAM-буфер модуля, данные теряются при отключении питания.


В оперативном режиме сигнал (только один) находится в оперативной памяти устройства. Он записывается туда Modbus-командой с внешнего устройства (например, контроллера [[Wiren Board]]). Сигнал может быть воспроизведён из оперативной памяти и затем перезаписан новой. Ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
Помните, что при использовании постоянной памяти вы расходуете ресурс ПЗУ, каждую ячейку можно перезаписать не более 1000 раз.


==Принцип хранения сигнала==
Подробнее о записи и воспроизведении сигналов читайте в разделах [[#Постоянный режим|Постоянный режим]] и [[#Оперативный режим|Оперативный режим]].
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности - длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.


= Управление модулем по Modbus =
=== Управление телевизором ===
'''Внимание! Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно - смотрите в [[#Карта регистров флагов (Coils)]].'''
{{Wbincludes:WB-MSW v.3 IR TV Control}}


Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в [[#Карта регистров флагов (Coils)]]). Есть 3 типа операций с сигналами:
=== Управление климатической техникой ===
{{Wbincludes:WB-MSW v.3 IR AC Control}}
 
=== Управление другой техникой по ИК ===
{{Wbincludes:WB-MSW v.3 IR Other Control}}
 
==Способ представления и хранения сигнала== <!--T:6-->
[[File:Buffer_mir.png |400px|thumb|right| Пример содержимого оперативного буфера WB-MIR]]
 
<!--T:7-->
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более <code>65535 * 10 мкс = 655350 мкс = 0,655 секунд</code>. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.
 
<!--T:8-->
В оперативном режиме IR-сигнал (только один) находится в оперативной памяти устройства. Он записывается туда с пульта управления при подаче соответствующей Modbus-команды или путем записи значений в соответствующие регистры с внешнего устройства по Modbus (например, с контроллера [[Wiren Board]]), также IR-сигнал может быть скопирован из Flash-ПЗУ. IR-сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
 
<!--T:9-->
=== Сжатие ИК-команд ===
Начиная с версии прошивки 4.22.0 в WB-MIR v.2 и WB-MSW v.3 последовательности команд сжимаются по специальному алгоритму, чтобы обеспечить более высокую плотность хранения. Перед воспроизведением последовательности разархивируются. Максимальная длина команды увеличена до 1000 символов (2000 байт). Сжатие данных использует "словарь": длительности сигнала, которые близки друг к другу, заносятся в словарь как один элемент. Команда хранит индексы на элементы словаря. Максимальная длина словаря - 64 слова, то есть в ROM не получится записать произвольные данные. Также следует учитывать, что при редактировании банка команд записанные данные после сохранения в ROM будут сжаты и будут отличаться от оригинала при чтении из банка. При этом остается возможность записывать и воспроизводить произвольные данные из RAM - там алгоритм сжатия не применяется.
 
== Управление модулем по Modbus == <!--T:10-->
 
<!--T:11-->
'''Внимание!''' Номера используемых Modbus регистров менялись, начиная с версии прошивки '''3.2.0'''. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в [[#Карта регистров флагов и входов (Coils и Inputs)|Карта регистров флагов и входов (Coils и Inputs)]]. Полное описание регистров ИК-устройств можно найти в этой статье в разделе [[#Карта регистров|Карта регистров]].
 
=== Обмен данными === <!--T:12-->
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления модулем используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно.
 
<!--T:13-->
В устройствах с версией прошивки '''3.1.0''' и позднее также можно изменить настройки параметров обмена данными — смотрите [[#Карта_регистров|таблицу регистров Modbus]].
 
<!--T:14-->
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
* запись сигнала в память с пульта ДУ,
* запись сигнала в память с пульта ДУ,
* воспроизведение сигнала из памяти,
* воспроизведение сигнала из памяти,
* редактирование сигнала в памяти.
* редактирование сигнала в оперативной памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.


== Постоянный режим ==
=== Особенности при работе из Codesys ===
В постоянном режиме устройство может хранить <code>number_of_banks</code> ИК-сигналов. Это значение варьируется в зависимости от версии прошивки, но составляет не менее 6. Сигналы нумеруются с 0 до <code>number_of_banks - 1</code>.
 
=== Запись сигнала в постоянную память с пульта ДУ ===
Читайте статью [[Codesys_IR_manual | Работа с ИК-командами в Codesys]].
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
 
== Постоянный режим == <!--T:15-->
В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно. Начиная с версии прошивки 4.22.0 снова поддерживается до 80 команд.
 
==== Запись сигнала в постоянную память с пульта ДУ ==== <!--T:16-->
'''Примечение:''' Подробно о работе в режиме командной строки рассказано в разделе [[#Управление модулем из командной строки|Управление модулем из командной строки]].
 
<!--T:17-->
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите коротко один раз кнопку на пульте. Сразу после этого, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyAPP1 и имеет Modbus-адрес 16
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 1
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 1
#Нажимаем кнопку на пульте ДУ
#Направляем пульт на окно приемника и нажимаем кнопку на пульте ДУ
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5301 0
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 0
#Завершаем запись сигнала с номером 1
#Завершаем запись сигнала с номером 1
</syntaxhighlight>
</syntaxhighlight>
=== Воспроизведение сигнала из постоянной памяти ===
 
==== Воспроизведение сигнала из постоянной памяти ==== <!--T:18-->
Чтобы воспроизвести сигнал под номером <code>i</code> из памяти, запишите 1 в регистр флага по адресу <code>5100 + i</code>. Если сигнал под номером <code>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/ttyAPP1 и имеет Modbus-адрес 16
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5101 1
</syntaxhighlight>
</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, не будут доступны никакие другие операции, в том числе и над другими сигналами.
==== Редактирование сигнала в постоянной памяти ====
=== Удаление всех сигналов из постоянной памяти ===
Чтобы отредактировать сигнал под номером <code>i</code> или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу <code>5200 + i</code>. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок "Пример содержимого оперативного буфера WB-MIR") будет записан в подряд идущие регистры хранения, начиная с регистра <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, никакие другие операции, в том числе и над другими сигналами, не будут доступны.
 
==== Удаление всех сигналов из постоянной памяти ==== <!--T:19-->
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>.
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>.
== Оперативный режим ==
 
==== Работа с сигналами через holding регистры ====
Начиная с версии прошивки 4.18.0 доступны holding регистры для работы с сигналами:
* 5500 — воспроизведение
* 5501 — редактирование
* 5502 — запись
Регистры доступны как для чтения, так и для записи. Изначально в регистрах записан 0, что говорит о готовности к работе.
 
Для воспроизведения сигнала с номером <code>i</code> в регистр 5500 нужно записать число <code>i + 1</code>. Пока идет воспроизведение, при чтении регистра будет возвращаться номер воспроизводимого сигнала. После окончания воспроизведения регистр будет сброшен в 0. Если запрошенного сигнала не существует — в регистр будет записан код ошибки <code>0xFFFF</code>.
 
Редактирование и запись сигналов производятся аналогичным образом. Для того, чтобы завершить редактирование (запись) сигнала, в регистр нужно записать 0 или номер следующего сигнала для редактирования (записи).
 
== Оперативный режим == <!--T:20-->
=== Запись сигнала в оперативную память с пульта ДУ ===
=== Запись сигнала в оперативную память с пульта ДУ ===
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 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 не будут доступны.


= Регистры, связанные с ИК =
<!--T:21-->
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в [[#Карта регистров флагов и входов (Coils и Inputs)|#Карта регистров флагов и входов (Coils и Inputs)]]). Есть 3 типа операций с сигналами:
* запись сигнала в память с пульта ДУ,
* воспроизведение сигнала из памяти,
* редактирование сигнала в памяти.
* в следующих версиях предполагается реализовать непосредственную запись из оперативного буфера в ПЗУ.
 
<!--T:22-->
Как и в случае работы с регистрами постоянного хранения, в каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
 
=== Удаление всех сигналов из постоянной памяти === <!--T:23-->
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>.
 
== Чтение/запись банков команд ==
 
Пользователь [https://support.wirenboard.com/u/pivcheg pivcheg] написал скрипты чтения и записи IR-команд, которые [https://support.wirenboard.com/t/wb-mir-wb-msw-skript-dlya-sohraneniya-i-zapisi-komand-ik-ir/7918/16 опубликовал на портале поддержки].
 
Мы немного поправили им имена и опубликовали в архиве: [[Media:ir_backup.tgz | ir_backup.tgz]]
 
=== Подготовка ===
 
Содержимое архива:
* read_roms.pl — скрипт сохранения ИК-команд в файлы
* write_roms.pl — скрипт записи ИК-команд из файлов в регистры датчика
* compare_bufs.pl, getbuffer.pl, putbuffer.pl — вспомогательные скрипты, запускаются автоматически.
 
Перед тем, как приступить к чтению и записи команд:
# Зайдите в консоль контроллера по [[SSH]].
# Перейдите в папку <code>/home</code>
# Загрузите скрипт на контроллер и распакуйте его:
#:<syntaxhighlight lang="console">
# wget -qO- https://wirenboard.com/wiki/images/1/19/Ir_backup.tgz | tar -xvz  -C ./
ir_backup/
ir_backup/getbuffer.pl
ir_backup/write_roms.pl
ir_backup/putbuffer.pl
ir_backup/read_roms.pl
ir_backup/readme.txt
ir_backup/compare_bufs.pl
</syntaxhighlight>
# Перейдите в папку с распакованными файлами:
#: <syntaxhighlight lang="bash">
cd ir_backup
</syntaxhighlight>
 
Настройки скриптов '''read_roms.pl''' и '''write_roms.pl''':
* Скрипт читает/записывает только первые пять банков памяти: 0 — 4, если вам нужно считать/записать больше банков, то измените в скрипте значения <code>0..4</code>.
* Скорость подключения и serial-порту можно указать в строке <code>modbus_client…</code>.
 
=== Чтение команд в файлы ===
Для чтения ИК-команд используется скрипт <code>read_roms.pl</code>.
 
Формат запуска скрипта:
<syntaxhighlight lang="bash">
./read_roms.pl directory modbus-address
</syntaxhighlight>
 
Пример, в котором ИК-команды из устройства с адресом <code>22</code> сохраняются в папку <code>./roms</code>:
<syntaxhighlight lang="console">
# ./read_roms.pl ./roms 22
Stoping wb-mqtt-serial
->1<-->2<-->3<-->4<-->5<-
Starting wb-mqtt-serial
</syntaxhighlight>
 
=== Запись команд из файлов ===
Для записи ИК-команд используется скрипт <code>write_roms.pl</code>.
 
Формат запуска скрипта:
<syntaxhighlight lang="bash">
./write_roms.pl directory modbus-address
</syntaxhighlight>
 
Пример, в котором ИК-команды из папки <code>./roms</code> записываются в устройство с адресом <code>22</code>:
<syntaxhighlight lang="console">
# ./write_roms.pl ./roms/ 22
Stoping wb-mqtt-serial
->1<-->2<-->3<-->4<-->5<-
Starting wb-mqtt-serial
</syntaxhighlight>
 
<!-- Временно скрыл, возникли проблемы при проверке. Багрепорт в Битрикс 42664.
== Новый способ сохранения ИК-команд из устройств ==
 
Также появился новый способ сохранения ИК-команд, написанный нашими инженерами.
 
Архив с файлами скриптов доступен по ссылке: [[Media:Backup-ir-signal_tool.tgz | Backup-ir-signal_tool.tgz]]
 
=== Подготовка ===
 
Поставить
<syntaxhighlight lang="bash">
apt install python-wb-mcu-fw-updater
</syntaxhighlight>
 
Содержимое архива:
* read_signal.py — скрипт сохранения ИК-команд в файл
* write_signal.py — скрипт записи ИК-команд из файла в регистры датчика
* ir.py — набор инструкций и функций для работы вышеуказанных скриптов, запускается автоматически.


== Карта регистров хранения (Holding Registers)==
Перед тем, как приступить к чтению и записи команд:
# Зайдите в консоль контроллера по [[SSH]].
# Перейдите в папку <code>/home</code>
# Загрузите скрипт на контроллер и распакуйте его:
#:<syntaxhighlight lang="console">
# wget -qO- https://wirenboard.com/wiki/images/7/7f/Backup-ir-signal_tool.tgz | tar -xvz  -C ./
ir.py
read_signal.py
write_signal.py
</syntaxhighlight>
# Также необходимо остановить сервис [[wb-mqtt-serial]] для получения доступа к устройствам:
#:<syntaxhighlight lang="console">
# systemctl stop wb-mqtt-serial
</syntaxhighlight>
# После окончания работ со скриптами, сервис нужно обратно включить:
#:<syntaxhighlight lang="console">
# systemctl start wb-mqtt-serial
</syntaxhighlight>


В процессе наполнения.
=== Немного о механизме работы скрипта ===
* Скрипт чтения автоматически создаст папку <code>/ir_backup</code>, в которую будет сохранять файлы с ИК-командами
* Название файлов с ИК-командами формируется по следующему принципу:
** <code>серийныйНомерУстройства_дата_время.txt</code>, пример - <code>4270625043_11172021_12:01:54.txt</code>
* Во время исполнения скрипта, контроллер издаст звуковой сигнал столько раз, сколько банков устройства было занято ИК-командами. Это касается как скрипта чтения, так и записи.


{|  border="1" class="wikitable" style="text-align:center"
=== Чтение команд в файл ===
!Регистр / адрес
Для чтения ИК-команд используется скрипт <code>read_signal.py</code>.
!тип
 
!чтение/запись
Формат запуска скрипта:
!значение по умолчанию
<syntaxhighlight lang="bash">
!формат
python read_signal.py -a [address]
!назначение
</syntaxhighlight>
!В модификациях
Где [address] нужно заменить на желаемый адрес устройства. По умолчанию скрипт использует 2-й порт RS485, при необходимости, это можно изменить добавив к исходной команде ключ:
|-
<syntaxhighlight lang="bash">
| 2000-2509 || holding || RW || || || Буфер периодов IR-приемопередатчика
--port /dev/ttyRS485-n
|I
</syntaxhighlight>
|}
Где n - номер нужного порта RS485.
 
Пример команды запуска для устройства с адресом 84, находящемся на 2-м порту RS485:
<syntaxhighlight lang="console">
# python read_signal.py -a 84 --port /dev/ttyRS485-2
</syntaxhighlight>
 
=== Запись команд из файлов ===
Для записи ИК-команд используется скрипт <code>write_signal.py</code>.
 
Формат запуска скрипта:
<syntaxhighlight lang="bash">
python write_signal.py -a [address] ir_backup/[filename]
</syntaxhighlight>
Где [address] нужно заменить на желаемый адрес устройства. А [filename] на название файла, полученного при чтении ИК-команд из устройства. По умолчанию скрипт использует 2-й порт RS485, при необходимости, это можно изменить добавив к исходной команде ключ:
<syntaxhighlight lang="bash">
--port /dev/ttyRS485-n
</syntaxhighlight>
Где n - номер нужного порта RS485.
 
Пример команды запуска для устройства с адресом 84, находящемся на 2-м порту RS485:
<syntaxhighlight lang="console">
# python write_signal.py -a 84 --port /dev/ttyRS485-2 ir_backup/4270625043_11172021_12\:01\:54.txt
</syntaxhighlight>
-->
 
== Карта регистров == <!--T:24-->


==Карта регистров флагов (Coils)==
=== Карта регистров флагов и входов (Coils и Inputs) === <!--T:27-->




<!--T:28-->
{|  border="1" class="wikitable" style="text-align:center"
{|  border="1" class="wikitable" style="text-align:center"
!Начальный адрес || Количество || Назначение || В модификациях
!Начальный адрес || Тип || Количество || Назначение || В модификациях
|-
| 5000 || coil || 1 || style="text-align:left" | Очистка всех банков ИК-команд || I
|-
| 5001 || coil || 1 || style="text-align:left" | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509) (RAM), без сохранения в банк команд || I
|-
| 5002 || coil || 1 || style="text-align:left" | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) (RAM) || I
|-
|-
| 5000 || 1 || style="text-align:left" | Очистка всех банков ИК-команд || I
| 5100 (в прошивке 3.1.0 и ранее - 0) || coil || number_of_banks || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка ROM (Play) || I
|-
|-
| 5001 || 1 || style="text-align:left" | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509), без сохранения в банк команд || I
| 5200 (в прошивке 3.1.0 и ранее - 1000) || coil || number_of_banks|| style="text-align:left" | Редактирование ИК-команд (ROM) с копированием в RAM (ROM -> RAM) || I  
|-
|-
| 5002 || 1 || style="text-align:left" | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) || I
| 5300 (в прошивке 3.1.0 и ранее - 2000)|| coil || number_of_banks || style="text-align:left" | Запись в банк ИК-команд с использованием IR-приёмника  (Learn)|| I
|-
|-
| 5100 (в прошивке 3.1.0 и ранее - 0) || number_of_banks || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка || I
| 5400 || input || number_of_banks || style="text-align:left" | Размер данных IR-команды в байтах || I
|-
|-
| 5200 (в прошивке 3.1.0 и ранее - 1000) || number_of_banks|| style="text-align:left" | Чтение и запись в банки команд IR || I
| 5500 || holding || 1 || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка ROM (Play) || FW 4.18.0
|-
|-
| 5300 прошивке 3.1.0 и ранее - 2000)|| number_of_banks || style="text-align:left" | Запись в банк команд IR использую IR-приёмник || I
| 5501 || holding || 1 || style="text-align:left" | Редактирование ИК-команд (ROM) с копированием в RAM (ROM -> RAM) || FW 4.18.0
|-
| 5502 || holding || 1 || style="text-align:left" | Запись в банк ИК-команд с использованием IR-приёмника (Learn) || FW 4.18.0
|-
|-
|}
|}
<!--T:29-->
Значения number_of_banks для различных устройств:
* WB-MSW v.3 - 32
* WB-MIR v.2 - 40
Начиная с версии прошивки 4.22.0 number_of_banks = 80
</translate>