倍福EtherCAT通信协议详细解析

article/2025/10/9 3:12:23
  1. 简介
    1.1 运动控制
    1.2 实时以太网
    1.3 EtherCAT
  2. EtherCAT原理介绍
    2.1 实时性
    2.2 端口管理
    2.3 EtherCAT网络拓扑
    2.4 EtherCAT网络协议栈
    2.5 EtherCAT数据帧格式
    2.6 EtherCAT设备寻址方式
    2.7 分布式时钟(Distribute Clock)
    2.8 应用层(Application Layer)
    2.9 设备配置(Device Profile)
    2.10 主站设计
    2.11 从站设计
  3. 应用层(Application Layer)
    3.1
    3.2 EtherCAT Slave Implementation (从站实现)
  4. 应用实例
    4.1 主站操作系统(RTAI)
    4.2 主站EtherCAT程序(IGH)
    4.3 主站应用开发(LinuxCNC)
    4.4 ET1200
    4.5 从站程序设计
    4.6 实验测试
  5. 工具
    5.1 TwinCAT
    5.2 LinuxCNC
    5.3 开源的EtherCAT Master
  6. 简介
    1.1 运动控制
    运动控制系统处理机械系统中一个或多个坐标上的运动以及运动之间的协调,实现精确的位置控制、速度和加速度控制、转矩和力的控制等。

单轴的运动控制系统可分为开环、半闭环和闭环伺服系统。

多轴运动控制系统可以分成点位控制、连续轨迹控制和同步控制。

典型的运动控制系统,从结构上看,包括上位机控制窗口、运动控制器、驱动器、电机以及测量反馈系统等几个部分组成:
在这里插入图片描述
1.2 实时以太网
实时以太网(RTE, Real Time Ethernet)是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。目前,国际上有多种实时工业以太网协议,根据不同的实时性和成本的要求使用不同的原理,大致可以分为以下三类:
在这里插入图片描述
(1)基于TCP/IP实现的工业以太网仍使用TCP/IP协议栈,通过上层合理的控制来解决通信过程中的不确定因素。这种方式具有较高的传输速率,适应于大量数据通信,更适合作为网关和交换设备的应用,不能实现很好的实时性。常用的通信控制方法有:合理调度,减少冲突的概率;定义帧数据的优先级,为实时数据分配最高优先级;使用交换式以太网等。使用这种方式的典型协议有Modbus/TCP和Ethernet/IP等。
(2)基于以太网实现的工业以太网仍然使用标准的、未修改的以太网通信硬件,但是不适用TCP/IP来传输数据。它使用特定的报文进行传输。TCP/IP协议栈能使用时间控制层分发一定的时间片来利用网络资源。该类协议主要有Ethernet Powerlink, EPA C Ethernet for Plant Automation ), PROFINET IRT等。通过这种方式可以实现较好的实时性。
(3)通过修改以太网协议实现的工业以太网,实现应答时间小于lms的硬实时,从站使用特定的硬件实现。由实时MAC控制实时通道内的通信,从根本上避免报文间的冲突。非实时数据依然能在通道中按原协议通信。典型协议有德国倍福的EtherCAT、西门子的PROFINET IRT等。
1.3 EtherCAT
德国BECKHOFF自动化公司于2003年开发出的EtherCAT实时以太网技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接受以太网数据包,将之解码,然后再将过程数据复制到各个设备。

  1. EtherCAT原理介绍
    EtherCAT从站设备在报文经过其节点时读取相应的数据报文,同样输入数据也是在报文经过时插入到报文中。整个过程报文只有几纳秒的时间延迟,实时性获得极大提高

EtherCAT作为一种工业以太网总线,充分利用了以太网的全双工特性。使用主从通信模式,主站发送报文给从站,从站从中读取数据或将数据插入至从站。

主站可使用标准网卡实现,
从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现,
主要完成通信和控制应用两部分功能,EtherCAT物理层选用标准以太网物理层器件。

从站能将收到的报文直接处理,并读取或插入有关的数据,再将报文发送给下一个EtherCAT从站。最末尾的EtherCAT从站返回处理完全的报文,然后由第一个从站发送给主站。整个通信过程充运行于全双工模式下,TX线发出的报文又通过RX线返回给主站:
在这里插入图片描述

