版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址: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,编译器特性等。

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

  1. 【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

    目录 1 启动脚本 1.1 start 1.2 stop 2 主站实例创建 2.1 Master Phases 2.2 数据报与状态机 数据报 状态机 2.3 master状态机及数据报初始化 2.4 ...

  2. 【原创】解BUG-xenomai内核与linux内核时间子系统之间存在漂移

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 一.问题起源 何为漂移?举个例子两颗32.768kH ...

  3. Linux 与 Linux Windows 文件共享 小知识

    Linux 与 Linux Windows 文件共享   前提说明:windows主机信息:192.168.1.100 帐号:abc 密码:123 共享文件夹:sharelinux主机信息:192.1 ...

  4. mouse scrollings and zooming operations in linux & windows are opposite

    mouse scrollings and zooming operations in linux & windows are opposite. windows中, 鼠标滚动的方向是: 查看页 ...

  5. 在Mac/Linux/Windows上编译corefx遇到的问题及解决方法

    这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编 ...

  6. linux/windows系统oracle数据库简单冷备同步

    linux/windows系统oracle数据库简单冷备同步 我们有一个财务系统比较看重财务数据的安全性,同时我们拥有两套系统,一个生产环境(linux),一个应急备份环境(windows).备份环境 ...

  7. 汉高澳大利亚sinox为什么不能下载源代码,因为sinox执行unix/linux/windows规划

    中国用户下载真正的澳大利亚sinox说完后sinox没有下载源代码. 这意味着,类似linux如下载linux 开源安装. 要知道.sinox并非linux. 首先,sinox是商业操作系统,就像 w ...

  8. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

    全系列Index: [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一) [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二) [原创]只学到二维数组和结构体,不用链表也能 ...

  9. Linux & Windows 环境下 Redis 安装与基本配置

    索引: 目录索引 参看代码 GitHub: redis.txt 一.Linux (DeepinOS) 环境 .安装Redis服务 sudo apt-get install redis-server . ...

  10. Linux & Windows 环境下 RabbitMQ 安装与基本配置

    索引: 目录索引 参看代码 GitHub: rabbitmq.txt 一.Linux (DeepinOS) 环境 .安装: sudo apt install rabbitmq-server .进入目录 ...

随机推荐

  1. Docker Desktop v20.10.8 和 WSL2 迁移镜像存储目录

    只迁移存储镜像和挂载文件目录:https://www.cnblogs.com/lemonK/p/17781775.html 同时迁移docker程序目录:https://www.cnblogs.com ...

  2. [FAQ] VScode 用户代码片段设置

      以PHP为示例,配置如下: { "dpe": { "prefix": "dpe", "body": [ " ...

  3. [FAQ] 你所看过的 APP 流氓提示语有哪些

    分享案例来自产品:网抑云. 当你要进行一些常规操作,比如评论时,进行弹窗伺候: |----------------------| |       | |   为提高您的账号安全性,请先绑定手机号   ...

  4. [Caddy2] Caddyfile 使用其它 DNS provider

    安装 caddy 的 dns provider 模块. https://github.com/caddy-dns/cloudflare 如果是在 Docker 中 build 模块按文档进行,通过 c ...

  5. WinUI 3 修复非打包应用运行提示缺少 Windows App Runtime 环境

    本文将告诉大家如何修复 WinUI 3 非打包的应用,在分发给到客户时,在客户的机器上运行提示缺少 Windows App Runtime 环境 在用户的机器上提示的 Windows App Runt ...

  6. LVGL学习资料

    一.资料整理 官网:https://lvgl.io/ 使用手册: 官方的使用手册是英文版的,百问网将其翻译成中文版的文档.地址如下: 官方使用文档:https://docs.lvgl.io/maste ...

  7. Spirng 当中 Bean的作用域

    Spirng 当中 Bean的作用域 @ 目录 Spirng 当中 Bean的作用域 每博一文案 1. Spring6 当中的 Bean的作用域 1.2 singleton 默认 1.3 protot ...

  8. Kimi:文本解析利器,你相信光么?

    缘起 第一次接触 kimi 是在微信群,开始以为是推广薅羊毛产品,后来在其他渠道也了解到 kimi,据说是"国产之光".我知道很多同学苦不能使用魔法久矣,索性就先踩踩这个" ...

  9. CRAPS赌博小游戏

    游戏规则 代码实现 首先把这个规则用代码写出来 再在它基础上进行简单的可视化(主要是利用Easygui的界面) 最后查缺补漏,看看有没有什么Bug 利用pyinstaller -F -w -i xx. ...

  10. 使用openvp*-gui客户端连接多服务端,作为Windows服务部署

    背景 多数公司都会用到VPN隧道技术链接服务器,保证服务器的安全,但多数情况下会存在多服务端的情况,这时就有客户端连接多个服务端的必要了,如果每次都要切换配置的话,对于有强迫症的兄弟当然忍不了了 思考 ...