倍福常见的通讯功能块(ADS,主从站等)

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通讯的手册,可以得到这两个值,找对应的厂商要。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值