2.1 实时性
数据包刷新时间的计算
数据包中所有从站的 Process Datarocess Datarocess Data rocess Data rocess Data rocess Datarocess Data数据 决定了数据包的长度。

一个Ethernet thernet数据包最小84 字节,不足 84 字节会补齐84 字节。由于EtherCAT Frame中有一些公共开销, 84 字节的数据包最多含18字节的过程数据。考虑到数据包必须经过每个从站两次才能回到主站,所数据包以固定的波特率100 Mbps在网络上传输两次的时间 这就是它的总线刷新时间 。

1.基于这个原则,以包含 1000路开关量信号的数据包为例,计算过程如下:
过程数据长度:1000/8=125Bytes
数据包长度:84-18+125=191Bytes=191*8 Bit= 1528 Bit
总线刷新时间:(1528Bit/100,000,000 Bps)*2=15.28us * 2 = 30.56us
注意,通常的数字量模块, 都是单纯的输出或者输入模块,而不是混合模块。所以 1000 个数字 量信号, Frame 中就会分配 125 字节。

2.再以包含100个EtherCAT伺服驱动器过程数据的EtherCAT数据包为例,假如每个伺服的过程数据只包括控制字(2字节)、状态字(2字节)、目标位置(4字节)、实际位置(4字节),其总线刷新时间的计算过程如下:

过程数据长度:100*(2+4)=600 Byte。
数据包长度:84-18+600=1266 Byte =671*8 Bit =5328 Bit
总线刷新时间:(5328 Bit/100,000,000 Bps) *2=100.656µs
1
2
3
注意,Frame中只为一个伺服分配了6个字节,这是因为根据Beckhoff公司的控制软件TwinCAT中关于EtherCAT的默认设置是从站的Input和Output使用同一数据段,所以数据包进入伺服驱动器时该数据段存放的是控制字和目标位置,而出来时则存放伺服的状态字和实际位置。

以上两个数据30.56µs和101.28 µs就是EtherCAT官方宣传资料中,刷新1000个数字量需要30µs,刷新100个伺服轴只需要100µs的数据由来。实际上,根据从站的类型、是否包含分布时钟、是否启用时钟同步、时钟同步的参数设置不同,在数据包中有可能还会增加8-12字节用于传输同步时钟值,以及相应的为每个从站增加一个Bit的标记等等,会增加几个微秒的刷新时间,暂且忽略不计。

以上计算只是数据包传输需要的理论时间,实际上,数据包经过每个从站会产生短暂的硬件延时。100M超五类网线接口的从站延时约1µs,而EBus的IO模块类从站延时约0.3µs,在毫秒级以下的控制任务中如果从站数量较多,这个时间也相当可观,计算刷新周期时应该考虑进去。

2.2 端口管理
一个从站控制器最多可以有4个端口,如果一个端口关闭了,控制器主动连接下一个端口。端口可以随着EtherCAT命令主动的打开或者关闭。逻辑端口设置决定了EtherCAT帧的处理和发送顺序。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3 EtherCAT网络拓扑
所有数据帧在网络中以一种“逻辑闭环”的方式传播,与网络的硬件拓朴无关,无论它是链式、菊花链、星形还是树形拓朴。
在这里插入图片描述
所有数据帧都由Master发出,以事前严格定义的顺序,依次经过网络上的所有从站,走过一个完整的闭环后回到Master 。
所有数据帧通过从站中的 EtherCAT Processing Unit (EtherCAT处理单元)只有 1 次。

线型拓扑:
任意数目的设备成线型连接
最多65535个设备
————————————————
版权声明:本文为CSDN博主「pwl999」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pwl999/article/details/109397700
数据处理链型拓扑
在这里插入图片描述
带有分支线的数据处理链型拓扑
在这里插入图片描述
树型拓扑:
在这里插入图片描述
实时星型拓扑:
在这里插入图片描述
冗余线缆
在这里插入图片描述
选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。

EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。
2.4 EtherCAT网络协议栈
在这里插入图片描述
在这里插入图片描述
CoE(Can over EtherCAT)
PDO(Process Data Object 过程数据对象)
SDO(Service Data Object 服务数据对象)
PDI(Process Data Interface 过程数据接口)(uC, SSI, I/O)
1
2
3
4
ESM(EtherCAT State Machine)
ESI(EtherCAT Slave Information) (XML device description)
ENI(EtherCAT Network Information)
CTT(Conformance Test Tool 一致性测试工具)
SM(SyncManagers 同步管理器)
MDP(modular device description 模块化设备描述 )
1
2
3
4
5
6
2.5 EtherCAT数据帧格式
EtherCAT数据直接嵌入在以太网数据帧中进行传输,只是采用了一种特殊的帧类型,该类型为Ox88A4, EtherCAT数据帧结构如图所示:
在这里插入图片描述
EtherCAT数据包由数据头和数据实体两部分组成,EtherCAT数据头包含2个字节,每个数据包里面可以只包含一个EtherCAT子报文,也可以包含多个子报文;一个EtherCAT子报文对应着一个从站,因此一个EtherCAT数据包可以操作
多个EtherCAT从站,相应的数据长度在44-1498字节之间,EtherCAT数据帧结构定义:


http://chatgpt.dhexx.cn/article/Lc30xOZi.shtml

相关文章

EtherCAT (学习笔记)

文章目录 1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT 2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置…

拨打电话功能

1.html方式 界面效果&#xff1a;直接跳转到拨号界面 实现方法 <a href"tel:18212345678">在线客服</a> 2.ts方式 界面效果&#xff1a;下面有弹窗&#xff0c;选择后&#xff0c;直接拨打出去 实现方法 2.1调用与html同名的ts文件内方法 步骤 1&#x…

Axure实现模拟拨打电话和真实拨打电话

Axure模拟拨打电话 Axure RP是一个专业的快速原型设计工具&#xff0c;让负责定义需求和规格、设计功能和界面的专家能够快速创建应用软件或Web网站的线框图、流程图、原型和规格说明文档。作为专业的原型设计工具&#xff0c;它能快速、高效的创建原型&#xff0c;同时支持多…

uniapp 实现拨打电话

uniapp 实现拨打电话 实现代码真机调试 参数必须是一个对象(object)&#xff0c;它包含一些属性(参数)&#xff1a; 实现代码 <!-- 电话图标 需要在哪点击实现打电话在哪加 --> <view class"flex diygw-col-3" click"phone(item)"><view …

uniapp实现点击拨打电话功能

uniapp实现点击拨打电话 使用uniapp自带的api&#xff1a;uni.makePhoneCall 以下是具体实现的代码&#xff1a; <view class"btn" click"telFun()">电话咨询</view>methods: {//拨打电话&#xff1a;telFun() {uni.makePhoneCall({phoneNum…

JS调用拨打电话功能

1.通过window.location.href 示例&#xff1a; window.location.hreftel://123456789&#xff1b; 2.通过a标签 示例&#xff1a; uniapp调用拨打电话功能&#xff1a;使用uni.makePhoneCall 示例&#xff1a;uni.makePhoneCall({ phoneNumber: Phone, success(){ console.l…

Xamarin.Android实现拨打电话的功能

目录 1、说明2、效果实现3、实现过程3.1 Manifest配置3.2 界面设置3.3 String资源3.4 具体实现 4、 代码下载5、参考资料 1、说明 通过Xamarin.Android实现拨打电话的功能。VS2019社区版 2、效果实现 3、实现过程 3.1 Manifest配置 必须得有拨打电话的权限设定。 <?xm…

flutter-拨打电话功能

使用插件:url_launcher 添加插件 命令行添加&#xff1a; flutter pub add url_launcher 这会自动在pubspec.yaml添加 url_launcher: ^6.0.20 建议直接命令行添加&#xff0c;这样就不用关心版本号是不是写对了&#xff0c;或者配置文件里配置错误什么的问题出现 导包 在…

拨打电话

拨打电话是手机常用的功能&#xff0c;Android中可以通过Intent启动android.intent.action.CALL&#xff0c;然后设置Uri参数&#xff0c;拨打电话的prefix为“tel”&#xff0c;所以如果要拨打电话1388888&#xff0c;Uri的字符串应为“tel:1388888”&#xff0c;即&#xff1…

