Код:
IF port_opened=0
THEN
Settings.Port:=com_num;
Settings.dwBaudRate:=115200;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
IF COM_SERVICE1.ready THEN port_opened:=2; END_IF
IF port_opened=2 THEN
CASE master1 OF
0:
ModbusAdrDi11(
Enable:=enabl ,
Mode:=MB_RTU ,
DevAddr:=11 ,
FirstAddr:=51 ,
Quantity:=1,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer,
Complete=>cmpl ,
Exception=>ErrorDI11 ,
ByteCnt=>DataSize );
IF cmpl
THEN
IF ErrorDI11=0
THEN
DIWordAdr11:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
END_IF
master1:=1;
END_IF
1:
ModbusAdrDi11(
Enable:=enabl ,
Mode:=MB_RTU ,
DevAddr:=12 ,
FirstAddr:=51 ,
Quantity:=1,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer ,
Complete=>cmpl ,
Exception=>ErrorDI12 ,
ByteCnt=>DataSize );
IF cmpl
THEN
IF ErrorDI11=0
THEN
DIWordAdr12:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
END_IF
master1:=2;
END_IF
2: (*çàïèñü*)
Buffer[0]:=0;
Buffer[1]:=DOByteAdr11;
ModbusAdrDO11(
Enable:= enabl,
Mode:= MB_RTU,
DevAddr:= 11,
FirstAddr:= 50,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= TimeOut,
Buffer:= Buffer,
Complete=> cmpl,
Exception=> ErrorDO11,
RegCnt=> DataSize);
IF cmpl
THEN
master1:=3;
END_IF
3:
Buffer[0]:=0;
Buffer[1]:=DOByteAdr12;
ModbusAdrDO12(
Enable:= enabl,
Mode:= MB_RTU,
DevAddr:= 12,
FirstAddr:= 50,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= TimeOut,
Buffer:= Buffer,
Complete=> cmpl,
Exception=> ErrorDO12,
RegCnt=> DataSize);
(*åñëè óñòàíîâëåí ïðèçíàê çàâåðøåíèÿ îïåðàöèè, òî *)
IF cmpl
THEN
master1:=0;
END_IF
END_CASE
IF enabl = FALSE THEN enabl := TRUE;
END_IF
END_IF
DOByteAdr11.7:=DIWordAdr11.0;