Codesys IR manual: различия между версиями

Материал из Wiren Board
(Первая версия)
 
Строка 1: Строка 1:
{{DISPLAYTITLE: Работа с ИК-командами в Codesys}}
{{DISPLAYTITLE: Работа с ИК-командами в Codesys}}
 
Подробная инструкция по работе с ИК-приемопередатчиком описана в статье [[WB-MSx_Consumer_IR_Manual | Инструкция по работе с ИК-приёмопередатчиком]]. Здесь будут рассмотрены особенности работы в Codesys (применимо также к другому стороннему ПО)
Подробная инструкция по работе с ИК-приемопередатчиком описана в [[WB-MSx_Consumer_IR_Manual | соответствующей статье]]. Здесь будут рассмотрены особенности работы в Codesys (применимо также к другому стороннему ПО)


При работе с ИК-приемопередатчиком в Codesys или в другом стороннем ПО стоит учитывать следующие особенности:
При работе с ИК-приемопередатчиком в Codesys или в другом стороннем ПО стоит учитывать следующие особенности:
* При непрерывной (циклической) записи "1" в coil-регистр воспроизведения команды команда будет воспроизводится непрерывно, т.к. после окончания воспроизведения coil сбрасывается в 0
* При непрерывной (циклической) записи '''1''' в coil-регистр воспроизведения команды команда будет воспроизводится непрерывно, т.к. после окончания воспроизведения coil сбрасывается в '''0'''.
* Аналогично работает воспроизведение команды через holding-регистр: если в регистр в цикле записывать какую-то команду, она будет воспроизводиться непрерывно
* Аналогично работает воспроизведение команды через holding-регистр: если в регистр в цикле записывать какую-то команду, она будет воспроизводиться непрерывно.
* Циклическая запись в регистры редактирования или записи команд возможна, но стоит помнить, что это занимает пропускную способность шины
* Циклическая запись в регистры редактирования или записи команд возможна, но стоит помнить, что это занимает пропускную способность шины.


Для примера рассмотрим запись и воспроизведение двух ИК-команд через coil и holding регистры.
Для примера рассмотрим запись и воспроизведение двух ИК-команд через coil и holding регистры.
Строка 13: Строка 12:


Нужно создать устройство Modbus Slave и добавить каналы:
Нужно создать устройство Modbus Slave и добавить каналы:
* Play from ROM0 - Write Single Coil - Триггер "Передний фронт" - Адрес 5100
* Play from ROM0 Write Single Coil Триггер «Передний фронт» — Адрес 5100
* Play from ROM1 - Write Single Coil - Триггер "Передний фронт" - Адрес 5101
* Play from ROM1 Write Single Coil Триггер «Передний фронт» — Адрес 5101
* Learn to ROM0 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5300
* Learn to ROM0 Write Single Coil Триггер «Цикл 1000 мс» — Адрес 5300
* Learn to ROM1 - Write Single Coil - Триггер "Цикл 1000 мс" - Адрес 5301
* Learn to ROM1 Write Single Coil Триггер «Цикл 1000 мс» — Адрес 5301
* ROM Size - Read Holding Registers - Триггер "Цикл 1000 мс" - Адрес 5400 - Длина 2
* ROM Size Read Holding Registers Триггер «Цикл 1000 мс» — Адрес 5400 Длина 2
 
[[Image: Coil_regs_defs.png]]
[[Image: Coil_regs_defs.png]]


Строка 38: Строка 38:
После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала.
После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала.


Достоинства данного способа:
Достоинства этого способа:
* Каждому сигналу соответствует своя переменная
* Каждому сигналу соответствует своя переменная
* Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную
* Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную


Недостатки данного способа:
Недостатки этого способа:
* Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве
* Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве
* При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК
* При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК
Строка 64: Строка 64:
[[Image: Holding_regs_vars.png]]
[[Image: Holding_regs_vars.png]]


Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет воспроизводится непрерывно. Также этот канал можно добавить на чтение в отдельную переменную, которая будет сообщать текущее состояние приемопередатчика.
Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет воспроизводиться непрерывно. Также этот канал можно добавить на чтение в отдельную переменную, которая будет сообщать текущее состояние приемопередатчика.


Достоинства данного способа:
Достоинства этого способа:
* Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд
* Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд.
* Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов
* Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов.


Недостатки данного способа:
Недостатки этого способа более сложная логика работы: нужно сначала установить номер воспроизводимого сигнала в переменную, а затем установить переменную-триггер в TRUE.
* немного более сложная логика работы: нужно сначала установить номер воспроизводимого сигнала в переменную, а затем установить переменную-триггер в TRUE

Версия 20:38, 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

Coil regs defs.png

Создать переменные:

VAR_GLOBAL
	LearnToROM0	 	: BOOL;
	LearnToROM1	 	: BOOL;
	PlayFromROM0 	: BOOL;
	PlayFromROM1 	: BOOL;
	SizeROM			: ARRAY[0..1] OF WORD;
END_VAR

Связать переменные с соответствующими каналами Modbus. При этом можно использовать одну переменную для каналов воспроизведения в качестве триггера и данных.

Coil regs vars.png

После этого переменные доступны из программы. Например, для записи сигнала в ROM0 нужно переменной LearnToROM0 присвоить значение TRUE, затем подать нужный сигнал для записи и записать в переменную FALSE, завершив запись. Для воспроизведения сигнала нужно записать TRUE в переменную PlayFromROM0, при этом сигнал будет воспроизведен только 1 раз. В переменной SizeROM находится текущий размер сигнала.

Достоинства этого способа:

  • Каждому сигналу соответствует своя переменная
  • Для однократного воспроизведения сигнала нужно записать TRUE в соответствующую переменную

Недостатки этого способа:

  • Для добавления новых сигналов требует определять новые каналы в Modbus Slave устройстве
  • При большом количестве сигналов можно упереться в ограничение количества каналов на некоторых ПЛК

Работа с ИК-командами в Codesys через holding регистры

Начиная с версии прошивки 4.18.0 для работы с ИК-приемопередатчиком доступен альтернативный интерфейс.

Для работы через holding регистры требуется определить соответствующие каналы и связать их с переменными:

Holding regs defs.png

VAR_GLOBAL
	LearnCmd	 	: WORD;
	PlayCmd	 		: WORD;
	PlayTrigger		: BOOL;
	SizeROM			: ARRAY[0..1] OF WORD;
END_VAR

Holding regs vars.png

Следует помнить, что канал для воспроизведения команды нужно записывать по триггеру, а не в цикле, иначе команда будет воспроизводиться непрерывно. Также этот канал можно добавить на чтение в отдельную переменную, которая будет сообщать текущее состояние приемопередатчика.

Достоинства этого способа:

  • Через 3 holding регистра доступно редактирование, запись и воспроизведение всех ИК-команд.
  • Не нужно добавлять новые каналы в Modbus Slave при добавлении новых сигналов.

Недостатки этого способа — более сложная логика работы: нужно сначала установить номер воспроизводимого сигнала в переменную, а затем установить переменную-триггер в TRUE.