tokenpocket钱包网站首页|ethercat 主站

作者: tokenpocket钱包网站首页
2024-03-14 18:47:15

[工业互联-17]:常见EtherCAT主站与实现方法_ethercat主站开发-CSDN博客

>

[工业互联-17]:常见EtherCAT主站与实现方法_ethercat主站开发-CSDN博客

[工业互联-17]:常见EtherCAT主站与实现方法

文火冰糖的硅基工坊

已于 2023-07-08 17:15:54 修改

阅读量4.5k

收藏

51

点赞数

8

分类专栏:

工业互联

文章标签:

EtherCAT主站

工业以太网

于 2023-07-08 11:31:16 首次发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/HiWangWenBing/article/details/131608032

版权

工业互联

专栏收录该内容

22 篇文章

33 订阅

订阅专栏

目录

第1章 EtherCAT入门

1.1 简介

1.2 EtherCAT通信架构

第2章  EtherCAT主站方案

2.1 方案概述

2.2 主站配置步骤

2.3 EtherCAT主站软件

第3章  Windows操作系统支持EtherCAT的基本步骤

第4章 常见主站软件介绍:TwinCAT

4.1 简介

4.2 软件架构

4.3 应用程序架构

第5章  SOEM

5.1 简介

5.2 SOEM创建EtherCAT主站

5.3 QT添加SOEM主站

第1章 EtherCAT入门

1.1 简介

EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网通信协议,用于工业自动化和控制系统中实现高性能、实时数据传输和控制。它是由EtherCAT技术组织(ETG)开发和标准化的。

EtherCAT基于以太网物理层和数据链路层,但使用了一种特殊的通信方法,称为"Processing on the Fly"。这种方法使得数据帧能够在通过从站设备时进行实时处理,而不需要完全接收整个数据帧。这样,数据传输和控制可以实现高效率和低延迟。

EtherCAT通信采用主从架构,其中一个主站设备负责整个EtherCAT网络的管理和控制,而从站设备则负责在数据环网上传递数据。

主站设备可以是计算机、工控机、PLC等,

而从站设备可以是传感器、执行器、驱动器等。

EtherCAT具有以下特点:

实时性能:EtherCAT通过在数据环网上逐站处理数据,实现了高速和低延迟的数据传输。这使得它非常适用于对实时性要求较高的应用,如运动控制、机器视觉等。 灵活性:EtherCAT网络可以支持从几个节点到数千个节点的连接,同时支持多种网络拓扑结构,如星型、总线型、环形等。这使得它能够适应不同规模和复杂度的工业系统。 高带宽利用率:EtherCAT可以利用以太网的高带宽特性,同时在同一物理介质上传输控制数据和其他应用数据,从而提高带宽利用效率。 易于集成:EtherCAT基于以太网标准,使用标准的以太网物理层和数据链路层。这使得它能够与其他以太网设备和网络互操作,并且易于与现有以太网基础设施集成。

EtherCAT已经在工业自动化和控制领域得到广泛应用,包括机械设备、工厂自动化、过程控制等各种应用场景。它提供高效的实时通信和控制能力,帮助提升工业系统的性能、灵活性和可扩展性。

(300条消息) [工业互联-12]:主流的工业以太网技术简介(PROFINET、POWERLINK、ETHERNET/IP、ETHERCAT、SERCOSIII、MODBUS TCP、CC-LINK IE)_文火冰糖的硅基工坊的博客-CSDN博客

1.2 EtherCAT通信架构

EtherCAT通信架构基于主从架构,其中一个主站设备控制整个EtherCAT网络,而多个从站设备负责在数据环网上传递数据。以下是EtherCAT通信架构的主要组成部分:

主站(Master):主站是EtherCAT网络的控制中心,负责协调整个网络的数据传输和控制。主站可以是计算机、工控机、PLC等设备,它通过EtherCAT接口连接到EtherCAT网络。主站发送和接收数据帧,并处理从站设备的数据。 从站(Slave):从站是在EtherCAT网络中扮演被动角色的设备。从站可以是各种不同类型的设备,如传感器、执行器、驱动器等。每个从站设备都有一个唯一的设备地址,通过EtherCAT通信以实时方式与主站交换数据。 数据环网(Data Ring):数据环网是连接主站和从站的物理通信介质,通常是双绞线、光纤或其他以太网标准支持的物理介质。这个环网形成了一个环形或星型网络拓扑结构,可以支持多个从站设备连接到同一个环网上。 EtherCAT Slave Controller(ESC):每个从站设备上都有一个EtherCAT Slave Controller,负责实时处理和转发从站数据。它的作用是解析EtherCAT数据帧、执行数据处理和控制算法,并将数据传递到下一个从站或主站。 EtherCAT数据帧(Frame):EtherCAT数据帧是在数据环网上传输的通信单位,它包含控制指令、数据和状态信息。在一个周期内,主站从流经数据环网的每个从站设备上读取和写入数据。

EtherCAT的通信过程非常快速和高效。主站发送一个带有特殊控制字段的数据帧,该数据帧在数据环网上循环传输。每个从站设备通过处理数据帧中的控制指令,并在帧传输周期内完成数据读取和写入操作。数据帧的循环传输确保了实时性和低延迟的数据传输。

通过这种主从架构和实时数据传输方式,EtherCAT能够实现高性能的工业控制和自动化应用,适用于需要实时性、快速响应和高带宽的工业环境。

第2章  EtherCAT主站方案

2.1 方案概述

实现EtherCAT主站(Master)功能的方案有多种选择,取决于具体需求和系统架构。

以下是一些常见的EtherCAT主站方案:

PC-based软件主站:使用一台PC或工控机作为EtherCAT主站,通过安装适当的EtherCAT主站软件,如Beckhoff的TwinCAT或KINGSTAR的EtherCAT Master等,来实现EtherCAT通信和控制功能。这种方案适用于需要灵活性和可编程性的应用,适用于实时数据采集与处理。 PLC作为主站:许多主流PLC供应商提供了集成EtherCAT主站功能的PLC设备。这些PLC设备具有专用的EtherCAT接口,可以直接与EtherCAT网络连接。PLC作为主站具有实时性、可靠性和易于集成的特点,适用于以实时控制为主目标的工业控制和自动化系统,用于PLC控制从站设备。 封装主站模块:一些厂商提供了专用的EtherCAT主站模块,可以作为独立的硬件设备,通过串行通信接口(如串口、以太网接口等)连接到主控设备(如PC、PLC等)。这些模块通常提供了高性能的EtherCAT通信功能,可以方便地集成到现有的系统中。

无论选择哪种方案,实现EtherCAT主站功能的关键是:使用相应的EtherCAT主站软件或硬件模块,并遵循EtherCAT通信协议。该主站软件或硬件模块将提供EtherCAT数据交换和协议处理的功能,使主站能够与从站设备进行通信和控制。

2.2 主站配置步骤

在配置EtherCAT主站时,需要进行以下步骤:

设置通信参数:配置主站与EtherCAT网络连接的物理接口和通信参数,如波特率、网络拓扑结构等。 扫描并识别从站:通过主站软件或配置工具,进行EtherCAT网络的扫描和从站设备的识别。通过识别从站设备,为每个从站分配唯一的设备地址。 配置从站通信和数据:为每个从站配置通信参数和数据映射。这包括定义数据对象、数据类型、数据采样频率等。 开发应用程序:使用主站软件或编程环境,编写应用程序以实现与从站设备的数据交换、数据处理和控制操作。

需要注意的是,实现EtherCAT主站功能需要遵循EtherCAT通信协议规范,并使用与从站设备兼容的主站软件或硬件模块。在选择和配置EtherCAT主站方案时,应根据具体需求、开发平台和供应商支持来进行评估和选择。

2.3 EtherCAT主站软件

有多个供应商提供了EtherCAT主站软件,以下是几个常用的EtherCAT主站软件:

TwinCAT(Beckhoff):TwinCAT是Beckhoff提供的一款强大的EtherCAT主站软件。它是一个全面的自动化控制软件的开发平台,集成了PLC、运动控制、HMI和数据采集等功能。TwinCAT具有丰富的开发工具和库,可用于开发复杂的EtherCAT控制系统。 KINGSTAR EtherCAT Master(IntervalZero):KINGSTAR EtherCAT Master是IntervalZero公司提供的一种软件EtherCAT主站解决方案。它提供了实时以太网通信和控制功能,可与多个EtherCAT从站设备进行通信。KINGSTAR EtherCAT Master可以与Windows上的实时软件配合使用。 SoftMotion for EtherCAT(National Instruments):National Instruments提供了SoftMotion for EtherCAT软件,它是NI实时控制平台LabVIEW和CompactRIO的一部分。SoftMotion for EtherCAT具有强大的运动控制能力,可用于快速开发和部署EtherCAT控制系统。 CODESYS EtherCAT Master:CODESYS是一款广泛使用的可编程控制器开发环境,CODESYS EtherCAT Master是其提供的EtherCAT主站功能模块。它允许开发人员使用CODESYS进行EtherCAT通信和控制应用的开发,同时具备很好的可扩展性和灵活性。 SOEM(Simple Open EtherCAT Master)是一个开源的EtherCAT主站实现,由EtherLab项目开发并维护。它提供了一个简单、灵活和可移植的EtherCAT主站解决方案,适用于嵌入式系统和实时控制应用。

这些EtherCAT主站软件提供了丰富的功能和开发工具,可以满足各种复杂控制系统的需求。选择合适的软件取决于具体应用需求、开发平台和供应商支持。在选择软件之前,建议评估软件功能、易用性、性能和支持等因素,并根据实际案例进行验证。

第3章  Windows操作系统支持EtherCAT的基本步骤

Windows操作系统可以通过相应的驱动程序和软件支持EtherCAT(Ethernet for Control Automation Technology)。

EtherCAT是一种实时以太网通信协议,广泛用于工业自动化领域。

它使用基于以太网的通信方式,通过传输以太网数据帧的方式来实现实时数据传输和控制。

要在Windows上实现EtherCAT支持,可以采取以下步骤:

