IF port_opened=0 THEN
Settings.Port:=com_num; (*????? COM-????? RS485*)
Settings.dwBaudRate:=9600; (*????????*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=2;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*???? COM-???? ??????, ?? ????????? ? ?????? ? ???????? ?????? *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
(*
(*RCoils(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rc1 , (*????? ????????*)
Quantity:=rc2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); *) (*???-?? ????????? ?????? *)
RIRs(
Enable:=enable3 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rr1 , (*????? ????????*)
Quantity:=rr2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); ;
RT_t1(CLK:=RIRs.Complete , Q=> );
IF RT_t1.Q THEN
t24:=Buffer1[4]+Buffer1[5];
END_IF
IF RCoils.Complete THEN
v1:=1;
END_IF
WrCoil(
Enable:=enable2 ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=V2 ,
Value:=Sh_1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
WrR(
Enable:=enable4 ,
Mode:=MB_RTU ,
DevAddr:=1 ,
RegAddr:=reg1 ,
Value:=ch1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
(*RhR(
Enable:=enable5 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*?????*)
FirstAddr:=3 , (*????? ????????*)
Quantity:=1 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer2 , (* ????? ?????? *)
Complete=>cmpl , (*??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );*)
*)
IF port_opened=2 THEN
RiR(
Enable:=enable6 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rc1 , (*????? ????????*)
Quantity:=rc2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer10 , (* ????? ?????? *)
Complete=>cmpl1 , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );
(*RhR(
Enable:=enable6 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rir1 , (*????? ????????*)
Quantity:=rir2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer10 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );*)
IF cmpl1 THEN
(*t30:=RiR.Exception;*)
IF RiR.Exception=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)
(*????1*)
ptr_byte:=ADR(In_1);(**)
ptr_byte^:=buffer10[4];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[5];
(*ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[3];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[2];*)
(*
x1:=BYTE_TO_WORD(BUFFER10[3]) OR SHL(BYTE_TO_WORD(BUFFER10[2]),8);
x2:=BYTE_TO_WORD(BUFFER10[5]) OR SHL(BYTE_TO_WORD(BUFFER10[4]),8);
x3:=BYTE_TO_WORD(BUFFER10[8]) OR SHL(BYTE_TO_WORD(BUFFER10[9]),8);*)
enable6 := FALSE;
ss:=FALSE;
ELSE t14:=t14+1;
;
END_IF
END_IF
END_IF
(*
CASE state OF
0: (* ?1 *)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 02 - ?? ????????? ???????? ????????? ???? bool ?? ??????? ?? ????????? Modbus-RTU*)
RIR(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=16 , (*????? ????????*)
Quantity:=31 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)
(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
(*?????? ???????? ???????? ??????? ?????? ?????? ??? Float32 ? ??????? ?????? ?????? ??? Int16*)
(*??????? ?????????? ???????? "??????-??????" *)
state:=1;
enable:=0;
ELSE t12:=t12+1;
state:=1;
END_IF
END_IF
END_IF
1

*?????????? ????????? ?? ????? ?? ?????????? ? ??????? ?1*)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 03 ????? - ?? ????????? ???????? ????????? ???? int16 ?? ??????? ? ??????? 1 *)
RHR(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*?????*)
FirstAddr:=25 , (*????? ????????*)
Quantity:=1 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer2 , (* ????? ?????? *)
Complete=>cmpl , (*??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)
(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)
(*????1*)
ptr_byte:=ADR(In_1);(**)
ptr_byte^:=buffer1[5];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer1[4];
state:=2;
enable:=0;
ELSE t14:=t14+1;
state:=2;
END_IF
END_IF
END_IF
2

*COIL*)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 05 *)
WrCoil(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=V1 ,
Value:=Sh_1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN
state:=3;
enable:=0;
ELSE t15:=t15+1;
state:=3;
END_IF
END_IF
END_IF
3

*COIL*)
(*enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 05 *)
WrCoil(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=0 ,
Value:=Sh_2 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN
state:=3;
enable:=0;
ELSE t16:=t16+1;
state:=4;
END_IF
END_IF
END_IF*)
state:=4;
4:
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 06*)
WrR(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
RegAddr:=V2 ,
Value:=v3 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
state:=5;
enable:=0;
ELSE t17:=t17+1;
state:=0;
END_IF
END_IF
END_IF
END_CASE*)