首页 > 其他分享 >工业通讯协议(二)- EtherCAT

工业通讯协议(二)- EtherCAT

时间:2024-05-07 19:59:06浏览次数:20  
标签:协议 通讯 数据包 主站 以太网 EtherCAT 拓扑 时钟

一. 概述

EtherCAT(Ethernet for Control Automation Technology)是一种在工业自动化中广泛使用的高性能以太网通信协议。它由德国的Beckhoff Automation公司在2003年开发,目的是用于控制系统中实现更快的数据交换。EtherCAT符合IEEE 802.3标准,并且是国际电工委员会(IEC)的公开标准,即IEC 61158和IEC 61784。

EtherCAT的主要特点包括:

  • 高性能:EtherCAT协议设计用于高速数据交换,具有很低的通信延迟和高数据吞吐量。它允许在很短的周期时间内(通常是微秒级别)传输大量的数据。
  • 实时性:EtherCAT非常适合实时应用,因为它可以保证数据包的及时传输和处理,这对于同步动作和过程控制至关重要。
  • 高效的数据处理:EtherCAT使用了一种特殊的“在通过”(on-the-fly)处理技术,数据包可以在流经每个节点时被即时读取和响应,而不需要中断和等待,极大地减少了数据传输时间。
  • 灵活性和可扩展性:EtherCAT网络可以很容易地扩展,只需要添加更多的节点。网络可以是线性的、树状的或者是一个更复杂的拓扑结构。这使得它可以在各种规模和复杂性的自动化项目中使用。
  • 简化的硬件需求:与其他工业以太网解决方案相比,EtherCAT不需要昂贵的通信芯片或专用硬件。它可以在普通的以太网硬件上运行,因为数据处理主要是在软件中完成的。
  • 兼容性和标准化:EtherCAT支持与其他工业通信协议的互操作性,并且遵循国际标准,这意味着不同制造商的设备可以相互通信。
  • 诊断和监测功能:EtherCAT提供了强大的诊断工具和功能,可以帮助检测和解决网络中的问题,例如断线、节点故障等。

EtherCAT的应用范围非常广泛,包括机器人、包装机、塑料成型机、数控机床、组装系统以及过程控制等领域。它的高性能和灵活性使得它成为工业自动化和控制系统中的首选通信协议之一。

二. 工作原理

OSI网络模型

EtherCAT仅使用了物理层、链路层、应用层三层协议,与多数传统的现场总线相同,但相比于其它实时以太网协议,如PROFINET、EtherNet/IP等,其协议栈更加精简。

RJ45网口、PHY物理层芯片用于实现物理层协议;ESC用于实现链路层协议,通常使用倍福官方的ET1100芯片实现;MCU则用于实现应用层协议,需要厂商自行根据相应的协议编写程序代码,或是直接使用协议栈代码实现。

image

主从架构

EtherCAT网络采用主从架构,网络组态于PC主机上进行配置,需要使用到相应的EMI(EtherCAT Master Information Files)、ESI(EtherCAT Slave Information Files)文件,经专用配置软件(通常于主站配置软件中集成)进行配置后生成ENI(EtherCAT Network Information Files)文件下载至主站中,主站便依据该文件进行整个网络的识别。

主站通常是一个工业PC或者是一个带有EtherCAT主站功能的控制器。主站负责初始化通信,发送和接收数据,并且管理整个EtherCAT网络。它周期性的发送一个或多个以太网数据包,这些数据包通过网络中的每个从站并最终返回到主站。主站在数据包传递过程中处理所有必要的数据交换和同步任务。

从站通常是执行实际控制任务的设备,比如\(I/O\)模块、伺服驱动器、传感器或执行器等。每个从站有一个EtherCAT从站控制器(ESC),它读取经过的数据包并按需要插入或提取数据。从站不需要有复杂的处理能力,因为实际的数据处理是由主站完成的。

EtherCAT技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接收以太网数据,将其解码,之后再将过程数据复制到各个设备。EtherCAT是一种实时以太网技术,由一个主站设备和多个从站设备构成。主站可以使用标准网卡实现,从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现。EtherCAT报文(标准的ISO/IEC 8802-3以太网帧)由主站设备发出,途经各个从站设备,从站设备在报文经过时进行提取或插入数据。当报文到达网段内最后一个从站设备时再反方向传输,最后由第一个从站设备把收集到的信息返回到主站设备。

image

拓扑结构

