FUNCTION_BLOCK FB_MeteorologyIn
VAR_IN_OUT CONSTANT
DAct : ST_TurbineActual;
IIn : ST_MeteorologyInput;
END_VAR
VAR_IN_OUT
DIn : ST_MeteorologyInbox;
DOut : ST_MeteorologyOutbox;
END_VAR
VAR
nSta : BYTE := 0;
nStaLast : BYTE := 0;
tonTmOu : TON;
arrDat : ARRAY[0..31] OF BYTE;
nDev : BYTE := 2;
j : BYTE;
bRcvFsh : BOOL;
tonRcvFsh : TON;
fbModbusMetTid: ModbusRtuMaster_KL6x22B;
iStep: INT:=0;
iCount: INT;
arrMetTidMb:ARRAY[0..7] OF INT;
arrMetTidMb2X:ARRAY[0..7] OF INT;
iCount1: INT;
iCount2: INT;
fMetTidTmp: LREAL;
fMetTidSpdInst: LREAL;
fMetTidTmp2: LREAL;
fMetTidSpdInst2: LREAL;
END_VAR
程序具体
DIn.bVld := TRUE;
CASE iStep OF
0:
fbModbusMetTid.ReadRegs(Execute:=FALSE );
iStep:=10;
10:
fbModbusMetTid.ReadRegs(
UnitID:=1 ,
Quantity:=8 ,
MBAddr:=10 ,
cbLength:=SIZEOF(arrMetTidMb) ,
pMemoryAddr:=ADR(arrMetTidMb) ,
Execute:=TRUE ,
Timeout:=T#60S ,
BUSY=> ,
Error=> ,
ErrorId=> ,
cbRead=> );
IF NOT fbModbusMetTid.Busy THEN
iStep:=50;
END_IF
50:
fbModbusMetTid.ReadRegs(Execute:=FALSE );
iStep:=100;
100:
fbModbusMetTid.ReadRegs(
UnitID:=2 ,
Quantity:=8 ,
MBAddr:=10 ,
cbLength:=SIZEOF(arrMetTidMb2X) ,
pMemoryAddr:=ADR(arrMetTidMb2X) ,
Execute:=TRUE ,
Timeout:=T#60S ,
BUSY=> ,
Error=> ,
ErrorId=> ,
cbRead=> );
IF NOT fbModbusMetTid.Busy THEN
iStep:=150;
END_IF
150:
fbModbusMetTid.ReadRegs(Execute:=FALSE );
iStep:=0;
END_CASE;
fMetTidTmp:=F_TcWIEEE745(nIn_1:=arrMetTidMb[0] , nIn_2:=arrMetTidMb[1] );
fMetTidSpdInst:=F_TcWIEEE745(nIn_1:=arrMetTidMb[2] , nIn_2:=arrMetTidMb[3] );
//2 is xiushan
fMetTidTmp2:=F_TcWIEEE745(nIn_1:=arrMetTidMb2X[0] , nIn_2:=arrMetTidMb2X[1] );
fMetTidSpdInst2:=F_TcWIEEE745(nIn_1:=arrMetTidMb2X[2] , nIn_2:=arrMetTidMb2X[3] );
DIn.bTidFlwDirFng := IIn.I_MetTidFlwDirFng;
DIn.bTidFlwDirRsg := IIn.I_MetTidFlwDirRsg;
IF fMetTidSpdInst>0.1 AND fMetTidSpdInst2<-0.1 THEN
DIn.bfngTid_formFlwMet:=FALSE;
Din.bRsgTid_formFlwMet:=TRUE;
DIn.fTidSpdNew:=LREAL_TO_REAL(fMetTidSpdInst)*P_TurTidSpdFactor.Value;
DIn.fTidDir := 183.0;
ELSIF fMetTidSpdInst<-0.1 AND fMetTidSpdInst2>0.1 THEN
DIn.bfngTid_formFlwMet:=TRUE;
Din.bRsgTid_formFlwMet:=FALSE;
DIn.fTidSpdNew:=LREAL_TO_REAL(fMetTidSpdInst2)*P_TurTidSpdFactor.Value;
DIn.fTidDir := 3.0;
END_IF

本文详细记录了如何通过TwinCAT自动化软件,配置并实现Beckhoff模块EL6021与ModbusRTU协议的通信程序,探讨了ADS技术在过程中的作用。


被折叠的 条评论
为什么被折叠?



