1.查找ADS设备的端口号等信息的方法
详见倍福虚拟学院(ADS通讯)
注意:添加路由。
2.ADS通讯的公用的输入标识
NETID:用于确定设备硬件
PORT :端口号,用于确定软件服务常见的端口及说明如下所示:(PLC一般是801)
3.ADSWRITE和ADSREAD功能块:
IDXGRP和IDXOFFS的查找方法在1中已经标出。
1)与PLC之间通信时(读)
先将传送的数据定义成输出类型数据。例如:
iDataToPlc1 AT %MB100 :WORD;
这时候,MB100换算成16进制,为16#64,下面会用到;
当其他PLC读取这个PLC发送的数据时,过程如下。
先定义普通的WORD类型(和发送方的数据类型一致,上面的是WORD,所以也是WORD)
DataFromPlc :WORD;
然后使用ADSREAD读取,如下(注意:IDXGRP为16#4020,IDXOFFS就是上面定义的%MB100)
FB_Ads1(
NETID:= '192.168.0.1.1.1',
PORT:= 851,
IDXGRP:=16#4020 ,
IDXOFFS:=16#64 ,
LEN:=SIZEOF(DataFromPlc),
DESTADDR:=ADR(DataFromPlc),
READ:=ton20ms1.Q,
TMOUT:=T#1S,
BUSY=> ,
ERR=> ,
ERRID=> );
自此,所有的数据由PLC的iDataToPlc1传送到PLC1的DataFromPlc变量中。
2)和其他模块通信。(写)
比如我要写轴的软限位,我现在MOTION中找出来IDXGRP和IDXOFFS。然后写代码
WriteAdsPara(NetId:= '' , Port:=501, IdxGrp:=16#40001, IdxOffs:=16#1000E,
LEN:=SIZEOF(LSetLimitPot),
SrcAddr:=ADR(LSetLimitPot), Write := TRUE, TmOut:=T#2S );
4.FB_EcGetMasterState主站状态读取
sNetId:主站表识
state:主站状态(op,init等)
5.FB_EcGetConfSlaves获取工程配置的从站信息
定义:
sConfSlaves : ARRAY[0..iMax_Salve_Number] OF ST_EcSlaveConfigData;
fbEcGetConfSlaves : FB_EcGetConfSlaves;
代码:
IF bStateReadSlaveNumber THEN
fbEcGetConfSlaves(
sNetId := aNetID,
bExecute := FALSE,
pArrEcConfSlaveInfo := ADR(sConfSlaves),
cbBufLen := SIZEOF(sConfSlaves),
tTimeout := T#5000MS,
bBusy=> ,
bError=> ,
nErrorId=> ,
nSlaves=>
);
其中:sConfSlaves是一个ST_EcSlaveConfigData类型数组
nSlaves就是工程配置中的从站数目,一般我们用这个值和实际的做对比
6.FB_EcGetAllSlaveStates实际所有从站状态读取
定义:
fbEcGetAllSlaveStates : FB_EcGetAllSlaveStates;
sEcSlaveState : ARRAY[0..iMax_Salve_Number] OF ST_EcSlaveState;
代码:
fbEcGetAllSlaveStates(sNetId := aNetID,
pStateBuf:=ADR(sEcSlaveState),
cbBufLen:=SIZEOF(sEcSlaveState),
bExecute:=FALSE,
tTimeout:=tTMOUT,
bBusy=> ,
bError=> ,
nErrId=> ,
nSlaves=> );
其中:sEcSlaveState是一个ST_EcSlaveState类型数组,主要有以下数据:
deviceState :从站状态
linkState :从站连接状态
nSlaves就是实际的从站数目,一般我们用这个值和配置的做对比
7.IOF_GetDeviceInfoByName根据设备名称索引设备的DeviceID(不常用)
定义:
fbGetDeviceID : IOF_GetDeviceInfoByName;
代码:
fbGetDeviceID(
NETID:= ,
DEVICENAME:= ,
START:= ,
TMOUT:= ,
BUSY=> ,
ERR=> ,
ERRID=> ,
DEVICEID=> ,
DEVICENETID=> );
NETID:可以在此处输入要执行该函数的 TwinCAT 计算机的 AmsNetId(键入:T_AmsNetID)。如果要在本地计算机上运行,则可以输入空字符串。
8.IOF_GetDeviceNetId根据DeviceID获取设备的net ID,与IOF_GetDeviceInfoByName配合(不常用)
定义:
fbGetDeviceNetID : IOF_GetDeviceNetId;
代码:
fbGetDeviceNetID(
NETID:= ,
DEVICEID:= ,
START:= ,
TMOUT:= ,
BUSY=> ,
ERR=> ,
ERRID=> ,
DeviceNetId=> );
NETID:可以在此处输入要执行该函数的 TwinCAT 计算机的 AmsNetId(键入:T_AmsNetID)。如果要在本地计算机上运行,则可以输入空字符串。
DeviceID:IOF_GetDeviceInfoByName得到的或者自己获取的
9.FB_EcSetSlaveState(ETHERCAT从站状态设置)
使用此功能块,可以从站设置为指定的EtherCAT状态。请求的 EtherCAT 状态通过 reqState 变量进行传输。功能块发送命令以更改状态,并且与功能块FB_EcRegSlaveState不同,该命令块保持活动状态,直到EtherCAT从站达到新状态或超过tTimeout的最长时间。当前状态在 currState 变量中输出。
10.FB_EcCoeSdoRead读取COE的值
1)nSlaveAddr:如下图的位置:
而且在AdsAddr中的port这个值也是,并且可以链接
2)nSubIndex和nIndex:
查对应Ethercat通讯的手册,可以得到这两个值,找对应的厂商要。