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

поправил
(Добавил наименование)
(поправил)
 
(не показана 31 промежуточная версия 3 участников)
Строка 3: Строка 3:
{{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }}
{{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }}


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


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


<!--T:3-->
Вы можете записать сигнал в одну из двух видов памяти:  
Сигнал с пульта ДУ записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён по команде с контроллера или другого управляющего устройства. Все сигналы в устройствах хранятся в постоянной памяти (ROM), а один в оперативном буфере (RAM). ИК-сигнал может быть также записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении соответствующей Modbus-команды.
* Постоянную — записанные команды хранятся в ROM-буферах, которые записываются в ПЗУ модуля и сохраняются при отключении питания.
* Оперативную это RAM-буфер модуля, данные теряются при отключении питания.


<!--T:4-->
Помните, что при использовании постоянной памяти вы расходуете ресурс ПЗУ, каждую ячейку можно перезаписать не более 1000 раз.
Устройство имеет два режима работы: постоянный (работа с ROM-буферами) и оперативный (RAM-буфер).


<!--T:5-->
Подробнее о записи и воспроизведении сигналов читайте в разделах [[#Постоянный режим|Постоянный режим]] и [[#Оперативный режим|Оперативный режим]].
В постоянном режиме (ROM) записанные сигналы хранятся в Flash-ПЗУ устройства и сохраняются при отключении питания. Стоит отметить, что при каждой перезаписи сигнала расходуется физический ресурс ПЗУ процессора устройства — всего можно перезаписать сигнал не более 1000 раз.
 
=== Управление телевизором ===
{{Wbincludes:WB-MSW v.3 IR TV Control}}
 
=== Управление климатической техникой ===
{{Wbincludes:WB-MSW v.3 IR AC Control}}
 
=== Управление другой техникой по ИК ===
{{Wbincludes:WB-MSW v.3 IR Other Control}}


==Способ представления и хранения сигнала== <!--T:6-->
==Способ представления и хранения сигнала== <!--T:6-->
Строка 28: Строка 38:


<!--T:9-->
<!--T:9-->
В последних версиях прошивок модулей WB-MIR v.2 и WB-MSW v.3 последовательности команд сжимаются по специальному алгоритму, чтобы обеспечить более высокую плотность хранения. Перед воспроизведением последовательности разархивируются.
=== Сжатие ИК-команд ===
Начиная с версии прошивки 4.22.0 в WB-MIR v.2 и WB-MSW v.3 последовательности команд сжимаются по специальному алгоритму, чтобы обеспечить более высокую плотность хранения. Перед воспроизведением последовательности разархивируются. Максимальная длина команды увеличена до 1000 символов (2000 байт). Сжатие данных использует "словарь": длительности сигнала, которые близки друг к другу, заносятся в словарь как один элемент. Команда хранит индексы на элементы словаря. Максимальная длина словаря - 64 слова, то есть в ROM не получится записать произвольные данные. Также следует учитывать, что при редактировании банка команд записанные данные после сохранения в ROM будут сжаты и будут отличаться от оригинала при чтении из банка. При этом остается возможность записывать и воспроизводить произвольные данные из RAM - там алгоритм сжатия не применяется.


== Управление модулем по Modbus == <!--T:10-->
== Управление модулем по Modbus == <!--T:10-->
Строка 47: Строка 58:
* редактирование сигнала в оперативной памяти.
* редактирование сигнала в оперативной памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
=== Особенности при работе из Codesys ===
Читайте статью [[Codesys_IR_manual | Работа с ИК-командами в Codesys]].


== Постоянный режим == <!--T:15-->
== Постоянный режим == <!--T:15-->
В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно.
В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно. Начиная с версии прошивки 4.22.0 снова поддерживается до 80 команд.


==== Запись сигнала в постоянную память с пульта ДУ ==== <!--T:16-->
==== Запись сигнала в постоянную память с пульта ДУ ==== <!--T:16-->
Строка 55: Строка 70:


<!--T:17-->
<!--T:17-->
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите коротко один раз кнопку на пульте. Сразу после этого, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
Строка 76: Строка 91:
==== Удаление всех сигналов из постоянной памяти ==== <!--T:19-->
==== Удаление всех сигналов из постоянной памяти ==== <!--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-->
== Оперативный режим == <!--T:20-->
Строка 98: Строка 124:
== Чтение/запись банков команд ==  
== Чтение/запись банков команд ==  


Пользователь [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 выложил на форуме].
Пользователь [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]]
Мы немного поправили им имена и опубликовали в архиве: [[Media:ir_backup.tgz | ir_backup.tgz]]
Строка 163: Строка 189:
  Starting wb-mqtt-serial
  Starting wb-mqtt-serial
</syntaxhighlight>
</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 — набор инструкций и функций для работы вышеуказанных скриптов, запускается автоматически.
Перед тем, как приступить к чтению и записи команд:
# Зайдите в консоль контроллера по [[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>
* Во время исполнения скрипта, контроллер издаст звуковой сигнал столько раз, сколько банков устройства было занято ИК-командами. Это касается как скрипта чтения, так и записи.
=== Чтение команд в файл ===
Для чтения ИК-команд используется скрипт <code>read_signal.py</code>.
Формат запуска скрипта:
<syntaxhighlight lang="bash">
python read_signal.py -a [address]
</syntaxhighlight>
Где [address] нужно заменить на желаемый адрес устройства. По умолчанию скрипт использует 2-й порт RS485, при необходимости, это можно изменить добавив к исходной команде ключ:
<syntaxhighlight lang="bash">
--port /dev/ttyRS485-n
</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-->  
== Карта регистров == <!--T:24-->  
Строка 186: Строка 293:
|-
|-
| 5400 || input || number_of_banks || style="text-align:left" | Размер данных IR-команды в байтах || I
| 5400 || input || number_of_banks || style="text-align:left" | Размер данных IR-команды в байтах || I
|-
| 5500 || holding || 1 || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка ROM (Play) || FW 4.18.0
|-
| 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-->
<!--T:29-->
В последних версиях прошивок значение number_of_banks равняется 80, то есть, например, регистры размера команд имеют значения от 5400 до 5479.
Значения number_of_banks для различных устройств:
* WB-MSW v.3 - 32
* WB-MIR v.2 - 40


Начиная с версии прошивки 4.22.0 number_of_banks = 80


</translate>
</translate>