安装EtherCAT从设备驱动程序:首先,需要安装适用于Windows的EtherCAT驱动程序。这些驱动程序通常由EtherCAT硬件供应商提供,可用于与硬件EtherCAT从设备进行通信,实现etherCAT通信协议。 使用EtherCAT主站软件:在Windows上安装和配置EtherCAT主站软件,例如TwinCAT、EtherCAT Master等。这些软件允许用户配置和管理EtherCAT网络、从设备和通信参数。EtherCAT主站软件通过EtherCAT从设备驱动程序与从设备进行通信!!! EtherCAT从设备配置:通过EtherCAT主站软件,用户可以进行EtherCAT设备的配置。这包括添加设备、定义设备通信地址和参数等。 开发应用程序:使用Windows下的编程语言和工具(如C/C++、C#等),开发应用程序以与EtherCAT设备进行通信。通常,EtherCAT的开发包和API可以提供给开发人员,以简化EtherCAT通信的编程。 数据传输和控制:通过编写应用程序,可以使用EtherCAT协议进行数据传输和控制。应用程序可以使用EtherCAT主站软件提供的API或驱动程序所提供的API,与EtherCAT设备进行实时通信。

需要注意的是,EtherCAT的支持和集成可能因硬件、操作系统版本和软件工具等因素而有所差异。在进行EtherCAT的集成和开发时,建议参考相关硬件和软件供应商提供的文档和指南,以确保正确配置和操作EtherCAT网络和设备。

关注博主即可阅读全文

优惠劵

文火冰糖的硅基工坊

关注

关注

8

点赞

51

收藏

觉得还不错?

一键收藏

打赏

知道了

0

评论

[工业互联-17]:常见EtherCAT主站与实现方法

EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网通信协议,用于工业自动化和控制系统中实现高性能、实时数据传输和控制。它是由EtherCAT技术组织(ETG)开发和标准化的。EtherCAT基于以太网物理层和数据链路层,但使用了一种特殊的通信方法,称为"Processing on the Fly"。这种方法使得数据帧能够在通过从站设备时进行实时处理,而不需要完全接收整个数据帧。这样,数据传输和控制可以实现高效率和低延迟。

复制链接

扫一扫

专栏目录

基于stm32构建EtherCAT主站,采用了开源的soem方案

12-05

基于stm32构建EtherCAT主站,将soem方案移植到了stm32上。基本功能测试正常,可以驱动一部分的伺服电机,但也存在一些bug。整体移植方式应该是正确的,具体移植方式将写于CSDN博客中。

SOEM:简单的开源EtherCAT主站

01-30

SOEM:简单的开源EtherCAT主站

参与评论

您还未登录,请先

登录

后发表或查看评论

ethercat通讯协议的详细说明及编程提示

12-13

详细讲述了ethercat通讯协议及其编程

Windows上开发运行EtherCAT主站的几种方案

MotroEngineer的博客

08-08

1320

本文介绍了几种可以在windows上开发EtherCAT的方案,因为EtherCAT网络的高实时要求与windows本身匹配度不高,所以如何在windows上开发运行EtherCAT就成为开发者的明显需求,希望本文介绍的几种方法能帮助开发人员更好使用EtherCAT。

[工业互联-20]:常见EtherCAT主站方案:TwinCAT的Windows 解决方案

文火冰糖(王文兵)的博客

07-09

2216

TwinCAT是由德国Beckhoff公司开发的一套功能强大的自动化软件平台。它是一个集成的开发环境,用于实现实时控制、PLC编程、运动控制、HMI(人机界面)设计和数据采集等应用。TwinCAT广泛应用于工业自动化、机械控制、过程控制和实时系统等领域。

EtherCat主站与从站简介

JXES智能生态系统

03-29

3717

ETG.1000 系列文件是在 EtherCAT Technology group 范围内对 EtherCAT Technology 详细说明。

自建极简Ethercat主站-底层驱动编写

西澳峰的博客

06-05

2060

MECM(Mini Ethercat Master),名字随便起的。已经学习了一段时间的Ethercat总线了,目前的想法就是自己简单实现一个Ethercat主站,没有太多的冗余功能,暂时不考虑太多的容错机制,仅实现目前用到的FOE、COE、过程数据通信这三个功能,仅用于学习和加深理解。主站的硬件是GD32F450Z_EVAL开发板,板载的以太网芯片是DP83848VV。基本接口已经写好,接下来就是按照Ethercat的数据包对数据进行打包,然后将发送出去。名称说明长度。

EtherCat--主站开源的C语言库SOEM-环境搭建

qq_41931610的博客

03-03

3960

由于开发winpcap项目的目的在于为win32应用程序提供访问网络底层的能力,因此开发包里面有大量的WIN32的标识符,直接使用会出现“未定以标识符”错误。运行simple_test.exe \Device\NPF_{XXXX},其中\Device\NPF_{XXXX}是电脑的网络设备符。3.新建一个空项目。以管理员的权限打开VS2017,新建一个VC++的Win32控制台应用程序,设置为空项目。生成全部测试文件(生成exe等文件)simple_test.exe文件,至此完成了SOEM源码的编译。

C#以太网简介

cfqq1989的博客

09-02

2341

这个0表示8个bit,就是说前面24bit表示网段,后面8bit才表示电脑ip(相当于 24bit手机区号, 8bit才是手机号码)这样的好处是类似拖线板。全0地址系统保留,全1地址是广播地址,所以8bit是256减去2地址是254个可用地址。这个也算以太网的一部分,他用于扫描当前网段下所有的电脑ip地址(就相当于,当前手机区号下,有多少个手机号码是在 占线状态),在占线的ip下,可以查到电脑的名字。(总长是32bit,用刀砍一下,前面的是网段,后面的是电脑ip)用刀砍的过程叫子网掩码。

基于STM32的伺服总线EtherCAT主站设计——SOEM方案

weixin_48501028的博客

04-16

7553

本文介绍在正点原子的STM32H743开发板上,使用SOEM方案实现EtherCAT主站通讯,本文记录从零基础学习路线,从入门到移植成功控制电机转动。

TI EtherCAT主站实现方案

10-22

TI官方的Tether CAT主站实现方案,详细的可以到其官网上了解。EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

soem-w5500-rpi:Raspberry pi的开源实时EtherCAT主站

02-05

soem-w5500-rpi:Raspberry pi的开源实时EtherCAT主站

ethercat-1.5.2.rar_Ethercat主站_ethercat 1.5.2_igh_igh Windows_mas

07-14

主要是关于igh开源主站的介绍以及使用。这个可以作为参考文档。

Soem-1个电机转圈圈PV模式-添加代码注释-CSDN - EtherCAT主站-SOEM专栏的源代码

01-09

EtherCAT主站-SOEM专栏的源代码。 EtherCAT主站SOEM -- 16 --Qt-Soem通过界面按键控制电机转圈圈PV模式,这一篇博客的源代码,博客链接( 正在编写,2024.1.14发布, ...

Soem-跟从站通讯到OP状态-添加代码注释-CSDN - EtherCAT主站-SOEM专栏的源代码

01-09

EtherCAT主站-SOEM专栏的源代码。 EtherCAT主站SOEM -- 9 -- SOEM之基于QT搭建自己的EtherCAT主站,这一篇博客的源代码,博客链接( https://blog.csdn.net/qq_50808730/article/details/134361490 )。 注意: 该...

【尺寸检测】基于matlab机器视觉图像目标尺寸测量【含Matlab源码 4087期】.mp4

03-12

Matlab研究室上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白;

1、代码压缩包内容

主函数:main.m;

调用函数:其他m文件;无需运行

运行结果效果图;

2、代码运行版本

Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主;

3、运行操作步骤

步骤一:将所有文件放到Matlab的当前文件夹中;

步骤二:双击打开main.m文件;

步骤三:点击运行,等程序运行完得到结果;

4、仿真咨询

如需其他服务,可私信博主或扫描视频QQ名片;

4.1 博客或资源的完整代码提供

4.2 期刊或参考文献复现

4.3 Matlab程序定制

4.4 科研合作

HTML文件,一个网页特效

03-12

如果带到学校,一定会秀翻全学校。别不信,试试[偷笑]

STM32单片机FPGA毕设电路原理论文报告基于AT89C52单片机CAN总线节点的设计

最新发布

03-12

STM32单片机FPGA毕设电路原理论文报告基于AT89C52单片机CAN总线节点的设计本资源系百度网盘分享地址

基于ssm+jsp的高校专业信息管理系统源码数据库.doc

03-12

基于ssm+jsp的高校专业信息管理系统源码数据库.doc

ethercat 主站stm32

09-05

EtherCAT是一种高性能的实时以太网通信协议,而STM32是意法半导体(STMicroelectronics)公司推出的一种32位微控制器。二者结合起来可以实现EtherCAT主站的功能。

EtherCAT主站是一个控制硬件设备的节点,负责与EtherCAT从站进行通信。在EtherCAT网络中,主站负责发送控制指令和接收从站返回的数据。STM32作为一个强大的微控制器芯片,具有丰富的外设和高性能的计算能力,非常适合用来实现EtherCAT主站的功能。

为了实现EtherCAT主站,使用STM32芯片需要进行以下步骤:

第一步是在STM32芯片上运行EtherCAT主站的软件。可以使用ST公司提供的HAL库或者第三方开发环境,例如Code Composer Studio或IAR Embedded Workbench等。这些工具可以帮助我们开发出适用于EtherCAT主站的软件。

第二步是配置STM32的GPIO引脚和时钟,以使其能够与EtherCAT通信。根据EtherCAT的要求,我们需要将一些引脚分配为发送和接收数据、时钟同步和硬件中断等功能。

第三步是设置STM32的网络接口,以便与EtherCAT网络连接。这可能包括引入一些PHY芯片或其他外设来支持以太网通信。

第四步是开发EtherCAT主站的功能代码。这包括处理接收到的从站数据、发送控制指令、处理同步时钟等。通过合理设计代码,我们可以实现实时性和可靠性要求。

第五步是进行调试和测试。我们需要验证EtherCAT主站的功能是否正常工作,是否能够与其他从站进行通信。

总之,使用STM32芯片作为EtherCAT主站的控制器可以用来实现高性能和实时性控制的需求。通过合适的软件开发和硬件配置,我们可以充分发挥STM32芯片的优势,实现一个可靠和高效的EtherCAT主站。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

文火冰糖的硅基工坊

CSDN认证博客专家

CSDN认证企业博客

码龄4年

人工智能领域优质创作者

2065

原创

233

周排名

134

总排名

1524万+

访问

等级

4万+

积分

15万+

粉丝

7556

获赞

1302

评论

3万+

收藏

私信

关注

热门文章

[4G&5G专题-118]:5G培训应用篇-3-5G新的业务与应用-智能电网、车联网、智能制造、无人机等

118720

[从零开始学习FPGA编程-6]:快速入门篇 - 操作步骤1 - 国内外FPGA主要厂家及其主要产品系列、开发工具

107187

[从零开始学习FPGA编程-8]:快速入门篇 - 总体 - FPGA功能开发详细流程与关键步骤解读

106831

[4G&5G专题-119]:5G培训应用篇-4-5G典型行业应用的解决方案(车联网、智慧医疗、智能教育、智能电网)

95879

[深入研究4G/5G/6G专题-28]: 5G NR开机流程4.6 - MSG5 (RRCSetupComplete)消息的调度

72678

分类专栏

深入研究4G/5G/6G专题

付费

61篇

从零开始学FPGA编程

付费

58篇

人工智能-YOLO专题

付费

39篇

人工智能-从零开始学DeepFaceLab

付费

22篇

工业自动化

26篇

管理与领导

141篇

情商

12篇

计算机-数据结构

1篇

数据

计算机-算法

机器人

3篇

操作系统

人工智能-大语言模型与生成式AI

5篇

编程系列-QT

44篇

激光原理与应用

75篇

随缘参悟

161篇

工业互联

22篇

人工智能-ChatGPT

架构之路

277篇

创业之路

102篇

OAI (Open Air Interface)

29篇

4G+5G FAPI

8篇

人工智能-综述

14篇

Linux用户空间编程

7篇

嵌入式系统

40篇

需求管理

11篇

项目管理

37篇

人工智能-深度学习

206篇

人工智能-PyTorch

119篇

技术发展

29篇

用python辅助学生中考与高考

4篇

无线通信基础培训

15篇

硅基生命-漫谈

3篇

电动智能汽车

12篇

物联网-方案

3篇

通信-图解通信原理与案例分析

35篇

心理学-解构心之理

机器学习与scikit-learn

58篇

量化人生

概率论与数理统计

5篇

云原生专题

65篇

问题与解决

UML专题

2篇

计算机基础

1篇

人工智能-Python基础

15篇

人工智能-TensorFlow

63篇

数值计算

19篇

人工智能-数学基础

30篇

人工智能-图像处理

1篇

数学建模

人工智能-自然语言处理NLP

人工智能-自动驾驶

DSP处理器快速入门

8篇

信息论与编码理论

6篇

智能电网

4篇

智能制造

3篇

生命科学-人体组织与坯胎学

生命科学-人体科学

软件工程

1篇

硅基生命-认知神经科学

通信-4G/5G/6G基础

162篇

赚钱-数字化时代

28篇

赚钱-量化投资学习

41篇

杂谈-杂谈随感

15篇

赚钱-技术人员的赚钱之道

10篇

技术至简

16篇

专利与论文

20篇

通信-ORAN专题系列

61篇

通信-星星之火

60篇

生活-人生百味

10篇

生活-生活中的小技巧

2篇

碳基生命-心理咨询

碳基生命-心理学与生活

技术-灵星之光

1篇

赚钱-手把手搭建Python量化平台

3篇

通信-DSP数字信号

测试-jenkins专题

3篇

编程-开发工具

8篇

编程-Python系列

26篇

心理学-思维模式

19篇

通信-《信号与系统》解读

15篇

编程-C++系列

编程-程序人生

通信-物联网LoRa系列

33篇

Linux内核空间编程

硅基生命-神经工程

最新评论

[架构之路-109]-《软考-系统架构设计师》-软件架构设计-2-软件架构概述:架构风格

sunray97:

2.6章节的习题,麻烦老师给一下答题可以不。想验证一下学习效果。辛苦啦。

[4G&5G专题-31]:物理层-物理信道、信号、映射概述

。:

写的太好了,谢谢大佬分享

[4G&5G专题-37]:5G NR物理层-物理广播信道PBCH与主信息块MIB

weixin_51737027:

大佬,请问一下PBCH的更新周期怎么理解啊,这里的更新指的是更新什么内容呢?

[4G&5G专题-108]:部署 - LTE无线网络室内覆盖规划、设计与室内分布式系统

非洲大佬:

有5G双路室分案例没

[激光器原理与应用-5]:激光二极管LD (Laser Diode)与激光二极管驱动器(LD驱动器)

@枭白:

2.1讲错了。LD是发光器件,PD是光电转换器件。三个引脚中,一个是公共地,一个是LD正极,输入电流控制LD发光,还有一个是PD负极,PD在合适的工作条件下,PD输出电流反应LD发光强度,因此PD是用来检测LD工作状态的,即是一个反馈器件。LD开始的时候还是电子空穴复合发光,但是LD内有谐振腔,内部介质载流子相对反转分布,一开始发出的微弱光在谐振腔中来回反射的时候,由于载流子反转分布,使得受激辐射大量发生使增益大于损耗,因此微弱光不断放大,最终产生激光。

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

[创业之路-101] :光学工程师的角色划分与光学设计的流程

[创业之路-100] :结构工程师的角色划分与结构设计的流程

[创业之路-99/管理者与领导者-141] :绩效管理-1-绩效管理是一把手工程、是系统工程、是化繁为简工程

2024

03月

24篇

02月

55篇

01月

37篇

2023年487篇

2022年652篇

2021年545篇

2020年268篇

目录

目录

分类专栏

深入研究4G/5G/6G专题

付费

61篇

从零开始学FPGA编程

付费

58篇

人工智能-YOLO专题

付费

39篇

人工智能-从零开始学DeepFaceLab

付费

22篇

工业自动化

26篇

管理与领导

141篇

情商

12篇

计算机-数据结构

1篇

数据

计算机-算法

机器人

3篇

操作系统

人工智能-大语言模型与生成式AI

5篇

编程系列-QT

44篇

激光原理与应用

75篇

随缘参悟

161篇

工业互联

22篇

人工智能-ChatGPT

架构之路

277篇

创业之路

102篇

OAI (Open Air Interface)

29篇

4G+5G FAPI

8篇

人工智能-综述

14篇

Linux用户空间编程

7篇

嵌入式系统

40篇

需求管理

11篇

项目管理

37篇

人工智能-深度学习

206篇

人工智能-PyTorch

119篇

技术发展

29篇

用python辅助学生中考与高考

4篇

无线通信基础培训

15篇

硅基生命-漫谈

3篇

电动智能汽车

12篇

物联网-方案

3篇

通信-图解通信原理与案例分析

35篇

心理学-解构心之理

机器学习与scikit-learn

58篇

量化人生

概率论与数理统计

5篇

云原生专题

65篇

问题与解决

UML专题

2篇

计算机基础

1篇

人工智能-Python基础

15篇

人工智能-TensorFlow

63篇

数值计算

19篇

人工智能-数学基础

30篇

人工智能-图像处理

1篇

数学建模

人工智能-自然语言处理NLP

人工智能-自动驾驶

DSP处理器快速入门

8篇

信息论与编码理论

6篇

智能电网

4篇

智能制造

3篇

生命科学-人体组织与坯胎学

生命科学-人体科学

软件工程

1篇

硅基生命-认知神经科学

通信-4G/5G/6G基础

162篇

赚钱-数字化时代

28篇

赚钱-量化投资学习

41篇

杂谈-杂谈随感

15篇

赚钱-技术人员的赚钱之道

10篇

技术至简

16篇

专利与论文

20篇

通信-ORAN专题系列

61篇

通信-星星之火

60篇

生活-人生百味

10篇

生活-生活中的小技巧

2篇

碳基生命-心理咨询

碳基生命-心理学与生活

技术-灵星之光

1篇

赚钱-手把手搭建Python量化平台

3篇

通信-DSP数字信号

测试-jenkins专题

3篇

编程-开发工具

8篇

编程-Python系列

26篇

心理学-思维模式

19篇

通信-《信号与系统》解读

15篇

编程-C++系列

编程-程序人生

通信-物联网LoRa系列

33篇

Linux内核空间编程

硅基生命-神经工程

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

关于EtherCAT主站,你想知道的都在这里! - 知乎

关于EtherCAT主站,你想知道的都在这里! - 知乎首发于ZLG专栏切换模式写文章登录/注册关于EtherCAT主站,你想知道的都在这里!ZLG致远电子为激活更丰富的EtherCAT应用场景和创新产品,ZLG致远电子研发团队推出系统的EtherCAT主站解决方案,本篇将从软硬件方面详细介绍EtherCATNET-100M主站控制设备。EtherCAT是当今主流的高速现场总线解决方案,也是工业4.0智能制造的先进技术核心。现场总线技术适合于大数据量传输,但不适合于测控工程领域中的确定性进程通讯以及高速数据传输。因此,EtherCAT的设计目标是支持标准的以太网,并且能够以最小的硬件成本在实时控制领域开展使用,更新周期快,稳定性高。一、致远电子EtherCAT主站性能如何?EtherCATNET-100M是一款多功能以太网转EtherCAT主站设备,EtherCAT总线传输速率可达100Mb/s,可实现闭环伺服系统的实时控制与实时数据传输,具有高性能、高传输速度、高可靠性通讯等优点。集成2路EtherCAT接口,具有线缆冗余的机能。图1 EtherCATNET-100MEtherCAT主站产品功能特性概览:支持多达32轴同步和1024个EtherCAT I/O应用;运动控制伺服通讯周期不超过500us,I/O主站资料更新周期不超过200us;采用大规模可编程器件FPGA实现专用以太网MAC以优化实时性能; 丰富的外设接口:主站集成1路千兆通用以太网接口、2路专用EtherCAT接口、1路CAN(FD)接口、2路USB2.0接口、1路HDMI接口、1路RS-232接口、1路SD卡接口、2路DI/DO数字输入输出;采用4GB工业级EMMC,掉电非易丢失数据;内置RTC,断电可完成计时或事件记录功能;宽输入9-48V直流供电电压,额定功耗6W;工作温度:-40℃~+85℃。二、主站系统构成EtherCATNET-100M可快速实现EtherCAT主站控制通讯,集成1路千兆通用以太网接口、2路专用EtherCAT接口、1路CAN(FD)接口、1路HDMI接口、1路SD卡接口、2路DI/DO数字输入输出等。丰富的外设接口可实现更智能化的EtherCAT主站控制。图2 主站系统构成三、环型拓扑冗余技术冗余以太网的拓扑结构包括环型、网络型和混合型拓扑,对于一般的工业以太网系统,可直接用较为简单实用的环型拓扑结构。EtherCAT主站提供两路EtherCAT专用网口,在环型拓扑结构中,将LAN1接到从站(ESC)节点1的IN口,然后从站节点1的OUT口接到下一个从站节点的IN口,依次连接,直到最后一个从站节点连接到EtherCAT主站的LAN2口,如下图所示。由于ESC从站控制器具有自动回环功能,当环形结构中出现单点故障时,EtherCAT网络信息流能在故障断点处自动回环,主站仍然可以与各个从站保持数据传输,大大增强了EtherCAT网络的可靠性与可维护性。图3 环型拓扑冗余技术四、搭载HDMI和CANFD接口,满足更多应用需求EtherCATNET-100M设备提供1路HDMI接口,用于与人机界面或PC显示器的接口通信,接口物理形式为HDMI-Type A。HDMI接口特点与电气参数:高清晰、无损压缩的数字信号传输,其分辨率达到1280x720;支持HDMI 2.0向下兼容版本规范;支持EDID和DDC2B标准; 支持热插拔;具有更好抗干扰能力,实现最长10m无增益传输。设备提供1路隔离CAN(FD)接口,接口物理形式为DB9插座。支持CAN波特率40K~5Mbps,支持CAN、CANFD ISO或CANFD Non-ISO多种控制器类型,内置软件设置CAN(FD)通道120欧姆终端电阻使能开关。可高效进行CAN FD总线二次开发,满足多总线应用需求。图4 CANFD接口应用五、化繁为简的函数库EtherCAT主站库以Linux下动态链接库(so)的方式提供,可以实现EtherCAT主站控制等功能。主站可以通过函数库启动主站RPC服务器,RPC客户端可以通过网络连接到主站RPC服务器,控制主站完成EhterCAT相关的功能。函数库包含zecm.h头文件和libzecm.so动态连接库文件。zecm.h文件包含了EtherCAT主站的数据类型,数据结构以及函数声明,用户开发自定义主站需要配置交叉编译环境,将编译好的程序下载到主站上,在主站运行编译后的程序以完成EtherCAT的通信控制功能。图5 丰富的函数库传统复杂的函数,精炼为如下9条简单易用的函数库:EcatMasterLibInit,EtherCAT主站库初始化;EcatMasterLibExit,释放EtherCAT主站库;EcatSimpleStart,启动主站和RPC服务器;EcatSimpleStop,停止主站和RPC服务器;EcatRequestMasterState,发送网络管理命令;EcatGetMasterState,获取主站当前状态;EcatGetSlaveState,获取从站当前状态;EcatSetExtCtrlTaskHandler,设置用户过程数据回调函数;EcatResetExtCtrlTaskHandler,复位用户过程数据回调函数;EcatCoeSDODownload,SDO下载;EcatCoeSDOUpload ,SDO上传。六、技术一图看懂主站运行流程主站可以运行用户编写的程序,主站程序运行一般遵循的流程如下。图6 主站运行流程图发布于 2021-01-13 16:17CAN总线工业互联网/物联网平台物联网​赞同 8​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录ZLG专栏工业互联网智慧化产品与解决方案

EtherCAT学习之路——概述 - 知乎

EtherCAT学习之路——概述 - 知乎首发于EtherCAT学习之路切换模式写文章登录/注册EtherCAT学习之路——概述白细胞 最近在做基于EtherCAT的项目,看了一些网上的博客,感觉写的都比较松散。虽然,自己也是才开始学习,希望能把这段时间学到的东西总结一下。这是倍福的官方介绍,有时间的可以看一下。1.EtherCAT简介 EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用标准的以太网控制器。 EtherCAT是一种工业以太网技术,看到的大多数应用场景都是伺服电机。因为是基于以太网的技术,所以EtherCAT相比于CAN总线而言,速率上要快不少。EtherCAT可以达到100M的速率,而CAN只有1M。此外,EtherCAT还具备低延时和精准同步的特点。 在工业总线中,低延时、精准同步是用户的关键需求。试想一下,工厂中某个器件的生产需要A/B/C三个机器协同操作,原本预想的是A先操作期间,然后B把器件传递给C,C再操作。如果,A/B/C不同步,或者操作命令的传达有延时,A还没有操作完器件,B就已经开始进行传递了。这时要么器件损坏,要么就做出来个半成品。而EtherCAT相比于普通的以太网技术就有这两点的优点。2.EtherCAT基本原理 EtherCAT基本原理这一节PLC攻城狮的《浅析EtherCAT 总线》讲的还是比较清楚,推荐大家看一下。下面我就简单说一下自己的理解。 倍福官方对EtherCAT的传递机制的命名叫做:ON The Fly。图 2-1 On The Fly On The Fly技术可以从两方面来解读,第一个方面是以太帧“时分复用”。一般以太帧里都只包含了一个设备发送的消息,5个设备就会发送5条以太帧。而EtherCAT则是多个从站共享一条以太帧。就像图2-1中的火车,EtherCAT主站发出了“火车”(以太帧),各个从站则从这辆火车的不同的“车厢”(子报文)中提取或插入自己的“乘客”(消息)。这样一来就实现了以太帧的“时分复用”,只用一条以太帧(最大1486byte),就可以让各个从站都收发出自己的消息,大大的降低了通信的延时(这一部分《浅析EtherCAT 总线》里面讲的比较清楚,还没理解的同学可以看看)。 On The Fly影响的另一个方面就是总线仲裁了。所谓总线(例如CAN总线),就是大家都共用一条通道来通信,各个设备都挂载在同一条总线上。所以,当一个总线上的多个设备同时想要发消息的时候,就会产生冲突,所以,就有总线仲裁的机制。控制器决定当前时刻,谁来发消息,谁来“占用”这条总线。而EtherCAT玩了一个花样,EtherCAT的各个设备之间是一种P2P(Point to Point)的连接方式,这些设备根本没有连接在“同一条”总线上。下面是EtherCAT的连接结构。图 2-2 EtherCAT连接结构 图2-2中,最左边的是主站,后面的都是从站,各个从站下面还挂载了不同的设备。可以看到主站向从站1发送以太帧,从站1接收、处理完自己的子报文后,再把以太帧发送给从站;从站2接收,处理完自己的子报文后在发送给从站3;如此往返,直到最后一个从站n接收处理完自己的消息,再把这条以太帧返回回去。所以,各个从站之间根本就不会存在总线冲突。EtherCAT只需要预先配置好各个从站占用的子报文位置,也就是On The Fly技术,就可以解决总线总裁这一个老大难的问题,确实是一箭双雕。 当然,这种解决方案也是有它的缺点的。比如,从站数量非常多的时候,最后一个从站就需要等前面的从站一次次转发才能收到消息。当然,我觉得EtherCAT应该也想到了这点,应该也采取了某种机制来避免这种最远设备延迟的缺陷。但是,我还没深挖这个问题,所以,没看到相关的解决机制。如果有了解的同学希望能指教一下。3.EtherCAT系统组成 EtherCAT系统主要就一个主站和若干从站组成。如图3-1所示:图3-1 EtherCAT系统组成 EtherCAT一般使用软件的方式来实现主站,包括倍福的TwinCAT,Igh,KingStar等等都是基于一台实时操作系统的PC,通过以太网卡,来实现主站的功能。因为,主站不是我的项目重点,所以,目前了解的还不多。先挖一个坑,后面有时间了研究一下,再来补上。现在我是用TwinCAT的免费版来学习和调试的。TwinCAT本身是收费的,不过,它有试用版,试用版不具备实时功能,调试一下设备还是足够了。 从站的组成如图3-2所示:图 3-2 从站组成 从站一般是有3部分器件组成的:物理层器件、EtherCAT从站控制器(EtherCAT Slave Control)和微处理器(MCU)。物理层器件就是以太网的PHY芯片和网口,ESC是实现EtherCAT协议栈的专用ASIC,从站控制微处理器主要实现应用层(如CANopen)和用户自定义的程序。 看到这里没有通信基础知识的通信可能就有点懵逼了。物理层,数据链路层,应用层这些是个啥玩意?这里我就简单说一下,想要深入理解还是可以看看OSI模型,大多数的通信技术都脱离不了这个框架。图 3-3 OSI模型 这里偷了个懒,盗用一下PLC攻城狮的图片。OSI中有7层,EtherCAT系统中只用了3层:物理层、数据链路层、应用层。先降维的说一下这几层是啥意思。最基本的通信就是咱们人类说话,我就以我们普通对话来讲解一下这三层的意思。 物理层:人类的语言是通过嘴发声,声波在空气中传播,传递到耳朵,耳朵听音再汇聚到大脑,大脑最终判断出声音中的信息。我们的嘴、耳、声波和空气就是物理层。物理层的重点是信号在介质中的传递表示,不同的字有不同的发音规则,不同的频率和声调,比如“哦”,我们就需要发出“o”这个音,我们听到“o”这个音的时候,才能判断出“哦”这个字。计算机通信的原理和这个也是一样的,信号在光纤、电缆以及空气中传播,计算机需要判断电缆上的电平的高低来判断0,1bit。当然,计算机比人类要傻很多,它不知道“某句话”的“发音”是从什么时候开始的,什么时候结束的,所以,物理层还需要告诉它信号的起始时刻和持续的长度等等。 数据链路层:通过前面的物理层,我们已经具备了基本的发声的手段,通过嘴改变声音的频率、音调、音长等特征(通信系统中,天线或者光模块改变信号的电平高低、信号频率、调制方式等特征),让声音在空气中传播(通信系统中,信号在相应的介质中传播),然后,耳朵识别这些频率、音调、音长等特征(通信系统中,接收端的识别信号的电平高低、频率、调制方式),最终实现口到耳的传播。 但是,光是这样还足够实现通信。试想一下,你和你的几个朋友处在一个嘈杂的环境当中,远处有汽车的轰鸣,旁边还有小孩子在哭闹,你的朋友们每个人在抢着发言,大家七嘴八舌的,根本听不清对方在说什么。所以,你和你的朋友之间想要对话就必须克服两个困难,第一,屏蔽掉耳旁的那些轰鸣声、哭闹声;第二,需要建立一种对话机制,让大家互相可以听清对方的话语。 第一点中描述的那些轰鸣、哭闹声,实际上就是通信系统中的噪声,噪声太大时,我们是无法通信的,因为我们根本听不清旁边的人在说些什么,只能听到轰鸣、哭闹声。最简单克服噪声的办法就是提高信号的发射功率,也就是大声地说话,让自己的声音盖过那些哭闹声,也即是通信系统中的功率控制。还有一种办法就是我们过滤掉一些噪声,虽然,这些声音都会进入我们的耳朵,但是,我们的大脑可以过滤掉一些不关注的声音,专注的去接收那些关注的声音,也即是通信系统中的频率选择。此外,大家七嘴八舌的说话也是一个问题。7,8个人同时在说话,你能听清楚一两个就不错了,其他人在说啥,根本没法听清。所以,我们说话的时候,一般会有一个轮流的机制。每个人说两句,别人说话的时候,别插嘴。或者,两个人说悄悄话,不打扰到别人,自己也听得清。这里的轮流说话机制,就是通信系统中的“时分复用”或者“频分复用”;一个人说7个人听,就是广播;1对1的悄悄话就是单播。数据链路层实际上就是用来解决以上的这些问题。 数据链路层会将待传输的消息组成一个帧,如图3-4所示:图3-4 EtherCAT帧结构 这个帧里就会包含目的地址、源地址、帧数据、帧校验位等。通过目的地址就可以确定帧传递的对象,通过源地址接收方也可以知道是谁发送了这条帧。在数据帧之外的地方,一般还会存在一个控制器(比如EtherCAT主站),这个控制器会决定,其他的从站什么时候传输数据,数据可以占用多少的资源。在其他的一些更复杂的通信系统中,数据链路层还会根据当前的信道条件(噪声情况),来决定各个设备的发射功率,调制方式等。 应用层:说完了数据链路层,我们还需要继续了解一下应用层。首先需要明确的一点,这里的应用层和我们手机、电脑上的应用程序不是一个东西。最为常见的应用层协议就是HTTP。简单来说,应用层是对数据的一种格式约定。这里还是用人类的对话来打个比方。你和一个老外,大家都有口有耳,也都是文明人,知道等对方说完自己再说。但是,你不懂英文,他不懂中文,你们还是无法交流。他说了“double”,你以为是“打包”;他说“You need cry deal”,你以为是“有你的快递”。这实际上就是你们的应用层协议不对等,他安装的是“英语”应用层协议,你安装的是“中文”应用层协议,大家说话牛头不对马嘴,根本无法交流。再夸张一点,我和你都是中国人,我们都听得懂中文,当时我是学通信的,你是学自动化的,我说PRACH信道,信道检查与估计,匹配滤波这些词的时候,你能明白每一个字的意思,但是连着一起是啥就不知道了。这就是因为你确实“通信系统”这个应用层协议。应用层协议最终的目的,就是让消息的收发双方知道这一串“1010101010”代表的是什么意思。本来这一章准备昨天就写完了,谁知道写了这么多无关的内容,后面准备新开一个博客把OSI的7层就讲一下,然后再把这一节删除掉。4.学习书目 其实,前面说了这么多,我觉得只有这一节最重要,介绍一下我的参考书目。网上虽然有各种各样的博客、知乎文字,但是始终是比不上书本上的详细和系统的。网上这些博客可能可以吃个快餐,但绝对不是什么捷径。不系统的学习,只能让你一知半解,能做个Demo出来就不错了。一旦遇到一点bug,根本无从下手。所以,一定要多读书,读好书。 这里有几本书要给大家推荐一下。 首先是北京航空航天大学出版社,郇极、刘艳强编写的《工业以太网现场总线EtherCAT驱动程序设计及应用》。这本书详细的介绍了EtherCAT协议、从站控制芯片以及相关应用层协议。我这里的大多数内容都取自于这本书中,如果能把这本书都看懂、看明白,那EtherCAT从站开发,应该不会有太大的难点。 第二是周立功的《CANopen轻松入门》。EtherCAT是一个数据链路层的协议,所以还需要配合上层的应用层协议才能更好的工作,CANopen即是工业物联网中一个比较常用的应用层协议。事实上,进行从站开发的时候,应用层协议会占到很大的比例。因为,EtherCAT从站一般都会使用一个专用ASIC(如ET1100)来实现EtherCAT协议栈,也即是完成数据链路层的工作。对于数据链路层,我们只需要做一些配置工作,而应用层协议则需要通过软件来实现。 第三是倍福官方的《EtherCAT Slave Information Specification 》和《Application Note ET9300》。前面说了,EtherCAT协议栈的功能都是在ET1100上实现的,开发从站是不涉及这部分数据链路层的代码的。但是,我们还是对从站进行相应的配置,包括PDI控制,SYNC信号脉冲宽度等信息(称为EtherCAT Slave Information,ESI)。这些信息的配置就在《EtherCAT Slave Information Specification》里有详细讲解。此外,从站开发还需要实现CANopen等应用层协议。对于应用层协议的实现,在《Application Note ET9300》里有比较详细的讲解。像ET1100、AX58100、LAN9252这些EtherCAT控制芯片,其芯片厂商都会提供一些Demo程序,这些Demo程序实际上都是基于《Application Note ET9300》里的软件框架来完成的。《Application Note ET9300》只有英文版,我自己也还没有看完,而且比较重要,后面专门拿一章来细讲。 第四是SSC,这是倍福提供的一个软件。前面说了,从站开发的两个关键步骤是EtherCAT控制芯片的配置和应用层协议的实现。倍福提供了SSC这样一个软件,它可以直接根据配置和需求,生成所需的xml描述文件和应用层代码。当然,这个软件生成的代码原生只适配与倍福自己的ET1100或ET1200芯片,其他的LAN9252、AX58100都做一些修改。这个东西看着很美好,也就那么回事。其实,每个芯片厂商都有提供自己的Demo程序,这些Demo程序都简单实现了应用层协议。如果是使用非倍福的芯片,不如直接在芯片厂商的Demo程序上改,这样可以避免一些莫名其妙的bug。不过,如果所需的应用层协议,芯片厂商没有提供Demo程序的话,还是需要用SSC生成一个参考,然后,再基于这个参考来修改。题外话原本以为一个晚上可以搞定的工作,生生花了2个晚上。很多地方写得比较零碎,特别是OSI那一段扯得有点远了,写了不少和主题无关的内容,后面找时间再重新精简一下。第一次写博客,可能有不少不准确或者错误的地方,还请大家见谅。如有不对之处,还请多多指教。编辑于 2020-03-13 16:39工业互联网/物联网平台个人博客以太网(Ethernet)​赞同 197​​16 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录EtherCAT学习之路EtherCAT从站开

IGH EtherCAT 开源主站安装及测试 - 知乎

IGH EtherCAT 开源主站安装及测试 - 知乎切换模式写文章登录/注册IGH EtherCAT 开源主站安装及测试刘广辉1、Linux系统:采用的系统版本: Ubun 14.04.1 64位; 内核版本: 3.13.0-12-generic具体型号:2、去IGH官网下载1.5.2版本。3、编译源码(1)解压下载的压缩文件: tar -xjf ethercat-1.5.2.tar.bz2(2) 进入到解压后的文件夹: cd ethercat-1.5.2/(3)配置:./configure --with-linux-dir=/usr/src/linux-header-3.13.0-32-generic/ --enable-8139too=no --enable-wildcards=yes(4)编译:sudo make这个地方可能会遇到g++未安装的问题,如果遇到,按照下面的方式安装:sudo apt-get updatesudo apt-get install g++(5)sudo make modules4、安装sudo make installsudo make modules_install5、配置主站安装完成后,会在/opt/目录下生成一个etherlab/文件夹,其中包括库文件什么的。进入这个文件夹:cd /opt/etherlab 打开如下文件:vim etc/sysconfig/ethercat在MASTER0_DEVICE=""填写你的以太网卡的MAC地址(ifconfig获取),DEVICE_MODULES="generic",保存退出(请自行搜索vim的用法)。在/etc目录下新建一个sysconfig/的文件夹,将修改后的ethercat文件复制到刚刚新建的文件中:mkdir /etc/sysconfig/cp etc/sysconfig/ethercat /etc/sysconfig/ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/为了让EtherCAT 主站能开机自启动,将ethercat设置为开机自启动服务。这里我采用的是sysv-rc-conf 工具,先安装sysv-rc-conf:apt-get install sysv-rc-conf安装完成后,运行sysv-rc-conf:sysv-rc-conf这时会打开一个图形界面,找到ethercat用“space”键设置为S运行级,按Q退出。先不要着急启动ethercat,还有关键的一步,运行如下的命令:depmod 6、启动主站/etc/init.d/ethercat start如果安装没有问题,会出现下面的提示:Starting EtherCAT master 1.5.2 done说明安装成功!7、添加命令行工具vim ~/.bashrc 在其中添加如下代码:PATH=$PATH:/opt/etherlab/bin再执行:source ~/.bashrc 这时候就可以使用ethercat命令行工具了。8、测试(1)测试系统(2)IGH EtherCAT控制松下电机注释:本文引用了 IGH EtherCAT Master Linux on PC编译教程 部分内容;发布于 2020-06-27 12:35机器人控制​赞同 30​​20 条评论​分享​喜欢​收藏​申请

EtherCAT | 倍福 中国

EtherCAT | 倍福 中国

解除固定固定关闭

Beckhoff - 自动化新技术

中国

请选择您的地区和语言

Beckhoff Worldwide

Australia

Belgique (Français)

België (Nederlands)

Brasil

Canada

Česká republika

Danmark

Deutschland

Eesti

España

France

India

Indonesia

Italia

Lietuva

Magyarország

Malaysia

México

Nederland

New Zealand

Norge

Österreich

Polska

Republika ng Pilipinas (English)

Schweiz (Deutsch)

Singapore

Slovenija

Slovenská republika

South Africa

Suisse (Français)

Suomi

Sverige

Svizzera (Italiano)

Türkiye

USA

United Kingdom

Việt Nam

ישראל

الإمارات (UAE)

مصر

ประเทศไทย

中国

日本

대한민국

台灣(中華台北)

myBeckhoff 登录已登录

myBeckhoff Login欢迎,

电子邮件地址

密码

保持登录状态

您想取消订阅 myBeckhoff 吗?

登录登出

忘记密码?

您还没有注册 myBeckhoff?

注册

您在使用 myBeckhoff 时需要帮助吗?请通过以下方式联系我们 mybeckhoff@beckhoff.com.

书签列表

搜索

搜索

输入搜索值…

搜索

建议关键词

建议页面

下载

建议产品

公司

产品

行业

支持

myBeckhoff

最新资讯

新品

产品搜索器

Information System

下载中心

Startseite

产品

I/O

EtherCAT

联系我们

中国区总部

Beckhoff Automation (Shanghai) Co., Ltd.

市北智汇园4号楼

静安区汶水路 299 弄 9-10 号

上海, 200072, 中国

+86 21 6631 2666

info@beckhoff.com.cn

www.beckhoff.com.cn/zh-cn/

销售部

+86 21 6631 2666

sales@beckhoff.com.cn

联系表单

技术支持部

+86 21 5677 4765

support@beckhoff.com.cn

联系表单

售后服务部

+86 21 6250 7207-862

service@beckhoff.com.cn

联系表单

详细联系方式

EtherCAT — 以太网现场总线

选对合适的通信技术非常重要:它决定了控制性能是否能直达现场层,以及可以使用哪些设备。EtherCAT 是由倍福开发的工业以太网技术,它能够助力实现通信速度更快、更简单、更经济的设备和系统。EtherCAT 以太网现场总线将以太网的优势和传统现场总线系统的简洁性融合于一体,避免了 IT 技术不必要的复杂性。2003 年成立的 EtherCAT 技术协会(ETG)确保 EtherCAT 技术对所有潜在用户开放。ETG 是目前全球最大的现场总线用户组织,拥有来自 67 个国家的 6000 多家会员单位(截至到 2020 年 12 月)。

EtherCAT 是一种具有良好开放性和超高稳定性的技术,已经被纳入国际 IEC 标准:目前,EtherCAT 协议仍然保持稳定不变;但是该技术仍在不断扩展并保持兼容性。这意味着当前设备可以轻松地集成到现有系统中,无需考虑版本是否不同。扩展功能包括用于同一网络中设备和人员安全的 Safety over EtherCAT 安全协议,以及用于将通信与供电(2 x 24 V)集成在同一根四芯电缆上的 EtherCAT P。还有 EtherCAT G/G10,它们具有更高的传输速率,同时通过分支控制器理念集成现有的 EtherCAT 设备,因此与百兆 EtherCAT 技术可以无缝连接。

ETG手册。EtherCAT

产品

EtherCAT 端子模块

EtherCAT 端子模块产品可以适用于自动化领域的几乎所有信号类型。

更多信息

EtherCAT 端子盒

EtherCAT 的高性能直达现场层:倍福可提供由 EtherCAT 端子盒组成的防护等级高达 IP 67 的 I/O 系统。

更多信息

EtherCAT 插拔式模块

EtherCAT 插拔式模块简化了标准设备的接线工作,同时缩短了系统的安装时间。

更多信息

EtherCAT 和现场总线电缆

EtherCAT 和现场总线电缆确保可靠的数据传输,适用于工业应用环境和其它恶劣的环境条件。

更多信息

工程师的选择:EtherCAT 的六大核心优势

卓越的性能

灵活的拓扑

简单且耐用

集成功能安全

低成本易实现

支持最多样化的厂商和设备

卓越的性能

灵活的拓扑

简单且耐用

集成功能安全

低成本易实现

支持最多样化的厂商和设备

EtherCAT 是迄今为止速度最快的工业以太网技术之一,同时它提供纳秒级精度的同步。所有由总线系统控制或监测的系统应用都将从此大大获益。EtherCAT 系统中设备的快速反应时间减少了处理步骤中的状态转换等待时间,从而显著提高了应用的效率。最后,相对于设定了相同循环时间的其他总线系统,EtherCAT 系统结构通常能减少 25%-30% 的 CPU 负载。而最好的情况下,EtherCAT 性能可以提高精度,提升数据吞吐量,并降低成本。

在 EtherCAT 应用中,机器结构决定网络拓扑结构,而不是网络拓扑结构决定机器结构。在传统的工业以太网系统中,可安装的交换机和集线器的级联数量是有限的,这限制了整个网络拓扑结构。而 EtherCAT 无需交换机或集线器,因此没有这方面的限制。简而言之,EtherCAT 在网络拓扑方面没有任何限制。几乎无限数量的节点可以组成线型、树型、星型拓扑及任何拓扑的组合。由于具备自动链接检测功能,节点和网段可以在运行中断开及重新连接 — 甚至连接到其他地方。线型拓扑可以拓展为环形拓扑,从而实现线缆冗余。主站设备仅需要第二个以太网口即可实现这种冗余功能,而从站设备已经具备了支持冗余功能的条件。因此可在机器运行期间断开设备。

配置、诊断、维护都与系统的成本息息相关。以太网现场总线使得所有这些任务变得异常简单:EtherCAT 可以自动配置地址,而无需手动配置。低总线负载和点对点的物理层增强了抗电磁干扰的能力。网络可以准确地定位潜在的干扰,从而大大缩短了故障排除时间。在启动时,网络会对目标拓扑与现实拓扑进行对比以检测差异。EtherCAT 出色的性能通过减低对网络调试的需求,从而缩减系统配置的工作量。高带宽可以将其他 TCP/IP 与控制数据同时传输。然而,EtherCAT 并不是基于 TCP/IP 的,因此无需使用 MAC 地址或 IP 地址,更不需要 IT 专家配置交换机或路由器。

将功能性安全作为网络结构的一个不可或缺的部分?这对于 FSoE(Fail Safe over EtherCAT)来说不是问题。FSoE 是经使用验证的,自 2005 年就有了通过 TÜV 认证的 FSoE 设备。协议满足 SIL 3 系统要求,且适用于集中控制和分散控制系统。由于采用了黑色通道的方式及特别精简的安全容器(Safety Container),FSoE 也可以应用于其他总线系统。该集成方案及精简的协议可降低系统成本。此外,一个对安全等级要求不高的控制器也可以接收并处理安全数据。

EtherCAT 以相当于甚至低于传统现场总线系统的价格水平提供工业以太网的特性。对于主站设备,硬件仅需要一个以太网端口 — 而无需昂贵的接口卡或协处理器。不同形式的 EtherCAT 从站控制器可以从很多供应商那里获得:作为 ASIC 芯片、基于 FPGA,或作为标准微处理器的可选总线接口。由于这些便宜的控制器可以承担所有对时间要求苛刻的任务,EtherCAT自身并不向从站设备 CPU 提出任何性能要求,从而降低了设备成本。因为 EtherCAT 不需要交换机或其他有源基础组件,从而节省了此类组件及其安装、配置和维护的成本。

EtherCAT 是迄今为止在市场上拥有厂商和设备种类最多的工业以太网技术之一。而且,由于倍福发明了 EtherCAT,其他厂商通常使用倍福的 TwinCAT(EtherCAT 控制器的黄金标准)来测试他们的 EtherCAT 产品。倍福开发了 1000 多种 EtherCAT 设备,是全球 EtherCAT 产品系列最多的厂商,当然,如果需要的话,您还可以使用其他 3000 家正式注册的厂商提供的 EtherCAT 产品进行补充。而目您也可以使用 EtherCAT 从站控制器芯片轻松开发出目前市场上还没有的产品。

技术详解

基于以太网

EtherCAT 是工业以太网,采用标准的以太网数据帧和符合以太网标准 IEEE 802.3 的物理层。EtherCAT 还可以满足工业自动化领域的各项具体需求:

需要确定的响应时间的硬实时性系统由多个节点构成,且每个节点只有少量的周期性过程数据相对于 IT 和办公应用中的硬件成本而言,工业自动化的硬件成本更加重要

标准以太网网络几乎无法满足以上需求的现场级应用。如果每个节点使用一个独立的以太网报文传输几个字节的周期性过程数据,那么有效数据利用率会明显下降:因为以太网报文的最短长度为 84 字节(包括帧间距),其中的 46 个字节可以用于过程数据。

例如,一个驱动器发送 4 字节的实际位置和状态信息过程数据,同时接收 4 字节的目标位置和控制字信息数据,则发送/接收报文的有效数据利用率下降到 4.8%(4/84)。另外,驱动器通常在接收到目标值后,触发传输实际值需要一定的响应时间。最终,100 Mbit/s 的带宽会所剩无几。而在 IT 领域通常使用的路由(IP)和连接(TCP)协议栈需要为每个节点使用附加的协议头,会产生进一步的延时。管理 MAC 和 IP 地址、SNMP、IGMP Snooping、路由器和交换机并不适合所有应用。

EtherCAT 运行原理

一个 EtherCAT 数据帧足以完成所有节点控制数据的发送和接收,这种高性能的运行模式克服了传统以太网无法解决的各种问题。EtherCAT 主站发送一个报文,报文顺序经过所有节点。EtherCAT 从站设备高速动态地(on the fly)读取寻址到该节点的数据,并在数据帧继续传输的同时插入数据。这样,数据帧的传输延时只取决于硬件传输延时。当某一网段或分支上的最后一个节点检测到开放端口(无下一个从站)时,利用以太网技术的全双工特性,将报文返回给主站。EtherCAT 报文的最大有效数据利用率高达 90% 以上,而由于采用全双工特性,有效数据利用率理论上高于 100 Mbit/s。EtherCAT 主站是网段内唯一能够主动发送 EtherCAT 数据帧的节点,其他节点仅传送数据帧。这一设想是为了避免不可预知的延时,从而保证 EtherCAT 的实时性能。EtherCAT 主站采用标准的以太网介质访问控制器(MAC),无需额外的通信处理器。因此,任何集成了以太网接口的硬件平台都可以实现 EtherCAT 主站,而与所使用的实时操作系统或应用软件无关。EtherCAT 从站设备使用 EtherCAT 从站控制器(ESC)在硬件中高速动态地(on the fly)处理 EtherCAT 数据帧,不仅使网络性能可预测,而且其性能独立于具体的从站设备实施方式。

EtherCAT 协议

EtherCAT 将其报文嵌入到标准的以太网数据帧中(形成 EtherCAT 数据帧)。由于 EtherCAT协议被优化为适用于短周期性的过程数据,因此无需庞大的协议堆栈,例如 TCP/IP 或 UDP/IP。节点之间的以太网 IT 通信可以选择通过邮箱通道实现,而不会影响实时数据传输。EtherCAT 数据帧包含一个或多个 EtherCAT 子报文,子报文头标明了主站设备的访问方式:

读,写,或读-写通过直接寻址访问指定的从站设备,或通过隐式寻址访问多个从站设备

隐式寻址方式主要用于周期性交换的过程数据。每个报文定位到 EtherCAT 网段中过程映像的具体位置,可以为过程映像提供 4 GB 的地址空间。网络启动阶段,在全局地址空间中,为每个从站分配一个或多个地址。如果多个从站设备被分配到了相同的地址域,那么可通过单个报文对其进行寻址。

由于报文中包含了所有的数据访问相关信息,因此主站可决定何时对哪些数据进行访问。例如,主站设备可以使用短循环周期刷新驱动器中的数据,长循环周期采样 I/O 端口,固定的过程数据结构不是必要的。

除了逻辑寻址外,EtherCAT 主站还可以通过设备在网络中的位置寻址从站设备。该方法是在网络启动期间检测网络的拓扑结构,并将其与预期的拓扑结构进行比较。在检查完网络配置后,EtherCAT 主站为每个节点分配一个配置好的节点地址,并通过该固定的地址与节点进行通信。这使得主站可以有针对性地访问某个从站设备,即使网络拓扑结构在运行期间发生改变,例如对于热插拔组。除循环数据之外,其他数据报文可用于实现异步通信或事件驱动的通信。

灵活的拓扑结构

EtherCAT 几乎支持所有的拓扑结构:线型、树型、星型、菊花链型。EtherCAT 使得带有成百上千个节点的纯总线型或线型拓扑结构成为可能,而不受限于级联交换机或集线器。最有效的系统连线方法是对线型、分支或树叉结构进行拓扑组合:用于创建分支的端口被直接集成到 I/O 模块中,无需专用的交换机或其他有源设备。另外,还可以使用以太网中常用的星型拓扑结构。

模块化、复杂的机器往往需要在运行过程中连接或断开一个网段或独立的节点(热连接)。EtherCAT 从站控制器已经具备了这种热插拔特性的基础。当移除一个相邻站点时,该站点对应的端口会自动关闭,网络的剩余部分继续正常运行。整个检测时间 < 15 μs,从而保证了平稳切换。

有多种灵活的电缆类型可供选择:成本低廉的工业以太网电缆可采用 100BASE-TX 模式(传输信号)连接两个间距长达 100 米的节点。对于节点间距大于 100 米的应用,还可使用光纤(如100BASE-FX)。可以说,以太网的任何线缆类型都适用于 EtherCAT。

EtherCAT 有充足的带宽资源,因此可以通过 EtherCAT 网关集成作为底层总线的传统现场总线系统。这种用法特别有助于从传统网络移植到 EtherCAT 系统的应用,使系统逐步升级到 EtherCAT,并可以继续使用尚不支持 EtherCAT 接口的自动化组件。

EtherCAT 网络可连接多达 65535 个设备,网络容量几乎没有限制。由于实际上节点数量没有限制,可以将模块化设备设计为每个 I/O 片都是一个独立的 EtherCAT 从站。因此无需本地扩展总线,高性能的 EtherCAT 能直达每个模块。因为在总线耦合器上无需网关,所以没有任何延时。

用于高精度同步的分布式时钟

精确同步对于同时动作的分布式过程而言尤为重要。例如,对于执行协同运动的多个伺服轴的应用便是如此。下面将进一步详细解释,在控制单根轴时,准确的时基同样也很重要。

对于完全同步的通信,通信错误会立即影响其同步品质,而与其相比,分布式同步时钟对于通信系统的抖动具有很好的容错性。因此,EtherCAT 采用分布式时钟(DC)的方式同步节点。各个节点的时钟校准完全基于硬件。第一个具有分布时钟功能的从站设备的时间被周期性地发布给系统中的其他设备。采用这样的机制,其它从站时钟可以根据参考时钟精确地进行调整。整个系统的抖动远小于 1 µs,通常在两位数的纳秒范围内。

由于参考时钟发送时间到其他从站设备时产生轻微的传输延时,因此必须能够测量该延时并补偿给每个从站设备,以确保通信的同步性和同时性。可在网络启动期间测量该延时,如有需要,甚至在通信过程中还可以连续不断地进行测量,从而保证各个从时钟彼此之间时差不超过 1 µs。

如果所有节点都具有相同的时间信息,那么它们可以同时触发输出信号,也可以给输入信号附上一个精确的时间戳。对于运动控制而言,除了同步性和同时性外,精确的周期同样重要。在运动控制应用中,速度值通过检测到的位置值计算,因此位置的精确等距测量非常关键(例如,以精确的周期)。此外,分布式时钟的使用也可以减轻主站设备的负担;因为位置测量等动作由本地时钟触发,而不是在接收到数据帧的时候触发,主站设备对数据帧的发送没有那么严格的要求。 这样可以用软件在标准以太网硬件上实现主站堆栈。主站即使是几微秒范围内的抖动也不会降低分布式时钟的精度!由于时钟的精度与何时进行设置无关,因此数据帧的绝对传输时间变得无关紧要。EtherCAT 主站只需确保在从站设备的直流信号触发输出之前及早发送 EtherCAT 报文。

Webinar: Distributed Clocks

诊断和错误定位

传统现场总线的应用经验表明,诊断能力对于机器的可用性和调试时间起着决定性的作用。在故障排除过程中,错误检测和错误定位非常重要。EtherCAT 可以在启动过程中扫描网络拓扑结构,并将其与预期的拓扑结构进行对比。另外,EtherCAT 还在其系统具有许多额外的诊断能力。

每个节点中的 EtherCAT 从站控制器利用校验码对传输的数据帧进行错误检测,只有在数据帧被正确接收之后,从站应用才会得到相关信息。而一旦发现位错误,错误计数器就会自动加 1,后面的节点则会被通知数据帧中包含错误。主站也会检测到数据帧包含错误,并摒弃其中的信息。主站通过分析节点的错误计数器,能够检测到系统中发生错误的最初位置。这相对于传统的现场总线系统而言有很大优势,在传统现场总线中,错误一旦发生就会沿着公用线缆一路传播,而不可能对错误进行定位。EtherCAT 能够检测并定位偶发的干扰,避免对机器运行造成影响。链路丢失计数器功能可以快速定位 EtherCAT 网段中出现松动的连接器。

得益于其独特的运行原理,EtherCAT 具有出色的带宽利用率。采用此种传输方式,EtherCAT 比传统以太网那样每个节点用一个独立帧的传输方式的效率高出数倍。如果使用同一循环周期,在一个 EtherCAT 帧内由于位错误引发干扰的可能性很低。而且,在典型的 EtherCAT 方式中,由于循环周期更短,恢复错误所需要的时间也将明显缩短。因此,在应用中对于主站出现这样的问题也会更为简单。

由于 EtherCAT 使用的是标准以太网数据帧,因此可以借助免费的以太网软件工具记录以太网网络流量。例如,常用的 Wireshark 软件自带用于 EtherCAT 的协议解释器,因此,工作计数器、指令等协议专用的信息,都以纯文本形式显示。然后,主站能够循环确认是否所有节点都在与一致的数据协作。如果工作计数器的值与它应该有的不同,主站不会将这个数据报文的数据传输给控制应用程序。然后,主站设备能够借助来自节点的状态和错误信息以及链接状态,自动检测出造成意外行为的原因。

Webinar: EtherCAT diagnostics

高可用性

对于具备高可用性的机器或设备,当出现线缆损坏或节点故障时,不应影响对某个网段的访问或导致整个网络出现故障。EtherCAT 通过简单的措施实现线缆的冗余性。通过将网络中最后一个节点与主站设备中的以太网端口连接,可以将线型拓扑结构扩展为环型拓扑结构。在需要冗余的情况下,例如当线缆损坏或节点出现故障时,可被主站堆栈中的附加软件检测到。仅此而已,而各节点无需为此而改变,甚至不会“意识到”它们正在冗余线路中运行。

位于从站设备中的链路检测功能会自动地检测并解决冗余问题,且恢复时间不超过 15 µs,因此最多破坏一个通信周期。这意味着即使是周期时间很短的运动控制应用,在线缆损坏时,也可以平稳地继续工作。

使用 EtherCAT 还可以通过热备份实现主站设备的冗余。对于比较脆弱的网络部件,例如通过拖链连接的部件,可以使用分支线缆连接,确保在线缆损坏时,机器的其他部分仍能继续运行。

EtherCAT 发展历程

XFC

XFC 基于高效的控制和通信架构,可以实现 I/O 响应时间 ≤ 100 μs。

更多信息

EtherCAT P

全新的单电缆解决方案 — 铺平了无控制柜的自动化之路。

更多信息

EtherCAT G

EtherCAT G 基于成功的 EtherCAT 技术运行原理,同时将数据速率提升到 1 Gbit/s 或 10 Gbit/s。

更多信息

EtherCAT 技术协会 — ETG

EtherCAT 技术协会(ETG)确保 EtherCAT 技术对所有潜在用户开放。EtherCAT 设备制造商、技术提供商和用户共同推动该技术的发展。他们拥有一个共同目标:保持 EtherCAT 的稳定性和互操作性。ETG 每年都会在欧洲、亚洲和美国举办多次 Plug Fest 活动。Plug Fest 活动聚集 EtherCAT 设备研发者进行测试,以保证设备的互操作性。每个制造商在产品发布前应使用官方 EtherCAT 一致性测试工具对其 EtherCAT 设备进行一致性测试。在成功通过了授权测试实验室的测试后,ETG 将为制造商颁发一致性证书。

ETG 是全球最大的现场总线组织。ETG 官网主页上可以找到所有会员名单。然而,对于 ETG 来说,最重要的并不是会员数量,而是会员的活跃度。EtherCAT 设备的数量和种类都是无可比拟的,同时。在欧洲、亚洲和美国,EtherCAT 采用率都超过了其他工业以太网技术。

里程碑

2003 在汉诺威工业博览会上推出 EtherCAT 技术2003 SPS/IPC/DRIVES 展会期间,EtherCAT 技术协会(ETG)宣布正式成立2005 Safety over EtherCAT 技术被引入市场2007 EtherCAT 成为 IEC 标准2016 EtherCAT P:超高速通信和动力系统整合在一根电缆中2019 EtherCAT G:将性能提升到千兆级别

中国区总部

Beckhoff Automation (Shanghai) Co., Ltd.

市北智汇园4号楼 静安区汶水路 299 弄 9-10 号 上海, 200072

+86 21 6631 2666

+86 21 6631 5696

info@beckhoff.com.cn

详细联系方式

www.beckhoff.com.cn/zh-cn/

电子快讯

打印页面

公司

公司

公司简介

全球业务

职位招聘

新闻

《PC Control》杂志

市场活动及日期

产品与行业

产品与行业

工业 PC

I/O

运动控制

自动化软件

MX-System

机器视觉

行业

支持

支持

技术支持

服务

培训

在线研讨会

Beckhoff Information System

下载中心

社交媒体

社交媒体

LinkedIn

WeChat

bilibili

法律声明

使用条款

数据隐私政策

一般条款

沪公网安备 31010602003961号

工信部备案:沪ICP备12000630号-1

隐私设置

商标

© Beckhoff Automation 2024

请选择您的地区和语言

The link was copied to the clipboard.

您已经成功登录 myBeckhoff。

EtherCAT实时以太网首页-广州致远电子股份有限公司

EtherCAT实时以太网首页-广州致远电子股份有限公司 产品 行业解决方案 服务与支持 开发者社区 感知控制 隔离SiP芯片 > 全隔离CAN收发芯片 全隔离485收发芯片 微功率电源芯片 全隔离协议转换芯片 总线隔离模块 > 隔离CAN收发器 隔离RS-485收发器 隔离RS-232收发器 总线保护器 隔离DC-DC模块 > 新一代高效率定压(1-3W) 隔离定电压输入(1-3W) 隔离宽电压输入(1-3W) 隔离宽电压输入(6-10W) 隔离宽电压输入(10W以上) 数据采集模块 > 温度采集模块 模拟信号采集模块 雨量检测模块 RFID读卡模块 互联互通 CAN-bus总线产品 > CANFD接口卡与转换器 工业CAN卡与转换器 云大数据系统与记录终端 CAN网络拓展与保护 总线分析仪与一致性测试 CANopen与DeviceNet 车载以太网产品 > 百兆车载转换器 千兆车载转换器 EtherCAT实时以太网 > EtherNET工业以太网 > 无线芯片 > LoRa智能组网芯片 LoRa系统级芯片 无线模组 > LoRa模组 Zigbee模组 Wi-Fi模组 BLE模组 通讯终端 > LoRa网关 Zigbee网关 4G Cat.1 DTU Wi-Fi设备 串口服务器 接口与协议转换 > PXB系列协议转换器 集成式RJ45插座 EtherCAT从站模块DPort-ECT 双路以太网透传模块DPort-MM SPI/UART转CAN 全隔离协议转换芯片 边缘计算 核心板 > A5系列 M7系列 ARM9系列 A7系列 A8系列 A9/A9+FPGA A35系列 A53系列 A55系列 Risc-V系列 MIPS系列 工控板/工控机 > EsDA工控单板 2.5寸工控单板 3.5寸工控单板 智能主机 显控终端 行业控制器 > 储能EMS网关 ZMC600E EtherCAT主站控制器 ZMC300E EtherCAT主站控制器 示教器 永磁同步电机驱动 实用配件 > 云平台 ZLG云服务 > ZWS IoT-PaaS云平台 ZWS-CAN智慧云 ZWS智慧光储云 EsDA平台 > AWorksLP开发平台 AWTK 开源GUI引擎 致远微电子芯片 编程器 P800pro量产通用型 P500Plus兼容型 P800isp量产在线型 P800Flash量产智能极速型 行业测量仪器 示波记录仪 > 旗舰版 ZDL6000 专业版 ZDL5000 基础版 ZDL3000 功率分析仪 > 认证级PA8000 企业级高精度PA6000H 企业级高带宽PA5000H 便携式PA2000mini 功率计 > 三通道PA333H 三通道PA323H 三通道PA323 单通道PA310H 单通道PA310 总线分析仪 > CANDT一致性测试系统 CANScope总线综合分析仪 ZPS-CANFD汽车电子测试平台 通用测量仪器 示波器 > 高精度智能应用型ZUS6000 专业分析型ZDS5054Pro 智能硬件分析型ZDS5054D 电源分析型ZDS5054A 数据挖掘型ZDS4000 电源测试定制版ZDS3024C 通用研发型ZDS3000 通用研发型ZDS2000C 基础研发型ZDS1104 逻辑分析仪(已停产) > 旗舰型逻辑分析仪 深存储逻辑分析仪 电源与负载 可编程交流电源 > 专业版PSA6000-Pro系列 标准版PSA6000系列 产线版PSA6000-Fac系列 线性高精度电源PWR1000L 工业互联网应用解决方案 智能网联汽车 测试工具与仪器 无人配送解决方案 智慧交通 智慧停车场解决方案 交通信号灯解决方案 司机行为监测解决方案 智慧工厂 产线设备管理 设备显控 吊挂系统CAN总线通讯 电子工票无线管理 智慧医疗 医用治疗设备方案 体外诊断方案 高端仪器测试解决方案 新能源汽车 电机与动力系统测试 CAN总线通讯测试 充电桩测试 光伏行业 逆变器实验室研发 产线自动化测试 新能源外场测试 电源 开关电源实验室研发 产线自动化测试 设备巡检 电机变频器 电机变频器研发与测试 电机变频器产线出厂测试 首页 产品  感知控制 >

全隔离CAN收发芯片 全隔离485收发芯片 微功率电源芯片 全隔离协议转换芯片 隔离CAN收发器 隔离RS-485收发器 隔离RS-232收发器 总线保护器 新一代高效率定压(1-3W) 隔离定电压输入(1-3W) 隔离宽电压输入(1-3W) 隔离宽电压输入(6-10W) 隔离宽电压输入(10W以上) 温度采集模块 模拟信号采集模块 雨量检测模块 RFID读卡模块 互联互通 >

CANFD接口卡与转换器 工业CAN卡与转换器 云大数据系统与记录终端 CAN网络拓展与保护 总线分析仪与一致性测试 CANopen与DeviceNet 车载以太网产品 EtherCAT实时以太网 EtherNET工业以太网 LoRa智能组网芯片 LoRa系统级芯片 LoRa模组 Zigbee模组 Wi-Fi模组 BLE模组 LoRa网关 Zigbee网关 4G Cat.1 DTU Wi-Fi设备 串口服务器 PXB系列协议转换器 集成式RJ45插座 EtherCAT从站模块DPort-ECT 双路以太网透传模块DPort-MM SPI/UART转CAN 全隔离协议转换芯片 边缘计算 >

A5系列 M7系列 ARM9系列 A7系列 A8系列 A9/A9+FPGA A35系列 A53系列 A55系列 Risc-V系列 MIPS系列 EsDA工控单板 2.5寸工控单板 3.5寸工控单板 智能主机 显控终端 储能EMS网关 ZMC600E EtherCAT主站控制器 ZMC300E EtherCAT主站控制器 示教器 永磁同步电机驱动 实用配件 云平台 >

ZWS IoT-PaaS云平台 ZWS-CAN智慧云 ZWS智慧光储云 AWorksLP开发平台 AWTK 开源GUI引擎 行业测量仪器 >

旗舰版 ZDL6000 专业版 ZDL5000 基础版 ZDL3000 认证级PA8000 企业级高精度PA6000H 企业级高带宽PA5000H 便携式PA2000mini 三通道PA333H 三通道PA323H 三通道PA323 单通道PA310H 单通道PA310 CANScope总线综合分析仪系列 CANDT一致性测试系统 ZPS-CANFD汽车电子测试平台 通用测量仪器 >

高精度智能应用型ZUS6000 专业分析型ZDS5054Pro 智能硬件分析型ZDS5054D 电源分析型ZDS5054A 数据挖掘型ZDS4000 电源测试定制版ZDS3024C 通用研发型ZDS3000 通用研发型ZDS2000C 基础研发型ZDS1104 旗舰型逻辑分析仪 深存储逻辑分析仪 电源与负载 >

专业版PSA6000-Pro系列 标准版PSA6000系列 产线版PSA6000-Fac系列 线性高精度电源PWR1000L 编程器 >

P800pro量产通用型 P500Plus兼容型 P800isp量产在线型 P800Flash量产智能极速型 行业解决方案  智能网联汽车 > 测试工具与仪器 无人配送解决方案 智慧交通 > 智慧停车场解决方案 交通信号灯解决方案 司机行为监测解决方案 智慧工厂 > 产线设备管理 设备显控 吊挂系统CAN总线通讯 电子工票无线管理 智慧医疗 > 医用治疗设备方案 体外诊断方案 新能源汽车 > 新能源汽车 光伏行业 > 光伏行业 电源 > 电源行业 电机变频器 > 电机变频器行业 致远微电子芯片 开发者社区 视频专栏 在线购买 新闻中心 站内搜索 为您的应用选择合适的产品 EtherCAT主站控制器 PCIe EtherCAT通讯卡 EtherCAT分析仪 EtherCAT主站控制器ZMC600E 主频1GHz  |  3路以太网  |  2路CAN  |  2路RS485 了解更多 EtherCAT主站控制器ZMC300E 1路ECAT  |  2路以太网  |  1路CAN  |  1路RS485 了解更多 PCIe EtherCAT通讯卡 EtherCAT  |  EtherCAT通讯卡  |  PCIE转EtherCAT 了解更多 EtherCAT-Analyzer分析仪 双核  |  四核 800MHz  |  1GHz HDMI 了解更多 提供从EtherCAT主站控制器到网络分析的一站式解决方案 接口丰富,应用全面 满足多路EtherCAT接口、CAN(FD)接口、SD卡接口、DI/DO等应用需求 简单易用的函数库 用户可通过高效便捷的函数库启动主站RPC服务器,自定义开发主站编译环境,完成主站通信控制 线缆冗余,稳定可靠 EtherCAT产品具有线缆冗余机制,保证网络安全畅通 转发时间分析 系统分析EtherCAT网络所有节点帧传输延时,快速评估主站周期取值 帧抖动分析 高效分析网络帧抖动情况,评估软件调度实时性,确定主站周期和DC同步偏移参数 数值曲线分析 机械手各关节电机和算法的跟随曲线分析,快速定位机械和算法性能瓶颈 技术专题 行业应用分享 关于EtherCAT主站,你想知道的都在这里! EtherCAT是当今主流的高速现场总线解决方案,也是工业4.0智能制造的先进技术核心。现场总线技术适合于大数据量传输,但不适合于测控工程领域中的确定性进程通讯以及高速数据传输。 【Linux学习小技巧】如何在Linux启动时显示开机进度条? 质量策略 全面质量管理 环境管理体系 职业健康安全 关于我们 公司介绍 联系我们 人才招聘 大咖专栏 ZLG微文摘 开发者社区 新闻&展会 公司新闻 展会活动 服务&支持 寄修及进度查询 资料快速查找 技术支持工单 法律声明 联系我们 400-888-4005 版权所有©2015 广州致远电子股份有限公司 【 粤ICP备06000756号】 粤公网安备44010602000279 质量策略 全面质量策略 环境管理体系 职业健康安全 关于我们 公司介绍 联系我们 人才招聘 大咖专栏 ZLG微文摘 开发者社区 新闻&展会 公司新闻 展会活动 服务&支持 在线客服 工单查询 法律声明 版权所有©2018 广州致远电子股份有限公司【 粤ICP备06000756号】  

EtherCAT主站芯片方案 (virtual ASSP) | Macnica Cytech

EtherCAT主站芯片方案 (virtual ASSP) | Macnica Cytech

跳转到主要内容

 全球网络 联系我们

Languages

中文簡体

中文繁體

English

Search

Menu

主页

关于我们

公司简介

全球网络

Mpression Solutions

免责声明

隐私政策

产品

Global Product Line

Local Chinese Product Line

ECO System Partner

开发板

Borax SOM

EasyGX Board

EtherCAT 主站芯片方案

EtherCAT 从站 + FOC参考方案

EtherCAT主站解决方案汇总2019

ME10 SoC - 4K AV over 1GbE System on Chip

MIE SoC 模块

SoC Helio 开发板

射频方案

工业相机模块

信息及活动

信息

活动

文章及视频

技术文章

业务联系

联系表格

国内地点

全球地点

社交媒体

 

开发板

EtherCAT主站芯片方案 (virtual ASSP)

 Back to Top

Sidebar Menu

主页

关于我们

公司简介

全球网络

Mpression Solutions

免责声明

隐私政策

产品

Global Product Line

Local Chinese Product Line

ECO System Partner

开发板

Borax SOM

EasyGX Board

EtherCAT 主站芯片方案

EtherCAT 从站 + FOC参考方案

EtherCAT主站解决方案汇总2019

ME10 SoC - 4K AV over 1GbE System on Chip

MIE SoC 模块

SoC Helio 开发板

射频方案

工业相机模块

信息及活动

信息

活动

文章及视频

技术文章

业务联系

联系表格

国内地点

全球地点

社交媒体

EtherCAT主站芯片方案 (virtual ASSP)

概述

EtherCAT商业主站和开源主站,都是使用软件的方法实现主站功能,主站的性能很大程度上取决于PC的性能和操作系统的实时性。而骏龙科技将EtherCAT的协议层用FPGA逻辑实现,预先编程好,客户只需当作专用芯片使用。

EtherCAT Master ASSP芯片实现了标准的EtherCAT主站协议,采用标准的通用并行总线接口,可以连接任何CPU,并对芯片进行控制。支持ARM处理器或者x86处理器平台。提供参考软件代码,API函数,XML文件初始化系统等软件。可用于任何标准的 EtherCAT 电机、IO设备的控制。

特点

⦁    支持ARM处理器上裸机程序运行EtherCAT主站,无需操作系统;

⦁    支持x86处理器,PCIe接口,提供Linux(withXenomai实时内核)下的驱动和应用程序的参考代码;

⦁    友好的系统调试界面;

⦁    CPU负担小,无论高端或低端处理器,都能快速实现高实时性能的EtherCAT主站通信;

⦁    主站与从站间的同步性能强,同步时间的抖动远小于1us(4轴实测50ns);

⦁    循环周期短,可以轻松实现31.25us的通信周期(可实现4轴62.5us的循环周期);

⦁    通过XML文件轻松配置系统,可接从站数量多

性能对比

欢迎有兴趣的客户联系骏龙科技各地办事处了解详情,或发邮件至 stonemao@macnica.com, 也可以关注微信号后直接微信留言。骏龙科技网站也可以留言。

骏龙科技微信号: 

Copyright 2024 Macnica Cytech Limited

粤ICP备2021107379号-1

LoginLogout

网站地图

主页

关于我们

公司简介

全球网络

Mpression Solutions

免责声明

隐私政策

产品

Global Product Line

Local Chinese Product Line

ECO System Partner

开发板

Borax SOM

EasyGX Board

EtherCAT 主站芯片方案

EtherCAT 从站 + FOC参考方案

EtherCAT主站解决方案汇总2019

ME10 SoC - 4K AV over 1GbE System on Chip

MIE SoC 模块

SoC Helio 开发板

射频方案

工业相机模块

信息及活动

信息

活动

文章及视频

技术文章

业务联系

联系表格

国内地点

全球地点

社交媒体

微信平台

FPGA 微信平台

领英 LinkedIn

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

沐多

博客园

首页

新随笔

联系

管理

订阅

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

目录0 获取源码1 启动脚本1.1 start1.2 stop2 主站实例创建2.1 Master Phases2.2 数据报与状态机数据报状态机2.3 master状态机及数据报初始化2.4 初始化EtherCAT device2.5 设置IDLE 线程的发送间隔:2.6 初始化字符设备3 网卡4 IDLE阶段内核线程4.1 数据报发送4.2 数据报接收

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

0 获取源码

IgH EtherCAT Master现已迁移到gitlab:https://gitlab.com/etherlab.org/ethercat,可以使用以下命令克隆存储库:

git clone https://gitlab.com/etherlab.org/ethercat.git

git checkout stable-1.5

上面的是igh官方的仓库,下面是其他Ethercat主站:

https://github.com/ribalda/ethercat 基于官方,功能更为全面的igh etehrcat主站。

https://github.com/leducp/KickCAT 一个C++写的全新etehrcat主站,目前功能不完善。

https://github.com/ethercrab-rs/ethercrab 一个纯rust语言编写的全新etehrcat主站,目前功能不完善。

本文主要讲igh。

1 启动脚本

igh通过脚本来启动,可以是systemd、init.d或sysconfig。分别位于源码script目录下:

对于systemd方式,编译时由ethercat.service.in文件生成ethercat.service。ethercat.service中指定了执行文件为ethercatctl.ethercatctl文件由``ethercatctl.in`生成。init.d和sysconfig类似,都是生成一个可执行脚本,且脚本完成的工作一致,主要完成加载主站模块、网卡驱动、给主站内核模块传递参数、卸载模块等操作。

ethercat.conf共同的配置文件,配置主站使用的网卡、驱动等信息。下面看脚本start和stop所做的工作。

1.1 start

加载ec_master.ko

模块参数:

main_devices :主网卡MAC地址,多个main_devices 表示创建多个主站,MAC参数个数master_count。

backup_devices :备用网卡MAC地址,多个backup_devices 表示创建多个主站,MAC参数个数backup_count。

debug_level :调试level,调试信息输出级别。

eoe_interfaces eoe接口,eoe_count表示eoe_interfaces 的个数。

eoe_autocreate 是否自动创建eoe handler。

pcap_size Pcap buffer size。

遍历配置文件中/etc/sysconfig/ethercat的环境变量DEVICE_MODULES,位于ethercat.conf中。

在每个DEVICE_MODULES前添加前缀ec_替换,如DEVICE_MODULES为igb的话,添加前缀后为ec_igb。

modinfo检查该模块是否存在。

对于非generic和rtdm的驱动,需要先将网卡与当前驱动unbind,unbind后的网卡才能被新驱动接管。

加载该驱动。

start加载了两个内核模块,ec_master.ko和网卡驱动ec_xxx.ko,ec_master先根据内核参数(网卡MAC)来创建主站实例,此时主站处于Orphaned phase。后续加载网卡驱动ec_xxx.ko,执行网卡驱动probe,根据MAC地址将网卡与主站实例匹配,此时主站得到操作的网卡设备,进入Idle phase。详细过程见后文。

1.2 stop

卸载内核模块ec_master.ko和网卡驱动ec_xxx.ko。

遍历配置文件中的环境变量DEVICE_MODULES。

在每个DEVICE_MODULES前添加前缀‘ec_’替换。

lsmod检查该模块是否被加载。

卸载模块。

后文“主站”和”master“均表示主站或主站实例对象,slave和从站表示从站或从站对象,中英混用,不刻意区分。

2 主站实例创建

一个使用IgH的控制器中可以有多个EtherCAT主站,每个主站可以绑定了一个主网卡和一个备用网卡,一般备用网卡不使用,线缆冗余功能时才使用备用网卡(文中假设只有一个主网卡)。

start过程中执行insmod ec_master.ko,这个时候,先调用的就是 module_init 调用的初始化函数ec_init_module()。先根据参数main_devices 的个数master_count,每个master需要一个设备节点来与应用程序交互,所以master_count决定需要创建多少个matser和多少个字符设备;

这里先分配注册master_count个字符设备的主次设备号device_number和名称,这样每个master对应的设备在文件系统中就是/dev/EtherCAT0、/dev/EtherCAT1...(Linux下)。

if (master_count) {

if (alloc_chrdev_region(&device_number,

0, master_count, "EtherCAT")) {

EC_ERR("Failed to obtain device number(s)!\n");

...

}

}

class = class_create(THIS_MODULE, "EtherCAT");

解析模块参数得到MAC地址,保存到数组macs中。

for (i = 0; i < master_count; i++) {

ret = ec_mac_parse(macs[i][0], main_devices[i], 0);

if (i < backup_count) {

ret = ec_mac_parse(macs[i][1], backup_devices[i], 1);

}

}

分配master_count个主站对象的内存,调用ec_master_init()初始化这些实例。

if (master_count) {

if (!(masters = kmalloc(sizeof(ec_master_t) * master_count,

GFP_KERNEL))) {

...

}

}

for (i = 0; i < master_count; i++) {

ret = ec_master_init(&masters[i], i, macs[i][0], macs[i][1],

device_number, class, debug_level);

...

}

2.1 Master Phases

igh中,状态机是其核心思想,一切操作基于状态机来执行,对创建的每个EtherCAT主站实例都需要经过如下阶段转换(见图2.3),主站各阶段操作如下:

Orphaned phase 此时主站实例已经分配初始化,正在等待以太网设备连接,即还没有与网卡驱动联系起来,此时无法使用总线通讯。

Idle phase 当主站与网卡绑定后,Idle线程ec_master_idle_thread开始运行,主站处于IDLE状态,ec_master_idle_thread主要完成从站拓扑扫描、配置站点地址等工作。该阶段命令行工具能够访问总线,但无法进行过程数据交换,因为还缺少总线配置。

Operation phase 应用程序请求主站提供总线配置并激活主站后,主站处于operation状态,ec_master_idle_thread停止运行,内核线程变为ec_master_operation_thread,之后应用可周期交换过程数据。

具体的后面会说到。

2.2 数据报与状态机

继续看master初始化代码ec_master_init前,我们先了解数据报与状态机的关系,这对后续理解很有帮助。

数据报

EtherCAT是以以太网为基础的现场总线系统,EtherCAT使用标准的IEEE802.3以太网帧,在主站一侧使用标准的以太网控制器,不需要额外的硬件。并在以太网帧头使用以太网类型0x88A4来和其他以太网帧相区别(EtherCAT数据还可以通过UDP/IP 来传输,本文已忽略),标准的IEEE802.3以太网帧中数据部分为EtherCAT的数据,标准的IEEE802.3以太网帧与EtherCAT数据帧关系如下:

EtherCAT数据位于以太网帧数据区,EtherCAT数据由EtherCAT头和若干EtherCAT数据报文组成。其中EtheRCAT头中记录了EtherCAT数据报的长度、和类型,类型为1表示与从站通讯。EtherCAT数据报文内包含多个子报文,每个子报文又由子报文头、数据和WKC域组成。子报文结构含义如下。

整个EtherCAT网络形成一个环状,主站与从站之间是通过EtherCAT数据报来交互,一个EtherCAT报文从网卡TX发出后,从站ESC芯片EtherCAT报文进行交换数据,最后该报文回到主站。网上有个经典的EtherCAT动态图(刷新后动态图重新播放).

认识EtherCAT数据帧结构后,我们看IgH内是如何表示一个EtherCAT数据报文的?EtherCAT数据报文在igh中用对象ec_datagram_t表示。

typedef struct {

struct list_head queue; /**< 发送和接收时插入主站帧队列. */

struct list_head sent; /**< 已发送数据报的主站列表项. */

ec_device_index_t device_index; /**< 发送/接收数据报的设备。 */

ec_datagram_type_t type; /**< 帧类型 (APRD, BWR, etc.). */

uint8_t address[EC_ADDR_LEN]; /**< Recipient address. */

uint8_t *data; /**< 数据. */

ec_origin_t data_origin; /**< 数据保存的地方. */

size_t mem_size; /**< Datagram \a data memory size. */

size_t data_size; /**< Size of the data in \a data. */

uint8_t index; /**< Index (set by master). */

uint16_t working_counter; /**< 工作计数. */

ec_datagram_state_t state; /**数据帧状态 */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_sent; /**< Time, 数据报何时发送. */

#endif

unsigned long jiffies_sent; /**< Jiffies,数据报何时发送. */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_received; /**< Time, 何时被接收. */

#endif

unsigned long jiffies_received; /**< Jiffies,何时被接收. */

unsigned int skip_count; /**< 尚未收到的重新排队数. */

unsigned long stats_output_jiffies; /**< Last statistics output. */

char name[EC_DATAGRAM_NAME_SIZE]; /**< Description of the datagram. */

} ec_datagram_t;

可以看到上面子报文中各字段大都在ec_datagram_t中有表示了,不过多介绍,其它几个成员简单介绍下,

device_index表示这个数据报是属于哪个网卡设备发送接收的,IgH中一个master实例可以使用多个多个网卡设备来发送/接收EtherCAT数据帧,device_index就是表示master下的网络设备的。

data_origin表示每个master管理着多个空闲的ec_datagram_t,这些ec_datagram_t分成了三类,给不同的状态机使用,具体的后文马上会细说,data_origin就是表示这个ec_datagram_t是属于哪类的。

index表示该数据报是EtherCAT数据区的第index个子报文,在master发送一个完整的EtherCAT数据报时,组装以太网数据帧时使用。

data这个指向子报文的数据内存区,由于每个子报文交换数据不同,其大小不同,所以数据区为动态分配,mem_size表示的就是分配的大小。

data_size表示数据报操作的数据大小,比如该数据报用于读从站的某个寄存器,该值就是这个寄存器的大小。

jiffies_sent、jiffies_received、cycles_sent、cycles_received使用不同时钟方式是记录数据帧发送接收时间的,用于统计。

ec_datagram_state_t表示数据报的状态,每个数据报(ec_datagram_t)也是基于状态来处理,有6种状态:

EC_DATAGRAM_INIT :数据报已经初始化

EC_DATAGRAM_QUEUED :插入发送队列准备发送

EC_DATAGRAM_SENT :已经发送(还存在队列中)

EC_DATAGRAM_RECEIVED:该数据报已接收,并从发送队列删除

EC_DATAGRAM_TIMED_OUT :该数据报发送后,接收超时,从发送队列删除

EC_DATAGRAM_ERROR :发送和接收过程中出错(从队列删除),校验错误、不匹配等。

M位在master发送时组装EtherCAT数据帧时确定,接收时也根据该位判断后面还有没有子报文。

数据报对象初始化由函数ec_datagram_init()完成:

void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram. */)

{

INIT_LIST_HEAD(&datagram->queue); // mark as unqueued

datagram->device_index = EC_DEVICE_MAIN; /*默认主设备使用*/

datagram->type = EC_DATAGRAM_NONE; /*数据报类型*/

memset(datagram->address, 0x00, EC_ADDR_LEN); /*数据报地址清零*/

datagram->data = NULL;

datagram->data_origin = EC_ORIG_INTERNAL; /*默认内部数据*/

datagram->mem_size = 0;

datagram->data_size = 0;

datagram->index = 0x00;

datagram->working_counter = 0x0000;

datagram->state = EC_DATAGRAM_INIT; /*初始状态*/

#ifdef EC_HAVE_CYCLES

datagram->cycles_sent = 0;

#endif

datagram->jiffies_sent = 0;

#ifdef EC_HAVE_CYCLES

datagram->cycles_received = 0;

#endif

datagram->jiffies_received = 0;

datagram->skip_count = 0;

datagram->stats_output_jiffies = 0;

memset(datagram->name, 0x00, EC_DATAGRAM_NAME_SIZE);

}

状态机

说完IgH数据报对象,我们来看有限状态机(fsm),有限状态机(fsm):表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。说起状态机,相信大家大学时候都有用过吧,不管是单片机、FPGA,用它写按键、菜单、协议处理、控制器什么的爽的一塌糊涂。其实我们使用的计算机就是本就是基于状态机作为计算模型的,它对数字系统的设计具有十分重要的作用。另外Linux TCP协议也是由状态机实现。

同样igh主站内部机制使用有限状态机来实现,IgH内状态机的基本表示如下:

struct ec_fsm_xxx {

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

void (*state)(ec_fsm_master_t *); /**< 状态函数 */

....

};

IgH EtherCAT协议栈几乎所有功能通过状态机实现,每个状态机管理着某个对象的状态、功能实现的状态装换,而这些状态转换是基于EtherCAT数据报来进行的,如状态机A0状态函数填充datagram,经EtherCAT数据帧发出后,经过slave ESC处理,回到网卡接收端接收后,交给状态机A1状态的下一个状态函数解析处理。所以每个状态机内都包含有指向该状态机操作的数据报对象指针datagram和状态执行的状态函数void (*state)(ec_fsm_master_t *);

总结一句话:状态机是根据数据报的状态来执行,每个状态机都需要操作一个数据报对象。

现在知道了状态机与数据报的关系,下面介绍IgH EtherCAT协议栈中有哪些状态机,及状态机使用的数据报对象是从哪里分配如何管理的。

master状态机

前面说到主站具有的三个阶段,当主站与网卡设备attach后进入Idle phase,处于Idle phase后,开始执行主站状态机。

主站状态机包含1个主状态机和许多子状态机,matser状态机主要目的是:

Bus monitoring 监控EtherCAT总线拓扑结构,如果发生改变,则重新扫描。

Slave con fguration 监视从站的应用程序层状态。如果从站未处于其应有的状态,则从站将被(重新)配置

Request handling 请求处理(源自应用程序或外部来源),主站任务应该处理异步请求,例如:SII访问,SDO访问或类似。

主状态机ec_fsm_master_t结构如下:

struct ec_fsm_master {

ec_master_t *master; /**< master the FSM runs on */

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

unsigned int retries; /**< retries on datagram timeout. */

void (*state)(ec_fsm_master_t *); /**< master state function */

ec_device_index_t dev_idx; /**< Current device index (for scanning etc.).

*/

int idle; /**< state machine is in idle phase */

unsigned long scan_jiffies; /**< beginning of slave scanning */

uint8_t link_state[EC_MAX_NUM_DEVICES]; /**< Last link state for every

device. */

unsigned int slaves_responding[EC_MAX_NUM_DEVICES]; /**<每个设备的响应从站数。*/

unsigned int rescan_required; /**< A bus rescan is required. */

ec_slave_state_t slave_states[EC_MAX_NUM_DEVICES]; /**< AL states of

responding slaves for

every device. */

ec_slave_t *slave; /**< current slave */

ec_sii_write_request_t *sii_request; /**< SII write request */

off_t sii_index; /**< index to SII write request data */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine */

ec_fsm_soe_t fsm_soe; /**< SoE state machine */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */

ec_fsm_sii_t fsm_sii; /**< SII state machine */

};

可以看到,主站状态机结构下还有很多子状态机,想象一下如果主站的所有功能通过一个状态机来完成,那么这个状态机的状态数量、各状态之间的联系会有多恐怖,复杂性级别将会提高到无法管理的水平。为此,IgH中,将EtherCAT主状态机的某些功能用子状态机完成。这有助于封装相关工作流,并且避免“状态爆炸”现象。这样当主站完成coe功能时,可以由子状态机fsm_coe去完成。具体各功能是如何通过状态机完成的,文章后面会介绍。

slave状态机

slave状态机管理着每个从站的状态,所以位于从站对象(ec_slave_t)内:

struct ec_slave

{

ec_master_t *master; /**< Master owning the slave. */

.....

ec_fsm_slave_t fsm; /**< Slave state machine. */

.....

};

struct ec_fsm_slave {

ec_slave_t *slave; /**< slave the FSM runs on */

struct list_head list; /**< Used for execution list. */

ec_dict_request_t int_dict_request; /**< Internal dictionary request. */

void (*state)(ec_fsm_slave_t *, ec_datagram_t *); /**< State function. */

ec_datagram_t *datagram; /**< Previous state datagram. */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_reg_request_t *reg_request; /**< Register request to process. */

ec_foe_request_t *foe_request; /**< FoE request to process. */

off_t foe_index; /**< Index to FoE write request data. */

ec_soe_request_t *soe_request; /**< SoE request to process. */

ec_eoe_request_t *eoe_request; /**< EoE request to process. */

ec_mbg_request_t *mbg_request; /**< MBox Gateway request to process. */

ec_dict_request_t *dict_request; /**< Dictionary request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine. */

ec_fsm_foe_t fsm_foe; /**< FoE state machine. */

ec_fsm_soe_t fsm_soe; /**< SoE state machine. */

ec_fsm_eoe_t fsm_eoe; /**< EoE state machine. */

ec_fsm_mbg_t fsm_mbg; /**< MBox Gateway state machine. */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave scan state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave config state machine. */

};

slave状态机和master状态机类似,slave状态机内还包含许多子状态机。slave状态机主要目的是:

主站管理从站状态

主站与从站应用层(AL)通讯。比如具有EoE功能的从站,主站通过该从站下的子状态机fsm_eoe来管理主站与从站应用层的EOE通讯。

数据报对象的管理

上面简单介绍了IgH内的状态机,状态机输入输出的对象是datagram,fsm对象内只有数据报对象的指针,那fsm工作过程中的数据报对象从哪里分配?

由于每个循环周期都需要操作数据报对象,IgH为减少datagram的动态分配操作,提高主站性能,在master初始化的时候预分配了主站运行需要的所有datagram对象。在master实例我们可以看到下面的数据报对象:

struct ec_master {

...

ec_datagram_t fsm_datagram; /**< Datagram used for state machines. */

...

ec_datagram_t ref_sync_datagram; /**< Datagram used for synchronizing the

reference clock to the master clock.*/

ec_datagram_t sync_datagram; /**< Datagram used for DC drift

compensation. */

ec_datagram_t sync_mon_datagram; /**< Datagram used for DC synchronisation

monitoring. */

...

ec_datagram_t ext_datagram_ring[EC_EXT_RING_SIZE];

}

这些数据报对象都是已经分配内存的,但由于报文不同,报文操作的数据大小不同,所以datagram数据区大小随状态机的具体操作而变化,在具体使用时才分配数据区内存。

以上数据报对象给状态机使用,别忘了还有过程数据也需要数据报对象,所以IgH中数据报类型分为以下四类:

分为三类(非常重要):

数据报对象

用途

Datagram_pairs

过程数据报

fsm_datagram[]

Fsm_master及子状态机专用的数据报对象。

ext_datagram_ring[]

动态分配给fsm_slave及其子fsm。

ref_sync_datagram sync_datagram sync64_datagram sync_mon_datagram

应用专用数据报用于时钟同步。

其中fsm_datagram为master状态机及master下的子状态机执行过程中操作的对象。

ext_datagram_ring[]是一个环形队列,当fsm_slave从站状态机处于ready状态,可以开始处理与slave相关请求,如配置、扫描、SDO、PDO等,这时会从ext_datagram_ring[]中给该fsm_slave分配一个数据报,并运行fsm_slave状态机检查并处理请求。

应用专用数据报用于时钟同步,与时钟强相关,它们比较特殊,它们的数据区大小是恒定的,所以其数据区在主站初始化时就已分配内存,应用调用时直接填数据发送,避免linux的内存分配带来时钟的偏差。

数据报数据区(data)内存通过ec_datagram_prealloc()来分配.

int ec_datagram_prealloc(

ec_datagram_t *datagram, /**< EtherCAT datagram. */

size_t size /**< New payload size in bytes. */

)

{

if (datagram->data_origin == EC_ORIG_EXTERNAL

|| size <= datagram->mem_size)

return 0;

......

if (!(datagram->data = kmalloc(size, GFP_KERNEL))) {

......

}

datagram->mem_size = size;

return 0;

}

数据区的大小为一个以太网帧中单个Ethercat数据报的最大数据大小EC_MAX_DATA_SIZE。

/** Size of an EtherCAT frame header. */

#define EC_FRAME_HEADER_SIZE 2

/** Size of an EtherCAT datagram header. */

#define EC_DATAGRAM_HEADER_SIZE 10

/** Size of an EtherCAT datagram footer. */

#define EC_DATAGRAM_FOOTER_SIZE 2

/** Size of the EtherCAT address field. */

#define EC_ADDR_LEN 4

/** Resulting maximum data size of a single datagram in a frame. */

#define EC_MAX_DATA_SIZE (ETH_DATA_LEN - EC_FRAME_HEADER_SIZE \

- EC_DATAGRAM_HEADER_SIZE - EC_DATAGRAM_FOOTER_SIZE)

由于以太网帧的大小有限,因此数据报的最大大小受到限制,即以太网帧长度 1500 - ethercat头2byte- ethercat子数据报报头10字节-WKC 2字节,如图:

如果过程数据镜像的大小超过该限制,就必须发送多个帧,并且必须对映像进行分区以使用多个数据报。 Domain自动进行管理。

2.3 master状态机及数据报初始化

对状态机及数据报对象有初步认识后,我们回到ec_master.ko模块入口函数ec_init_module()主站实例初始化ec_master_init(),主要完成主站状态机初始化及数据报:

// init state machine datagram

ec_datagram_init(&master->fsm_datagram); /*初始化数据报对象*/

snprintf(master->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE, "master-fsm");

ret = ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE);

// create state machine object

ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram); /*初始化master fsm*/

其中ec_fsm_master_init初始化master fsm和子状态机,并指定了master fsm使用的数据报对象fsm_datagram。

void ec_fsm_master_init(

ec_fsm_master_t *fsm, /**< Master state machine. */

ec_master_t *master, /**< EtherCAT master. */

ec_datagram_t *datagram /**< Datagram object to use. */

)

{

fsm->master = master;

fsm->datagram = datagram;

ec_fsm_master_reset(fsm);

// init sub-state-machines

ec_fsm_coe_init(&fsm->fsm_coe);

ec_fsm_soe_init(&fsm->fsm_soe);

ec_fsm_pdo_init(&fsm->fsm_pdo, &fsm->fsm_coe);

ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);

ec_fsm_slave_config_init(&fsm->fsm_slave_config, fsm->datagram,

&fsm->fsm_change, &fsm->fsm_coe, &fsm->fsm_soe, &fsm->fsm_pdo);

ec_fsm_slave_scan_init(&fsm->fsm_slave_scan, fsm->datagram,

&fsm->fsm_slave_config, &fsm->fsm_pdo);

ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);

}

初始化外部数据报队列

外部数据报队列用于从站状态机,每个状态机执行期间使用的数据报从该区域分配,下面是初始化ext_datagram_ring中每个结构:

for (i = 0; i < EC_EXT_RING_SIZE; i++) {

ec_datagram_t *datagram = &master->ext_datagram_ring[i];

ec_datagram_init(datagram);

snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, "ext-%u", i);

}

非应用数据报队列链表,如EOE数据报会插入该队列后发送。

INIT_LIST_HEAD(&master->ext_datagram_queue);

同样初始化几个时钟相关数据报对象,它们功能固定,所以数据区大小固定,就不贴代码了,比如sync_mon_datagram,它的作用是用于同步监控,获取从站系统时间差,所以是一个BRD数据报,在此直接将数据报操作偏移地址初始化,使用时能快速填充发送。

ec_datagram_init(&master->sync_mon_datagram);

......

ret = ec_datagram_brd(&master->sync_mon_datagram, 0x092c, 4);

地址

名称

描述

复位值

0x092c~0x092F

0~30

系统时间差

本地系统时间副本与参考时钟系统时间值之差

0

31

符号

0:本地系统时间≥参考时钟时间1:本地系统时间<参考时钟时间

0

另外比较重要的是将使用的网卡MAC地址放到macs[]中,在网卡驱动probe过程中根据MAC来匹配主站使用哪个网卡。

for (dev_idx = EC_DEVICE_MAIN; dev_idx < EC_MAX_NUM_DEVICES; dev_idx++) {

master->macs[dev_idx] = NULL;

}

master->macs[EC_DEVICE_MAIN] = main_mac;

2.4 初始化EtherCAT device

master协议栈主要完成EtherCAT数据报的解析和组装,然后需要再添加EtherNet报头和FCS组成一个完整的以太网帧,最后通过网卡设备发送出去。为与以太网设备驱动层解耦,igh使用ec_device_t来封装底层以太网设备,一般来说每个master只有一个ec_device_t,这个编译时配置决定,若启用线缆冗余功能,可指定多个网卡设备:

struct ec_device

{

ec_master_t *master; /**< EtherCAT master */

struct net_device *dev; /**< 使用的网络设备 */

ec_pollfunc_t poll; /**< pointer to the device's poll function */

struct module *module; /**< pointer to the device's owning module */

uint8_t open; /**< true, if the net_device has been opened */

uint8_t link_state; /**< device link state */

struct sk_buff *tx_skb[EC_TX_RING_SIZE]; /**< transmit skb ring */

unsigned int tx_ring_index; /**< last ring entry used to transmit */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_poll; /**< cycles of last poll */

#endif

#ifdef EC_DEBUG_RING

struct timeval timeval_poll;

#endif

unsigned long jiffies_poll; /**< jiffies of last poll */

// Frame statistics

u64 tx_count; /**< 发送的帧数 */

u64 last_tx_count; /**<上次统计周期发送的帧数。 */

u64 rx_count; /**< 接收的帧数 */

u64 last_rx_count; /**< 上一个统计周期收到的帧数。 */

u64 tx_bytes; /**< 发送的字节数 */

u64 last_tx_bytes; /**< 上一个统计周期发送的字节数。 */

u64 rx_bytes; /**< Number of bytes received. */

u64 last_rx_bytes; /**< Number of bytes received of last statistics cycle.

*/

u64 tx_errors; /**< Number of transmit errors. */

s32 tx_frame_rates[EC_RATE_COUNT]; /**< Transmit rates in frames/s for

different statistics cycle periods.

*/

s32 rx_frame_rates[EC_RATE_COUNT]; /**< Receive rates in frames/s for

different statistics cycle periods.

*/

s32 tx_byte_rates[EC_RATE_COUNT]; /**< Transmit rates in byte/s for

different statistics cycle periods. */

s32 rx_byte_rates[EC_RATE_COUNT]; /**< Receive rates in byte/s for

different statistics cycle periods. */

......

};

成员*master表示改对象属于哪个master,*dev指向使用的以太网设备net_device,poll该网络设备poll函数,tx_skb[]以太网帧发送缓冲区队列,需要发送的以太网帧会先放到该队里,tx_ring_index管理tx_skb[],以及一些网络统计变量,下面初始化ec_device_t对象:

/*\master\master.c*/

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

ret = ec_device_init(&master->devices[dev_idx], master);

if (ret < 0) {

goto out_clear_devices;

}

}

/*\master\device.c*/

int ec_device_init(

ec_device_t *device, /**< EtherCAT device */

ec_master_t *master /**< master owning the device */

)

{

int ret;

unsigned int i;

struct ethhdr *eth;

....

device->master = master;

device->dev = NULL;

device->poll = NULL;

device->module = NULL;

device->open = 0;

device->link_state = 0;

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i] = NULL;

}

......

ec_device_clear_stats(device);

......

for (i = 0; i < EC_TX_RING_SIZE; i++) {

if (!(device->tx_skb[i] = dev_alloc_skb(ETH_FRAME_LEN))) {

......

}

// add Ethernet-II-header

skb_reserve(device->tx_skb[i], ETH_HLEN);

eth = (struct ethhdr *) skb_push(device->tx_skb[i], ETH_HLEN);

eth->h_proto = htons(0x88A4);

memset(eth->h_dest, 0xFF, ETH_ALEN);

}

.....

}

主要关注分配以太网帧发送队列内存tx_skb[],并填充Ethernet报头中的以太网类型字段为0x88A4,目标MAC地址0xFFFFFFFF FFFF,对于源MAC地址、sk_buff所属网络设备、ec_device_t对象使用的网络设备net_device,将在网卡驱动初始化与master建立联系过程中设置。

2.5 设置IDLE 线程的发送间隔:

ec_master_set_send_interval(master, 1000000 / HZ);

根据网卡速率计算:

void ec_master_set_send_interval(

ec_master_t *master, /**< EtherCAT master */

unsigned int send_interval /**< Send interval */

)

{

master->send_interval = send_interval; //发送间隔 us

master->max_queue_size =

(send_interval * 1000) / EC_BYTE_TRANSMISSION_TIME_NS;

master->max_queue_size -= master->max_queue_size / 10;

}

100Mbps网卡发送一字节数据需要的时间EC_BYTE_TRANSMISSION_TIME_NS: 1/(100 MBit/s / 8 bit/byte) = 80 ns/byte.

2.6 初始化字符设备

由于主站位于内核空间,用户空间应用与主站交互通过字符设备来交互;

创建普通字符设备,给普通linux应用和Ethercat tool使用。若使用xenomai或RTAI,则再创建实时字符设备,提供给实时应用使用。

......

master->class_device = device_create(class, NULL,

MKDEV(MAJOR(device_number), master->index), NULL,

"EtherCAT%u", master->index);

......

#ifdef EC_RTDM

// init RTDM device

ret = ec_rtdm_dev_init(&master->rtdm_dev, master);

...

#endif

到这里明白了IgH中的状态机与数据报之间的关系,主站对象也创建好了,但是主站还没有网卡设备与之关联,主站也还没有工作,下面简单看一下ecdev_offer流程。

关于网卡驱动代码详细解析推荐这两篇文章:

Monitoring and Tuning the Linux Networking Stack: Sending Data

Monitoring and Tuning the Linux Networking Stack: Receiving Data

3 网卡

网卡probe

static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

{

......

adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);

if (adapter->ecdev) { /*注册打开ec_net设备*/

err = ecdev_open(adapter->ecdev);

.....

adapter->ec_watchdog_jiffies = jiffies;

} else { /*注册普通网络设备*/

......

err = register_netdev(netdev);

......

}

......

}

给主站提供网络设备:ecdev_offer

根据MAC地址找到master下的ec_device_t对象

device->dev = net_dev;

device->poll = poll;

device->module = module;

上面我们只设置了ec_device_t->tx_skb[]中sk_buff的以太网类型和目的地址,现在继续填充源MAC地址为网卡的MAC地址、sk_buff所属的net_device:

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i]->dev = net_dev;

eth = (struct ethhdr *) (device->tx_skb[i]->data);

memcpy(eth->h_source, net_dev->dev_addr, ETH_ALEN);

}

调用网络设备接口打开网络设备

int ec_device_open(

ec_device_t *device /**< EtherCAT device */

)

{

int ret;

.....

ret = device->dev->open(device->dev);

if (!ret)

device->open = 1;

....

return ret;

}

当master下的所有的网络设备都open后,master从ORPHANED转到IDLE阶段

int ec_master_enter_idle_phase(

ec_master_t *master /**< EtherCAT master */

)

{

int ret;

ec_device_index_t dev_idx;

......

master->send_cb = ec_master_internal_send_cb;

master->receive_cb = ec_master_internal_receive_cb;

master->cb_data = master;

master->phase = EC_IDLE; /*更新master状态*/

// reset number of responding slaves to trigger scanning

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

master->fsm.slaves_responding[dev_idx] = 0;

}

ret = ec_master_nrthread_start(master, ec_master_idle_thread,

"EtherCAT-IDLE");

....

return ret;

}

其中主要设置master发送和接收回调函数,应用通过发送和接收数据时,将通过这两接口直接发送和接收。创建master idle线程ec_master_idle_thread。

4 IDLE阶段内核线程

综上,状态机操作对象是datagram,datagram发送出去后回到主站交给状态机的下一个状态处理,所以主站需要循环地执行状态机、发送EtherCAT数据帧、接收EtherCAT数据帧、执行状态机、发送EtherCAT数据帧、……来驱动状态机运行,这个循环由内核线程来完成。

当主站与网卡绑定后,应用还没有请求主站,主站处于IDLE状态,这时循环由内核线程ec_master_idle_thread来完成,主要完成从站拓扑扫描、配置站点地址等工作。

static int ec_master_idle_thread(void *priv_data)

{

ec_master_t *master = (ec_master_t *) priv_data;

int fsm_exec;

#ifdef EC_USE_HRTIMER

size_t sent_bytes;

#endif

// send interval in IDLE phase

ec_master_set_send_interval(master, 250000 / HZ);

while (!kthread_should_stop()) {

// receive

ecrt_master_receive(master); /*接收上个循环发送的数据帧*/

......

// execute master & slave state machines

......

fsm_exec = ec_fsm_master_exec(&master->fsm); /*执行master状态机*/

ec_master_exec_slave_fsms(master); /*为从站状态机分配datagram,并执行从站状态机*/

......

if (fsm_exec) {

ec_master_queue_datagram(master, &master->fsm_datagram); /*将master状态机处理的datagram插入发送链表*/

}

// send

ecrt_master_send(master); /*组装以太网帧并调用网卡发送*/

sent_bytes = master->devices[EC_DEVICE_MAIN].tx_skb[

master->devices[EC_DEVICE_MAIN].tx_ring_index]->len;

up(&master->io_sem);

if (ec_fsm_master_idle(&master->fsm)) {

ec_master_nanosleep(master->send_interval * 1000);

set_current_state(TASK_INTERRUPTIBLE);

schedule_timeout(1);

} else {

ec_master_nanosleep(sent_bytes * EC_BYTE_TRANSMISSION_TIME_NS);

}

}

EC_MASTER_DBG(master, 1, "Master IDLE thread exiting...\n");

return 0;

}

整个过程简单概述如下。

4.1 数据报发送

下面介绍IgH中状态机处理后数据报的发送流程(ecrt_master_send())。

master使用一个链表datagram_queue来管理要发送的子报文对象datagram,需要发送的子报文对象会先插入该链表中,统一发送时,分配一个sock_buff,从datagram_queue上取出报文对象,设置index(index是发送后接收回来与原报文对应的标识之一),将一个个报文对象按EtherCAT数据帧结构填充到sock_buff中,最后通过网卡设备驱动函数hard_start_xmit,将sock_buff从网卡发送出去。

4.2 数据报接收

接收数据时,通过网卡设备驱动ec_poll函数取出Packet得到以太网数据,然后解析其中的EtherCAT数据帧,解析流程如下:

得到子报文index,遍历发送链表datagram_queue,找到index对应的datagram。

将子报文数据拷贝到datagram数据区。

将以太网帧内子报文中的WKC值复制到datagram中的WKC。

将datagram从链表datagram_queue删除。

根据子报文头M位判断还有没有子报文,有则跳转1继续处理下一个子报文,否则完成接收。

接收完成后,进入下一个循环,内核线程运行状态机或周期应用进行下一个周期,处理接收的Ethercat报文。

先简单介绍到这,敬请关注后续文章。。。。

作者:wsg1100

出处:http://www.cnblogs.com/wsg1100/

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

posted @

2021-02-22 23:39 

沐多 

阅读(9835) 

评论(6) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 沐多

Powered by .NET 8.0 on Kubernetes

国内能实现Ethercat主站方案的公司都有哪些? - 知乎

国内能实现Ethercat主站方案的公司都有哪些? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册机器人运动控制CAN总线电机拖动伺服系统国内能实现Ethercat主站方案的公司都有哪些?能够在linux上实现Ethercat主站的公司,都有哪些,实现能够带伺服驱动器运动的功能。显示全部 ​关注者11被浏览14,371关注问题​写回答​邀请回答​好问题 1​添加评论​分享​6 个回答默认排序盟通科技​已认证账号​ 关注目前盟通科技发行的主要产品序列之一是德国acontis的EC-Master主站协议栈及配套相关产品。EC-Master主站协议栈单品包含有ETG基金会公布的ETG1500 EtherCAT主站规范中的全部功能,具有ClassA和ClassB两种类型的主站示例以及诸如分帧处理、外部同步、热插拔、线缆冗余、主站冗余、EoE第三方扩展支持工具和UDP Mailbox网关支持等额外功能。EC-Master产品结构图EC-Master主站协议栈可以在多个系统平台如Linux、RTLinux、Windows等顺利运行,适用于 Intel、德州仪器、ST、Broadcom、Nvidia、Renesas、NXP、Xilinx 和 Infineon 等知名品牌供应商的许多处理器。协议栈包含有丰富的案例协助用户使用,同时,还附带有专业的售前分析与售后技术支持,在购买后可获得来自德国原厂的技术支持和疑难咨询。除协议栈本身外,盟通科技还发行有多款配套产品,其中,EC-Win/LxWin是以解决EC-Master实时性需求作为目标的系统级实时解决方案,EC-Engineer是一款专业的EtherCAT网络配置和诊断工具,EtherCAT从站仅需与运行EC-Engineer的Windows PC或者直接与主站协议站控制系统相连接,更多信息可以询问盟通科技获得。EtherCAT产品开发矩阵示意图盟通科技作为EC-Master的指定代理发行方,积累了多年的实现项目与解决方案的经验,EC-Master的更多信息,可以在盟通科技的官网(http://www.motrotech.com)找到,客户朋友也可以通过邮箱(info@motrotech.com)与电话(010-62740270)与专业的技术人员直接高效地交流,来获取更多本地化的方案与信息。发布于 2023-04-25 16:13​赞同 1​​添加评论​分享​收藏​喜欢收起​翩歌​ 关注西门子S7-1200/1500系列的PLC,需要连接带EtherCAT的通讯功能的伺服驱动器等设备。西门子的PLC采用PROFINET实时以太网通讯协议,要连接EtherCAT的设备,就必须进行通讯协议转换。小疆GW-PN-ECATM系列的网关提供了,快速可行的解决方案。GW-PN-ECATM支持两种实时以太网通讯协议之间的转换,可以主通讯主站(加主站授权),也可以做通讯从站,两个网络独立运行,通过网关内部进行数据映射。每个以太网网络都提供双端口交换机,方便连接和网络扩展。1、首先添加Ethercat转Profinet网关GSD文件;2、找到Ethercat转Profinet网关模块进行组态;3、设置Ethercat转Profinet网关的IP地址和设备名称。4、设置Ethercat转Profinet网关的输入输出字节数长度;5、下载组态到PLC。6、打开Ethercat转Profinet网关配置软件进行ECAT设置。7、新建项目选择PN2ECAT。8、配置软件的ip地址和设备名称要和博图一致。9、在设备列表中查找并选定所需设备。10、对零差云控一体机伺服驱动器进行参数配置, PDOs在下方参数栏中添加所用参数项。图1,是RX PDO;图2,是TX PDO。11、配置完成后运行。12、直接对对应的IQ地址读写即可。在本案例中,Ethercat转Profinet网关模块GW-PN-ECATM作为零差云控一体机伺服驱动器设备与西门子PLC之间的桥梁,通过配置软件进行简单的数据映射,快速的实现了S7-1200 PLC通过PROFINET协议对伺服器进行控制。发布于 2023-08-10 20:36​赞同​​添加评论​分享​收藏​喜欢

EtherCAT Technology Group | 技术概览

EtherCAT Technology Group | 技术概览

 

EN

|

DE

|

ES

|

IT

|

CN

|

JP

主页

新闻

市场活动

新闻发布

联系方式

会员专区

搜索  

技术概览 技术概览 为何使用EtherCAT? 协会组织 常见问题 会员相关 供应商ID 产品指南 资料下载 一致性测试 EtherCAT G EtherCAT P Safety over EtherCAT EtherCAT 和 TSN 技术汇编 开发者论坛 知识库

退出

EtherCAT - 以太网现场总线

本文深入阐述了基于以太网现场总线系统的EtherCAT (Ethernet for Control Automation Technology)技术。EtherCAT为现场总线技术领域树立了新的性能标准,具备灵活的网络拓扑结构,系统配置简单,和现场总线系统一样操作直观简便。另外,由于EtherCAT实施的成本低廉,因此使系统得以在过去无法应用现场总线网络的场合中选用该现场总线。

 

1. 引言

1.1 以太网和实时能力

2. EtherCAT 运行原理

3. EtherCAT 技术特征

3.1 协议

3.2 拓扑

3.3 分布时钟

3.4 性能

3.5 诊断

3.6 高可靠性

3.7 安全性

3.8 EtherCAT 取代PCI

3.9 设备行规

3.9.1 EtherCAT实现CAN总线应用层协议 (CoE)

3.9.2 EtherCAT实现伺服驱动设备行规IEC61491 (SoE)

3.10 EtherCAT实现以太网(EoE)

3.11 EtherCAT实现文件读取(FoE)

3.12 ADS over EtherCAT (AoE)

4. 基础设施成本

5. EtherCAT 实施

5.1 主站

5.1.1 主站实施服务

5.1.2 主站样本代码

5.2 从站

5.2.1 EtherCAT Slave Controller

5.2.2 从站评估工具包

6. 小结

7. 参考文献

 

 

1. 引言 

页首

 

现场总线已成为自动化技术的集成组件,通过大量的实践试验和测试,如今已获得广泛应用。正是由于现场总线技术的普及,才使基于PC的控制系统得以广泛应用。然而,虽然控制器CPU的性能(尤其是IPC的性能)发展迅猛,但传统的现场总线系统正日趋成为控制系统性能发展的“瓶颈”。急需技术革新的另一个因素则是由于传统的解决方案并不十分理想。传统的方案是,按层划分的控制体系通常都由几个辅助系统所组成(周期系统):即实际控制任务、现场总线系统、I/O系统中的本地扩展总线或外围设备的简单本地固件周期。正常情况下,系统响应时间是控制器周期时间的3-5倍。 在现场总线系统之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术 (参见图1)。

图1: 传统现场总线系统响应时间

在现场总线系统 之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术。

1.1 以太网和实时能力 

目前,有许多方案力求实现以太网的实时能力。例如,CSMA/CD介质存取过程方案,即禁止高层协议访问过程,而由时间片或轮循方式所取代的一种解决方案;另一种解决方案则是通过专用交换机精确控制时间的方式来分配以太网包。这些方案虽然可以在某种程度上快速准确地将数据包传送给所连接的以太网节点,但是,输出或驱动控制器重定向所需要的时间以及读取输入数据所需要的时间都要受制于具体的实现方式。

如果将单个以太网 帧用于每个设备,那么,理论上讲,其可用数据率非常低。例如,最短的以太网帧为84字节(包括内部的包间隔IPG)。如果一个驱动器周期性地发送4字节的实际值和状态信息,并相应地同时接收4字节的命令值和控制字信息,那么,即便是总线负荷为100%(即:无限小的驱动响应时间)时,其可用数据率也只能达到4/84= 4.8%。如果按照10 µs的平均响应时间估计,则速率将下降到1.9%。对所有发送以太网 帧到每个设备(或期望帧来自每个设备)的实时以太网方式而言,都存在这些限制,但以太网帧内部所使用的协议则是例外。

2. EtherCAT 运行原理 

页首

 

EtherCAT技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接收以太网数据包,将其解码,之后再将过程数据复制到各个设备。EtherCAT从站设备在报文经过其节点时读取相应的编址数据,同样,输入数据也是在报文经过时插入至报文中(参见图2)。整个过程中,报文只有几纳秒的时间延迟。

图 2: 过程数据插入至报文中

由于发送和接收的以太网帧压缩了大量的设备数据,所以有效数据率可达90%以上。100 Mb/s TX的全双工特性完全得以利用,因此,有效数据率可 大于100 Mb/s(即大于2 x 100 Mb/s的90%)(参见图3)。

图 3: 带宽利用率的比较

符合IEEE 802.3标准的以太网协议无需附加任何总线即可访问各个设备。耦合设备中的物理层可以将双绞线或光纤转换为LVDS(一种可供选择的以太网物理层标准[4,5]),以满足电子端子块等模块化设备的需求。这样,就可以非常经济地对模块化设备进行扩展了。之后,便可以如普通以太网一样,随时进行从底板物理层LVDS到100 Mb/s TX物理层的转换。

3. EtherCAT 技术特征 

页首

 

3.1 协议 

EtherCAT是用于过程数据的优化协议,凭借特殊的以太网类型,它可以在以太网帧内直接传送。EtherCAT帧可包括几个EtherCAT报文,每个报文都服务于一块逻辑过程映像区的特定内存区域,该区域最大可达4GB字节。数据顺序不依赖于网络中以太网端子的物理顺序,可任意编址。从站之间的广播、多播和通讯均得以实现。当需要实现最佳性能,且要求EtherCAT组件和控制器在同一子网操作时,则直接以太网帧传输就将派上用场。

然而,EtherCAT不仅限于单个子网的应用。EtherCAT UDP将EtherCAT协议封装为UDP/IP数据报文(参见图4),这就意味着,任何以太网协议堆栈的控制均可编址到EtherCAT系统之中,甚至通讯还可以通过路由器跨接到其它子网中。显然,在这种变体结构中,系统性能取决于控制的实时特性和以太网协议的实现方式。因为UDP数据报文仅在第一个站才完成解包,所以EtherCAT网络自身的响应时间基本不受影响。

图 4: EtherCAT:符合IEEE 802.3 [3]的标准帧

另外,根据主/从数据交换原理,EtherCAT也非常适合控制器之间(主/从)的通讯。自由编址的网络变量可用于过程数据以及参数、诊断、编程和各种远程控制服务,满足广泛的应用需求。主站/从站与主站/主站之间的数据通讯接口也相同。

从站到从站的通讯则有两种机制以供选择。一种机制是,上游设备和下游设备可以在同一周期内实现通讯,速度非常快。由于这种方法与拓扑结构相关,因此适用于由设备架构设计所决定的从站到从站的通讯,如打印或包装应用等。而对于自由配置的从站到从站的通讯,则可以采用第二种机制—数据通过主站进行中继。这种机制需要两个周期才能完成,但由于EtherCAT的性能非常卓越,因此该过程耗时仍然快于采用其他方法所耗费的时间。

按照文献[3]所述,EtherCAT仅使用标准的以太网帧,无任何压缩。因此,EtherCAT 以太网帧可以通过任何以太网MAC发送,并可以使用标准工具(如:监视器)。

3.2 拓扑 

EtherCAT几乎支持任何拓扑类型,包括线型、树型、星型等(参见图5)。通过现场总线而得名的总线结构或线型结构也可用于以太网,并且不受限于级联交换机或集线器的数量。

图 5: 灵活的拓扑结构:线型、树型或星型拓扑

最有效的系统连线方法是对线型、分支或树叉结构进行拓扑组合。因为所需接口在I/O 模块等很多设备中都已存在,所以无需附加交换机。当然,仍然可以使用传统的、基于以太网的星型拓扑结构。

还可以选择不同的电缆以提升连线的灵活性:灵活、经济的标准超五类以太网电缆可采用100BASE-TX模式传送信号;塑封光纤(PFO)则可用于特殊应用场合;还可通过交换机或介质转换器实现不同以太网连线(如:不同的光纤和铜电缆)的完整组合。

快速以太网的物理层(100BASE-TX )允许两个设备之间的最大电缆长度为100米。由于连接的设备数量可高达65535,因此,网络的容量几乎没有限制。

3.3. 分布时钟 

精确同步对于同时动作的分布式过程而言尤为重要。例如,几个伺服轴同时执行协调运动时,便是如此。

最有效的同步方法是精确排列分布时钟(请参阅IEEE 1588标准[6])。与完全同步通讯中通讯出现故障会立刻影响同步品质的情况相比,分布排列的时钟对于通讯系统中可能存在的相关故障延迟具有极好的容错性。

采用EtherCAT,数据交换就完全基于纯硬件机制。由于通讯采用了逻辑环结构 (借助于全双工快速以太网的物理层),主站时钟可以简单、精确地确定各个从站时钟传播的延迟偏移,反之亦然。分布时钟均基于该值进行调整,这意味着可以在网络范围内使用非常精确的、小于1 微秒的、确定性的同步误差时间基(参见图6)。而跨接工厂等外部同步则可以基于IEEE 1588 标准。

图 6: 同步性与一致性:相距电缆长度为有120米的两个分布系统,

带有300个节点的示波器比较

此外,高分辨率的分布时钟不仅可以用于同步,还可以提供数据采集的本地时间精确信息。当采样时间非常短暂时,即使是出现一个很小的位置测量瞬时同步偏差,也会导致速度计算出现较大的阶跃变化,例如,运动控制器通过顺序检测的位置计算速度便是如此。而在EtherCAT中,引入时间戳数据类型作为一个逻辑扩展,以太网所提供的巨大带宽使得高分辨率的系统时间得以与测量值进行链接。这样,速度的精确计算就不再受到通讯系统的同步误差值影响,其精度要高于基于自由同步误差的通讯测量技术。

3.4 性能 

EtherCAT使网络性能达到了一个新境界。借助于从站硬件集成和网络控制器主站的直接内存存取,整个协议的处理过程都在硬件中得以实现,因此,完全独立于协议堆栈的实时运行系统、CPU 性能或软件实现方式。1000个I/O的更新时间只需30 µs,其中还包括I/O周期时间(参见表1)。单个以太网帧最多可进行1486字节的过程数据交换,几乎相当于12000个数字输入和输出,而传送这些数据耗时仅为300 µs。

表 1: EtherCAT性能概貌

100个伺服轴的通讯也非常快速:可在每100µs中更新带有命令值和控制数据的所有轴的实际位置及状态,分布时钟技术使轴的同步偏差小于1微秒。而即使是在保证这种性能的情况下,带宽仍足以实现异步通讯,如TCP/IP、下载参数或上载诊断数据。

超高性能的EtherCAT技术可以实现传统的现场总线系统无法迄及的控制理念。EtherCAT使通讯技术和现代工业PC所具有的超强计算能力相适应,总线系统不再是控制理念的瓶颈,分布式I/O可能比大多数本地I/O接口运行速度更快。EtherCAT技术原理具有可塑性,并不束缚于100 M bps的通讯速率,甚至有可能扩展为1000 M bps的以太网。 

3.5 诊断 

现场总线系统的实际应用经验表明,有效性和试运行时间关键取决于诊断能力。只有快速而准确地检测出故障,并明确标明其所在位置,才能快速排除故障。因此,在EtherCAT的研发过程中,特别注重强化诊断特征。

试运行期间,驱动或I/O 端子等节点的实际配置需要与指定的配置进行匹配性检查,拓扑结构也需要与配置相匹配。由于整合的拓扑识别过程已延伸至各个端子,因此,这种检查不仅可以在系统启动期间进行,也可以在网络自动读取时进行(配置上载)。

可以通过评估CRC校验,有效检测出数据传送期间的位故障——32 位CRC多项式的最小汉明距为4。除断线检测和定位之外,EtherCAT系统的协议、物理层和拓扑结构还可以对各个传输段分别进行品质监视,与错误计数器关联的自动评估还可以对关键的网络段进行精确定位。此外,对于电磁干扰、连接器破损或电缆损坏等一些渐变或突变的错误源而言,即便它们尚未过度应变到网络自恢复能力的范围,也可对其进行检测与定位。

3.6 高可靠性 

选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。

图 7: 使用标准从站设备的低成本线缆冗余

3.7 安全性 

为了实现EtherCAT安全数据通信,EtherCAT安全通信协议已经在ETG组织内部公开。EtherCAT被用作传输安全和非安全数据的单一通道。传输介质被认为是“黑色通道”而不被包括在安全协议中(见图8)。EtherCAT过程数据中的安全数据报文包括安全过程数据和所要求的数据备份。这个“容器”在设备的应用层被安全地解析。通信仍然是单一通道的。这符合IEC61784-3附件中的模型A。

图 8: 使用黑色通道的EtherCAT安全通信软件构件

EtherCAT安全协议已经由德国技术监督局(TÜV SÜD Rail)评估为满足IEC61508定义的SIL3等级的安全设备之间传输过程数据的通信协议。设备上实施EtherCAT安全协议必须满足安全目标的需求。相应的产品相关要求也必须考虑进来。

图 9: EtherCAT安全系统

图9中的应用示例受益于这种技术。安全元件在自动化系统中所需要的任意地方都可以使用。系统中可以使用不同规模的本地输入和输出元件。可以根据需求使用安全或非安全总线端子扩展额外的输入和输出。安全逻辑也嵌入到网络当中。这样不用安全扩展的标准PLC可以继续处理控制任务。安全输入和输出功能需要的本地安全逻辑由智能化的安全总线端子实现。这节约了昂贵的安全PLC所带来的成本,并可以根据当前任务随意裁剪逻辑功能。只有安全EtherCAT主站和所分配的安全从站通过非安全的标准PLC路由。

本协议在安全数据长度,通信介质或波特率方面么有限制。

EtherCAT被用作“黑色通道”,即,通信系统在安全处理中没有任何作用。

协议被鉴定符合IEC61508定义的SIL3等级

提供EtherCAT安全功能的产品已经于2005年就上市了。

3.8 EtherCAT 取代PCI 

随着PC组件急剧向小型化方向发展,工业PC的体积日趋取决于插槽的数目。而快速以太网的带宽和EtherCAT通讯硬件的过程数据长度则为该领域的发展提供了新的可能性——IPC 中的传统接口现在可以转变为集成的EtherCAT接口端子(参见图10)。除了可以对分布式I/O进行编址,还可以对驱动和控制单元以及现场总线主站、快速串行接口、网关和其它通讯接口等复合系统进行编址。

图 10: 分布式现场总线接口

即使是其他无协议限制的以太网设备变体,也可以通过分布式交换机端口设备进行连接。由于一个以太网接口足以满足整个外围设备的通讯 (参见图11),因此,这不仅极大地精简了IPC主机的体积和外观,而且也降低了IPC主机的成本。

图 11: EtherCAT使控制器的体积显著减小

3.9 设备行规 

设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。

3.9.1 EtherCAT实现CANopen (CoE) 

CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。

3.9.2 EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE) 

SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到 EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。

图 12: 同时并存的多个设备行规和协议

3.10 EtherCAT实现以太网(EoE) 

EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。

图 13: 对所有以太网协议完全透明

EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。

3.11 EtherCAT实现文件读取(FoE) 

这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。

3.12 ADS over EtherCAT (AoE) 

ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或 EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IO-Link™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。

4. 基础设施成本 

页首

 

由于EtherCAT无需集线器和交换机,因此,在环境条件允许的情况下,可以节省电源、安装费用等设备方面的投资,只需使用标准的以太网电缆和价格低廉的标准连接器即可。如果环境条件有特殊要求,则可以依照IEC标准,使用增强密封保护等级的连接器。

5. EtherCAT 实施 

页首

 

EtherCAT技术是面向经济的设备而开发的,如I/O 端子、传感器和嵌入式控制器等。EtherCAT使用遵循IEEE802.3标准的以太网帧。这些帧由主站设备发送,从站设备只是在以太网帧经过其所在位置时才提取和/或插入数据。因此,EtherCAT 使用标准的以太网MAC,这正是其在主站设备方面智能化的表现。同样,EtherCAT在从站控制器中使用专用芯片,这也是其在从站设备方面智能化的表现——无论本地处理能力是否强大或软件品质好坏与否,专用芯片均可在硬件中处理过程数据协议,并提供最佳实时性能。

5.1 主站 

EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT 无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。

例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。

EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。

系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。

图 14: 主站实施的单个过程映像

5.1.1 主站实施服务 

已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9, MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux, PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux.

可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。

5.1.2 主站样本代码 

另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。

图 15: 主站样本代码结构

5.2 从站 

EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。

5.2.1 EtherCAT Slave Controller 

目前,有多家制造商均提供EtherCAT从站控制器。通过价格低廉的FPGA,也可实现从站控制器的功能,可以购买授权以获取相应的二进制代码。

从站控制器通常都有一个内部的DPRAM,并提供存取这些应用内存的接口范围:

串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。

8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。

32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。

图 16: 从站硬件:带主机CPU的FPGA

图 17: 从站硬件:带直接I/O的FPGA

关于EtherCAT从站控制器的最新信息,请登录EtherCAT网站[1]。

5.2.2 从站评估工具包 

倍福公司提供的从站评估工具包使接口操作变得简便易行。由于采用了EtherCAT,无需功能强大的通讯处理器,因此,可将从站评估工具包中的8位微处理器作为主机CPU使用。该工具包还包括源代码形式的从站主机软件(相当于协议堆栈)和参考主站软件包(TwinCAT)。

6. 小结 

页首

 

EtherCAT 拥有杰出的通讯性能,接线非常简单,并对其它协议开放。传统的现场总线系统已达到了极限,而EtherCAT则突破建立了新的技术标准——30 µs内可以更新1000个I/O数据,可选择双绞线或光纤,并利用以太网和因特网技术实现垂直优化集成。使用 EtherCAT,可以用简单的线型拓扑结构替代昂贵的星型以太网拓扑结构,无需昂贵的基础组件。EtherCAT还可以使用传统的交换机连接方式,以集成其它的以太网设备。其它的实时以太网方案需要与控制器进行特殊连接,而EtherCAT只需要价格低廉的标准以太网卡(NIC) 便可实现。

EtherCAT拥有多种机制,支持主站到从站、从站到从站以及主站到主站之间的通讯(参见图18)。它实现了安全功能,采用技术可行且经济实用的方法,使以太网技术可以向下延伸至I/O级。EtherCAT功能优越,可以完全兼容以太网,可将因特网技术嵌入到简单设备中,并最大化地利用了以太网所提供的巨大带宽,是一种实时性能优越且成本低廉的网络技术。

图 19: 网络结构形式多样

7. 参考文献 

页首

 

[1]

EtherCAT Technology Group (ETG)

http://www.ethercat.org

[2]

IEC 61158-3/4/5/6-12 (Ed.1.0), Industrial communication networks – Fieldbus specifications – Part 3-12: Data-link layer service definition – Part 4-12: Data-link layer protocol specification – Part 5-12: Application layer service definition – Part 6-12: Application layer protocol specification – Type 12 elements (EtherCAT)

[3]

IEEE 802.3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications

[4]

IEEE 802.3ae-2002: CSMA/CD Access Method and Physical Layer Specifications: Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10 Gb/s Operation

[5]

ANSI/TIA/EIA-644-A, Electrical Characteristics of Low Voltage Differential Signaling (LVDS) Interface Circuits

[6]

IEEE 1588-2002: IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems

[7]

EN 50325-4: Industrial communications subsystem based on ISO 11898 (CAN) for controller-device interfaces. Part 4: CANopen

[8]

IEC 61800-7-301/304 (Ed.1.0), Adjustable speed electrical power drive systems – Part 7-301: Generic interface and use of profiles for power drive systems – Mapping of profile type 1 to network technologies – Part 7-304: Generic interface and use of profiles for power drive systems – Mapping of profile type 4 to network technologies

[9]

SEMI E54.20: Standard for Sensor/Actuator Network Communications for EtherCAT.

http://www.semi.org

[10]

IEC 61784-2 (Ed.1.0), Industrial communication networks – Profiles – Part 2: Additional fieldbus profiles for real-time networks based on ISO/IEC 8802-3

 

EtherCAT样本

了解更多关于最快的“工业以太网现场总线”的详细信息

中文

英文

德文

西班牙语

意大利文

法语

日文

韩文

EtherCAT多媒体视频

EtherCAT技术协会

工业以太网通信技术EtherCAT运行原理

EtherCAT技术简介

关于EtherCAT主站,你想知道的都在这里! - 知乎

关于EtherCAT主站,你想知道的都在这里! - 知乎首发于ZLG专栏切换模式写文章登录/注册关于EtherCAT主站,你想知道的都在这里!ZLG致远电子为激活更丰富的EtherCAT应用场景和创新产品,ZLG致远电子研发团队推出系统的EtherCAT主站解决方案,本篇将从软硬件方面详细介绍EtherCATNET-100M主站控制设备。EtherCAT是当今主流的高速现场总线解决方案,也是工业4.0智能制造的先进技术核心。现场总线技术适合于大数据量传输,但不适合于测控工程领域中的确定性进程通讯以及高速数据传输。因此,EtherCAT的设计目标是支持标准的以太网,并且能够以最小的硬件成本在实时控制领域开展使用,更新周期快,稳定性高。一、致远电子EtherCAT主站性能如何?EtherCATNET-100M是一款多功能以太网转EtherCAT主站设备,EtherCAT总线传输速率可达100Mb/s,可实现闭环伺服系统的实时控制与实时数据传输,具有高性能、高传输速度、高可靠性通讯等优点。集成2路EtherCAT接口,具有线缆冗余的机能。图1 EtherCATNET-100MEtherCAT主站产品功能特性概览:支持多达32轴同步和1024个EtherCAT I/O应用;运动控制伺服通讯周期不超过500us,I/O主站资料更新周期不超过200us;采用大规模可编程器件FPGA实现专用以太网MAC以优化实时性能; 丰富的外设接口:主站集成1路千兆通用以太网接口、2路专用EtherCAT接口、1路CAN(FD)接口、2路USB2.0接口、1路HDMI接口、1路RS-232接口、1路SD卡接口、2路DI/DO数字输入输出;采用4GB工业级EMMC,掉电非易丢失数据;内置RTC,断电可完成计时或事件记录功能;宽输入9-48V直流供电电压,额定功耗6W;工作温度:-40℃~+85℃。二、主站系统构成EtherCATNET-100M可快速实现EtherCAT主站控制通讯,集成1路千兆通用以太网接口、2路专用EtherCAT接口、1路CAN(FD)接口、1路HDMI接口、1路SD卡接口、2路DI/DO数字输入输出等。丰富的外设接口可实现更智能化的EtherCAT主站控制。图2 主站系统构成三、环型拓扑冗余技术冗余以太网的拓扑结构包括环型、网络型和混合型拓扑,对于一般的工业以太网系统,可直接用较为简单实用的环型拓扑结构。EtherCAT主站提供两路EtherCAT专用网口,在环型拓扑结构中,将LAN1接到从站(ESC)节点1的IN口,然后从站节点1的OUT口接到下一个从站节点的IN口,依次连接,直到最后一个从站节点连接到EtherCAT主站的LAN2口,如下图所示。由于ESC从站控制器具有自动回环功能,当环形结构中出现单点故障时,EtherCAT网络信息流能在故障断点处自动回环,主站仍然可以与各个从站保持数据传输,大大增强了EtherCAT网络的可靠性与可维护性。图3 环型拓扑冗余技术四、搭载HDMI和CANFD接口,满足更多应用需求EtherCATNET-100M设备提供1路HDMI接口,用于与人机界面或PC显示器的接口通信,接口物理形式为HDMI-Type A。HDMI接口特点与电气参数:高清晰、无损压缩的数字信号传输,其分辨率达到1280x720;支持HDMI 2.0向下兼容版本规范;支持EDID和DDC2B标准; 支持热插拔;具有更好抗干扰能力,实现最长10m无增益传输。设备提供1路隔离CAN(FD)接口,接口物理形式为DB9插座。支持CAN波特率40K~5Mbps,支持CAN、CANFD ISO或CANFD Non-ISO多种控制器类型,内置软件设置CAN(FD)通道120欧姆终端电阻使能开关。可高效进行CAN FD总线二次开发,满足多总线应用需求。图4 CANFD接口应用五、化繁为简的函数库EtherCAT主站库以Linux下动态链接库(so)的方式提供,可以实现EtherCAT主站控制等功能。主站可以通过函数库启动主站RPC服务器,RPC客户端可以通过网络连接到主站RPC服务器,控制主站完成EhterCAT相关的功能。函数库包含zecm.h头文件和libzecm.so动态连接库文件。zecm.h文件包含了EtherCAT主站的数据类型,数据结构以及函数声明,用户开发自定义主站需要配置交叉编译环境,将编译好的程序下载到主站上,在主站运行编译后的程序以完成EtherCAT的通信控制功能。图5 丰富的函数库传统复杂的函数,精炼为如下9条简单易用的函数库:EcatMasterLibInit,EtherCAT主站库初始化;EcatMasterLibExit,释放EtherCAT主站库;EcatSimpleStart,启动主站和RPC服务器;EcatSimpleStop,停止主站和RPC服务器;EcatRequestMasterState,发送网络管理命令;EcatGetMasterState,获取主站当前状态;EcatGetSlaveState,获取从站当前状态;EcatSetExtCtrlTaskHandler,设置用户过程数据回调函数;EcatResetExtCtrlTaskHandler,复位用户过程数据回调函数;EcatCoeSDODownload,SDO下载;EcatCoeSDOUpload ,SDO上传。六、技术一图看懂主站运行流程主站可以运行用户编写的程序,主站程序运行一般遵循的流程如下。图6 主站运行流程图发布于 2021-01-13 16:17CAN总线工业互联网/物联网平台物联网​赞同 8​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录ZLG专栏工业互联网智慧化产品与解决方案

EtherCAT Technology Group | 技术概览

EtherCAT Technology Group | 技术概览

 

EN

|

DE

|

ES

|

IT

|

CN

|

JP

主页

新闻

市场活动

新闻发布

联系方式

会员专区

搜索  

技术概览 技术概览 为何使用EtherCAT? 协会组织 常见问题 会员相关 供应商ID 产品指南 资料下载 一致性测试 EtherCAT G EtherCAT P Safety over EtherCAT EtherCAT 和 TSN 技术汇编 开发者论坛 知识库

退出

EtherCAT - 以太网现场总线

本文深入阐述了基于以太网现场总线系统的EtherCAT (Ethernet for Control Automation Technology)技术。EtherCAT为现场总线技术领域树立了新的性能标准,具备灵活的网络拓扑结构,系统配置简单,和现场总线系统一样操作直观简便。另外,由于EtherCAT实施的成本低廉,因此使系统得以在过去无法应用现场总线网络的场合中选用该现场总线。

 

1. 引言

1.1 以太网和实时能力

2. EtherCAT 运行原理

3. EtherCAT 技术特征

3.1 协议

3.2 拓扑

3.3 分布时钟

3.4 性能

3.5 诊断

3.6 高可靠性

3.7 安全性

3.8 EtherCAT 取代PCI

3.9 设备行规

3.9.1 EtherCAT实现CAN总线应用层协议 (CoE)

3.9.2 EtherCAT实现伺服驱动设备行规IEC61491 (SoE)

3.10 EtherCAT实现以太网(EoE)

3.11 EtherCAT实现文件读取(FoE)

3.12 ADS over EtherCAT (AoE)

4. 基础设施成本

5. EtherCAT 实施

5.1 主站

5.1.1 主站实施服务

5.1.2 主站样本代码

5.2 从站

5.2.1 EtherCAT Slave Controller

5.2.2 从站评估工具包

6. 小结

7. 参考文献

 

 

1. 引言 

页首

 

现场总线已成为自动化技术的集成组件,通过大量的实践试验和测试,如今已获得广泛应用。正是由于现场总线技术的普及,才使基于PC的控制系统得以广泛应用。然而,虽然控制器CPU的性能(尤其是IPC的性能)发展迅猛,但传统的现场总线系统正日趋成为控制系统性能发展的“瓶颈”。急需技术革新的另一个因素则是由于传统的解决方案并不十分理想。传统的方案是,按层划分的控制体系通常都由几个辅助系统所组成(周期系统):即实际控制任务、现场总线系统、I/O系统中的本地扩展总线或外围设备的简单本地固件周期。正常情况下,系统响应时间是控制器周期时间的3-5倍。 在现场总线系统之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术 (参见图1)。

图1: 传统现场总线系统响应时间

在现场总线系统 之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术。

1.1 以太网和实时能力 

目前,有许多方案力求实现以太网的实时能力。例如,CSMA/CD介质存取过程方案,即禁止高层协议访问过程,而由时间片或轮循方式所取代的一种解决方案;另一种解决方案则是通过专用交换机精确控制时间的方式来分配以太网包。这些方案虽然可以在某种程度上快速准确地将数据包传送给所连接的以太网节点,但是,输出或驱动控制器重定向所需要的时间以及读取输入数据所需要的时间都要受制于具体的实现方式。

如果将单个以太网 帧用于每个设备,那么,理论上讲,其可用数据率非常低。例如,最短的以太网帧为84字节(包括内部的包间隔IPG)。如果一个驱动器周期性地发送4字节的实际值和状态信息,并相应地同时接收4字节的命令值和控制字信息,那么,即便是总线负荷为100%(即:无限小的驱动响应时间)时,其可用数据率也只能达到4/84= 4.8%。如果按照10 µs的平均响应时间估计,则速率将下降到1.9%。对所有发送以太网 帧到每个设备(或期望帧来自每个设备)的实时以太网方式而言,都存在这些限制,但以太网帧内部所使用的协议则是例外。

2. EtherCAT 运行原理 

页首

 

EtherCAT技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接收以太网数据包,将其解码,之后再将过程数据复制到各个设备。EtherCAT从站设备在报文经过其节点时读取相应的编址数据,同样,输入数据也是在报文经过时插入至报文中(参见图2)。整个过程中,报文只有几纳秒的时间延迟。

图 2: 过程数据插入至报文中

由于发送和接收的以太网帧压缩了大量的设备数据,所以有效数据率可达90%以上。100 Mb/s TX的全双工特性完全得以利用,因此,有效数据率可 大于100 Mb/s(即大于2 x 100 Mb/s的90%)(参见图3)。

图 3: 带宽利用率的比较

符合IEEE 802.3标准的以太网协议无需附加任何总线即可访问各个设备。耦合设备中的物理层可以将双绞线或光纤转换为LVDS(一种可供选择的以太网物理层标准[4,5]),以满足电子端子块等模块化设备的需求。这样,就可以非常经济地对模块化设备进行扩展了。之后,便可以如普通以太网一样,随时进行从底板物理层LVDS到100 Mb/s TX物理层的转换。

3. EtherCAT 技术特征 

页首

 

3.1 协议 

EtherCAT是用于过程数据的优化协议,凭借特殊的以太网类型,它可以在以太网帧内直接传送。EtherCAT帧可包括几个EtherCAT报文,每个报文都服务于一块逻辑过程映像区的特定内存区域,该区域最大可达4GB字节。数据顺序不依赖于网络中以太网端子的物理顺序,可任意编址。从站之间的广播、多播和通讯均得以实现。当需要实现最佳性能,且要求EtherCAT组件和控制器在同一子网操作时,则直接以太网帧传输就将派上用场。

然而,EtherCAT不仅限于单个子网的应用。EtherCAT UDP将EtherCAT协议封装为UDP/IP数据报文(参见图4),这就意味着,任何以太网协议堆栈的控制均可编址到EtherCAT系统之中,甚至通讯还可以通过路由器跨接到其它子网中。显然,在这种变体结构中,系统性能取决于控制的实时特性和以太网协议的实现方式。因为UDP数据报文仅在第一个站才完成解包,所以EtherCAT网络自身的响应时间基本不受影响。

图 4: EtherCAT:符合IEEE 802.3 [3]的标准帧

另外,根据主/从数据交换原理,EtherCAT也非常适合控制器之间(主/从)的通讯。自由编址的网络变量可用于过程数据以及参数、诊断、编程和各种远程控制服务,满足广泛的应用需求。主站/从站与主站/主站之间的数据通讯接口也相同。

从站到从站的通讯则有两种机制以供选择。一种机制是,上游设备和下游设备可以在同一周期内实现通讯,速度非常快。由于这种方法与拓扑结构相关,因此适用于由设备架构设计所决定的从站到从站的通讯,如打印或包装应用等。而对于自由配置的从站到从站的通讯,则可以采用第二种机制—数据通过主站进行中继。这种机制需要两个周期才能完成,但由于EtherCAT的性能非常卓越,因此该过程耗时仍然快于采用其他方法所耗费的时间。

按照文献[3]所述,EtherCAT仅使用标准的以太网帧,无任何压缩。因此,EtherCAT 以太网帧可以通过任何以太网MAC发送,并可以使用标准工具(如:监视器)。

3.2 拓扑 

EtherCAT几乎支持任何拓扑类型,包括线型、树型、星型等(参见图5)。通过现场总线而得名的总线结构或线型结构也可用于以太网,并且不受限于级联交换机或集线器的数量。

图 5: 灵活的拓扑结构:线型、树型或星型拓扑

最有效的系统连线方法是对线型、分支或树叉结构进行拓扑组合。因为所需接口在I/O 模块等很多设备中都已存在,所以无需附加交换机。当然,仍然可以使用传统的、基于以太网的星型拓扑结构。

还可以选择不同的电缆以提升连线的灵活性:灵活、经济的标准超五类以太网电缆可采用100BASE-TX模式传送信号;塑封光纤(PFO)则可用于特殊应用场合;还可通过交换机或介质转换器实现不同以太网连线(如:不同的光纤和铜电缆)的完整组合。

快速以太网的物理层(100BASE-TX )允许两个设备之间的最大电缆长度为100米。由于连接的设备数量可高达65535,因此,网络的容量几乎没有限制。

3.3. 分布时钟 

精确同步对于同时动作的分布式过程而言尤为重要。例如,几个伺服轴同时执行协调运动时,便是如此。

最有效的同步方法是精确排列分布时钟(请参阅IEEE 1588标准[6])。与完全同步通讯中通讯出现故障会立刻影响同步品质的情况相比,分布排列的时钟对于通讯系统中可能存在的相关故障延迟具有极好的容错性。

采用EtherCAT,数据交换就完全基于纯硬件机制。由于通讯采用了逻辑环结构 (借助于全双工快速以太网的物理层),主站时钟可以简单、精确地确定各个从站时钟传播的延迟偏移,反之亦然。分布时钟均基于该值进行调整,这意味着可以在网络范围内使用非常精确的、小于1 微秒的、确定性的同步误差时间基(参见图6)。而跨接工厂等外部同步则可以基于IEEE 1588 标准。

图 6: 同步性与一致性:相距电缆长度为有120米的两个分布系统,

带有300个节点的示波器比较

此外,高分辨率的分布时钟不仅可以用于同步,还可以提供数据采集的本地时间精确信息。当采样时间非常短暂时,即使是出现一个很小的位置测量瞬时同步偏差,也会导致速度计算出现较大的阶跃变化,例如,运动控制器通过顺序检测的位置计算速度便是如此。而在EtherCAT中,引入时间戳数据类型作为一个逻辑扩展,以太网所提供的巨大带宽使得高分辨率的系统时间得以与测量值进行链接。这样,速度的精确计算就不再受到通讯系统的同步误差值影响,其精度要高于基于自由同步误差的通讯测量技术。

3.4 性能 

EtherCAT使网络性能达到了一个新境界。借助于从站硬件集成和网络控制器主站的直接内存存取,整个协议的处理过程都在硬件中得以实现,因此,完全独立于协议堆栈的实时运行系统、CPU 性能或软件实现方式。1000个I/O的更新时间只需30 µs,其中还包括I/O周期时间(参见表1)。单个以太网帧最多可进行1486字节的过程数据交换,几乎相当于12000个数字输入和输出,而传送这些数据耗时仅为300 µs。

表 1: EtherCAT性能概貌

100个伺服轴的通讯也非常快速:可在每100µs中更新带有命令值和控制数据的所有轴的实际位置及状态,分布时钟技术使轴的同步偏差小于1微秒。而即使是在保证这种性能的情况下,带宽仍足以实现异步通讯,如TCP/IP、下载参数或上载诊断数据。

超高性能的EtherCAT技术可以实现传统的现场总线系统无法迄及的控制理念。EtherCAT使通讯技术和现代工业PC所具有的超强计算能力相适应,总线系统不再是控制理念的瓶颈,分布式I/O可能比大多数本地I/O接口运行速度更快。EtherCAT技术原理具有可塑性,并不束缚于100 M bps的通讯速率,甚至有可能扩展为1000 M bps的以太网。 

3.5 诊断 

现场总线系统的实际应用经验表明,有效性和试运行时间关键取决于诊断能力。只有快速而准确地检测出故障,并明确标明其所在位置,才能快速排除故障。因此,在EtherCAT的研发过程中,特别注重强化诊断特征。

试运行期间,驱动或I/O 端子等节点的实际配置需要与指定的配置进行匹配性检查,拓扑结构也需要与配置相匹配。由于整合的拓扑识别过程已延伸至各个端子,因此,这种检查不仅可以在系统启动期间进行,也可以在网络自动读取时进行(配置上载)。

可以通过评估CRC校验,有效检测出数据传送期间的位故障——32 位CRC多项式的最小汉明距为4。除断线检测和定位之外,EtherCAT系统的协议、物理层和拓扑结构还可以对各个传输段分别进行品质监视,与错误计数器关联的自动评估还可以对关键的网络段进行精确定位。此外,对于电磁干扰、连接器破损或电缆损坏等一些渐变或突变的错误源而言,即便它们尚未过度应变到网络自恢复能力的范围,也可对其进行检测与定位。

3.6 高可靠性 

选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。

图 7: 使用标准从站设备的低成本线缆冗余

3.7 安全性 

为了实现EtherCAT安全数据通信,EtherCAT安全通信协议已经在ETG组织内部公开。EtherCAT被用作传输安全和非安全数据的单一通道。传输介质被认为是“黑色通道”而不被包括在安全协议中(见图8)。EtherCAT过程数据中的安全数据报文包括安全过程数据和所要求的数据备份。这个“容器”在设备的应用层被安全地解析。通信仍然是单一通道的。这符合IEC61784-3附件中的模型A。

图 8: 使用黑色通道的EtherCAT安全通信软件构件

EtherCAT安全协议已经由德国技术监督局(TÜV SÜD Rail)评估为满足IEC61508定义的SIL3等级的安全设备之间传输过程数据的通信协议。设备上实施EtherCAT安全协议必须满足安全目标的需求。相应的产品相关要求也必须考虑进来。

图 9: EtherCAT安全系统

图9中的应用示例受益于这种技术。安全元件在自动化系统中所需要的任意地方都可以使用。系统中可以使用不同规模的本地输入和输出元件。可以根据需求使用安全或非安全总线端子扩展额外的输入和输出。安全逻辑也嵌入到网络当中。这样不用安全扩展的标准PLC可以继续处理控制任务。安全输入和输出功能需要的本地安全逻辑由智能化的安全总线端子实现。这节约了昂贵的安全PLC所带来的成本,并可以根据当前任务随意裁剪逻辑功能。只有安全EtherCAT主站和所分配的安全从站通过非安全的标准PLC路由。

本协议在安全数据长度,通信介质或波特率方面么有限制。

EtherCAT被用作“黑色通道”,即,通信系统在安全处理中没有任何作用。

协议被鉴定符合IEC61508定义的SIL3等级

提供EtherCAT安全功能的产品已经于2005年就上市了。

3.8 EtherCAT 取代PCI 

随着PC组件急剧向小型化方向发展,工业PC的体积日趋取决于插槽的数目。而快速以太网的带宽和EtherCAT通讯硬件的过程数据长度则为该领域的发展提供了新的可能性——IPC 中的传统接口现在可以转变为集成的EtherCAT接口端子(参见图10)。除了可以对分布式I/O进行编址,还可以对驱动和控制单元以及现场总线主站、快速串行接口、网关和其它通讯接口等复合系统进行编址。

图 10: 分布式现场总线接口

即使是其他无协议限制的以太网设备变体,也可以通过分布式交换机端口设备进行连接。由于一个以太网接口足以满足整个外围设备的通讯 (参见图11),因此,这不仅极大地精简了IPC主机的体积和外观,而且也降低了IPC主机的成本。

图 11: EtherCAT使控制器的体积显著减小

3.9 设备行规 

设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。

3.9.1 EtherCAT实现CANopen (CoE) 

CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。

3.9.2 EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE) 

SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到 EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。

图 12: 同时并存的多个设备行规和协议

3.10 EtherCAT实现以太网(EoE) 

EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。

图 13: 对所有以太网协议完全透明

EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。

3.11 EtherCAT实现文件读取(FoE) 

这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。

3.12 ADS over EtherCAT (AoE) 

ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或 EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IO-Link™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。

4. 基础设施成本 

页首

 

由于EtherCAT无需集线器和交换机,因此,在环境条件允许的情况下,可以节省电源、安装费用等设备方面的投资,只需使用标准的以太网电缆和价格低廉的标准连接器即可。如果环境条件有特殊要求,则可以依照IEC标准,使用增强密封保护等级的连接器。

5. EtherCAT 实施 

页首

 

EtherCAT技术是面向经济的设备而开发的,如I/O 端子、传感器和嵌入式控制器等。EtherCAT使用遵循IEEE802.3标准的以太网帧。这些帧由主站设备发送,从站设备只是在以太网帧经过其所在位置时才提取和/或插入数据。因此,EtherCAT 使用标准的以太网MAC,这正是其在主站设备方面智能化的表现。同样,EtherCAT在从站控制器中使用专用芯片,这也是其在从站设备方面智能化的表现——无论本地处理能力是否强大或软件品质好坏与否,专用芯片均可在硬件中处理过程数据协议,并提供最佳实时性能。

5.1 主站 

EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT 无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。

例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。

EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。

系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。

图 14: 主站实施的单个过程映像

5.1.1 主站实施服务 

已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9, MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux, PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux.

可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。

5.1.2 主站样本代码 

另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。

图 15: 主站样本代码结构

5.2 从站 

EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。

5.2.1 EtherCAT Slave Controller 

目前,有多家制造商均提供EtherCAT从站控制器。通过价格低廉的FPGA,也可实现从站控制器的功能,可以购买授权以获取相应的二进制代码。

从站控制器通常都有一个内部的DPRAM,并提供存取这些应用内存的接口范围:

串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。

8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。

32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。

图 16: 从站硬件:带主机CPU的FPGA

图 17: 从站硬件:带直接I/O的FPGA

关于EtherCAT从站控制器的最新信息,请登录EtherCAT网站[1]。

5.2.2 从站评估工具包 

倍福公司提供的从站评估工具包使接口操作变得简便易行。由于采用了EtherCAT,无需功能强大的通讯处理器,因此,可将从站评估工具包中的8位微处理器作为主机CPU使用。该工具包还包括源代码形式的从站主机软件(相当于协议堆栈)和参考主站软件包(TwinCAT)。

6. 小结 

页首

 

EtherCAT 拥有杰出的通讯性能,接线非常简单,并对其它协议开放。传统的现场总线系统已达到了极限,而EtherCAT则突破建立了新的技术标准——30 µs内可以更新1000个I/O数据,可选择双绞线或光纤,并利用以太网和因特网技术实现垂直优化集成。使用 EtherCAT,可以用简单的线型拓扑结构替代昂贵的星型以太网拓扑结构,无需昂贵的基础组件。EtherCAT还可以使用传统的交换机连接方式,以集成其它的以太网设备。其它的实时以太网方案需要与控制器进行特殊连接,而EtherCAT只需要价格低廉的标准以太网卡(NIC) 便可实现。

EtherCAT拥有多种机制,支持主站到从站、从站到从站以及主站到主站之间的通讯(参见图18)。它实现了安全功能,采用技术可行且经济实用的方法,使以太网技术可以向下延伸至I/O级。EtherCAT功能优越,可以完全兼容以太网,可将因特网技术嵌入到简单设备中,并最大化地利用了以太网所提供的巨大带宽,是一种实时性能优越且成本低廉的网络技术。

图 19: 网络结构形式多样

7. 参考文献 

页首

 

[1]

EtherCAT Technology Group (ETG)

http://www.ethercat.org

[2]

IEC 61158-3/4/5/6-12 (Ed.1.0), Industrial communication networks – Fieldbus specifications – Part 3-12: Data-link layer service definition – Part 4-12: Data-link layer protocol specification – Part 5-12: Application layer service definition – Part 6-12: Application layer protocol specification – Type 12 elements (EtherCAT)

[3]

IEEE 802.3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications

[4]

IEEE 802.3ae-2002: CSMA/CD Access Method and Physical Layer Specifications: Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10 Gb/s Operation

[5]

ANSI/TIA/EIA-644-A, Electrical Characteristics of Low Voltage Differential Signaling (LVDS) Interface Circuits

[6]

IEEE 1588-2002: IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems

[7]

EN 50325-4: Industrial communications subsystem based on ISO 11898 (CAN) for controller-device interfaces. Part 4: CANopen

[8]

IEC 61800-7-301/304 (Ed.1.0), Adjustable speed electrical power drive systems – Part 7-301: Generic interface and use of profiles for power drive systems – Mapping of profile type 1 to network technologies – Part 7-304: Generic interface and use of profiles for power drive systems – Mapping of profile type 4 to network technologies

[9]

SEMI E54.20: Standard for Sensor/Actuator Network Communications for EtherCAT.

http://www.semi.org

[10]

IEC 61784-2 (Ed.1.0), Industrial communication networks – Profiles – Part 2: Additional fieldbus profiles for real-time networks based on ISO/IEC 8802-3

 

EtherCAT样本

了解更多关于最快的“工业以太网现场总线”的详细信息

中文

英文

德文

西班牙语

意大利文

法语

日文

韩文

EtherCAT多媒体视频

EtherCAT技术协会

工业以太网通信技术EtherCAT运行原理

EtherCAT技术简介

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

沐多

博客园

首页

新随笔

联系

管理

订阅

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

目录0 获取源码1 启动脚本1.1 start1.2 stop2 主站实例创建2.1 Master Phases2.2 数据报与状态机数据报状态机2.3 master状态机及数据报初始化2.4 初始化EtherCAT device2.5 设置IDLE 线程的发送间隔:2.6 初始化字符设备3 网卡4 IDLE阶段内核线程4.1 数据报发送4.2 数据报接收

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

0 获取源码

IgH EtherCAT Master现已迁移到gitlab:https://gitlab.com/etherlab.org/ethercat,可以使用以下命令克隆存储库:

git clone https://gitlab.com/etherlab.org/ethercat.git

git checkout stable-1.5

上面的是igh官方的仓库,下面是其他Ethercat主站:

https://github.com/ribalda/ethercat 基于官方,功能更为全面的igh etehrcat主站。

https://github.com/leducp/KickCAT 一个C++写的全新etehrcat主站,目前功能不完善。

https://github.com/ethercrab-rs/ethercrab 一个纯rust语言编写的全新etehrcat主站,目前功能不完善。

本文主要讲igh。

1 启动脚本

igh通过脚本来启动,可以是systemd、init.d或sysconfig。分别位于源码script目录下:

对于systemd方式,编译时由ethercat.service.in文件生成ethercat.service。ethercat.service中指定了执行文件为ethercatctl.ethercatctl文件由``ethercatctl.in`生成。init.d和sysconfig类似,都是生成一个可执行脚本,且脚本完成的工作一致,主要完成加载主站模块、网卡驱动、给主站内核模块传递参数、卸载模块等操作。

ethercat.conf共同的配置文件,配置主站使用的网卡、驱动等信息。下面看脚本start和stop所做的工作。

1.1 start

加载ec_master.ko

模块参数:

main_devices :主网卡MAC地址,多个main_devices 表示创建多个主站,MAC参数个数master_count。

backup_devices :备用网卡MAC地址,多个backup_devices 表示创建多个主站,MAC参数个数backup_count。

debug_level :调试level,调试信息输出级别。

eoe_interfaces eoe接口,eoe_count表示eoe_interfaces 的个数。

eoe_autocreate 是否自动创建eoe handler。

pcap_size Pcap buffer size。

遍历配置文件中/etc/sysconfig/ethercat的环境变量DEVICE_MODULES,位于ethercat.conf中。

在每个DEVICE_MODULES前添加前缀ec_替换,如DEVICE_MODULES为igb的话,添加前缀后为ec_igb。

modinfo检查该模块是否存在。

对于非generic和rtdm的驱动,需要先将网卡与当前驱动unbind,unbind后的网卡才能被新驱动接管。

加载该驱动。

start加载了两个内核模块,ec_master.ko和网卡驱动ec_xxx.ko,ec_master先根据内核参数(网卡MAC)来创建主站实例,此时主站处于Orphaned phase。后续加载网卡驱动ec_xxx.ko,执行网卡驱动probe,根据MAC地址将网卡与主站实例匹配,此时主站得到操作的网卡设备,进入Idle phase。详细过程见后文。

1.2 stop

卸载内核模块ec_master.ko和网卡驱动ec_xxx.ko。

遍历配置文件中的环境变量DEVICE_MODULES。

在每个DEVICE_MODULES前添加前缀‘ec_’替换。

lsmod检查该模块是否被加载。

卸载模块。

后文“主站”和”master“均表示主站或主站实例对象,slave和从站表示从站或从站对象,中英混用,不刻意区分。

2 主站实例创建

一个使用IgH的控制器中可以有多个EtherCAT主站,每个主站可以绑定了一个主网卡和一个备用网卡,一般备用网卡不使用,线缆冗余功能时才使用备用网卡(文中假设只有一个主网卡)。

start过程中执行insmod ec_master.ko,这个时候,先调用的就是 module_init 调用的初始化函数ec_init_module()。先根据参数main_devices 的个数master_count,每个master需要一个设备节点来与应用程序交互,所以master_count决定需要创建多少个matser和多少个字符设备;

这里先分配注册master_count个字符设备的主次设备号device_number和名称,这样每个master对应的设备在文件系统中就是/dev/EtherCAT0、/dev/EtherCAT1...(Linux下)。

if (master_count) {

if (alloc_chrdev_region(&device_number,

0, master_count, "EtherCAT")) {

EC_ERR("Failed to obtain device number(s)!\n");

...

}

}

class = class_create(THIS_MODULE, "EtherCAT");

解析模块参数得到MAC地址,保存到数组macs中。

for (i = 0; i < master_count; i++) {

ret = ec_mac_parse(macs[i][0], main_devices[i], 0);

if (i < backup_count) {

ret = ec_mac_parse(macs[i][1], backup_devices[i], 1);

}

}

分配master_count个主站对象的内存,调用ec_master_init()初始化这些实例。

if (master_count) {

if (!(masters = kmalloc(sizeof(ec_master_t) * master_count,

GFP_KERNEL))) {

...

}

}

for (i = 0; i < master_count; i++) {

ret = ec_master_init(&masters[i], i, macs[i][0], macs[i][1],

device_number, class, debug_level);

...

}

2.1 Master Phases

igh中,状态机是其核心思想,一切操作基于状态机来执行,对创建的每个EtherCAT主站实例都需要经过如下阶段转换(见图2.3),主站各阶段操作如下:

Orphaned phase 此时主站实例已经分配初始化,正在等待以太网设备连接,即还没有与网卡驱动联系起来,此时无法使用总线通讯。

Idle phase 当主站与网卡绑定后,Idle线程ec_master_idle_thread开始运行,主站处于IDLE状态,ec_master_idle_thread主要完成从站拓扑扫描、配置站点地址等工作。该阶段命令行工具能够访问总线,但无法进行过程数据交换,因为还缺少总线配置。

Operation phase 应用程序请求主站提供总线配置并激活主站后,主站处于operation状态,ec_master_idle_thread停止运行,内核线程变为ec_master_operation_thread,之后应用可周期交换过程数据。

具体的后面会说到。

2.2 数据报与状态机

继续看master初始化代码ec_master_init前,我们先了解数据报与状态机的关系,这对后续理解很有帮助。

数据报

EtherCAT是以以太网为基础的现场总线系统,EtherCAT使用标准的IEEE802.3以太网帧,在主站一侧使用标准的以太网控制器,不需要额外的硬件。并在以太网帧头使用以太网类型0x88A4来和其他以太网帧相区别(EtherCAT数据还可以通过UDP/IP 来传输,本文已忽略),标准的IEEE802.3以太网帧中数据部分为EtherCAT的数据,标准的IEEE802.3以太网帧与EtherCAT数据帧关系如下:

EtherCAT数据位于以太网帧数据区,EtherCAT数据由EtherCAT头和若干EtherCAT数据报文组成。其中EtheRCAT头中记录了EtherCAT数据报的长度、和类型,类型为1表示与从站通讯。EtherCAT数据报文内包含多个子报文,每个子报文又由子报文头、数据和WKC域组成。子报文结构含义如下。

整个EtherCAT网络形成一个环状,主站与从站之间是通过EtherCAT数据报来交互,一个EtherCAT报文从网卡TX发出后,从站ESC芯片EtherCAT报文进行交换数据,最后该报文回到主站。网上有个经典的EtherCAT动态图(刷新后动态图重新播放).

认识EtherCAT数据帧结构后,我们看IgH内是如何表示一个EtherCAT数据报文的?EtherCAT数据报文在igh中用对象ec_datagram_t表示。

typedef struct {

struct list_head queue; /**< 发送和接收时插入主站帧队列. */

struct list_head sent; /**< 已发送数据报的主站列表项. */

ec_device_index_t device_index; /**< 发送/接收数据报的设备。 */

ec_datagram_type_t type; /**< 帧类型 (APRD, BWR, etc.). */

uint8_t address[EC_ADDR_LEN]; /**< Recipient address. */

uint8_t *data; /**< 数据. */

ec_origin_t data_origin; /**< 数据保存的地方. */

size_t mem_size; /**< Datagram \a data memory size. */

size_t data_size; /**< Size of the data in \a data. */

uint8_t index; /**< Index (set by master). */

uint16_t working_counter; /**< 工作计数. */

ec_datagram_state_t state; /**数据帧状态 */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_sent; /**< Time, 数据报何时发送. */

#endif

unsigned long jiffies_sent; /**< Jiffies,数据报何时发送. */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_received; /**< Time, 何时被接收. */

#endif

unsigned long jiffies_received; /**< Jiffies,何时被接收. */

unsigned int skip_count; /**< 尚未收到的重新排队数. */

unsigned long stats_output_jiffies; /**< Last statistics output. */

char name[EC_DATAGRAM_NAME_SIZE]; /**< Description of the datagram. */

} ec_datagram_t;

可以看到上面子报文中各字段大都在ec_datagram_t中有表示了,不过多介绍,其它几个成员简单介绍下,

device_index表示这个数据报是属于哪个网卡设备发送接收的,IgH中一个master实例可以使用多个多个网卡设备来发送/接收EtherCAT数据帧,device_index就是表示master下的网络设备的。

data_origin表示每个master管理着多个空闲的ec_datagram_t,这些ec_datagram_t分成了三类,给不同的状态机使用,具体的后文马上会细说,data_origin就是表示这个ec_datagram_t是属于哪类的。

index表示该数据报是EtherCAT数据区的第index个子报文,在master发送一个完整的EtherCAT数据报时,组装以太网数据帧时使用。

data这个指向子报文的数据内存区,由于每个子报文交换数据不同,其大小不同,所以数据区为动态分配,mem_size表示的就是分配的大小。

data_size表示数据报操作的数据大小,比如该数据报用于读从站的某个寄存器,该值就是这个寄存器的大小。

jiffies_sent、jiffies_received、cycles_sent、cycles_received使用不同时钟方式是记录数据帧发送接收时间的,用于统计。

ec_datagram_state_t表示数据报的状态,每个数据报(ec_datagram_t)也是基于状态来处理,有6种状态:

EC_DATAGRAM_INIT :数据报已经初始化

EC_DATAGRAM_QUEUED :插入发送队列准备发送

EC_DATAGRAM_SENT :已经发送(还存在队列中)

EC_DATAGRAM_RECEIVED:该数据报已接收,并从发送队列删除

EC_DATAGRAM_TIMED_OUT :该数据报发送后,接收超时,从发送队列删除

EC_DATAGRAM_ERROR :发送和接收过程中出错(从队列删除),校验错误、不匹配等。

M位在master发送时组装EtherCAT数据帧时确定,接收时也根据该位判断后面还有没有子报文。

数据报对象初始化由函数ec_datagram_init()完成:

void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram. */)

{

INIT_LIST_HEAD(&datagram->queue); // mark as unqueued

datagram->device_index = EC_DEVICE_MAIN; /*默认主设备使用*/

datagram->type = EC_DATAGRAM_NONE; /*数据报类型*/

memset(datagram->address, 0x00, EC_ADDR_LEN); /*数据报地址清零*/

datagram->data = NULL;

datagram->data_origin = EC_ORIG_INTERNAL; /*默认内部数据*/

datagram->mem_size = 0;

datagram->data_size = 0;

datagram->index = 0x00;

datagram->working_counter = 0x0000;

datagram->state = EC_DATAGRAM_INIT; /*初始状态*/

#ifdef EC_HAVE_CYCLES

datagram->cycles_sent = 0;

#endif

datagram->jiffies_sent = 0;

#ifdef EC_HAVE_CYCLES

datagram->cycles_received = 0;

#endif

datagram->jiffies_received = 0;

datagram->skip_count = 0;

datagram->stats_output_jiffies = 0;

memset(datagram->name, 0x00, EC_DATAGRAM_NAME_SIZE);

}

状态机

说完IgH数据报对象,我们来看有限状态机(fsm),有限状态机(fsm):表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。说起状态机,相信大家大学时候都有用过吧,不管是单片机、FPGA,用它写按键、菜单、协议处理、控制器什么的爽的一塌糊涂。其实我们使用的计算机就是本就是基于状态机作为计算模型的,它对数字系统的设计具有十分重要的作用。另外Linux TCP协议也是由状态机实现。

同样igh主站内部机制使用有限状态机来实现,IgH内状态机的基本表示如下:

struct ec_fsm_xxx {

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

void (*state)(ec_fsm_master_t *); /**< 状态函数 */

....

};

IgH EtherCAT协议栈几乎所有功能通过状态机实现,每个状态机管理着某个对象的状态、功能实现的状态装换,而这些状态转换是基于EtherCAT数据报来进行的,如状态机A0状态函数填充datagram,经EtherCAT数据帧发出后,经过slave ESC处理,回到网卡接收端接收后,交给状态机A1状态的下一个状态函数解析处理。所以每个状态机内都包含有指向该状态机操作的数据报对象指针datagram和状态执行的状态函数void (*state)(ec_fsm_master_t *);

总结一句话:状态机是根据数据报的状态来执行,每个状态机都需要操作一个数据报对象。

现在知道了状态机与数据报的关系,下面介绍IgH EtherCAT协议栈中有哪些状态机,及状态机使用的数据报对象是从哪里分配如何管理的。

master状态机

前面说到主站具有的三个阶段,当主站与网卡设备attach后进入Idle phase,处于Idle phase后,开始执行主站状态机。

主站状态机包含1个主状态机和许多子状态机,matser状态机主要目的是:

Bus monitoring 监控EtherCAT总线拓扑结构,如果发生改变,则重新扫描。

Slave con fguration 监视从站的应用程序层状态。如果从站未处于其应有的状态,则从站将被(重新)配置

Request handling 请求处理(源自应用程序或外部来源),主站任务应该处理异步请求,例如:SII访问,SDO访问或类似。

主状态机ec_fsm_master_t结构如下:

struct ec_fsm_master {

ec_master_t *master; /**< master the FSM runs on */

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

unsigned int retries; /**< retries on datagram timeout. */

void (*state)(ec_fsm_master_t *); /**< master state function */

ec_device_index_t dev_idx; /**< Current device index (for scanning etc.).

*/

int idle; /**< state machine is in idle phase */

unsigned long scan_jiffies; /**< beginning of slave scanning */

uint8_t link_state[EC_MAX_NUM_DEVICES]; /**< Last link state for every

device. */

unsigned int slaves_responding[EC_MAX_NUM_DEVICES]; /**<每个设备的响应从站数。*/

unsigned int rescan_required; /**< A bus rescan is required. */

ec_slave_state_t slave_states[EC_MAX_NUM_DEVICES]; /**< AL states of

responding slaves for

every device. */

ec_slave_t *slave; /**< current slave */

ec_sii_write_request_t *sii_request; /**< SII write request */

off_t sii_index; /**< index to SII write request data */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine */

ec_fsm_soe_t fsm_soe; /**< SoE state machine */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */

ec_fsm_sii_t fsm_sii; /**< SII state machine */

};

可以看到,主站状态机结构下还有很多子状态机,想象一下如果主站的所有功能通过一个状态机来完成,那么这个状态机的状态数量、各状态之间的联系会有多恐怖,复杂性级别将会提高到无法管理的水平。为此,IgH中,将EtherCAT主状态机的某些功能用子状态机完成。这有助于封装相关工作流,并且避免“状态爆炸”现象。这样当主站完成coe功能时,可以由子状态机fsm_coe去完成。具体各功能是如何通过状态机完成的,文章后面会介绍。

slave状态机

slave状态机管理着每个从站的状态,所以位于从站对象(ec_slave_t)内:

struct ec_slave

{

ec_master_t *master; /**< Master owning the slave. */

.....

ec_fsm_slave_t fsm; /**< Slave state machine. */

.....

};

struct ec_fsm_slave {

ec_slave_t *slave; /**< slave the FSM runs on */

struct list_head list; /**< Used for execution list. */

ec_dict_request_t int_dict_request; /**< Internal dictionary request. */

void (*state)(ec_fsm_slave_t *, ec_datagram_t *); /**< State function. */

ec_datagram_t *datagram; /**< Previous state datagram. */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_reg_request_t *reg_request; /**< Register request to process. */

ec_foe_request_t *foe_request; /**< FoE request to process. */

off_t foe_index; /**< Index to FoE write request data. */

ec_soe_request_t *soe_request; /**< SoE request to process. */

ec_eoe_request_t *eoe_request; /**< EoE request to process. */

ec_mbg_request_t *mbg_request; /**< MBox Gateway request to process. */

ec_dict_request_t *dict_request; /**< Dictionary request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine. */

ec_fsm_foe_t fsm_foe; /**< FoE state machine. */

ec_fsm_soe_t fsm_soe; /**< SoE state machine. */

ec_fsm_eoe_t fsm_eoe; /**< EoE state machine. */

ec_fsm_mbg_t fsm_mbg; /**< MBox Gateway state machine. */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave scan state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave config state machine. */

};

slave状态机和master状态机类似,slave状态机内还包含许多子状态机。slave状态机主要目的是:

主站管理从站状态

主站与从站应用层(AL)通讯。比如具有EoE功能的从站,主站通过该从站下的子状态机fsm_eoe来管理主站与从站应用层的EOE通讯。

数据报对象的管理

上面简单介绍了IgH内的状态机,状态机输入输出的对象是datagram,fsm对象内只有数据报对象的指针,那fsm工作过程中的数据报对象从哪里分配?

由于每个循环周期都需要操作数据报对象,IgH为减少datagram的动态分配操作,提高主站性能,在master初始化的时候预分配了主站运行需要的所有datagram对象。在master实例我们可以看到下面的数据报对象:

struct ec_master {

...

ec_datagram_t fsm_datagram; /**< Datagram used for state machines. */

...

ec_datagram_t ref_sync_datagram; /**< Datagram used for synchronizing the

reference clock to the master clock.*/

ec_datagram_t sync_datagram; /**< Datagram used for DC drift

compensation. */

ec_datagram_t sync_mon_datagram; /**< Datagram used for DC synchronisation

monitoring. */

...

ec_datagram_t ext_datagram_ring[EC_EXT_RING_SIZE];

}

这些数据报对象都是已经分配内存的,但由于报文不同,报文操作的数据大小不同,所以datagram数据区大小随状态机的具体操作而变化,在具体使用时才分配数据区内存。

以上数据报对象给状态机使用,别忘了还有过程数据也需要数据报对象,所以IgH中数据报类型分为以下四类:

分为三类(非常重要):

数据报对象

用途

Datagram_pairs

过程数据报

fsm_datagram[]

Fsm_master及子状态机专用的数据报对象。

ext_datagram_ring[]

动态分配给fsm_slave及其子fsm。

ref_sync_datagram sync_datagram sync64_datagram sync_mon_datagram

应用专用数据报用于时钟同步。

其中fsm_datagram为master状态机及master下的子状态机执行过程中操作的对象。

ext_datagram_ring[]是一个环形队列,当fsm_slave从站状态机处于ready状态,可以开始处理与slave相关请求,如配置、扫描、SDO、PDO等,这时会从ext_datagram_ring[]中给该fsm_slave分配一个数据报,并运行fsm_slave状态机检查并处理请求。

应用专用数据报用于时钟同步,与时钟强相关,它们比较特殊,它们的数据区大小是恒定的,所以其数据区在主站初始化时就已分配内存,应用调用时直接填数据发送,避免linux的内存分配带来时钟的偏差。

数据报数据区(data)内存通过ec_datagram_prealloc()来分配.

int ec_datagram_prealloc(

ec_datagram_t *datagram, /**< EtherCAT datagram. */

size_t size /**< New payload size in bytes. */

)

{

if (datagram->data_origin == EC_ORIG_EXTERNAL

|| size <= datagram->mem_size)

return 0;

......

if (!(datagram->data = kmalloc(size, GFP_KERNEL))) {

......

}

datagram->mem_size = size;

return 0;

}

数据区的大小为一个以太网帧中单个Ethercat数据报的最大数据大小EC_MAX_DATA_SIZE。

/** Size of an EtherCAT frame header. */

#define EC_FRAME_HEADER_SIZE 2

/** Size of an EtherCAT datagram header. */

#define EC_DATAGRAM_HEADER_SIZE 10

/** Size of an EtherCAT datagram footer. */

#define EC_DATAGRAM_FOOTER_SIZE 2

/** Size of the EtherCAT address field. */

#define EC_ADDR_LEN 4

/** Resulting maximum data size of a single datagram in a frame. */

#define EC_MAX_DATA_SIZE (ETH_DATA_LEN - EC_FRAME_HEADER_SIZE \

- EC_DATAGRAM_HEADER_SIZE - EC_DATAGRAM_FOOTER_SIZE)

由于以太网帧的大小有限,因此数据报的最大大小受到限制,即以太网帧长度 1500 - ethercat头2byte- ethercat子数据报报头10字节-WKC 2字节,如图:

如果过程数据镜像的大小超过该限制,就必须发送多个帧,并且必须对映像进行分区以使用多个数据报。 Domain自动进行管理。

2.3 master状态机及数据报初始化

对状态机及数据报对象有初步认识后,我们回到ec_master.ko模块入口函数ec_init_module()主站实例初始化ec_master_init(),主要完成主站状态机初始化及数据报:

// init state machine datagram

ec_datagram_init(&master->fsm_datagram); /*初始化数据报对象*/

snprintf(master->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE, "master-fsm");

ret = ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE);

