首发于知乎

最近在做基于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那一段扯得有点远了,写了不少和主题无关的内容,后面找时间再重新精简一下。第一次写博客,可能有不少不准确或者错误的地方,还请大家见谅。如有不对之处,还请多多指教。

EtherCAT学习之路——概述相关推荐

  1. xmc4300 ethercat 学习之路

    1.修改object,参考倍福AN_ET96300. 2.基于xmc4800从站设计 https://jingyan.baidu.com/article/3052f5a11bbe5297f31f868 ...

  2. 统计学习之路|(一)统计学习理论与方法概述

    统计学习之路|(一)统计学习理论与方法概述   各位小伙伴们大家好!经过一段时间的思考,我决定将开更一个"天坑系列":统计学习之路.希望自己能够坚持更下去.   之所以称之为&qu ...

  3. AI 学习之路——轻松初探 Python 篇(一)

    喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是 ...

  4. C/C++学习之路: STL

    C/C++学习之路: STL 目录 STL概述 STL三大组件 常用容器 1. STL概述 STL(Standard Template Library,标准模板库),主要出现在 c++中,但是在引入 ...

  5. C/C++学习之路: 模板和异常

    C/C++学习之路: 模板和异常 目录 模板 类型转换 异常 1. 模板 1. 模板概述 c++提供了函数模板(function template),函数模板实际上是建立一个通用函数,其函数类型和形参 ...

  6. C/C++学习之路: 继承

    C/C++学习之路: 继承 目录 继承概述 派生类访问控制 继承中的构造和析构 继承中同名函数的处理方法 非自动继承的函数 继承中静态成员特性 多继承 1. 继承概述 1. 继承基本概念 c++最重要 ...

  7. C/C++学习之路: C++对C的扩展

    C/C++学习之路: C++对C的扩展 1 ::作用域运算符 通常情况下,如果有两个同名变量,一个是全局变量,另一个是局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量. int a ...

  8. C/C++学习之路_九:文件操作

    C/C++学习之路_九:文件操作 目录 概述 文件的顺序读写 文件的随机读写 windows和linux文本 获取文件状态 删除文件.重命名文件 文件缓冲区 1. 概述 1. 磁盘文件和设备文件 磁盘 ...

  9. C/C++学习之路_八: 复合类型

    C/C++学习之路_八: 复合类型 目录 结构体 共用体(联合体) 枚举 typedef 1. 结构体 1. 概述 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年 ...

最新文章

  1. 遍历json数组的常用方式
  2. 项目Alpha冲刺 Day11
  3. 用USB连接两台电脑
  4. Android检测是否有悬浮窗,Android 获取判断是否有悬浮窗权限的方法
  5. vue lang_推荐一个基于Vue 的 H5 快速开发模板
  6. 2016年度最受欢迎中国开源软件评选
  7. 计算机快速切换任务,电脑多任务窗口切换:除了Alt+Tab,你还知道什么?
  8. Linux /boot分区空间不足
  9. linux python虚拟环境 error_阿里云Linux系统配置python3-虚拟环境-mysql --踩坑实践(Ubuntu系统转centOS7)...
  10. 【接口测试】axios测试接口
  11. 缺少公钥问题的解决方法[转]
  12. Word插入特殊符号
  13. 台式计算机用什么电源线,电脑电源线有什么规格
  14. mt4双线macd_实用MACD“三板斧”,你值得拥有(建议收藏)
  15. 非华为电脑使用EMUI10多屏协同教程
  16. 【巨杉数据库SequoiaDB】巨杉数据库无人值守智能自动化测试实践
  17. 【Excel】如何使用RegexString正则表达式
  18. git 将自己的分支合到主分支
  19. 计算机桌面移至其它盘,Windows如何迁移桌面至其它盘
  20. 异常检测:综述(基本都是无监督算法)【时间序列算法:AR/MA/ARMA】【传统机器学习算法:孤独森林、One Class SVM】【深度学习算法:AutoEncoder、LSTM、DeepLog】

热门文章

  1. JCheckBox 默认选择_GoldWave使用习惯的一些默认设置,学会了吗?
  2. word设置替换并加着重号_如何在word2013中添加着重号
  3. oracle 解锁对象,Oracle解锁的方式
  4. 计算机系统中声卡的作用,声卡的作用和功能是什么
  5. java基于微信小程序的奶茶店管理系统 uniapp 小程序
  6. Java Socket简单例子、readLine()、readUTF()
  7. Arrays中的asList方法
  8. 换壳不换芯的苹果 国行iPhone 5c评测
  9. Android 根据FFD8 FFD9获取图片
  10. 雷蛇灵刃潜行版 — 粉晶魅力上手体验