PROGRAM PLC_PRG
VAR
RHR: MB_RD_HOLD_REGS; (*ôóíêöèÿ 03 - ÷òåíèå ïàðàìåòð&# 224; òèïà INT*)
RIR:MB_RD_INPUTS; (*ôóíêöèÿ 02 - ÷òåíèå ñòàòóñà äèñêð âõ.*)
RCoils:MB_RD_COILS;
WrR: MB_WR_SNG_REG; (*ôóíêöèÿ 6 - çàïèñü åäåíè÷íî&# 227;î ðåãèñòðà ;*)
WrCoil: MB_WR_SNG_COIL; (*ôóíêöèÿ 5 - çàïèñü åäåíè÷íî&# 227;î äèñêð âõ. áèòà*)
RIRs:MB_RD_INP_REGS;
Buffer1: ARRAY[0..255] OF BYTE; (* áàéòîâûé ; áóôåð äàííûõ *)
Buffer2: ARRAY[0..255] OF BYTE; (* áàéòîâûé ; áóôåð äàííûõ *)
Buffer3: ARRAY[0..255] OF BYTE; (* áàéòîâûé ; áóôåð äàííûõ *)
Buffer4: ARRAY[0..255] OF BYTE; (* áàéòîâûé ; áóôåð äàííûõ *)
cmpl: BOOL; (*ïðèçíàê çàâåðøåí&# 237;îñòè ðàáîòû ôóíêöèè*)
port_opened: BYTE := 0; (*ðåçóëüòà ò îòêðûòèÿ ; ïîðòà*)
Settings:COMSETTINGS; (* íàñòðîéê&# 232; ïîñëåäîâ&# 224;òåëüíîã 8; ïîðòà *)
com_num: PORTS:=0; (*0 - 485-1
1 - 232 - COM1
2 - 485-2 - COM2
4 - DBGU - COM4 *)
enable: BOOL; (*ñîñòîÿíè å ðàáîòû áëîêà*)
err: INT; (*íîìåð îøèáêè*)
TimeOut: TIME:=T#500ms; (*òàéìàóò*)
DataSize: WORD; (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)
ptr_byte:POINTER TO BYTE; (*óêàçàòåë ü íà òèï byte*)
COM_SERVICE1: COM_SERVICE;
state: WORD := 0; (*ñîñòîÿíè å*)
(*ñ÷èòàííî å çíà÷åíèå ;*)
status2:WORD;
real2: REAL;
real3: REAL;
status3: WORD;
real4: REAL;
status4: WORD;
real5: REAL;
status5: WORD;
real6: REAL;
status6: WORD;
real7: REAL;
status7: WORD;
real8: REAL;
status8: WORD;
wrd1: WORD:=1;
wrd_rele_0:WORD:=0;
t21: WORD := 0; (* *)
t12: WORD; (* *)
t14: WORD; (* *)
t15: WORD; (* *)
t17: WORD; (* *)
t16: WORD; (* *)
t18: WORD; (* *)
t19: WORD; (* *)
t20: WORD; (* *)
t25: WORD; (* *)
t13: WORD := 0;(* *)
t22: WORD; (* *)
t22_2: WORD := 0; (* *)
t24: WORD := 0; (* *)
t24_2: WORD := 0; (* *)
wrd_out_tok: WORD := 0;
t30: WORD;
count_err_30: WORD;
RT_t1:R_TRIG;
In_1: WORD;
Sh_1:BOOL;
Sh_2:BOOL;
Sh_3:BOOL;
Sh_4:BOOL;
V1:WORD;
V2:WORD;
V3:WORD;
enable2: BOOL;
enable3: BOOL;
enable4: BOOL;
enable5: BOOL;
ch1: WORD;
reg1: WORD;
rc1: WORD;
rc2: WORD;
rr1: WORD;
rr2: BYTE;
END_VAR
+++++++++++++++++++++++++++++++++++++++++++++++++
IF port_opened=0 THEN
Settings.Port:=com_num; (*????? COM-????? RS485*)
Settings.dwBaudRate:=9600; (*????????*)
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 );
(*???? 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 );