EtherCat概述
所有的状态改变都由主站发起,主站向从站发送状态控制命令请求新的状态,从站响应此命令,执行所请求的状态转换,并将结果写入从站状态指示变量。段内寻址有设备寻址和逻辑寻址,设备寻址针对某个从站进行读写,逻辑寻址面向过程数据,可以实现多播,同一个子报文可以读写多个从站设备。对于运行在同步模式的从站,主站应该检查相应的过程数据帧的周期时间,保证大于从站支持的最小周期时间。参考时钟和从时钟: EtherCAT
EtherCat概述
博客是本人开发支持EtherCat通信电机驱动器的笔记,所以基本上是从从站设计的角度来的,主站内容大多只是提一下用作了解,详细的还是需要查阅书籍。
以太网基础:
https://blog.csdn.net/qq_40483920/article/details/108262953?spm=1001.2014.3001.5506
系统组成
这里不多说,很多资料都有,ecat能各种串,每个从站截取自己的数据然后把自己发送的数据发到对应的位置。
EtherCAt主站组成:
主站使用标准以太网控制器没有什么特殊区别,在基于PC的主站中使用网卡NIC(Network Interface Card),网卡集成了以太网控制器和物理收发器,嵌入式设备中控制器嵌入在微处理器中需要在外挂PHY芯片。
EtherCAt从站组成:
从站有两种,比如瑞萨的T2M就内置了从站控制器,只需要像配置内部外设一样做对应配置即可。而一般我们用STM32这类单片机需要EtherCat从站控制器(ESC)常见的就是AX58100、lan9252这类Esc。ESC作用是负责处理EtherCat数据帧,并使用双端口存储区实现EtherCat主站与从站本地应用的数据交换。各个从站的ESC按照各自在环路的物理位置顺序移位读写数据帧。在报文经过从站时,ESC从报文中提取发送给自己的输出命令数据并将其存储到内部存储区,输入数据从内部存储区又被写到相应的子报文中。数据的提取和插入都是由数据链路层硬件完成的。
ESC有四个数据收发端口,每个端口都可以收发以太网数据帧。一般数据环路按照0——3——1——2——0的顺序依次传输,如果检测到有的端口没有外部链接就会自动闭合此端口,当然一个EtherCat从站得至少两个数据端口(理解上图就可以明白为啥至少需要两个端口,以为一个的话没法形成闭合的环)。
ESC使用两周物理层接口模式:MII和EBUS,MII就是标准以太网物理层接口需要使用外部物理层芯片,一个端口传输延时约为500ns。EBUS是倍福公司使用LVDS(low votage differential signling)标准定义的传输数据标准,可以直接连接ESC一个端口传输延时约为100ns。EBUS最大传输距离为10m,适用于距离较近的设备之间,两者主要区别就是一个需要用网接口变压器,一个不需要。
从站微处理器:
微处理器需要做的说大白话就是从ESC读取数据,再把要传输的数据发给ESC。ESC就是一个中转站,微处理器和这个中转站之间传输数据一般是用SPI。
EtherCat物理拓扑结构
拓扑结构没啥好说的,很灵活,上面提到ESC的四个收发端口的作用是灵活性大大增加。
EtherCat数据帧结构
帧结构看看就行,可能是我就做了从站的原因,没怎么用到这玩意。
EtherCat报文寻址和通信服务
EtherCat寻址就说说主站首先使用以太网数据帧头的MAC地址寻址到网段,然后使用子报文头中的32位地址寻址到段内设备。段内寻址有设备寻址和逻辑寻址,设备寻址针对某个从站进行读写,逻辑寻址面向过程数据,可以实现多播,同一个子报文可以读写多个从站设备。
报文寻址具体方法就看下资料,因为我一般用在电机驱动器上,大多使用直连模式,主站直接广播MAC地址,当然这些都是主站需要操心的事,咱们了解就行。通信服务和WKC也不再赘述,想要了解看下其他资料。
23/12/13新增:
顺序寻址
顺序寻址时从站地址由其物理连接循序决定,具体是用一个负数来表示每个从站在网段内的接线顺序,循序寻址子报文经过每个从站后对应的位置地址加1。如下图,网段中有三个从站设备,其顺序寻址的地址分别为0、-1和-2。主站使用顺序寻址访问从站时子报文时的地址变化如图所示。主站发出三个子报文分别寻址三个从站,其中的地址分别是0、-1和-2,如图中的数据帧1。数据帧到达从站①时,从站①检查到子报文1中的地址为0,从而得知子报文1就是寻址到自己的报文。数据帧经过从站①后,所有的顺序地址都增加1,成为1、0和-1,如图中的数据帧2。到达从站②时,从站②发现子报文2中的顺序地址为0,即为寻址到自己的报文。同理,从站②也将所有子报文的顺序地址加 1,如图中的数据帧3。数据帧到达从站③时,子报文3中的顺序地址为0,即为寻址从站③的报文。经过从站③处理后,数据帧成为图中的数据帧4。
设置寻址:
设置寻址时,从站的地址与其在网段内的连接顺序无关。地址可以由主站在数据链路启动阶段配置给从站,也可以由从站在上电初始化的时候从自身的配置数据存储区装载,然后由主站在链路启动阶段使用顺序寻址方式读取各个从站的设置地址,并在后续运行中使用。
逻辑寻址和FMMU:
逻辑寻址方式由现场总线内存管理单元(FMMU,Fieldbus Memory Management Unit)实现,FMMU功能位于每一个ESC的内部,将从站本地物理存储地址映射到网段内逻辑地址。
FMMU单元由主站设备配置,并在数据链路启动过程中传送给从站设备。每个FMMU单元需要以下配置信息:数据逻辑位起始地址、从站物理内存起始地址、位长度、表示映射方向(输入或输出)的类型位,从站设备内的所有数据都可以按位映射到主站逻辑地址。如图是一个映射实例,将主站控制变量区Ox00014711从第3位开始的6位数据映射到由设备地址OxOFO1第1位开始的6位数据写操作。OxOF01是一个开关量输出设备。
从站设备收到一个数据逻辑寻址的EtherCAT子报文时,检查是否有FMMU单元地址匹配。如果有,它将输入类型数据插入到 EtherCAT子报文数据区的对应位置,以及从EtherCAT子报文数据区的对应位置抽取输出类型数据。使用逻辑寻址可以灵活地组织控制系统,优化系统结构。逻辑寻址方式特别适用于传输或交换周期性过程数据。FMMU操作具有以下功能特点:
-
每个数据逻辑地址字节只允许被一个 FMMU读和另一个FMMU写操作,或被同一个FMMU进行读写交换操作;
-
对一个逻辑地址的读写操作与使用一个FMMU读和另一个 FMMU写操作具有相同的结果;
-
按位读写操作不影响报文中没有被映射到的其他位,因此允许将几个从站 ESC中的位数据映射到主站的同一个逻辑字节;
-
读写一个未配置的逻辑地址空间不会改变其内容。
分布时钟
分布时钟很重要,特别是想要跑DC模式的。分布时钟具体一下主要功能:
· 实现从站之间的时钟同步;
· 为主站提供同步时钟;
· 产生同步的输出信号;
· 为输入事件产生精确的时间标记;
· 产生同步中断;
· 同步更新数字量输出;
· 同步采样数字量输入。
6个时间概念:
-
系统时间: 系统时间是分布时钟使用的系统计时,通常用于通信和时间标记。
-
参考时钟和从时钟: EtherCAT协议规定主站连接的第一个具有分布时钟功能的从站作为参考时钟,其它从站的时钟称为从时钟。参考时钟被用于同步其它从站设备的从时钟和主站时钟。参考时钟提供EtherCAT系统时间。
-
主站时钟: EtherCAT主站也具有计时功能,称为主站时钟。
-
本地时钟、其初始偏移量和时钟漂移: 每个DC从站都有本地时钟,本地时钟独立运行。系统启动时各从站的本地时钟个参考时钟之间存在一定差值,称为时钟初始偏移量。运行过程中又由于参考时钟和DC从站时钟使用各自的时钟源,计时周期存在一定飘逸将导致时钟运行不同步,本地时钟产生漂移。因此必须对时钟初始偏移和时钟漂移进行补偿。
-
本地系统时间: 本地时钟补偿后产生一个本地系统时间,分布时钟同步机制就是各个从站的本地系统时间保持一致。参考时钟也是相应从站的本地系统时间。
-
传输延迟:数据传输会产生响应延迟,在同步从时钟时需要考虑到参考时钟与各个从时钟之间的传输延迟。
有这些概念就行,具体计算也蛮复杂的,实际也用不到。
通信模式
从站设备同步模式
应用通信之间通常有两种数据交换形式:时间关键和非时间关键(其实可以理解就是实时和非实时),时间关键的数据通常周期性发送,称为周期过程数据通信。非时间关键数据可以非周期发送,在EtherCat中采用非周期性邮箱(mailbox)数据通信。
周期性过程数据通信通常使用FMMU进行逻辑寻址,主站可以使用逻辑读、写或读写命令同时操作多个从站。在周期性数据通信模式下,主站和从站有多种同步运行模式:
自由模式
在自由运行模式下,本地控制周期由一个本地定时器中断产生。周期时间可以由主站设定,这是从站的可选功能,后面会提到freerun模式,对于从站来说类似于将通信功能函数放在mian的while(1)中轮询。
同步于数据输入或输出事件
本地周期在发生数据输入或输出事件主站可以将过程数据帧的发送周期写给从站,从站可以检查是否支持这个周期时间或对周期时间进行本地优化。从站可以选择支持这个功能。通常同步于数据输出事件,如果从站只有输入数据,则同步于数据输入事件。对应SM-synchron模式,该模式很像咱们电机控制中常用的通信方式,比如常用的CAN协议,上位机发送数据触发下位机的CAN接受中断来处理发下的数据,我们也可以在这个时候将数据返回给上位机。
同步于分布式时钟同步事件
本地周期由SYNC事件触,主站必须在SYNC之前完成数据帧的发送。此时要求主站必须同步于参考时钟,后面会提到的DC-synchron模式。区别于SM-synchron模式,进一步优化从站同步性能,从站应该在数据收发事件发生时从接收到的过程数据帧复制输出数据,然后等待SYNC信号到达后继续本地操作。数据帧必须比SYNC信号提前 T 1 T_1 T1时间到达,从站在SYNC事件之前已经完成数据交换和控制计算,接受SYNC信号后可以马上执行输出操作,从而进一步提高同步性能。
主站设备同步运行模式
因为ethercat需要学习的东西太多,我也只将自己学习的笔记分享出来,所以主站内容我都尽量省略只做了解。
- 周期性模式
在周期性模式下,主站周期性地发送过程数据帧。主站周期通常由一个本地定时器控制。从站可以运行在自由运行模式或同步于接收数据事件模式。对于运行在同步模式的从站,主站应该检查相应的过程数据帧的周期时间,保证大于从站支持的最小周期时间。
主站可以以不同的周期时间发送多种周期性的过程数据帧,以便获得最优化的带宽。例如,以较小的周期发送运动控制数据,以较大的周期发送IO数据。
2. DC模式
在DC模式下,主站运行与周期性模式类似,只是主站本地周期应该和参考时钟同步。主站本地定时器应该根据发布参考时钟的 ARMW 报文进行调整。在运行过程中,用于动态补偿时钟漂移的ARMW 报文返回主站后,主站时钟可以根据读回的参考时钟时间进行调整,使之大致同步于参考时钟时间。
DC模式下,所有支持DC的从站都应该同步于DC系统时间主站也应该使其通信周期同步于DC参考时钟时间.
非周期性邮箱数据通信
EtherCAT协议中非周期性数据通信称为邮箱数据通信,它可以双向进行,主站到从站和从站到主站。它支持全双工、两个方向独立通信和多用户协议。从站到从站的通信由主站作为路由器来管理。邮箱通信数据头中包括一个地址域,使主站可以重寄邮箱数据。邮箱数据通信是实现参数交换的标准方式,如果需要配置周期性过程数据通信或需要其他非周期性服务时需要使用邮箱数据通信。
主站发送写数据区命令将发送邮箱数据给从站。主站需要检查从站邮箱命令应答报文中工作计数器WKC。如果工作计数器为1,表示写命令成功。反之,如果工作计数器没有增加,通常因为从站没有读完上一个命令,或在限定的时间内没有响应,主站必须重发写邮箱数据命令。
从站有数据要发送给主站,必须先将数据写入输入邮箱缓存区,然后由主站来读取。主站发现从站ESC输入邮箱数据区有数据等待发送时,会尽快发送适当的读命令来读取从站数据。主站有两种方法来测定从站是否已经将邮箱数据填入输入数据区。一种是使用FMMU周期性地读某一个标志位。使用逻辑寻址可以同时读取多个从站的标志位,但其缺点是每个从站都需要一个 FMMU单元。另一个方法是简单地轮询ESC输入邮箱的数据区。读命令的工作计数器增加1表示从站已经将新数据填入了输入数据区。
邮箱通信出错时 应答数据定义如下表所示:
状态机和通信初始化
EtherCAT状态机(ESM,EtherCAT State Machine)负责协调主站和从站应用程序在初始化和运行时的状态关系。
EtherCAT设备必须支持四种状态,另外还有一个可选的状态。
-
Init:初始化,简写为I;
初始化状态定义了主站与从站在应用层的初始通信关系。此时,主站与从站应用层不可以直接通信,主站使用初始化状态来初始化ESC的一些配置寄存器。如果从站支持邮箱通信,则配置邮箱通道参数。
-
Pre-Operational:预运行,简写为P;
在预运行状态下,邮箱通信被激活。主站与从站可以使用邮箱通信来交换与应用程序相关的初始化操作和参数。在这个状态下不允许过程数据通信。
-
Safe-Operational:安全运行,简写为S;
在安全运行状态下,从站应用程序读入输入数据,但是不产生输出信号。设备无输出,处于“安全状态”。此时,仍然可以使用邮箱通信。
-
Operational:运行,简写为O;
在运行状态下,从站应用程序读入输入数据,主站应用程序发出输出数据,从站设备产生输出信号。此时,仍然可以使用邮箱通信。
-
Boot-Strap:引导状态(可选),简写为B。
引导状态的功能是下载设备固件程序。主站可以使用FoE协议的邮箱通信下载一个新的固件程序给从站。
各状态之间的转化关系如下图。从初始化状态向运行状态转化时,必须按照“初始化→预运行→安全运行→运行”的顺序转化,不可以越级转化。从运行状态返回时可以越级转化。引导状态为可选状态,只允许与初始化状态之间互相转化。所有的状态改变都由主站发起,主站向从站发送状态控制命令请求新的状态,从站响应此命令,执行所请求的状态转换,并将结果写入从站状态指示变量。如果请求的状态转换失败,从站将给出错误标志。
总结如下表:
状态和状态转换 | 操作 |
---|---|
初始化(init) | 应用层没有通信,主站只能读写ESC寄存器 |
初始化向预运行(init to pre-op) | 主站配置从站站点地址寄存器->如果支持邮箱通信,则配置邮箱通道参数->如果支持分布式时钟,则配置DC相关寄存器->主站写状态控制寄存器,以请求“Pre-Op”状态 |
预运行(pre-op) | 应用层邮箱数据通信 |
pre-op to safe-op | 主站使用邮箱初始化过程数据映射->主站配置过程数据通信使用的SM通道->主站配置FMMU->主站写状态控制寄存器->以请求“Safe-Op”状态 |
安全运行(safe-op) | 应用层支持邮箱数据通信,有过程数据通信,但是只允许读输入数据,不产生输出信号 |
safe-op to op | 主站发送有效的输出数据->主站写状态控制寄存器,以请求op状态 |
运行状态(op) | 输入输出全部有效,仍然可以使用邮箱通信 |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)