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

Материал из Wiren Board
(Новая страница: «==== Signal record in ROM with the remote control ==== '''Note:''' For more about work in command line mode, see the section #Control module from the command li…»)
(Новая страница: «To write the signal number <code>i</code> from the remote control to memory, write 1 to the flag register at <code>5300 + i</code>. Then point the remote control…»)
Строка 44: Строка 44:
'''Note:''' For more about work in command line mode, see the section [[#Control module from the command line|Control module from the command line]].
'''Note:''' For more about work in command line mode, see the section [[#Control module from the command line|Control module from the command line]].


Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>.
To write the signal number <code>i</code> from the remote control to memory, write 1 to the flag register at <code>5300 + i</code>. Then point the remote control at the IR receiver and press the button on the remote. After releasing the button, complete the signal recording by writing 0 to the flag register at <code>5300 + i</code>.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
#Start recording signal number 1. The device connected to port /dev/ttyRS485-1 has Modbus 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 1
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 1
#Направляем пульт на окно приемника и нажимаем кнопку на пульте ДУ
#Direct the remote to the receiver window and press the button on the remote control
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 0
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 0
#Завершаем запись сигнала с номером 1
#Finish the entry signal number 1
</syntaxhighlight>
</syntaxhighlight>



Версия 11:22, 19 июля 2019

Другие языки:


Instructions for IR transceiver settings for WB-MS, WB-MSW, WB-MIR devices

Purpose

Infrared transceiver, installed in devices WB-MS, WB-MSW modification I and WB-MIR, is designed to record signals from IR remote controls of household devices and further control of household appliances: air conditioners, TVs, etc. Modules WB-MIR V. 2 and WB-MSW V. 3 supports about 80 IR commands (depends on the amount of memory).

Warning! All modules (except for WB-MSW v.3) IR control is only possible with short distances (< 1 m).

Operating principle

The signal from the remote control is recorded by the IR receiver and stored in the device memory, where it can be played on command from the controller or other control devices. All signals in the devices are stored in permanent memory (ROM) and one in the operational buffer (RAM). The IR signal can also be recorded not from the remote control, but transmitted as a sequence of numbers via Modbus. The stored signal is reproduced by the IR transmitter when the corresponding Modbus command is received.

The device has two modes of operation: permanent (working with ROM-buffers) and operational (RAM-buffer).

In continuous mode (ROM), the recorded signals are stored in the Flash ROM of the device and stored when the power is turned off. Every time the signal is overwritten, the physical resource of the device's processor ROM is consumed — in total, the signal can be overwritten no more than 1000 times.

Method of signal presentation and storage

The example of the contents of the operational buffer WB-MIR

The signal is stored in the device memory as a sequence of natural numbers (each from 0 to 65535), where each number is the duration of the logical 0 or 1 in the signal in quanta of 10 microseconds. Therefore, the maximum duration of each zero or unit must be no more than 65535 * 10 µs = 655350 µs = 0.655 seconds. The first number of the sequence is the duration of the first logical unit. The end of the sequence is marked with two periods of duration 0.

In operating mode, the IR signal (only one) is stored in the device's memory. It is recorded there from the control panel when the corresponding Modbus command is given or by writing values to the appropriate registers from an external Modbus device (e.g. from the controller Wiren Board 6/en), and the IR signal can be copied from a Flash ROM. The IR signal can be played from the RAM and then overwritten; the ROM resource is not consumed. When the power is turned off, the signal is not stored in the RAM.

The latest firmware versions of WB-MIR v.2 and WB-MSW v.3 sequences of commands are compressed by a special algorithm to provide a higher storage density. The sequences are unzipped before playback.

Modbus module control

Warning! Numbers used Modbus registers have changed since firmware version 3.2.0. The instructions stated the new numbers of registers. If you are using a device with older firmware, the general principle remains the same, but the numbers of the registers are shifted; as it is — see the Map registers, flags, and inputs (Coils and Inputs). A full description of IR device registers can be found in this article under Register map.

At the physical level, the module is connected via RS-485 interface. Modbus RTU Protocol is used to control the devices. In Wiren Board devices, Modbus data is transmitted over RS-485 communication lines. See the Modbus Protocol page for details. Modbus-address of the device is set at the factory and marked on the label. The address can be changed programmatically. Details refer to the Modbus control.

In devices with firmware version "'3.1.0"' and later it is also possible to change the settings of data exchange parameters — see Modbus register map.

The control of the IR receiver is made through the flags of Modbus registers; a full list can be found in the description of the map registers. There are 3 types of operations with signals:

  • entry signal in the memory with the remote control,
  • play a signal from memory,
  • edit the signal in memory.

Only one operation can be performed on only one signal at a time. Since during the execution of any operation one of the registers of flags is set to 1, and after the operation is completed there is set to 0, at any time among all the registers of flags related to the IR transceiver, only one register can be set to one. Attempting to write 1 to IR-related flag registers with an existing unit will result in a BUSY error.

Constant mode

In constant mode, the IR commands are stored in the device memory and are available after a power reset. Each command is stored in a separate "Bank" of memory. The number of memory banks depends on the device flashing. Prior to firmware 3.7.2 inclusive, the devices had 7 memory banks of IR commands. Starting with version 4.4.0 32 banks are supported. Intermediate versions allowed to record up to 80 commands, but in some cases did it incorrectly.

Signal record in ROM with the remote control

Note: For more about work in command line mode, see the section Control module from the command line.

To write the signal number i from the remote control to memory, write 1 to the flag register at 5300 + i. Then point the remote control at the IR receiver and press the button on the remote. After releasing the button, complete the signal recording by writing 0 to the flag register at 5300 + i.

#Start recording signal number 1. The device connected to port /dev/ttyRS485-1 has Modbus 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 1
#Direct the remote to the receiver window and press the button on the remote control
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 0
#Finish the entry signal number 1

Воспроизведение сигнала из постоянной памяти

Чтобы воспроизвести сигнал под номером i из памяти, запишите 1 в регистр флага по адресу 5100 + i. Если сигнал под номером i не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5100 + i будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.

#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5101 1

Редактирование сигнала в постоянной памяти

Чтобы отредактировать сигнал под номером i или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу 5200 + i. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок "Пример содержимого оперативного буфера WB-MIR") будет записан в подряд идущие регистры хранения, начиная с регистра 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.

Карта регистров

Карта регистров хранения (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
(Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board)
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 {'x','x','x','x','x','x'} сигнатура
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-приемопередатчика (2000-2201 в прошивках WB-MIR версий до 4.1.0)

Карта регистров флагов и входов (Coils и Inputs)

Начальный адрес Тип Количество Назначение В модификациях
5000 coil 1 Очистка всех банков ИК-команд I
5001 coil 1 Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509) (RAM), без сохранения в банк команд I
5002 coil 1 Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) (RAM) I
5100 (в прошивке 3.1.0 и ранее - 0) coil number_of_banks Воспроизведение ИК-команды из соответствующего банка ROM (Play) I
5200 (в прошивке 3.1.0 и ранее - 1000) coil number_of_banks Редактирование ИК-команд (ROM) с копированием в RAM (ROM -> RAM) I
5300 (в прошивке 3.1.0 и ранее - 2000) coil number_of_banks Запись в банк ИК-команд с использованием IR-приёмника (Learn) I
5400 input number_of_banks Размер данных IR-команды в байтах I

В последних версиях прошивок значение number_of_banks равняется 80, то есть, например, регистры размера команд имеют значения от 5400 до 5479.

Управление модулем из командной строки

Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице Modbus-client. Доступ к командной строке описан в статье SSH.

Пример чтения регистров

Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Модуль wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный ответ из шестнадцатеричных цифр в символьную строку:

echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 \
-a1 -t0x03 -r200 -c 6 | \
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'`

В результате выполнения команды получаем строку, например WBMIR. В этом примере модуль WB-MIR имеет Modbus-адрес 1.