Untitled
unknown
plain_text
2 years ago
2.0 kB
3
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...