EtherCAT支持多种拓扑结构,这使得它非常灵活,可以适应各种安装和系统设计的要求。以下是EtherCAT网络中常见的几种拓扑结构:

线性拓扑(Line)

线性拓扑是最常见的EtherCAT网络结构。每个从站都通过双向链路连接到下一个从站。数据包从主站开始,依次流经每个从站,直到最后一个从站,然后再沿相同的路径返回主站。这种拓扑结构的好处是简单且容易扩展,只需在链的末端添加更多的从站即可。

树形拓扑(Tree)

树形拓扑允许从一个从站分支出多个下级从站。这对于分布在不同物理位置或需要组织成逻辑组的设备来说非常有用。树形拓扑可以通过使用交换器或特定的分支延长器来实现,从而允许更灵活的布线和更好的带宽利用。

星形拓扑(Star)

星形拓扑中,每个从站直接通过单独的连接回到主站或者连接到集线器。尽管这种拓扑在物理上不是纯粹的以太网星形网络,但它通过使用以太网交换器实现了类似的效果。这种拓扑对于距离主站很远或者需要高带宽连接的单个设备来说非常适用。

环形拓扑(Ring)

在环形拓扑中,从站形成一个闭环,数据包在环中传递,并从任一方向返回到主站。这种拓扑提供了冗余的路径,如果环中的一个连接断开,数据包可以通过另一个方向绕行,从而增加了系统的可靠性。

混合拓扑(Hybrid)

混合拓扑结合了以上几种拓扑结构的特点。例如,主分支可能是线性的,而从这个主分支出来的分支可能采用树形或星形结构。这种拓扑灵活性高,可以根据实际的安装需求和设备布局来设计网络。

EtherCAT的一个重要特点是不管采用哪种拓扑结构,它都能高效地处理数据。即使在混合拓扑中,数据仍然能够快速地在通过处理,并保持同步和确定性的传输。拓扑的选择通常取决于系统的具体要求,包括安装空间、可靠性需求、扩展性和成本效益等因素。

image

同步时钟

EtherCAT具有一个精确的时钟同步机制,称为分布式时钟(Distributed Clocks, DC)。这个机制用于确保网络中所有从站的本地时钟与主站时钟同步,从而允许在整个EtherCAT网络中进行高精度的时间同步操作。时钟同步对于需要严格协调的应用,比如多轴运动控制、同步采样或者确保在确定的时间点同时触发事件,都是非常关键的。

以下是EtherCAT时钟同步的主要步骤和组成部分:

  1. 启动分布式时钟同步:主站会启动同步过程,这通常发生在系统启动时。主站会检测所有支持分布式时钟的从站,并启动它们的时钟。

  2. 主站时钟广播:主站定期发送一个广播消息,这个消息包含主站的精确时间戳。这个广播消息被称为引导时间同步电报(Reference Time Sync Telegram)。

  3. 从站时钟校准:当引用时间同步电报通过网络传递时,每个支持分布式时钟的从站会捕获这个时间戳并将其与本地时钟进行比较。根据比较结果,从站会调整自己的时钟,以减少与主站时钟的偏差。

  4. 补偿信号传播延迟:由于信号在电缆中传播需要时间,EtherCAT协议计算并补偿这个延迟,确保从站时钟的精度。补偿值可以通过测量或预先计算得出。

  5. 时钟同步周期:分布式时钟同步是一个周期性发生的过程。每一个同步周期内,所有从站的时钟都会被重新同步,以便保持高精度的时间一致性。

image

三. 协议格式

EtherCAT报文帧只能由主站进行发送,在一个通讯周期内,主站发送以太网数据帧给各个从站,数据帧到达从站后,每个从站根据寻址从数据帧内提取相应的数据,并把它反馈的数据写入数据帧。当数据帧发送到最后一个从站后返回,并通过第一个从站返回至主站。这种传输方式能够在一个周期内实现数据通讯,还改善了带宽利用率,最大有效数据利用率达90%以上。(这种传输方式有点类似于现实生活中的环型地铁,列车上的人到达自己的目的站点后下车,每个站点的人也会相应上车。)

