Код:
// [1] настраиваем COM-port
Settings_COM3.sPort := 3;
Settings_COM3.byStopBits := 1;
Settings_COM3.byParity := 0;
Settings_COM3.ulBaudrate := 115200;
Settings_COM3.ulTimeout := 0;
Settings_COM3.ulBufferSize := 0;
SettingsEX_COM3.byByteSize := 8;
// [2] открываем COM-port
COM_Service_Com3
(
Enable := TRUE,
Settings := Settings_COM3,
Sets_EX := SettingsEX_COM3,
Task := ComService.OPEN_TSK
);
// [3] запускаем ФБ опроса модуля МВ110-8А
MV110_8A
(
Enable := COM_Service_Com3.Ready,
Mode := ModBus.MB_RTU,
DevAddr := 1,
FirstAddr := 16#100,
Quantity := 1,
ComHandle := COM_Service_Com3.Handle,
TimeOut := T#45MS,
Buffer := abyBuffer,
);
// [4] если ФБ опроса модуля завершил работу
IF MV110_8A.Complete THEN
IF MV110_8A.Exception =0 THEN
// байты 0 и 1 содержат статус измерения входа 1
// склеиваем их в WORD и декодируем в текстовое сообщение
wMV110_8A_input1_status := BYTE_TO_WORD(abyMV110_8A_data[1]) OR SHL(BYTE_TO_WORD(abyMV110_8A_data[0]), 8);
wsMV110_8A_input1_status := Mx110Assistant.MvStatusToWstring(wMV110_8A_input1_status);
// байты 4-7 содержат значение на входе 1 с плавающей точкой.
// переставляем байты местами и преобразуем в REAL
_2WORD_TO_REAL.abyBytes[3] := abyMV110_8A_data[4];
_2WORD_TO_REAL.abyBytes[2] := abyMV110_8A_data[5];
_2WORD_TO_REAL.abyBytes[1] := abyMV110_8A_data[6];
_2WORD_TO_REAL.abyBytes[0] := abyMV110_8A_data[7];
rMV110_8A_input1 := _2WORD_TO_REAL.rReal;
END_IF
// завершаем опрос модуля МВ110-8А
MV110_8A(Enable := FALSE, Buffer := abyBuffer);
END_IF