基于嵌入式平台的EtherCAT总线开发

作者: 李景俊

基于嵌入式平台的EtherCAT总线开发0

关键词:工业以太网;时间周期;嵌入式

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2024)26-0091-04 开放科学(资源服务)标识码(OSID) :

0 引言

以太网技术作为当前主流的通信技术,其通用性好、低成本、高效率、高可靠性和高性能在日常生活中得到很好发展和应用,尽管以太网技术的优点很多,但在自动化领域中却有一个致命的缺点,那就是其实时性无法保证。在自动化控制中,设备之间通信往往数据量不大,只是一些寄存器值的读写和简单变量读写,但是对于数据的实时要求很高,比如读取一个转动着的伺服的当前位置,如果延时过高,就导致读取的数据位置偏差较大。因为标准以太网采用的是CSMA/CD的访问查询控制机制,导致基于以太网的控制难以达到需求的实时性。EtherCAT虽然也是基于标准的以太网,但在数据链路层上进行大量改造和优化,只使用物理层和数据链路层进行数据的传递,以此获得更高的实时性。Ether⁃CAT总线的数据刷新周期可以小于100μs,运行调度周期可以保证在1ms内,各个从站节点的同步精度可以小于1μs,满足同步性和实时性的要求。

1 嵌入式系统介绍

Linux是一个被广泛使用的开源操作系统,拥有非常良好的生态。在开源性、跨平台性、丰富的驱动等方面具有独特的优势。在开源上,在其开源社区,已经产生许多经典的开发案例。在跨平台上,Linux 具有良好的跨平台部署和开发的特点,可以根据不同的嵌入式平台部署,主要是通过不同的编译工具链进行应用的部署开发和内核的部署开发。在丰富驱动资源上,Linux的应用软件的代码内容丰富,开源社区每年都能提供大量高质量的开源驱动代码。因此,一般通用的软件都能在Linux上找到合适的开源例程,并且由于世界各地的程序员们乐于分享,提高了Linux软件的稳定性。另外,基于Linux开发嵌入式应用软件基本可以参考开源代码开发,可以选择一个类似的开源代码作为原型,在其上进行二次开发,例如常见的函数库等、常见的功能都可以基于开源社区进行开发。当前成功的嵌入式系统有一半以上都是来源Linux或者基于Linux进行二次开发。

Linux能够支持X86、ARM等多种计算机硬件体系架构,Linux基本上可以运行在数十种不同硬件架构平台,也几乎能够运行在所有流行的多核异构平台上。同时,Linux拥有相当丰富的开源驱动程序资源,支持各种常见的驱动程序,支持各种多核异构的嵌入式硬件设备和软件调试技术,甚至可以在没有完善存储单元的计算处理器上部署和运行。正是因为这些开源社区的贡献,极大地促进了Linux在各种嵌入式软硬件系统中的部署和应用,并且未来发展的速度不断加快[1]。

嵌入式系统一般被认为是一个能够管理有限计算资源并且需要高效运行代码程序的系统,因此平台的差异性,需要使用交叉编译工具链,相对于x86平台,直接在嵌入式系统的平台上部署软件相对比较繁杂,尤其在计算资源受限的平台上,编写和编译高效率的软件代码,非常考验程序员的技术功底,有时候是因为有嵌入式硬件性能的限制而实现不了各种复杂功能,需要对代码进行优化和裁剪。对于当前主流的开发中,主要采用的解决办法是首先在上位机上编写程序,然后利用交叉编译工具链,通过交叉编译的方法,生成下位机上可以运行的固件程序,最后再通过串口下载到下位机上的特定位置上运行[2]。

2 总线EtherCAT介绍

2.1 总线EtherCAT原理