uni-app 实现拨打电话功能(android)

最近项目中需要拨打电话功能&#xff0c;项目中实现拨打电话的代码如下&#xff0c;包括微信和真机拨打电话两种方式&#xff0c;特此记录便于日后查阅。 //#ifdef MP-WEIXIN uni.makePhoneCall({phoneNumber: 18354789632 }); //#endif //#ifdef APP-PLUS plus.device.dial(18…

Android入门篇(四):自动拨打电话、手动拨打电话

Android入门篇&#xff08;四&#xff09;&#xff1a;自动拨打电话、手动拨打电话 一、前言 最近在做的项目需要用到自动拨号的这一功能&#xff0c;17年写了一个&#xff0c;最近拿出来用发现不能使用了&#xff0c;后面查资料据说是因为Android 6&#xff08;api23&#xf…

uniapp中拨打电话

1. 记录日常采坑 刚开始是这样写的 <view class"" tap"call()">联系客服 </view>call(){let phone ‭123456789‬uni.makePhoneCall({phoneNumber:phone,success:function(){console.log(拨打电话成功);},fail() {console.log(打电话失败了…

【uniapp】微信小程序中实现点击拨打电话的功能

手机端运行会直接调起电话按钮&#xff0c;代码如下&#xff1a; <view class"text2_button" click"freeTell"><text>4007-000-000</text> </view>// js部分-联系电话freeTell() {wx.makePhoneCall({phoneNumber: 4007-000-000, …

怎样才能高效的拨打电话—,人工智能系统,呼叫中心,外呼系统建设

外呼平台是一个与通话相关的多功能管理平台&#xff0c;将通信资源与相关应用技术的管理能力平台化&#xff0c;高效利用通信资源&#xff0c;外呼能力赋能产品服务创新和客户响应能力&#xff0c;同时无缝对接业务、数据、AI等其他能力。外呼平台集成了资源隔离和资源分配&…

(一)来自 192.168.xx.xx的回复: TTL 传输中过期。

一、遇到的问题 内网ping不同&#xff0c;情况如下&#xff1a; 二 、解决方法 http://www.myexception.cn/network/246789.html

主机ping不通虚拟机 TTL传输中过期的解决办法

主机ping不通虚拟机 TTL传输中过期的解决办法 Linux 虚拟机设置的自动获取ip地址。 虚拟机ip地址改变之后&#xff0c;虚拟机可以ping通主机&#xff0c;主机ping虚拟机显示TTL传输中过期&#xff0c;CRT连接不上Linux虚拟机了。 我这边的原因是虚拟机的 VMnet8设置的网络地址是…

TIL传输中过期

最开始是连不上测试的数据库&#xff0c;然后用在cmd界面ping数据库的地址ping不通&#xff0c;出现这个报错&#xff0c;一开始按照网上思路&#xff0c;使用ipconfig/flushcdn清除缓存&#xff0c;但是没有用效果。 后来发现其实是自己的电脑跟开发库不是在一个网段里面&…

ttl传输中过期怎么解决_TTL在运输错误和解决方案中过期

ttl传输中过期怎么解决 TTL is the short code for Time To Live. TTL is located in IP packets where it is used to hold the count of intermediate hops. TTL is value is set by source host. Windows operating system set it to 64 where Linux operating systems set …

路由环路故障导致内网ping出现ttl传输中过期的原因探寻

问题&#xff1a; 某天&#xff0c;有同事反映vlan211下的设备192.168.211.2无法ping通&#xff0c;要求排查。 自己测试&#xff0c;用自己的pc192.168.205.201去ping发现现象如下&#xff1a; 奇怪&#xff0c;从没见过ttl过期的打印&#xff0c;公司内网设备怎么会出现ttl …

主机ping虚拟机 TTL传输中过期的解决办法

主机ping虚拟机 TTL传输中过期的解决办法 问题&#xff1a;linux虚拟机配置好静态ip&#xff0c;关闭防火墙后,主机ssh不上虚拟机 问题排查1&#xff1a;虚拟机ping www.baidu.com 可以Ping通问题排查2&#xff1a;虚拟机ping 主机Ip 可以ping通问题排查3&#xff1a;主机pin…