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

Нет описания правки
Строка 1: Строка 1:
{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}}
{{DISPLAYTITLE:Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MS/WB-MSW/WB-MSW2}}
=== Назначение ===
= Назначение =
Инфракрасный приёмопередатчик, установленный в устройствах WB-MS/WB-MSW/WB-MSW2 модификации I, предназначен для записи сигналов с бытовых пультов ДУ и дальнейшего управления бытовой техникой, в том числе кондиционерами, телевизорами и т.д.
Инфракрасный приёмопередатчик, установленный в устройствах WB-MS/WB-MSW/WB-MSW2 модификации I, предназначен для записи сигналов с бытовых пультов ДУ и дальнейшего управления бытовой техникой, в том числе кондиционерами, телевизорами и т.д.


'''Внимание! Пока что управление возможно только с небольшого расстояния (до 1 метра).'''
'''Внимание! Пока что управление возможно только с небольшого расстояния (до 1 метра).'''
=== Принцип работы ===
= Принцип работы =
Сигнал с пульта ДУ сигнал записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. Можно хранить несколько сигналов. Также сигнал может быть записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.
Сигнал с пульта ДУ сигнал записывается ИК-приёмником и хранится в памяти устройства, откуда может быть воспроизведён. Можно хранить несколько сигналов. Также сигнал может быть записан не с пульта ДУ, а передан в виде последовательности чисел по Modbus. Сохранённый сигнал воспроизводится ИК-передатчиком при получении специальной команды по Modbus.


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


====Принцип хранения сигнала====
==Принцип хранения сигнала==
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 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 =
'''Внимание! Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно - смотрите в [[#Карта регистров флагов (Coils)]].'''
'''Внимание! Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно - смотрите в [[#Карта регистров флагов (Coils)]].'''


Строка 25: Строка 25:
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>.


==== Постоянный режим ====
== Постоянный режим ==
В постоянном режиме устройство может хранить <code>number_of_banks</code> ИК-сигналов. Это значение варьируется в зависимости от версии прошивки, но составляет не менее 6. Сигналы нумеруются с 0 до <code>number_of_banks - 1</code>.
В постоянном режиме устройство может хранить <code>number_of_banks</code> ИК-сигналов. Это значение варьируется в зависимости от версии прошивки, но составляет не менее 6. Сигналы нумеруются с 0 до <code>number_of_banks - 1</code>.
===== Запись сигнала в постоянную память с пульта ДУ =====
=== Запись сигнала в постоянную память с пульта ДУ ===
Чтобы записать сигнал под номером <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">
Строка 36: Строка 36:
#Завершаем запись сигнала с номером 1
#Завершаем запись сигнала с номером 1
</syntaxhighlight>
</syntaxhighlight>
===== Воспроизведение сигнала из постоянной памяти =====
=== Воспроизведение сигнала из постоянной памяти ===
Чтобы воспроизвести сигнал под номером <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">
Строка 42: Строка 42:
root@wirenboard:~# modbus_client --debug -m rtu -b9600 -s2 -pnone /dev/ttyAPP1 -a16 -t5 -r5101 1
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>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>. После этого сигнал в виде последовательности натуральных чисел (смотрите [[#Технические детали]]) будет записан в подряд идущие регистры хранения, начиная с регистра <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 не будут доступны.


== Регистры, связанные с ИК ==
= Регистры, связанные с ИК =


=== Карта регистров хранения (Holding Registers)===
== Карта регистров хранения (Holding Registers)==


В процессе наполнения.
В процессе наполнения.
Строка 71: Строка 71:
|}
|}


===Карта регистров флагов (Coils)===
==Карта регистров флагов (Coils)==