// create state machine object

ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram); /*初始化master fsm*/

其中ec_fsm_master_init初始化master fsm和子状态机,并指定了master fsm使用的数据报对象fsm_datagram。

void ec_fsm_master_init(

ec_fsm_master_t *fsm, /**< Master state machine. */

ec_master_t *master, /**< EtherCAT master. */

ec_datagram_t *datagram /**< Datagram object to use. */

)

{

fsm->master = master;

fsm->datagram = datagram;

ec_fsm_master_reset(fsm);

// init sub-state-machines

ec_fsm_coe_init(&fsm->fsm_coe);

ec_fsm_soe_init(&fsm->fsm_soe);

ec_fsm_pdo_init(&fsm->fsm_pdo, &fsm->fsm_coe);

ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);

ec_fsm_slave_config_init(&fsm->fsm_slave_config, fsm->datagram,

&fsm->fsm_change, &fsm->fsm_coe, &fsm->fsm_soe, &fsm->fsm_pdo);

ec_fsm_slave_scan_init(&fsm->fsm_slave_scan, fsm->datagram,

&fsm->fsm_slave_config, &fsm->fsm_pdo);

ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);

}

初始化外部数据报队列

外部数据报队列用于从站状态机,每个状态机执行期间使用的数据报从该区域分配,下面是初始化ext_datagram_ring中每个结构:

