【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

news/2024/9/27 2:49:11

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

前言

目前,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用户态,或者其他RTOS吗?答案是当然能,本文做简单介绍。

IgH整体框架及运行原理本详见博客文章 【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文。

那么IgH能移植到裸机吗?理论上可以,但比较麻烦,但是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接口的实现差异 ,相关章节。

其他适配

其他一些数据结构以及网络接口相关:

  • 网卡驱动,主要实现轮询式无中断方式的二层网络包收发接口,原Linux ethernet设备的抽象及skb的替代实现;
  • EtherCAT主站初始化流程调整;
  • 链表、打印输出;
  • Linux相关特性删减修改:GNU C、unlikely、likely、prefetch,编译器特性等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/45874.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

6.20-合并二叉树

617.合并二叉树 题意描述:给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的…

DIGAT论文阅读笔记

DIGAT: Modeling News Recommendation with Dual-Graph Interaction论文阅读笔记 Abstract ​ 现有的NR方法通常采用新闻-用户表示学习框架,面临两个潜在的限制。首先,在新闻编码器中,单个候选新闻编码存在语义信息不足的问题。其次,现有的基于图形的NR方法很有前景,但缺乏…

Manifest V3 getBackgroundPage() 返回 undefined 或报错 You do not have a background page. 的巨坑

省流:无解了,老老实实 sendMessage罢 这件事挺奇怪的,因为我看官方文档就是这么写的,也没什么特别说明,版本也是最新的,就挺奇怪的……在翻了一大圈,之后看到了这篇帖子:意思就是说,api 已经不能用了,文档因为人手不够就没更新……此外还有一个 chrome.runtime.getB…

【YOLOv8改进】MLCA(Mixed local channel attention):混合局部通道注意力(论文笔记+引入代码)

**摘要:**本文提出轻量级MLCA模块,结合通道、空间、局部及全局信息,提升网络表达效率。在MobileNet-Attention-YOLO(MAY)中应用MLCA,于PASCAL VOC和SMID数据集上对比SE和CA,mAP提升1.0%和1.5%。论文及代码链接提供。MLCA通过局部池化和反池化处理,增强通道交互和空间信息…

百度网盘字幕切换失败

PC端百度网盘客户端观看网盘视频生成的AI字幕切换失败,我的办法是切换失败改dns就好了,推荐一个工具方便更改。 DNS优选 https://www.lanzouj.com/ia5uxeh 软件来源https://www.52pojie.cn/thread-1129234-1-1.html 当你在线观看生成字幕后切换迟迟无反应或者一段时间后显示切…

Linux-zabbix

高级命令 监控框架 Zabbix是一个CS(服务端/客户端)架构的服务. zabbix监控架构 Zabbix-Agent获取数据 --发送给--Zabbix-Server服务端-- 数据会被存放-- 数据库 <-- Zabbix Web 页面展示数据 采集数据----》数据收集,数据分析,报警-- 》存储--- 》友好的展示 推荐配置 磁盘…

愚蠢的在线法官

终于搞懂了给一个官解的简单理解,没有官解的严谨证明。 同官解,用 \(i\to j\) 表示 \(i\) 是 \(j\) 的祖先。 行列式的处理手法并不多,常规的手拆并不奏效,我们考虑化用 \(\gcd\) 矩阵的求法:定义矩阵 \(C[i][j]=[j\to A_i],D[i][j]=[i\to A_j](v_i-v_{fa_i})\),当 \(k=n…