本文探讨IgH EtherCAT Master针对Linux/Windows/RTOS等不同操作系统的移植。
版权声明:本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址: https://www.cnblogs.com/wsg1100/
本文将简要介绍如何将igh移植到zephyr、freertos、rtems、rtthread等RTOS,甚至在Windows上的方法。
目前,EtherCAT商用主站有:Acontis、TwinCAT3、KPA、Codesys等,开源EtherCAT主站主要有两大方案:igh与SOEM。SOEM开源于2008年底1.1.2版本,具备良好的可移植性,能够轻松适配各类操作系统乃至裸机环境。然而,在功能丰富度与实时性能表现上(除裸机外)远不如IgH。想要应对复杂的EtherCAT应用场景则会非常困难。SOEM的协议栈运作依托于应用层接口的驱动,其内部并无独立任务(线程)。
相比之下,IgH诞生较早,IgH功能全面,同时注重实时性能。为了在Linux上获得良好的实时性能和低CPU利用率,同时方便多主站使用时进程间隔离等原因,IgH设计之初就基于Linux内核态,今天看来可移植性较差。
igh的高实时性能得益于Linux内核态可直接操作网卡收发,功能全面得益于其内部采用的多任务状态机架构,这些任务驱动机制通过系统调用向用户空间的EtherCAT应用提供服务,极大简化了应用层面的接口交互,使得EtherCAT应用操作接口变得极为简单。
那么IgH能移植到Linux用户态,或者其他zephyr、freertos、rtems、rtthread等RTOS吗?答案是当然能。
IgH整体框架及运行原理本详见博客文章 【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 。
那么IgH能移植到裸机吗?理论上可以,但比较麻烦。但是IgH整体设计就是多任务的,关键点是没有任务调度,几个状态机如何驱动?不考虑权衡投入产出、可复用性,你可以自行尝试。
IgH虽然运行在Linux内核态,但并不与Linux内核的耦合,整个协议栈只用到了Linux的基本服务。
操作系统服务 | 描述 |
---|---|
任务(线程)调度 | 每个主站,内部状态机运行需要2个任务,EoE 1个(可选)、应用层周期任务 |
睡眠(定时服务) | 任务睡眠,让出CPU;应用层通信周期控制,如果RTOS没有高精度定时接口,可启一个硬件timer回调更加精确。 |
读取时间戳 | EtherCAT子报文对象维护需要收发时间戳 |
动态内存分配 | master、slave、datagram、eoe、eeprom等对象需要动态内存分配 |
event(非必须) | 应用调用主站服务时阻塞到事件等待,主站完成服务后通过事件唤醒应用 |
Semaphore/mutex | 同步互斥 |
TCP/IP网络协议栈 | 主站已支持二层网络包转发,若设备本身需要TCP/IP网络远程调试工具需要TCP支持;可选实现主站EOE |
关于RTOS的高精度定时器详见博客文章 不同RTOS中POSIX接口的实现差异 ,相关章节。
其他一些数据结构以及网络接口相关:
图片信息:(需要在文章中保留图片信息)
真实飞行员模拟 中文版 1.0.4 91.17 MB
下载
湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网