ethercat的linuxcnc解析器-关于lcec_conf和lcec.so
关于EtherCAT通信使用部分,在https://blog.csdn.net/lswdcyy/category_9842141.html分类中可以大体获得相关了解;
那么,已经有了Ethercat的代码了解基础后,就可以基于ehtercat提供的函数库进行二次加工,将一些自定义的PDO存储在一个从站结构中,该从站结构包括类型以及需要映射的PDO,然后使用xml文件对需要的从站类型进行定义。从而避免经常性的处理PDO。这同样也是在简化从站配置相关内容的一种处理方式,这种处理方式与linuxcnc相结合后,就是linuxcnc_ethercat处理的内容:
本章节主要针对lcec_conf进行相关解析:
lcec_conf处理的工作就是解析XML文件的配置,然后将这些配置提取到结构中。在此过程中关键在于XML的解析,可以参考https://blog.csdn.net/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只需要配置从站类型即可。
ethercat的linuxcnc解析器-关于lcec_conf和lcec.so相关推荐
- LeetCode简单题之设计 Goal 解析器
题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...
- CSS 选择器:BeautifulSoup4解析器
和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基 ...
- php codeigniter 语言,php – codeigniter模板引擎,包括语言解析器
不幸的是,CI内置的模板解析器类没有此功能.你可以在 sparks directory中环顾四周,有多个火花集成了许多模板引擎,如smarty或twig,可以通过调整来创建这样的东西. 此外,您可以尝 ...
- rest-framework之解析器
rest-framework之解析器 本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析 ...
- 【C++】clipp 一个命令行参数解析器
1.简介 clipp是一个使用方便.功能强大的命令行解析器,源码只有一个头文件<clipp.h> github地址:https://github.com/muellan/clipp 2.使 ...
- Android XML pull 解析器
Android 并未提供对 Java StAX API 的支持.但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX.它允许您的应用程序代码从解析器中获取事件,这与 SA ...
- 用PULL解析器解析XML文件
第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...
- 使用 SAX 解析器简化文档处理程序的编写
http://www-900.ibm.com/developerWorks/cn/xml/x-dochan.shtml 有时候 SAX 文档处理程序的代码可能变得非常麻烦.结构性差而且难以维护,尤其是 ...
- Python之父发文,将重构现有核心解析器
原题 | PEG Parsers 作者 | Guido van Rossum 译者 | 豌豆花下猫 转载自 Python猫(ID: python_cat) 导语:Guido van Rossum 是 ...
最新文章
- 2021年中国工业互联网安全大赛核能行业赛道writeup之入门的黑客
- mac u盘格式化 linux系统文件,Mac上怎么制作Ubuntu的U盘开启盘(装Linux系统)
- scanf从文件中读入,printf写入到文件
- eDMA结构及工作机理的简单介绍
- Python input 函数 -Python零基础入门教程
- python实现dem输出三维模型_python DEM数据可视化
- coreboot学习7:ramstage阶段之设备枚举流程
- SpringMVC框架----请求参数的绑定
- newaxis取出某一行或列数据以及增加维度
- C语言--三次方程数值求解
- rgb转nv12 nv12转rgb
- vue-aliplayer 阿里云播放器适配 vue [新]
- p6spy mysql8_P6spy监控打印SQL语句
- 从 0 到 1,开发一个智能问答机器人
- android 播放pcm的软件,应用AudioTrack播放PCM音频数据(android)
- 十大铁饭碗职业排行,哪些行业最吃香?外行看热闹,内行看门道
- html英文书籍推荐,Html英文
- 前端学习笔记 - promise是什么?能解决什么问题?
- 激活函数(1)Sigmoid激活函数
- 二三四五4位高管 陈于冰董事长 代小虎财务总监 罗绘副总对外对公 邱俊祺董秘 实控人韩猛
热门文章
- 微信官方:微信圈子将停止运营
- 如何让计算机桌面自动更换,怎么让电脑自动更换桌面背景
- 贝尔宾团队角色理论:附Belbin Team Roles测试 CW CO SH PL RI ME TW FI
- swagger2 description is deprecated
- C++:pass by reference的时候真正传递的是什么?
- 09.JSP自定义标签01
- elasticsearch DSL查询之should查询
- 让AI帮你玩游戏(一) 基于目标检测用几个样本帮你实现在魔兽世界中钓鱼(群已满)
- 没有干货的LTSC浅度体验
- java中怎么判断一段代码时线程安全还是非线程安全_3万字的Java后端面试经历总结