注:以下文章内容通过网站资料整理而来,如有侵权,抱歉联系删除~
参考:EtherCAT主站——SOEM(学习笔记1)-EtherCAT主站——SOEM(学习笔记1)-优快云博客
SOEM 库架构分析
SOEM 是 Simple Open EtherCAT Master Library 的缩写,是瑞典 rt-lab 提供 的一个开源 EtherCAT 主站协议库 。 SOEM 库使用 C 语言编写,可以在 windows 以及 Linux 平台上运行,并也可以方便地移植到嵌入式平台上。
SOEM 支持 CoE , SoE , FoE 以及分布式时钟。 SOEM 直接将 EtherCAT 帧 通过 MAC 发送和接收,因此它不支持 EoE 。 SOEM 库由若干模块组成,最底层提供硬件和操作系统抽象层,从而可以方便地将 SOEM 库移植到不同的系统平台上。
SOEM 库架构如图 所示:
SOEM 库采用分层设计,并且提供了一个抽象层,将 SOEM 协议栈与具体操作系统和硬件分开,使得 SOEM 在理论上可以移植到任意操作系统和硬件平 台之上。
抽象层由 OSAL 和 OSHW 两个模块组成,OSAL 是操作系统抽象层,OSHW 是硬件抽象层,移植的主要内容就是对 OSAL 和 OSHW 具体 API 实现,在新的操作系统和硬件平台上的重写。注意,SOEM 可以不需要 OS 操作系统,直接与时间和定时器相关的 API 是必须实现的。
1、操作系统抽象层
主要是用于符合OSADL和实时进程创建。也就是说:发送EtherCAT数据包不能抖动太大,如果直接使用linux提供的原生线程,可能实时性无法满足。需要对Linux内核打上实时补丁,我们采用PREEMPT_RT。
注1:OSADL(Open Source Automation Development Lab):这是一个开源自动化开发实验室相关的组织或标准框架。在自动化系统中,特别是像工业控制这样的场景,对实时性要求很高。OSADL 的标准规定了如何创建和管理实时进程,以确保系统能够在精确的时间间隔内响应事件。
注2:PREEMPT_RT 是一种对 Linux 内核进行修改的实时补丁。它改变了 Linux 内核的调度方式,使得内核能够更好地支持实时进程。通过采用这种补丁,系统能够更及时地响应实时任务的请求,减少任务调度的延迟,从而降低 EtherCAT 数据包发送时间的抖动。具体来说,这个补丁可以使操作系统在运行时优先处理实时任务,将非实时任务暂时挂起,确保实时任务(如发送 EtherCAT 数据包)能够按照精确的时间要求执行。
2、硬件抽象层
硬件抽象层即OSHW 模块,网卡的接口封装,不同操作系统对网卡操作不一样,linux下我们要求网卡支持混杂模式。它为上层提供网络服务,是最重要的实现。 SOEM 移植的核心工作就是对此模块的移植,后文会详细介绍具体的实现。
OSHW 模块由 oshw.h/oshw.c 和 nicdrv.h/nicdrv.c 四个文件组成。 oshw.h/.c 主要实现网络小端和本地大小端的转换,nicdrv.h/.c 是网络驱动,主要实现 EtherCAT 帧的发送和接收, SOEM 的移植主要是对网络驱动的实现。 oshw.h/.c 主要提供字节顺序转换的服务。数据在网络上传输时,总是先传输高位比特,然后传低位比特。所以,网络采用的是大端方式。而具体一个硬 件平台,可能采用大端也可能是小端。
不同平台上 nicdrv 模块的逻辑结构基本相同,需要实现的是三个底层 API :
1) 网口的初始化
2)MAC 层帧发送
3)MAC 层帧接收
3、中间层
抽象层之上的模块(除了应用层)属于 SOEM 的中间层,是 EtherCAT 协议栈的具体实现,包含 BASE 模块、 MAIN 模块、 CONFIG 模块、 CONFIGDC 模 块、COE 等。
注1:
COE、SOE、EOE、FOE都是一种基于邮箱的协议,分别基于EtherCAT来兼容。
COE
全称:CANopen over EtherCAT。该协议是一个具有开放性的标准应用层协议。其中CANopen协议是基于CAN协议的链路层上实现的。EtherCAT协议在应用层支持CANopen协议,因此支持CANopen协议的从站可以被运用在EtherCAT协议上。
SOE
全称:Servo Drive over EtherCAT。SERCOS是世界首个应用于伺服控制的协议。EtherCAT协议在应用层接口上兼容了这个协议,简称为SOE。SERCOS应用层协议为主站设计了信息接口,可以通过配置EtherCAT过程数据报文,实现周期性传递伺服驱动器的数据。
EOE
全称:Ethernet over EtherCAT。该协议支持EtherCAT能分段传递标准的以太网数据报文,使得EtherCAT协议同样能支持TCP/IP、UDP/IP协议。
FOE
全称:File Access over EtherCAT。该协议可以使用EtherCAT总线上传、下载固件,刷新从站的固件。并且可以通过命令行工具加载或存储文件。
注2:
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据,其概念与CANOpen中的概念相同。
- PDO(过程数据对象):过程数据用来传输周期性的数据,PDO由三个数据缓冲区组成,类似于一个FIFO,从站写入第一个缓冲区,主站从第三个缓冲区读走。注意第二个缓冲区不可操作。从站