EtherCAT报文遵循一种特定的协议格式,它通过在以太网帧内封装其数据来实现高效的通信。EtherCAT使用以太网帧结构,但通过其特定的工作方式来优化实时性能。这里是EtherCAT报文的基本格式:

  1. 目的地MAC地址:以太网帧的标准字段,用于标识目的地网络接口的硬件地址。

  2. 源MAC地址:同样是以太网帧的标准字段,表示发送者的硬件地址。

  3. EtherType字段:EtherCAT使用了特定的EtherType值(0x88A4),这告诉接收端该帧是一个EtherCAT数据包。

  4. EtherCAT报头:包含了用于EtherCAT操作的控制信息,比如命令类型(例如PDO,SDO,等)、长度等信息。

以下是EtherCAT报头的一些关键组成部分:

  • 命令:指示报文类型,例如PDO(过程数据对象)传输、SDO(服务数据对象)传输、错误指示等。

  • 索引:指示目标从站的位置或者是在整个EtherCAT帧中的位置。

  • 数据长度:报文中数据部分的长度。

  • 地址:从站地址或者是内存映射的地址,依据命令类型不同而定。

  1. 工作计数器(Working Counter):提供了一种错误检测机制,通过计算处理了报文的从站数量来确保通信的完整性。

  2. 数据:这是EtherCAT报文的主体部分,包含了实际的有效负载,比如过程数据、参数或其它控制信息。

  3. 填充:因为以太网的最小帧长度是64字节,所以如果数据部分不足,需要用填充字节来补足。

  4. 帧校验序列(Frame Check Sequence, FCS):这是以太网帧的标准结尾字段,用于检测帧在传输过程中是否出现错误。

image

EtherCAT协议的关键在于它的"在过程中处理"(processing on the fly)能力。从站设备在数据包通过时读取并相应地处理它们的相关部分数据,并且可以立即将响应数据插入到报文中,而不需要将整个报文读入内存然后再处理。这大大减少了通信延迟,使EtherCAT成为一个高效的实时以太网解决方案。

C++代码编写

SOEM(Simple Open EtherCAT Master)和SOES(Simple Open EtherCAT Slave)都是由Open Source Automation Development Lab (OSADL) eG支持开发的开源库。这些库是为了简化EtherCAT通信的开发而设计的。
SOEM作为一个开源的EtherCAT主站协议栈,是为了在各种平台上实现EtherCAT主站功能。它针对实时应用进行了优化,并且可以在多种操作系统上运行,包括实时Linux(通过PREEMPT_RT补丁)。
SOES是一个开源的EtherCAT从站协议栈,它旨在在嵌入式系统中实现EtherCAT从站功能。与SOEM类似,SOES也是为实时性能进行优化,能够在不同的硬件平台和操作系统上运行。
两者都是基于C语言编写,使它们可以在性能有限的嵌入式设备上运行,同时提供足够的灵活性来适应不同的应用需求。
这些库被广泛用于工业自动化和控制系统中,它们的开放源码特性使得用户可以下载、使用、修改并分发代码,而无需支付许可费用,这对于推动EtherCAT技术的广泛采用和社区支持非常重要。

下面给出C++调用SOEM和SOES作EtherCAT主从站的代码示例:

主站


#include <iostream>
#include "ethercat.h"

int main() {
    // 初始化网络接口
    if (ec_init("eth0")) {
        std::cout << "EtherCAT 初始化成功,网络接口 eth0" << std::endl;

        // 将所有从站置于PRE-OP状态
        if (ec_config_init(FALSE) > 0) {
            std::cout << "找到并配置了 " << ec_slavecount << " 个从站" << std::endl;

            // 配置和启动主站
            ec_config_map(&IOmap);
            ec_configdc();

            // 检查所有从站的状态
            ec_readstate();
            for (int i = 1; i <= ec_slavecount; i++) {
                std::cout << "从站 " << i << " 状态: " << ec_slave[i].state << std::endl;
            }

            // 交换过程数据
            while (true) {
                ec_send_processdata();
                ec_receive_processdata(EC_TIMEOUTRET);
                // 处理数据...
            }
        } else {
            std::cerr << "没有从站被找到!" << std::endl;
        }
    } else {
        std::cerr << "无法初始化网络接口!" << std::endl;
    }

    std::cout << "请求结束 EtherCAT 通信..." << std::endl;
    ec_close();

    return 0;
}

从站

#include <iostream>
// #include "soes.h" // 假设你有一个类似的从站库

void process_ethercat_data() {
    // 从站逻辑处理
    // 读取输入数据,处理逻辑,设置输出数据等
}

