WB-MSx Consumer IR Manual: различия между версиями
(Новая страница: «{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}} Управл…») |
|||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}} | {{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}} | ||
== Управление == | |||
Управление '''IR-приемопередатчиком''' осуществляется через регистры флагов Modbus (см. [[#Карта регистров флагов (Coils)|карту регистров флагов]]). Устройство может хранить <code>number_of_banks</code> банков команд (это значение может варьироваться в зависимости от сборки). Всего 3 типа операций можно выполнить с IR-приемопередатчиком: чтение/запись, воспроизведение и запись с IR-приёмника. В одно и то же время можно оперировать лишь над одним банком и выполнять только одну функцию. Т.е. среди всех регистров флагов, относящихся к IR-приемопередатчику, только один регистр может быть установлен в единицу. Попытка записать единицу в регистры флагов IR при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. Содержимое банка, с которым в данное время проводится оперирование, отображается в регистры хранения по адресу 2000 (см. [[#Карта регистров хранения (Holding Registers)|карту регистров хранения]]). Значение каждого регистра - продолжительность периода логических нуля или единицы в квантах по 10 микросекунд. Отсюда максимальная длительность одного периода <code>2^16 * 10 мкс = 655360 мск = 0,655 с</code>. Самый первый период соответствует логической единице. Конец последовательности маркируется двумя периодами продолжительностью 0. | Управление '''IR-приемопередатчиком''' осуществляется через регистры флагов Modbus (см. [[#Карта регистров флагов (Coils)|карту регистров флагов]]). Устройство может хранить <code>number_of_banks</code> банков команд (это значение может варьироваться в зависимости от сборки). Всего 3 типа операций можно выполнить с IR-приемопередатчиком: чтение/запись, воспроизведение и запись с IR-приёмника. В одно и то же время можно оперировать лишь над одним банком и выполнять только одну функцию. Т.е. среди всех регистров флагов, относящихся к IR-приемопередатчику, только один регистр может быть установлен в единицу. Попытка записать единицу в регистры флагов IR при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. Содержимое банка, с которым в данное время проводится оперирование, отображается в регистры хранения по адресу 2000 (см. [[#Карта регистров хранения (Holding Registers)|карту регистров хранения]]). Значение каждого регистра - продолжительность периода логических нуля или единицы в квантах по 10 микросекунд. Отсюда максимальная длительность одного периода <code>2^16 * 10 мкс = 655360 мск = 0,655 с</code>. Самый первый период соответствует логической единице. Конец последовательности маркируется двумя периодами продолжительностью 0. | ||
Строка 16: | Строка 18: | ||
Банки команд нумеруются с нуля (0). | Банки команд нумеруются с нуля (0). | ||
== Регистры, связанные с ИК == | |||
=== Карта регистров хранения (Holding Registers)=== | |||
В процессе наполнения. | |||
{| border="1" class="wikitable" style="text-align:center" | |||
!Регистр / адрес | |||
!тип | |||
!чтение/запись | |||
!значение по умолчанию | |||
!формат | |||
!назначение | |||
!В модификациях | |||
|- | |||
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика | |||
|T | |||
|- | |||
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика | |||
|H | |||
|- | |||
|2 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|lux | |||
|Освещённость с встроенного датчика | |||
|L | |||
|- | |||
|3 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|dB | |||
|Уровень шума | |||
|S | |||
|- | |||
|4 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
| | |||
|- | |||
|5 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
| | |||
|- | |||
|6 | |||
|input | |||
|R | |||
|0x7FFF | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|D | |||
|- | |||
|7 | |||
|input | |||
|R | |||
|0x7FFF | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|D | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
|90||holding||RW||20 (200 ms)||× 10 ms||Время усреднения освещённости | |||
|<blockquote>L</blockquote> | |||
|- | |||
|91||holding||RW||20 (200 ms)||× 10 ms | |||
||Время усреднения шума | |||
|S | |||
|- | |||
|100 | |||
||input | |||
||R||||raw_val * 16||Сырое усреднённое значение с АЦП микрофона | |||
|S | |||
|- | |||
| 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку МК без сохранения состояния | |||
|все | |||
|- | |||
| 121 (0x79) || input || R || - || mV || текущее напряжение питания модуля | |||
|все | |||
|- | |||
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства | |||
|все | |||
|- | |||
| 200-206 || input || R || {'W','B','M','S',0,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-приемопередатчика | |||
|I | |||
|- | |||
|} | |||
===Карта регистров флагов (Coils)=== | |||
{| border="1" class="wikitable" style="text-align:center" | |||
!Начальный адрес || Количество || Назначение | |||
!В модификациях | |||
|- | |||
| 0 || number_of_banks || style="text-align:left" |Воспроизведение ИК-команды из соответствующего банка | |||
|I | |||
|- | |||
| 1000 || number_of_banks|| style="text-align:left" |Чтение и запись в банки команд IR | |||
|I | |||
|- | |||
| 2000 || number_of_banks || style="text-align:left" |Запись в банк команд IR использую IR-приёмник | |||
|I | |||
|- | |||
| 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 | |||
|- | |||
|} |
Версия 12:24, 2 сентября 2016
Управление
Управление IR-приемопередатчиком осуществляется через регистры флагов Modbus (см. карту регистров флагов). Устройство может хранить number_of_banks
банков команд (это значение может варьироваться в зависимости от сборки). Всего 3 типа операций можно выполнить с IR-приемопередатчиком: чтение/запись, воспроизведение и запись с IR-приёмника. В одно и то же время можно оперировать лишь над одним банком и выполнять только одну функцию. Т.е. среди всех регистров флагов, относящихся к IR-приемопередатчику, только один регистр может быть установлен в единицу. Попытка записать единицу в регистры флагов IR при уже имеющейся единице приведёт к ошибке BUSY
. Содержимое банка, с которым в данное время проводится оперирование, отображается в регистры хранения по адресу 2000 (см. карту регистров хранения). Значение каждого регистра - продолжительность периода логических нуля или единицы в квантах по 10 микросекунд. Отсюда максимальная длительность одного периода 2^16 * 10 мкс = 655360 мск = 0,655 с
. Самый первый период соответствует логической единице. Конец последовательности маркируется двумя периодами продолжительностью 0.
Для того, чтобы прочитать содержимое банка i
и/или внести изменение в него, необходимо записать единицу в регистр флагов по адресу 1000 + i
. Далее, если необходимо прочитать содержимое банка, нужно прочитать регистры хранения, начиная с адреса 2000. Конец последовательности определяется маркером из двух последовательных нулей, как это было сказано выше. Если банк пуст, в первых двух регистрах (2000 и 2001) будут храниться нули. Для внесения изменений в последовательность нужно записать данные в интересующие регистры с помощью команд WRITE_SINGLE_REGISTER
и WRITE_MULTI_REGISTERS
. В конце изменённой последовательности всё также должен быть маркер конца последовательности. Для удаления содержимого банка необходимо записать в первые два регистра нули (2000 и 2001). Для фиксации изменений и просто завершения операции чтения банка i
необходимо записать ноль в регистр флагов по адресу 1000 + i
.
Для того, чтобы воспроизвести команду, хранящуюся в банке i
, необходимо записать единицу в регистр флагов по адресу i
. В случае отсутствия команды в банке i
будет возвращена ошибка. Пока идёт воспроизведение, регистр флага по адресу i
будет установлен в единицу. Никакие другие операции с IR-приемопередатчиком по Modbus не будут доступны.
Для того, чтобы записать команду с пульта дистанционного управления (ПДУ) в банк i
, необходимо записать единицу в регистр флагов по адресу 2000 + i
. После чего направьте ПДУ на IR-приёмник и нажмите кнопку на пульте. После того, как отпустите кнопку, необходимо записать ноль в регистр флагов по адресу 2000 + i
. Остановка записи может прекратиться самостоятельно, если буфер команды будет заполнен. Тогда регистр флагов по адресу 2000 + i
самостоятельно установится в ноль. После записи команды ПДУ в банк i
, можно читать, изменять и воспроизводить эту команду, как это описано выше.
Для того, чтобы записать команду с пульта дистанционного управления (ПДУ) в регистры хранения без записи в банк необходимо установить регистр флага по адресу 5001
в единицу. Далее действия происходят как описано выше. После прекращения записи в регистрах хранения по адресу 2000 и дальше будет храниться команда ПДУ, конец которой будет маркирован двумя последовательными нулями.
Для того, чтобы воспроизвести команду, хранящуюся в регистрах хранения, необходимо записать единицу в регистр флагов по адресу 5002
. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение, регистр флага по адресу 5002
будет установлен в единицу. Никакие другие операции с IR-приемопередатчиком по Modbus не будут доступны.
Для того, чтобы очистить все банки команд, достаточно записать единицу в регистр флагов по адресу 5000
.
Банки команд нумеруются с нуля (0).
Регистры, связанные с ИК
Карта регистров хранения (Holding Registers)
В процессе наполнения.
Регистр / адрес | тип | чтение/запись | значение по умолчанию | формат | назначение | В модификациях |
---|---|---|---|---|---|---|
0 | input | R | 0x7FFF | °C × 10 (signed) | Температура с встроенного датчика | T |
1 | input | R | 0xFFFF |
|
Относительная влажность с встроенного датчика | H |
2 | input | R | - | lux | Освещённость с встроенного датчика | L |
3 | input | R | - | dB | Уровень шума | S |
4 | input | R | - | - | - | |
5 | input | R | - | - | - | |
6 | input | R | 0x7FFF | °C × 16 (signed) | Температура с внешнего датчика | D |
7 | input | R | 0x7FFF | °C × 16 (signed) | Температура с внешнего датчика | D |
90 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения освещённости |
|
91 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения шума | S |
100 | input | R | raw_val * 16 | Сырое усреднённое значение с АЦП микрофона | S | |
120 (0x78) | holding | RW | 0 | отличное от 0 | запись в регистр вызывает перезагрузку МК без сохранения состояния | все |
121 (0x79) | input | R | - | mV | текущее напряжение питания модуля | все |
128 (0x80) | holding | RW | 1 | Modbus-адрес устройства | все | |
200-206 | input | R | {'W','B','M','S',0,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-приемопередатчика | I |
Карта регистров флагов (Coils)
Начальный адрес | Количество | Назначение | В модификациях |
---|---|---|---|
0 | number_of_banks | Воспроизведение ИК-команды из соответствующего банка | I |
1000 | number_of_banks | Чтение и запись в банки команд IR | I |
2000 | number_of_banks | Запись в банк команд IR использую IR-приёмник | I |
5000 | 1 | Очистка всех банков ИК-команд | I |
5001 | 1 | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509), без сохранения в банк команд | I |
5002 | 1 | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) | I |