EtherCAT(以太网控制自动化技术)是作为一种以太网为物理介质基础的现场总线系统,是一种面向高实时性要求的通用的通信架构,其中,EtherCAT名字中的CAT是控制自动化技术(Control Automation Technol⁃ogy)字首的简写。在业内,由于对时延的高要求,Ether⁃CAT往往作为一种确定性的工业以太网被广泛使用。自动化作业中对通信一般会要求较短的信息更新时间(或称为周期时间)、信息同步时的通讯抖动量低,而且硬件的成本要低,因此,EtherCAT被广泛使用的目的就是让以太网可以运用在自动化应用中[3]。

其次,EtherCAT作为一种基于以太网物理介质的工业以太网总线,具备了以太网的全双工特性。从运行的原理上看,EtherCAT是通过使用主从通信的模式,主站发送报文给从站,从站读取数据或将数据拷贝到从站,从站有权限将收到的报文直接处理,例如,读取或更新相关的数据,再将报文发送给下一个EtherCAT从站。在最末尾的EtherCAT从站返回处理完的所有报文,然后由第一个从站发送给主站。在从整个通信过程中,因为其基于以太网的物理介质,在全双工模式的情况下,TX线发出的报文可以经过RX 线原路返回给主站。因此,EtherCAT传输机制一般被取名为“On The Fly”。再举一个例子,假如将Ether⁃CAT报文想象成一列火车,每个带有从站地址的车厢对应需要与主站交互数据的从站的子报文,读/写从站数据,那么就有一个对应数据地址的座位。火车从主站出发,依次在沿路所有站点(从站)停靠,如果没有自己设备地址的车厢(子报文),则将火车发往下一站点,如果有自己的车厢,等该车厢上下旅客(数据)完成后,将火车发往下一站点,到达终点站后,再返回始发站,返回过程中不再交互数据。

如图1所示可以看出,EtherCAT从站的设备在通信报文经过该节点时读取对应的数据报文,在输入数据是在报文经过时更新到报文中。从各种测试中,可以获得整个过程报文只有10纳秒的时间延迟,因此,相对于以太网,系统的总线实时性获得明显的提高。

2.2 总线EtherCAT 特性

2.2.1 数据高速交互

EtherCAT协议处理完全在硬件中进行, 协议可灵活组态,使得工作效率大大提高。通过EtherCAT 控制100个分布式I/O数据的刷新周期仅需要3μs,这里面的周期包括了数据在各个端口运行的循环时间。在 对100个伺服轴的通信测试,其只需100μs。在这么短的通信周期内,可以向总线及挂载在总线上的所有驱动器提供和广播设置量和控制量,并通过总线返回它们的实际实时的位置和状态。

2.2.2 线缆冗余

线缆的冗余可以满足日益增长的对提高系统可用性的需求。EtherCAT总线支持热插拔功能的冗余主站,这样不需要关闭网络就可以进行替换设备。由于EtherCAT从站控制器在收到中断事件时将帧立即自动返回,某个设备发生故障不会导致整个网络关闭。另外,可以将线缆保护特别配置为环形的拓扑结构,以防止设备故障等。

2.2.3 同步与分布式时钟

EtherCAT 可以在很短的周期内控制多个电机, 但是对于多个电机的控制方法上,如何实现多个电机的同步运动,这个是EtherCAT优于其他总线。通过同步时钟,可以实现各个关节的准确同步。在严格要求同步动作的算法中至关重要,例如多个伺服轴在执行指令的同时进行联动的任务,需要同步时钟和分布式时钟,对每个关节电机进行同步,使其同时运动。

2.2.4 弹性的动态组网

Ethercat具有弹性的动态组网功能。在开发过程中,大部分应用都需要在运行的过程中改变I/O组态。在一些使用场景上,如具备变更特性的处理逻辑中心、多个传感器的系统、具有智能化功能的传输设备以及可单独关闭印刷功能的机器等。EtherCAT系统充分考虑到了这些需求,因此EtherCAT特别开发了“特插拔”功能,不但可以处理网络的各个部分的连接或断开状态,而且可以“动态”进行重新组网,并且针对变化的组网提供了灵活多变的响应能力。