for (i = 0; i < EC_EXT_RING_SIZE; i++) {

ec_datagram_t *datagram = &master->ext_datagram_ring[i];

ec_datagram_init(datagram);

snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, "ext-%u", i);

}

非应用数据报队列链表,如EOE数据报会插入该队列后发送。

INIT_LIST_HEAD(&master->ext_datagram_queue);

同样初始化几个时钟相关数据报对象,它们功能固定,所以数据区大小固定,就不贴代码了,比如sync_mon_datagram,它的作用是用于同步监控,获取从站系统时间差,所以是一个BRD数据报,在此直接将数据报操作偏移地址初始化,使用时能快速填充发送。

ec_datagram_init(&master->sync_mon_datagram);

......

ret = ec_datagram_brd(&master->sync_mon_datagram, 0x092c, 4);

地址

名称

描述

复位值

0x092c~0x092F

0~30

系统时间差

本地系统时间副本与参考时钟系统时间值之差

0

31

符号

0:本地系统时间≥参考时钟时间1:本地系统时间<参考时钟时间

0

另外比较重要的是将使用的网卡MAC地址放到macs[]中,在网卡驱动probe过程中根据MAC来匹配主站使用哪个网卡。

for (dev_idx = EC_DEVICE_MAIN; dev_idx < EC_MAX_NUM_DEVICES; dev_idx++) {

master->macs[dev_idx] = NULL;

}