int main() {
    // 初始化从站栈
    // soes_init();

    // 从站主循环
    while (true) {
        // 维护EtherCAT状态机
        // soes_loop();

        // 处理EtherCAT数据
        process_ethercat_data();
    }

    return 0;
}

标签:协议,通讯,数据包,主站,以太网,EtherCAT,拓扑,时钟
From: https://www.cnblogs.com/Asp1rant/p/18178216

相关文章

  • 侦听协议与目录协议小记
    侦听协议MESI协议“ReadHit”和“WriteHit”表示内核在本地缓存中读写命中并获得有效数据;“ReadMiss”和“WriteMiss”表示内核在本地缓存中读写缺失,未获得有效数据;“ProbeReadHit”和“ProbeWriteHit”表示内核在其他内核的Cache中读写命中,获得有效数据的副本。在......
  • 475-便携式手提RapidIO协议光纤发包测试仪
    便携式手提RapidIO协议光纤发包测试仪一、平台简介   便携式手提RapidIO协议光纤发包仪,以RapidIO收发卡和X86主板为基础,构建便携式的手提设备。   RapidIO收发卡是以KU060PCIeX4的双路QSFP+光纤收发卡,支持双路RapidIOX4数据的收发设计。   ......
  • 便携式手提测试仪设计资料:474-便携式手提万兆网络协议测试仪
    便携式手提万兆网络协议测试仪一、平台简介   便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。   FPGA万兆卡是以Kintex-7XC7K325TPCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议的定制设计。  ......
  • 232自由口转Profinet网关接AB扫码枪与PLC通讯案例
     232自由口转Profinet网关(XD-PNR100/300),是一种用于将自由协议转换为Profinet协议的设备,可以实现不同网络之间的通信和数据交换。232自由口转Profinet网关高度的灵活性和可靠性使其成为工业自动化领域的重要工具,并将其与Profinet网络无缝集成,实现数据的快速传输和交换。另外23......
  • 基于Luckfox Pico的opencv使用UDP协议与ubuntu传输摄像头数据-小白进阶
    使用UDP传输opencv的mat数据并显示本教程适用于进阶的小白尝试先说一下背景吧,正在工作的我,突然间看到淘宝上有个很漂亮的价格还不错的linux小板子,遂买下。没错,工作太无聊以至于开始摸鱼学习~但奈何每天工作完回家就像躺着,所以板子到手都快半年了才开始研究实现了简陋的摄像头......
  • I2C协议
    I2C的时序如下图I2C总线进行数据传送时,时钟信号SCL为高电平期间,数据线SDA上的数据必须稳定;只有在SCL上的信号为低电平时,SDA上的高电平或低电平状态才允许变化。因为当SCL是高电平时,数据线SDA的变化被规定为控制命令,如上图所示的起始条件和停止条件。数据传送过程中,先传送最高......
  • 教你用Perl实现Smgp协议
    本文分享自华为云社区《华为云短信服务教你用Perl实现Smgp协议》,作者:张俭。引言&协议概述中国电信短消息网关协议(SMGP)是中国网通为实现短信业务而制定的一种通信协议,全称叫做ShortMessageGatewayProtocol,用于在短消息网关(SMGW)和服务提供商(SP)之间、短消息网关(SMGW)和短消息网关......
  • SPI协议
    CPOL就是决定SCLK这个时钟信号线,在没有数据传输的时候的电平状态。CPOL=0:空闲状态时,SCLK保持低电平CPOL=1:空闲状态时,SCLK保持高电平 CPHA就是决定数据位传输是从第一个时钟(SCLK)边沿开始,还是第二个从二个时钟(SCLK)边沿开始。CPHA=0:数据从第一个时钟(SLCK)边沿开......
  • ssh远程登录协议
    ssh远程登录协议什么是sshSSH即安全外壳协议(SecureShell),是一种网络协议,用于在计算机网络上提供安全的远程登录和命令执行功能。SSH通过加密通信通道来保护数据传输,防止敏感信息在传输过程中被窃听或篡改。SSH支持多种身份验证方法,包括密码、公钥和证书等,以确保只有授权用户能够......
  • 挖矿流量分析之Stratum挖矿协议
    目录前言区块链和挖矿相关概念挖矿木马挖矿协议StratumStratum工作过程前言之前做了一个关于“挖矿行为检测”的大创训练项目,在这里记录一下我关于挖矿检测相关内容的学习。区块链和挖矿相关概念区块链首先需要了解一些关于区块链的内容。注意,区块链和挖矿是两个紧密相关但又......