EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统

2024-06-21 00:12

本文主要是介绍EtherCAT主站IgH解析(二)-- 如何将Igh移植到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用户态,或者其他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,编译器特性等。

这篇关于EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079660

相关文章

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用