Вопрос: в проекте настроен опрос других устройств по протоколу Modbus через стандартные компоненты. Считываются целочисленные значение, и согласно документации их нужно домножить на 0.01, чтобы получить "настоящее" значение в формате REAL. Можно ли это выполнить это масшабирование на уровне настройки компонентов Modbus?
Ответ:
1. Необходимо создать ФБ для конвертации данных. В рамках примера он будет называться CONVERT.
Перед объявлением ФБ необходимо указать атрибут io_function_block, а перед объявлением его переменной, которая будет привязываться к компоненту Modbus - io_function_block_mapping.
2. В компоненте Modbus на вкладке Соотнесение входов/выходов выберите нужный канал (нужно выделить конкретный регистр - тип WORD)Код:{attribute 'io_function_block'} FUNCTION_BLOCK CONVERT VAR_INPUT {attribute 'io_function_block_mapping'} wInput: WORD; END_VAR VAR_OUTPUT rOutput: REAL; END_VAR VAR END_VAR rOutput := wInput * 0.01;
и нажмите кнопку Добавить ФБ для IO-канала.
2021-08-30_12-51-42.png
В выпадающем окне нужно выбрать ФБ CONVERT.
2021-08-30_12-51-54.png
В результате в столбце Соотнесение отобразится соответствующая пиктограмма, а в столбце Переменная будет автоматически сформирован путь к неявно объявленному экземпляру ФБ.
2021-08-30_12-52-10.png
3. С помощью этого пути можно обратиться к выходной переменной ФБ в коде программы (убрав из пути узел Application):
2021-08-30_12-55-31.pngКод:PROGRAM PLC_PRG VAR rValue1: REAL; rValue2: REAL; END_VAR rValue1 := Modbus_Slave_COM_Port_CONVERT.rOutput; rValue2 := Modbus_Slave_COM_Port_CONVERT_1.rOutput;