master->macs[EC_DEVICE_MAIN] = main_mac;

2.4 初始化EtherCAT device

master协议栈主要完成EtherCAT数据报的解析和组装,然后需要再添加EtherNet报头和FCS组成一个完整的以太网帧,最后通过网卡设备发送出去。为与以太网设备驱动层解耦,igh使用ec_device_t来封装底层以太网设备,一般来说每个master只有一个ec_device_t,这个编译时配置决定,若启用线缆冗余功能,可指定多个网卡设备:

struct ec_device

{

ec_master_t *master; /**< EtherCAT master */

struct net_device *dev; /**< 使用的网络设备 */

ec_pollfunc_t poll; /**< pointer to the device's poll function */

struct module *module; /**< pointer to the device's owning module */

uint8_t open; /**< true, if the net_device has been opened */

uint8_t link_state; /**< device link state */

struct sk_buff *tx_skb[EC_TX_RING_SIZE]; /**< transmit skb ring */

unsigned int tx_ring_index; /**< last ring entry used to transmit */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_poll; /**< cycles of last poll */

#endif

#ifdef EC_DEBUG_RING

struct timeval timeval_poll;

#endif

unsigned long jiffies_poll; /**< jiffies of last poll */

// Frame statistics

u64 tx_count; /**< 发送的帧数 */

u64 last_tx_count; /**<上次统计周期发送的帧数。 */

u64 rx_count; /**< 接收的帧数 */

u64 last_rx_count; /**< 上一个统计周期收到的帧数。 */

u64 tx_bytes; /**< 发送的字节数 */

u64 last_tx_bytes; /**< 上一个统计周期发送的字节数。 */

u64 rx_bytes; /**< Number of bytes received. */

u64 last_rx_bytes; /**< Number of bytes received of last statistics cycle.

*/

u64 tx_errors; /**< Number of transmit errors. */

s32 tx_frame_rates[EC_RATE_COUNT]; /**< Transmit rates in frames/s for

different statistics cycle periods.

*/

s32 rx_frame_rates[EC_RATE_COUNT]; /**< Receive rates in frames/s for

different statistics cycle periods.

*/

s32 tx_byte_rates[EC_RATE_COUNT]; /**< Transmit rates in byte/s for

different statistics cycle periods. */

s32 rx_byte_rates[EC_RATE_COUNT]; /**< Receive rates in byte/s for

different statistics cycle periods. */

......

};

