|
邀请回答
马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 
x
内部变量:
计步缓存 UINT
EC_CoESDORead4DA_0 EC_CoESDORead
EC_CoESDOWrite_0 EC_CoESDOWrite
ReadDate_0 UINT
EC_CoESDOReadExecute_0 BOOL
SdoObject_0 _sSDO_ACCESS
EC_CoESDOReadDone_0 BOOL
EC_CoESDOReadBusy_0 BOOL
EC_CoESDOReadError_0 BOOL
EC_CoESDReadErrorID_0 WORD
EC_CoESDOWriteExecute_0 BOOL
WriteDate_0 UINT
EC_CoESDOWriteDone_0 BOOL
EC_CoESDOWriteBusy_0 BOOL
EC_CoESDOWriteError_0 BOOL
EC_CoESDOWriteErrorID_0 WORD
SDO_SY_0 UINT
SDO_ZSY_0 USINT
EC_CoESDORead4DA_1 EC_CoESDORead
EC_CoESDOWrite_1 EC_CoESDOWrite
ReadDate_1 UDINT
EC_CoESDOReadExecute_1 BOOL
SdoObject_1 _sSDO_ACCESS
EC_CoESDOReadDone_1 BOOL
EC_CoESDOReadBusy_1 BOOL
EC_CoESDOReadError_1 BOOL
EC_CoESDReadErrorID_1 WORD
EC_CoESDOWriteExecute_1 BOOL
WriteDate_1 UDINT
EC_CoESDOWriteDone_1 BOOL
EC_CoESDOWriteBusy_1 BOOL
EC_CoESDOWriteError_1 BOOL
EC_CoESDOWriteErrorID_1 WORD
SDO_SY_1 UINT
SDO_ZSY_1 USINT
nstate UINT
RTRIG_0 R_TRIG
RTRIG_1 R_TRIG
DA4_MCTM_0 UDINT
DA4_MCTM_1 UDINT
DA4_MCTM_2 UDINT
DA4_MCTM_3 UDINT
DA4_MCTM_ALL UDINT
FTRIG_10 F_TRIG
EC_CoESDOReadExecute_2 BOOL
EC_CoESDOWriteExecute_2 BOOL
启动延时 Ton
输入输出变量:
节点号 输入 UINT
模块位置 输入 UINT
Enable 输入 BOOL
CH0转换方式 输入 UDINT
CH0通道使能 输入 BOOL
CH1转换方式 输入 UDINT
CH1通道使能 输入 BOOL
CH2转换方式 输入 UDINT
CH2通道使能 输入 BOOL
CH3转换方式 输入 UDINT
CH3通道使能 输入 BOOL
RESET 输入 BOOL
模式设定完成 输出 BOOL
模式设置值错误 输出 BOOL
ERROR 输出 BOOL
程序:
//SDO定义#16
EC_CoESDORead4DA_0(
Execute:=EC_CoESDOReadExecute_0,
NodeAdr:=节点号,
SdoObj:=SdoObject_0,
TimeOut:=10,
ReadDat:=ReadDate_0,
Done=>EC_CoESDOReadDone_0,
Busy=>EC_CoESDOReadBusy_0,
Error=>EC_CoESDOReadError_0,
ErrorID=>EC_CoESDReadErrorID_0
);
EC_CoESDOWrite_0(
Execute:=EC_CoESDOWriteExecute_0,
NodeAdr:=节点号,
SdoObj:=SdoObject_0,
TimeOut:=10,
WriteDat:=WriteDate_0,
WriteSize:=2,
Done=>EC_CoESDOWriteDone_0,
Busy=>EC_CoESDOWriteBusy_0,
Error=>EC_CoESDOWriteError_0,
ErrorID=>EC_CoESDOWriteErrorID_0
);
SdoObject_0.Index:=SDO_SY_0;
SdoObject_0.Subindex:=SDO_ZSY_0;
SdoObject_0.IsCompleteAccess:=FALSE;
//SDO定义#32
EC_CoESDORead4DA_1(
Execute:=EC_CoESDOReadExecute_1,
NodeAdr:=节点号,
SdoObj:=SdoObject_1,
TimeOut:=10,
ReadDat:=ReadDate_1,
Done=>EC_CoESDOReadDone_1,
Busy=>EC_CoESDOReadBusy_1,
Error=>EC_CoESDOReadError_1,
ErrorID=>EC_CoESDReadErrorID_1
);
EC_CoESDOWrite_1(
Execute:=EC_CoESDOWriteExecute_1,
NodeAdr:=节点号,
SdoObj:=SdoObject_1,
TimeOut:=10,
WriteDat:=WriteDate_1,
WriteSize:=4,
Done=>EC_CoESDOWriteDone_1,
Busy=>EC_CoESDOWriteBusy_1,
Error=>EC_CoESDOWriteError_1,
ErrorID=>EC_CoESDOWriteErrorID_1
);
SdoObject_1.Index:=SDO_SY_1;
SdoObject_1.Subindex:=SDO_ZSY_1;
SdoObject_1.IsCompleteAccess:=FALSE;
//参数保护
IF 节点号=0 OR (模块位置<1 OR 模块位置>16) OR CH0转换方式>6 OR CH1转换方式>6 OR CH2转换方式>6 OR CH3转换方式>6 THEN
模式设置值错误:=1;
ELSE
模式设置值错误:=0;
END_IF;
//参数比较校正以及写入
启动延时(In:= _EC_MBXSlavTbl[节点号],PT:=T#1s);
CASE nstate OF
0:
RTRIG_0(Clk:=(Enable AND 启动延时.Q));
IF RTRIG_0.Q AND NOT 模式设置值错误 THEN
nstate:=10;
DA4_MCTM_0:=0;
模式设定完成:=0;
END_IF;
10://参数比较
DA4_MCTM_0:=CH0转换方式;
DA4_MCTM_1:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH1转换方式),N:=ULINT#8));
DA4_MCTM_2:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH2转换方式),N:=ULINT#16));
DA4_MCTM_3:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH3转换方式),N:=ULINT#24));
DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_0) OR UDINT_TO_DWORD(DA4_MCTM_1)
OR UDINT_TO_DWORD(DA4_MCTM_2) OR UDINT_TO_DWORD(DA4_MCTM_3));
IF CH0通道使能 THEN
DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#80);
END_IF;
IF CH1通道使能 THEN
DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#8000);
END_IF;
IF CH2通道使能 THEN
DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#800000);
END_IF;
IF CH3通道使能 THEN
DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#80000000);
END_IF;
nstate:=20;
20://ECTA模块断使能
SDO_SY_0:=16#FB00;
SDO_ZSY_0:=16#0;
EC_CoESDOWriteExecute_0:=0;
WriteDate_0:=1;
nstate:=30;
30:
EC_CoESDOWriteExecute_0:=1;
IF EC_CoESDOWriteDone_0 THEN
EC_CoESDOWriteExecute_0:=0;
nstate:=40;
ELSIF EC_CoESDOWriteError_0 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
40:
EC_CoESDOReadExecute_0:=1;
IF EC_CoESDOReadDone_0 THEN
IF ReadDate_0=1 THEN
EC_CoESDOReadExecute_0:=0;
nstate:=50;
ELSE
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
ELSIF EC_CoESDOReadError_0 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
50://停机完毕后参数写入
SDO_SY_1:=16#8005+(模块位置-1)*16#100;
SDO_ZSY_1:=16#1;
EC_CoESDOWriteExecute_1:=0;
WriteDate_1:=DA4_MCTM_ALL;
nstate:=60;
60:
EC_CoESDOWriteExecute_1:=1;
IF EC_CoESDOWriteDone_1 THEN
EC_CoESDOWriteExecute_1:=0;
nstate:=70;
ELSIF EC_CoESDOWriteError_1 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
70:
EC_CoESDOReadExecute_1:=1;
IF EC_CoESDOReadDone_1 THEN
IF ReadDate_1=WriteDate_1 THEN
EC_CoESDOReadExecute_1:=0;
nstate:=80;
ELSE
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
ELSIF EC_CoESDOReadError_1 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
80://写入完成后重新启动模块
SDO_SY_0:=16#FB00;
SDO_ZSY_0:=16#0;
EC_CoESDOWriteExecute_0:=0;
WriteDate_0:=0;
nstate:=90;
90:
EC_CoESDOWriteExecute_0:=1;
IF EC_CoESDOWriteDone_0 THEN
EC_CoESDOWriteExecute_0:=0;
nstate:=100;
ELSIF EC_CoESDOWriteError_0 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
100:
EC_CoESDOReadExecute_0:=1;
IF EC_CoESDOReadDone_0 THEN
IF ReadDate_0=0 THEN
EC_CoESDOReadExecute_0:=0;
EC_CoESDOWriteExecute_0:=0;
nstate:=0;
模式设定完成:=1;
ELSE
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
ELSIF EC_CoESDOReadError_0 THEN
ERROR:=1;计步缓存:=nstate;
nstate:=1001;
END_IF;
END_CASE;
//故障复位
RTRIG_1(Clk:=RESET);
IF RTRIG_1.Q THEN
nstate:=0;
ERROR:=0;
模式设置值错误:=0;
模式设定完成:=0;
WriteDate_0:=0;
WriteDate_1:=0;
ReadDate_0:=0;
ReadDate_1:=0;
EC_CoESDOReadExecute_0:=0;
EC_CoESDOWriteExecute_0:=0;
EC_CoESDOReadExecute_1:=0;
EC_CoESDOWriteExecute_1:=0;
EC_CoESDOReadExecute_2:=0;
EC_CoESDOWriteExecute_2:=0;
END_IF;
FTRIG_10(Clk:=Enable);
IF FTRIG_10.Q THEN
nstate:=0;
ERROR:=0;
模式设置值错误:=0;
模式设定完成:=0;
WriteDate_0:=0;
WriteDate_1:=0;
ReadDate_0:=0;
ReadDate_1:=0;
EC_CoESDOReadExecute_0:=0;
EC_CoESDOWriteExecute_0:=0;
EC_CoESDOReadExecute_1:=0;
EC_CoESDOWriteExecute_1:=0;
EC_CoESDOReadExecute_2:=0;
EC_CoESDOWriteExecute_2:=0;
END_IF;
|
上一篇: 欧姆龙+汇川耦合器+4AD下一篇: 关于扩展模块接线问题
|