Codesys IR manual: различия между версиями
(Первая версия) |
|||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Работа с ИК-командами в Codesys}} | {{DISPLAYTITLE: Работа с ИК-командами в Codesys}} | ||
Подробная инструкция по работе с ИК-приемопередатчиком описана в | Подробная инструкция по работе с ИК-приемопередатчиком описана в [[WB-MSx_Consumer_IR_Manual | соответствующей статье]]. Здесь будут рассмотрены особенности работы в Codesys (применимо также к другому стороннему ПО) | ||
При работе с ИК-приемопередатчиком в Codesys или в другом стороннем ПО стоит учитывать следующие особенности: | При работе с ИК-приемопередатчиком в Codesys или в другом стороннем ПО стоит учитывать следующие особенности: | ||
* При непрерывной (циклической) записи | * При непрерывной (циклической) записи "1" в coil-регистр воспроизведения команды команда будет воспроизводится непрерывно, т.к. после окончания воспроизведения coil сбрасывается в 0 | ||
* Аналогично работает воспроизведение команды через holding-регистр: если в регистр в цикле записывать какую-то команду, она будет воспроизводиться непрерывно | * Аналогично работает воспроизведение команды через holding-регистр: если в регистр в цикле записывать какую-то команду, она будет воспроизводиться непрерывно | ||
* Циклическая запись в регистры редактирования или записи команд возможна, но стоит помнить, что это занимает пропускную способность шины | * Циклическая запись в регистры редактирования или записи команд возможна, но стоит помнить, что это занимает пропускную способность шины | ||
Для примера рассмотрим запись и воспроизведение двух ИК-команд через coil и holding регистры. | Для примера рассмотрим запись и воспроизведение двух ИК-команд через coil и holding регистры. | ||
= Работа с ИК-командами в Codesys через coil регистры = | |||
Нужно создать устройство Modbus Slave и добавить каналы: | Нужно создать устройство Modbus Slave и добавить каналы: | ||
* Play from ROM0 | * Play from ROM0 - Write Single Coil - Триггер "Передний фронт" - Адрес 5100 | ||
* Play from ROM1 | * Play from ROM1 - Write Single Coil - Триггер "Передний фронт" - Адрес 5101 | ||
* Learn to ROM0 | * Learn to ROM0 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5300 | ||
* Learn to ROM1 | * Learn to ROM1 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5301 | ||
* ROM Size | * ROM Size - Read Holding Registers - Триггер "Цикл 1000 мс" - Адрес 5400 - Длина 2 | ||
[[Image: Coil_regs_defs.png]] | [[Image: Coil_regs_defs.png]] | ||
Создать переменные: | Создать переменные: | ||
<syntaxhighlight | <syntaxhighlight> | ||
VAR_GLOBAL | VAR_GLOBAL | ||
LearnToROM0 : BOOL; | LearnToROM0 : BOOL; | ||
Строка 39: | Строка 38: | ||
После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала. | После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала. | ||
Достоинства | Достоинства данного способа: | ||
* Каждому сигналу соответствует своя переменная | * Каждому сигналу соответствует своя переменная | ||
* Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную | * Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную | ||
Недостатки | Недостатки данного способа: | ||
* Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве | * Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве | ||
* При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК | * При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК | ||
= Работа с ИК-командами в Codesys через holding регистры = | |||
Начиная с версии прошивки 4.18.0 для работы с ИК-приемопередатчиком доступен [[WB-MSx_Consumer_IR_Manual#Работа_с_сигналами_через_holding_регистры | альтернативный интерфейс]]. | Начиная с версии прошивки 4.18.0 для работы с ИК-приемопередатчиком доступен [[WB-MSx_Consumer_IR_Manual#Работа_с_сигналами_через_holding_регистры | альтернативный интерфейс]]. | ||
Строка 54: | Строка 53: | ||
[[Image: Holding_regs_defs.png]] | [[Image: Holding_regs_defs.png]] | ||
<syntaxhighlight | <syntaxhighlight> | ||
VAR_GLOBAL | VAR_GLOBAL | ||
LearnCmd : WORD; | LearnCmd : WORD; | ||
Строка 65: | Строка 64: | ||
[[Image: Holding_regs_vars.png]] | [[Image: Holding_regs_vars.png]] | ||
Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет | Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет воспроизводится непрерывно. Также этот канал можно добавить на чтение в отдельную переменную, которая будет сообщать текущее состояние приемопередатчика. | ||
Достоинства | Достоинства данного способа: | ||
* Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд | * Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд | ||
* Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов | * Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов | ||
Недостатки | Недостатки данного способа: | ||
* немного более сложная логика работы: нужно сначала установить номер воспроизводимого сигнала в переменную, а затем установить переменную-триггер в TRUE |
Версия 12:19, 24 января 2022
Подробная инструкция по работе с ИК-приемопередатчиком описана в соответствующей статье. Здесь будут рассмотрены особенности работы в Codesys (применимо также к другому стороннему ПО)
При работе с ИК-приемопередатчиком в Codesys или в другом стороннем ПО стоит учитывать следующие особенности:
- При непрерывной (циклической) записи "1" в coil-регистр воспроизведения команды команда будет воспроизводится непрерывно, т.к. после окончания воспроизведения coil сбрасывается в 0
- Аналогично работает воспроизведение команды через holding-регистр: если в регистр в цикле записывать какую-то команду, она будет воспроизводиться непрерывно
- Циклическая запись в регистры редактирования или записи команд возможна, но стоит помнить, что это занимает пропускную способность шины
Для примера рассмотрим запись и воспроизведение двух ИК-команд через coil и holding регистры.
Работа с ИК-командами в Codesys через coil регистры
Нужно создать устройство Modbus Slave и добавить каналы:
- Play from ROM0 - Write Single Coil - Триггер "Передний фронт" - Адрес 5100
- Play from ROM1 - Write Single Coil - Триггер "Передний фронт" - Адрес 5101
- Learn to ROM0 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5300
- Learn to ROM1 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5301
- ROM Size - Read Holding Registers - Триггер "Цикл 1000 мс" - Адрес 5400 - Длина 2
Создать переменные:
VAR_GLOBAL
LearnToROM0 : BOOL;
LearnToROM1 : BOOL;
PlayFromROM0 : BOOL;
PlayFromROM1 : BOOL;
SizeROM : ARRAY[0..1] OF WORD;
END_VAR
Связать переменные с соответствующими каналами Modbus. При этом можно использовать одну переменную для каналов воспроизведения в качестве триггера и данных.
После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала.
Достоинства данного способа:
- Каждому сигналу соответствует своя переменная
- Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную
Недостатки данного способа:
- Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве
- При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК
Работа с ИК-командами в Codesys через holding регистры
Начиная с версии прошивки 4.18.0 для работы с ИК-приемопередатчиком доступен альтернативный интерфейс.
Для работы через holding регистры требуется определить соответствующие каналы и связать их с переменными:
VAR_GLOBAL
LearnCmd : WORD;
PlayCmd : WORD;
PlayTrigger : BOOL;
SizeROM : ARRAY[0..1] OF WORD;
END_VAR
Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет воспроизводится непрерывно. Также этот канал можно добавить на чтение в отдельную переменную, которая будет сообщать текущее состояние приемопередатчика.
Достоинства данного способа:
- Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд
- Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов
Недостатки данного способа:
- немного более сложная логика работы: нужно сначала установить номер воспроизводимого сигнала в переменную, а затем установить переменную-триггер в TRUE