成员*master表示改对象属于哪个master,*dev指向使用的以太网设备net_device,poll该网络设备poll函数,tx_skb[]以太网帧发送缓冲区队列,需要发送的以太网帧会先放到该队里,tx_ring_index管理tx_skb[],以及一些网络统计变量,下面初始化ec_device_t对象:

/*\master\master.c*/

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

ret = ec_device_init(&master->devices[dev_idx], master);

if (ret < 0) {

goto out_clear_devices;

}

}

/*\master\device.c*/

int ec_device_init(

ec_device_t *device, /**< EtherCAT device */

ec_master_t *master /**< master owning the device */

)

{

int ret;

unsigned int i;

struct ethhdr *eth;

....

device->master = master;

device->dev = NULL;

device->poll = NULL;

device->module = NULL;

device->open = 0;

device->link_state = 0;

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i] = NULL;

}

......

ec_device_clear_stats(device);

......

for (i = 0; i < EC_TX_RING_SIZE; i++) {

if (!(device->tx_skb[i] = dev_alloc_skb(ETH_FRAME_LEN))) {

......

}

// add Ethernet-II-header

skb_reserve(device->tx_skb[i], ETH_HLEN);

eth = (struct ethhdr *) skb_push(device->tx_skb[i], ETH_HLEN);

eth->h_proto = htons(0x88A4);

memset(eth->h_dest, 0xFF, ETH_ALEN);

}

