EtherCat通信从站设备数据访问方法
从站设备的数据主要有对象字典数据与及从站内存数据。样例程序工程中带有的EtherCAT从站设备为一个ECT远程模块和两个伺服模块,如下图所示。

1、对象字典的访问方法
1)读取对象字典
读EtherCAT从站对象字典的功能块有ETC_CO_SdoRead、ETC_CO_SdoRead4、ETC_CO_SdoReadDWord、ETC_CO_SdoRead_Access四个功能块,这四个功能块的区别如下:
ETC_CO_SdoRead可以按字节个数读取对象字典的值且可以读取大于4个字节的对象字典;
ETC_CO_SdoRead4只能读取不大于 4 字节的对象字典;
ETC_CO_SdoReadDWord读取的对象字典的值转化为DWORD数据类型;
ETC_CO_SdoRead_Access可以一次读取一个对象字典索引的所有子索引的值。
(1)ETC_CO_SdoRead的使用方法

功能块示意图
关键参数说明
输入 | xExecute | 上升沿执行 |
---|
| xAbort | 如果此参数为‘TRUE’,当前读取过程将被终止。 |
| usiCom | EtherCAT主站个数:如果仅使用一个EtherCAT主站,usiCom为‘1’。使用多个主站时,第一个主站为‘1’,第二个为‘2’,依次类推。 |
| uiDevice | 从站的物理地址。 |
| usiChannel | 为将来扩展保留的,当前未使用。 |
| wIndex | 对象字典中的参数索引。 |
| bySubIndex | 对象字典中的参数子索引。 |
| udiTimeout | 超时时间(以毫秒为单位)。如果在这时间内, 读取参数没有被执行,将提示一个错误信息。 |
| pBuffer | 数据缓冲区的指针,数据缓冲区即参数成功传递后数据的存储区域。 |
| szSize | 数据缓冲区(见上:pBuffer)的大小,以字节表示。 |
输出 | xDone | 参数读取成功标志 |
| xBusy | 参数读取中标志 |
| xError | 读取出错标志 |
| udiSdoAbort | 当设备检查出错 |
| szDataRead | 读取字节的数目;最大的szSize(参见输入参数)。 |
样例程序目的:读取第二个从站索引为16#6041的对象字典的值。
步骤一:定义存储区域

步骤二:编写功能块程序
从站地址

功能块读取参数的值

(2)ETC_CO_SdoRead4的使用方法
样例程序目的:读取第三个从站索引号为16#1A00:1(16#1A00第一个子索引)对象字典的值,ETC_CO_SdoRead4功能块参数设置与程序如下:

在线CoE读取的值

在线COE读取的值

(3)ETC_CO_SdoReadDWord的使用方法
样例程序目的:读取第二个从站16#6041对象字典的值,程序如下:

在线CoE读取的值

(4)ETC_CO_SdoRead_Access的使用方法(注意:伺服不支持CompleteAccess访问模式,另外子索引为0占用2个字节)
样例程序目的:读取第一个从站索引号为16#F000所有子索引的对象字典的值。
在这里需要将bySubindex=0且xCompleteAccess=True;当xCompleteAccess=False时,该功能块与ETC_CO_SdoRead无异。

在线CoE读取的值:

2)写对象字典的值
写对象字典的功能块也有四个,包括ETC_CO_SdoWrite、ETC_CO_SdoWrite4、ETC_CO_SdoWriteDWord、ETC_CO_SdoWrite_Access,其区别与读对象字典的功能块类似。
样例程序目的:用ETC_CO_SdoWriteDWord功能块写第二个从站16#6060对象字典的值为10。
写入前16#6060对象字典的值:

执行功能块

写入后16#6060对象字典前的值:

2、从站内存访问方法
1)读从站内存的方法
3S提供ReadMemory功能块用于读取从站内存的值。例如,根据倍福硬件手册的描述,从站内存地址16#0000存储的是从站控制器的类型,如下图所示。

样例程序目的:读取第一个从站内存16#0000寄存器的值

通过上面的功能块读取的第一个从站内存16#0000的值为16#11,表示该从站使用的控制器类型为ET1100芯片。
2)写从站内存的方法
3S提供WriteMemory功能块用于写入从站内存的值。例如,根据倍福硬件手册的描述,从站内存地址16#0120用于控制从站的状态转换,如下图所示。

样例程序目的:通过执行功能块写入从站内存地址16#0120的值进行EtherCAT从站状态机的转换。
第一个从站状态机的控制过程

