关于EtherCAT通信使用部分,在https://blog.youkuaiyun.com/lswdcyy/category_9842141.html分类中可以大体获得相关了解;
那么,已经有了Ethercat的代码了解基础后,就可以基于ehtercat提供的函数库进行二次加工,将一些自定义的PDO存储在一个从站结构中,该从站结构包括类型以及需要映射的PDO,然后使用xml文件对需要的从站类型进行定义。从而避免经常性的处理PDO。这同样也是在简化从站配置相关内容的一种处理方式,这种处理方式与linuxcnc相结合后,就是linuxcnc_ethercat处理的内容:
本章节主要针对lcec_conf进行相关解析:
lcec_conf处理的工作就是解析XML文件的配置,然后将这些配置提取到结构中。在此过程中关键在于XML的解析,可以参考https://blog.youkuaiyun.com/lswdcyy/article/details/105476653了解expat对XML解析的使用。
了解完毕expat的使用,那么继续XML的解析,首先说一下EtherCAT的XML内部节点关系:
"masters"
"master"
"slave"
"dcConf"
"watchdog"
"sdoConfig"
"sdoDataRaw"
"idnConfig"
"idnDataRaw"
"initCmds"
"syncManager"
"pdo"
"pdoEntry"
"complexEntry"
"modParam"
NULL
整体上的节点名称的关系如上,每种节点的缩略层数就是各个节点的关系,如masters为最外层节点,master是slave的外层节点...每种节点的关系在制作XML文件的时候必须是逐层递进的,不能直接由masters连接节点slave(这个关系会在解析过程中进行检测);
此外,从站可以分为两种类型,一种类型是generic类型,一种是非generic类型,对于generic类型的从站,需要手动设置sync、PDO以及PDO entry等PDO映射相关配置,而对于非generic类型从站,则不可以有以上元素,这是由于这部分内容由程序内部进行补充,0且如果在一个非generic类型从站添加了以上元素,程序会在解析XML文件关系时报警。
基于expat对XML的解析,可以将整个XML信息节点提取到一个链表中,然后将该链表信息添加到hal共享内存空间即可。
在提取XML信息到结构体中后,就可以针对已有的结构体进行解析,将结构体链表的信息提取而后进行各种主站、从站资源申请工作,并基于该信息将各个结构体进行关联,并将对一些参数进行初始化设置。
在这里主要还是对PDO映射部分进行了解,对于generic类型的从站来说,有以下几个部分需要在代码中实现:
1.需要根据XML中相关配置申请进行sync配置(用于自定义sync、PDO配置);
2.hal_data空间申请;
3.read/write回调函数实现(用于周期性读写ethercat数据);
4.对PDO_entry_reg进行内容填充(用于PDO映射);
5.创建管脚;
而对于非generic类型的从站来说,这部分由于放在程序中,也就是每个内置从站类型的初始化函数中执行,因此在需要在lcec中添加一个新的从站类型的的时候,需要另外增加一个头文件与源文件去完成这些事并进行重新编译。关于新增一类从站类型,有以下几点需要处理:
./src/lcec_conf.h对LCEC_SLAVE_TYPE_T新增一种类型
./src/lcec_conf.c对slaveTypes新增一种类型
./src/lcec_main.c对types增加一种类型,并实现相关初始化操作与之前提到的非generic类型从站需要的五点工作(需要增加一个头文件和一个源文件)。
这样,在XML配置中就可以将需要手动添加的sync部分处理到程序内部进行,而XML只需要配置从站类型即可。