Untitled
unknown
plain_text
3 years ago
2.0 kB
5
Indexable
FUNCTION_BLOCK Read_Temperature_Sensors
TITLE = 'Чтение датчиков температуры'
VAR_INPUT
Device_Address : INT; // Адрес устройства Modbus
Start_Address : INT; // Начальный адрес регистра
Number_Of_Registers : INT; // Количество регистров для чтения
END_VAR
VAR_OUTPUT
Temperature_1 : REAL; // Значение температуры с датчика 1
Temperature_2 : REAL; // Значение температуры с датчика 2
Temperature_3 : REAL; // Значение температуры с датчика 3
Temperature_4 : REAL; // Значение температуры с датчика 4
Error : BOOL; // Флаг ошибки
END_VAR
VAR
Modbus_Client : MODBUS_CLIENT; // Клиент Modbus
Data_Buffer : ARRAY[0..255] OF BYTE; // Буфер для данных
Temperature_Buffer : ARRAY[1..8] OF WORD; // Буфер для температурных значений
END_VAR
// Инициализация клиента Modbus
Modbus_Client := MODBUS_CLIENT(Device_Address, MODBUS_TCP);
// Чтение данных с устройства
Error := NOT Modbus_Client.ReadHoldingRegisters(Start_Address, Number_Of_Registers, Data_Buffer);
// Если произошла ошибка, выход из функции
IF Error THEN
RETURN;
END_IF
// Конвертация байтов в температуры
FOR i := 1 TO 4 DO
Temperature_Buffer[i] := WORD_TO_UINT(Data_Buffer[2 * (i - 1)] + Data_Buffer[2 * (i - 1) + 1] * 256);
END_FOR
// Преобразование температурных значений в градусы Цельсия
Temperature_1 := INT_TO_REAL(Temperature_Buffer[1]) / 10;
Temperature_2 := INT_TO_REAL(Temperature_Buffer[2]) / 10;
Temperature_3 := INT_TO_REAL(Temperature_Buffer[3]) / 10;
Temperature_4 := INT_TO_REAL(Temperature_Buffer[4]) / 10;
Editor is loading...