.....

}

主要关注分配以太网帧发送队列内存tx_skb[],并填充Ethernet报头中的以太网类型字段为0x88A4,目标MAC地址0xFFFFFFFF FFFF,对于源MAC地址、sk_buff所属网络设备、ec_device_t对象使用的网络设备net_device,将在网卡驱动初始化与master建立联系过程中设置。

2.5 设置IDLE 线程的发送间隔:

ec_master_set_send_interval(master, 1000000 / HZ);

根据网卡速率计算:

void ec_master_set_send_interval(

ec_master_t *master, /**< EtherCAT master */

unsigned int send_interval /**< Send interval */

)

{

master->send_interval = send_interval; //发送间隔 us

master->max_queue_size =

(send_interval * 1000) / EC_BYTE_TRANSMISSION_TIME_NS;

master->max_queue_size -= master->max_queue_size / 10;

}

100Mbps网卡发送一字节数据需要的时间EC_BYTE_TRANSMISSION_TIME_NS: 1/(100 MBit/s / 8 bit/byte) = 80 ns/byte.

2.6 初始化字符设备

由于主站位于内核空间,用户空间应用与主站交互通过字符设备来交互;

创建普通字符设备,给普通linux应用和Ethercat tool使用。若使用xenomai或RTAI,则再创建实时字符设备,提供给实时应用使用。

