PROGRAM MBSerialComms
VAR
get1_modbus: MB_RD_HOLD_REGS;
abyBuffer: ARRAY[0..255] OF BYTE;
xCmpl: BOOL;
byPort_opened: BYTE := 0;
xInit: BOOL;
Settings:COMSETTINGS;
Com_num: PORTS := 0;
xEnabl: BOOL;
iErr: INT;
tTimeOut: TIME:=T#50ms;
byException: BYTE;
wDataSize: WORD;
COM_SERVICE1: COM_SERVICE;
END_VAR
IF byPort_opened = 0 THEN
Settings.Port := com_num;
Settings.dwBaudRate := 57600;
Settings.byParity := 0;
Settings.dwTimeout := 0;
Settings.byStopBits := 0;
Settings.dwBufferSize := 0;
Settings.dwScan := 0;
END_IF;
COM_SERVICE1(Enable := (byPort_opened = 0) , Settings := Settings , Task := OPEN_TSK);
IF COM_SERVICE1.ready THEN
byPort_opened := 2;
END_IF;
IF byPort_opened = 2 THEN
get1_modbus(
Enable := xEnabl ,
Mode := MB_RTU ,
DevAddr := 2 ,
FirstAddr := 61 ,
Quantity := 1,
ComHandle := Settings.Port ,
TimeOut := tTimeOut ,
Buffer := abyBuffer ,
Complete => xCmpl ,
Exception => iErr ,
ByteCnt => wDataSize );
IF xCmpl THEN
IF iErr=0 THEN
wMI_ADC_IN := BYTE_TO_WORD(abyBUFFER[1]) OR SHL(BYTE_TO_WORD(abyBUFFER[0]),8);
END_IF;
END_IF;
(* IF NOT xEnabl THEN
xEnabl := TRUE;
END_IF; *)
IF iErr <> 0 THEN
xEnabl := FALSE;
END_IF;
END_IF;