2.2.5 开放性

EtherCAT拥有良好的开发性,不仅与以太网开发兼容,而且具有设计开放的特点。该协议是基于以太网的物理介质,其不仅可以与其他基于以太网的协议通信,并且可以将与大部分以太网协议能运行在同一物理介质中。即使如此,EtherCAT与其他协议的通信对整个网络性能影响小,占用CPU低。通常情况下标准的以太网设备可通过交换机连接到一个基于Ether⁃CAT为总线的通信系统,并且接入到该系统的交换机并不会影响系统通信的循环时间。在实际开发中,配备了传统现场总线接口的设备可通过EtherCAT现场总线主站端口的可以连接集成到EthetCAT和以太网的网络中。通过TCP/UDP底层协议,可以实现以太网和EtherCAT的应用层通信,因此EtherCAT是一个完全开放式协议[4]。

3 基于T113的EtherCAT应用开发

3.1 开发流程

基于国产芯片T113开发的EtherCAT总线应用首先要通过配置驱动器的PDO,然后通过PDO来使能和运行驱动器。该过程是基于嵌入式开发板处理的,因此需要利用T113交叉编译工具来编译应用执行程序[5]。以下开发IGH EtherCAT总线应用作为一个样例。

3.2 IGH EtherCAT 数据报发送流程

数据发送流程如下:

1)请求IGH EtherCAT主机进行操作;

2)创建进程数据域;

3)获取从站配置;

4)指定完整的pdo配置;

5)为进程数据域注册一组PDO项;

6)激活主站;

7)返回域的进程数据;

8)可选选项:设置进程优先级;

9)可选选项:指定进程收到某种信号采取的操作;

10)可选选项:设置定时发送信号;

11)进入循环,开始循环任务;循环任务的操作如下:

1)从硬件获取接收的帧并处理数据报;

2)确定域数据报的状态;

3)检查域的状态(可选项);

4)周期性检查主站状态和从站配置状态(可选项);

5)计算将要发送流水灯数据和数据改变周期大小;

6)将数据放入数据域;

7)将主数据报队列中的所有域数据报排队;

8)发送队列中的所有数据报。

3.3 动态PDO映射静态PDO映射

是将PDO变量“写死”在从站中,对于实际应用场景是十分不友好的,例如某个机型的电机需要实时传输电机温度,但在另一个机型中不需要温度信息,如果使用静态PDO映射,为了提升传输效率,删除温度PDO,则需要修改代码,烧写固件,更新XML文件。这样会带来巨大的工作量。特别是基于满足CiA402协议的驱动器来说,经常要根据上位机软件的需求动态修改传输变量。

动态PDO映射允许定制PDO以满足客户各种需求,在X86平台上,TwinCAT和KPA studio等上位机软件都支持以勾选的形式动态配置PDO。为了使得上位机能够修改PDO assign,需要在xml中配置manda⁃tory为false(SSC在EXCEL) 中可以配置。

动态PDO 映射的基本原理是操作对象字典的0x1C12和0x1C13对象,这两个对象分别管理输出和输入的PDO映射。过程如下:

1)将EtherCAT状态机切换到PreOP状态,此状态可以用SDO来配置PDO映射;

2)清除PDO 指定对象的PDO 映射对象,即设置0x1C12-00,与0x1C13-00为0;

3)PDO 映射对象无效,即对0x1600-0x1603/0x1A00-0x1A01的子索引设置为0;

4)重新配置PDO映射内容;0x1600-01开始的是RxPDO内容,0x1A00-01开始的是TxPDO;

5)设置PDO映射对象总数;

6)写有效的PDO映射对象索引到PDO指定对象;7)设置PDO指定对象的总个数,即将映射对象个数写入到1C12-00h和1C13-00h;8)转换EtherCAT状态机到安全操作以上,配置的PDO映射将有效。

3.4 EtherCAT 主站协议栈

上一篇 点击页面呼出菜单 下一篇