......

master->class_device = device_create(class, NULL,

MKDEV(MAJOR(device_number), master->index), NULL,

"EtherCAT%u", master->index);

......

#ifdef EC_RTDM

// init RTDM device

ret = ec_rtdm_dev_init(&master->rtdm_dev, master);

...

#endif

到这里明白了IgH中的状态机与数据报之间的关系,主站对象也创建好了,但是主站还没有网卡设备与之关联,主站也还没有工作,下面简单看一下ecdev_offer流程。

关于网卡驱动代码详细解析推荐这两篇文章:

Monitoring and Tuning the Linux Networking Stack: Sending Data

Monitoring and Tuning the Linux Networking Stack: Receiving Data

3 网卡

网卡probe

static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

{

......

adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);

if (adapter->ecdev) { /*注册打开ec_net设备*/

err = ecdev_open(adapter->ecdev);

.....

adapter->ec_watchdog_jiffies = jiffies;

} else { /*注册普通网络设备*/

......

err = register_netdev(netdev);

......

}

......

}

给主站提供网络设备:ecdev_offer

根据MAC地址找到master下的ec_device_t对象

device->dev = net_dev;

device->poll = poll;

device->module = module;

上面我们只设置了ec_device_t->tx_skb[]中sk_buff的以太网类型和目的地址,现在继续填充源MAC地址为网卡的MAC地址、sk_buff所属的net_device:

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i]->dev = net_dev;

eth = (struct ethhdr *) (device->tx_skb[i]->data);

memcpy(eth->h_source, net_dev->dev_addr, ETH_ALEN);

}

调用网络设备接口打开网络设备

int ec_device_open(

ec_device_t *device /**< EtherCAT device */

)

{

int ret;

.....

ret = device->dev->open(device->dev);

if (!ret)

device->open = 1;

....

return ret;

}

当master下的所有的网络设备都open后,master从ORPHANED转到IDLE阶段

int ec_master_enter_idle_phase(

ec_master_t *master /**< EtherCAT master */

)

{

int ret;

ec_device_index_t dev_idx;

......

master->send_cb = ec_master_internal_send_cb;

master->receive_cb = ec_master_internal_receive_cb;

master->cb_data = master;

master->phase = EC_IDLE; /*更新master状态*/

// reset number of responding slaves to trigger scanning

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

master->fsm.slaves_responding[dev_idx] = 0;

}

ret = ec_master_nrthread_start(master, ec_master_idle_thread,

"EtherCAT-IDLE");

....

return ret;

}

其中主要设置master发送和接收回调函数,应用通过发送和接收数据时,将通过这两接口直接发送和接收。创建master idle线程ec_master_idle_thread。

4 IDLE阶段内核线程

综上,状态机操作对象是datagram,datagram发送出去后回到主站交给状态机的下一个状态处理,所以主站需要循环地执行状态机、发送EtherCAT数据帧、接收EtherCAT数据帧、执行状态机、发送EtherCAT数据帧、……来驱动状态机运行,这个循环由内核线程来完成。

当主站与网卡绑定后,应用还没有请求主站,主站处于IDLE状态,这时循环由内核线程ec_master_idle_thread来完成,主要完成从站拓扑扫描、配置站点地址等工作。

static int ec_master_idle_thread(void *priv_data)

{

ec_master_t *master = (ec_master_t *) priv_data;

int fsm_exec;

#ifdef EC_USE_HRTIMER

size_t sent_bytes;

#endif

// send interval in IDLE phase

ec_master_set_send_interval(master, 250000 / HZ);

while (!kthread_should_stop()) {

// receive

ecrt_master_receive(master); /*接收上个循环发送的数据帧*/

......

// execute master & slave state machines

......

fsm_exec = ec_fsm_master_exec(&master->fsm); /*执行master状态机*/

ec_master_exec_slave_fsms(master); /*为从站状态机分配datagram,并执行从站状态机*/

......

if (fsm_exec) {

ec_master_queue_datagram(master, &master->fsm_datagram); /*将master状态机处理的datagram插入发送链表*/

}

// send

ecrt_master_send(master); /*组装以太网帧并调用网卡发送*/

sent_bytes = master->devices[EC_DEVICE_MAIN].tx_skb[

master->devices[EC_DEVICE_MAIN].tx_ring_index]->len;

up(&master->io_sem);

if (ec_fsm_master_idle(&master->fsm)) {

ec_master_nanosleep(master->send_interval * 1000);

set_current_state(TASK_INTERRUPTIBLE);

schedule_timeout(1);

} else {

ec_master_nanosleep(sent_bytes * EC_BYTE_TRANSMISSION_TIME_NS);

}

}

EC_MASTER_DBG(master, 1, "Master IDLE thread exiting...\n");

return 0;

}

整个过程简单概述如下。

4.1 数据报发送

下面介绍IgH中状态机处理后数据报的发送流程(ecrt_master_send())。

master使用一个链表datagram_queue来管理要发送的子报文对象datagram,需要发送的子报文对象会先插入该链表中,统一发送时,分配一个sock_buff,从datagram_queue上取出报文对象,设置index(index是发送后接收回来与原报文对应的标识之一),将一个个报文对象按EtherCAT数据帧结构填充到sock_buff中,最后通过网卡设备驱动函数hard_start_xmit,将sock_buff从网卡发送出去。

4.2 数据报接收

接收数据时,通过网卡设备驱动ec_poll函数取出Packet得到以太网数据,然后解析其中的EtherCAT数据帧,解析流程如下:

得到子报文index,遍历发送链表datagram_queue,找到index对应的datagram。

将子报文数据拷贝到datagram数据区。

将以太网帧内子报文中的WKC值复制到datagram中的WKC。

将datagram从链表datagram_queue删除。

根据子报文头M位判断还有没有子报文,有则跳转1继续处理下一个子报文,否则完成接收。

接收完成后,进入下一个循环,内核线程运行状态机或周期应用进行下一个周期,处理接收的Ethercat报文。

先简单介绍到这,敬请关注后续文章。。。。

作者:wsg1100

出处:http://www.cnblogs.com/wsg1100/

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

posted @

2021-02-22 23:39 

沐多 

阅读(9835) 

评论(6) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 沐多

Powered by .NET 8.0 on Kubernetes

IGH EtherCAT 开源主站安装及测试 - 知乎

IGH EtherCAT 开源主站安装及测试 - 知乎切换模式写文章登录/注册IGH EtherCAT 开源主站安装及测试刘广辉1、Linux系统:采用的系统版本: Ubun 14.04.1 64位; 内核版本: 3.13.0-12-generic具体型号:2、去IGH官网下载1.5.2版本。3、编译源码(1)解压下载的压缩文件: tar -xjf ethercat-1.5.2.tar.bz2(2) 进入到解压后的文件夹: cd ethercat-1.5.2/(3)配置:./configure --with-linux-dir=/usr/src/linux-header-3.13.0-32-generic/ --enable-8139too=no --enable-wildcards=yes(4)编译:sudo make这个地方可能会遇到g++未安装的问题,如果遇到,按照下面的方式安装:sudo apt-get updatesudo apt-get install g++(5)sudo make modules4、安装sudo make installsudo make modules_install5、配置主站安装完成后,会在/opt/目录下生成一个etherlab/文件夹,其中包括库文件什么的。进入这个文件夹:cd /opt/etherlab 打开如下文件:vim etc/sysconfig/ethercat在MASTER0_DEVICE=""填写你的以太网卡的MAC地址(ifconfig获取),DEVICE_MODULES="generic",保存退出(请自行搜索vim的用法)。在/etc目录下新建一个sysconfig/的文件夹,将修改后的ethercat文件复制到刚刚新建的文件中:mkdir /etc/sysconfig/cp etc/sysconfig/ethercat /etc/sysconfig/ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/为了让EtherCAT 主站能开机自启动,将ethercat设置为开机自启动服务。这里我采用的是sysv-rc-conf 工具,先安装sysv-rc-conf:apt-get install sysv-rc-conf安装完成后,运行sysv-rc-conf:sysv-rc-conf这时会打开一个图形界面,找到ethercat用“space”键设置为S运行级,按Q退出。先不要着急启动ethercat,还有关键的一步,运行如下的命令:depmod 6、启动主站/etc/init.d/ethercat start如果安装没有问题,会出现下面的提示:Starting EtherCAT master 1.5.2 done说明安装成功!7、添加命令行工具vim ~/.bashrc 在其中添加如下代码:PATH=$PATH:/opt/etherlab/bin再执行:source ~/.bashrc 这时候就可以使用ethercat命令行工具了。8、测试(1)测试系统(2)IGH EtherCAT控制松下电机注释:本文引用了 IGH EtherCAT Master Linux on PC编译教程 部分内容;发布于 2020-06-27 12:35机器人控制​赞同 30​​20 条评论​分享​喜欢​收藏​申请