)
接前一篇文章EtherCAT学习之路 —— 概述13. EtherCAT系统组成EtherCAT系统主要就一个主站和若干从站组成。如图3-1所示图3-1 EtherCAT系统组成标题EtherCAT一般使用软件的方式来实现主站包括倍福的TwinCATIghKingStar等等都是基于一台实时操作系统的PC通过以太网卡来实现主站的功能。因为主站不是我的项目重点所以目前了解的还不多。先挖一个坑后面有时间了研究一下再来补上。现在我是用TwinCAT的免费版来学习和调试的。TwinCAT本身是收费的不过它有试用版试用版不具备实时功能调试一下设备还是足够了。从站的组成如图3-2所示图 3-2 从站组成从站一般是由三部分器件组成的物理层器件、EtherCAT从站控制器EtherCAT Slave Control和微处理器MCU。物理层器件就是以太网的PHY芯片和网口ESC是实现EtherCAT协议栈的专用ASIC从站控制微处理器主要实现应用层如CANopen和用户自定义的程序。看到这里没有通信基础知识的通信可能就有点懵逼了。物理层、数据链路层、应用层这些是个啥玩意这里我就简单说一下想要深入理解还是可以看看OSI模型大多数的通信技术都脱离不了这个框架。这里偷了个懒盗用一下PLC攻城狮的图片。OSI中有7层EtherCAT系统中只用了三层物理层、数据链路层、应用层。先降维地说一下这几层是啥意思。最基本的通信就是咱们人类说话我就以我们普通对话来讲解一下这三层的意思。物理层人类的语言是通过嘴发声声波在空气中传播传递到耳朵耳朵听音再汇聚到大脑大脑最终判断出声音中的信息。我们的嘴、耳、声波和空气就是物理层。物理层的重点是信号在介质中的传递表示不同的字有不同的发音规则不同的频率和声调比如“哦”我们就需要发出“o”这个音我们听到“o”这个音的时候才能判断出“哦”这个字。计算机通信的原理和这个也是一样的信号在光 纤、电缆以及空气中传播计算机需要判断电缆上的电平的高低来判断0、1bit。当然计算机比人类要傻很多它不知道“某句话”的“发音”是从什么时候开始的什么时候结束的所以物理层还需要告诉它信号的起始时刻和持续的长度等等。数据链路层通过前面的物理层我们已经具备了基本的发声手段通过嘴改变声音的频率、音调、音长等特征通信系统中天线或者光模块改变信号的电平高低、信号频率、调制方式等特征让声音在空气中传播通信系统中信号在相应的介质中传播然后耳朵识别这些频率、音调、音长等特征通信系统中接收端的识别信号的电平高低、频率、调制方式最终实现口到耳的传播。但是光是这样还足够实现通信。试想一下你和你的几个朋友处在一个嘈杂的环境当中远处有汽车的轰鸣旁边还有小孩子在哭闹你的朋友们每个人在抢着发言大家七嘴八舌的根本听不清对方在说什么。所以你和你的朋友之间想要对话就必须克服两个困难第一屏蔽掉耳旁的那些轰鸣声、哭闹声第二需要建立一种对话机制让大家互相可以听清对方的话语。第一点中描述的那些轰鸣、哭闹声实际上就是通信系统中的噪声噪声太大时我们是无法通信的因为我们根本听不清旁边的人在说些什么只能听到轰鸣声、哭闹声。最简单克服噪声的办法就是提高信号的发射功率也就是大声地说话让自己的声音盖过那些哭闹声也即是通信系统中的功率控制。还有一种办法就是我们过滤掉一些噪声虽然这些声音都会进入我们的耳朵但是我们的大脑可以过滤掉一些不关注的声音专注地去接收那些关注的声音也即是通信系统中的频率选择。此外大家七嘴八舌地说话也是一个问题。7、8个人同时在说话你能听清楚一两个就不错了其他人在说啥根本没法听清。所以我们说话的时候一般会有一个轮流的机制。每个人说两句别人说话的时候别插嘴。或者两个人说悄悄话不打扰到别人自己也听得清。这里的轮流说话机制就是通信系统中的“时分复用”或者“频分复用”一个人说7个人听就是广播1对1的悄悄话就是单播。数据链路层实际上就是用来解决以上的这些问题。数据链路层会将待传输的消息组成一个帧如图3-4所示标图3-4 EtherCAT帧结构题这个帧里就会包含目的地址、源地址、帧数据、帧校验位等。通过目的地址就可以确定帧传递的对象通过源地址接收方也可以知道是谁发送了这条帧。在数据帧之外的地方一般还会存在一个控制器比如EtherCAT主站这个控制器会决定其它的从站什么时候传输数据、数据可以占用多少的资源。在其它的一些更复杂的通信系统中数据链路层还会根据当前的信道 条件噪声情况来决定各个设备的发射功率调制方式等。应用层说完了数据链路层还需要继续了解一下应用层。首先需要明确一点这里的应用层和我们手机、电脑上的应用程序不是一个东西。最为常见的应用层协议就是HTTP。简单来说应用层是对数据的一种格式约定。这里还是用人类的对话来打个比方。你和一个老外大家都有口有耳也都是文明人知道等对方说完自己再说。但是你不懂英文、他不懂中文你们还是无法交流。他说了“double”你以为是“打包”他说“You need cry deal”你以为是“有你的快递儿”。这实际上就是你们的应用层协议不对等他安装的是“英语”应用层协议你安装的是“中文”应用层协议大家说话驴唇不对马嘴根本无法交流。再夸张一点我和你都是中国人我们都听得懂中文当时我是学通信的你是学自动化的我说PRACH信道、信道检查与估计、匹配滤波这些词的时候你能明白每一个字的意思但是连着一起是啥就不知道了。这就是因为你确实“通信系统”这个应用层协议。应用层协议最终的目的就是让消息的收发双方知道这一串“1010101010”代表的是什么意思。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 InformationESI。这些信息的配置就在《EtherCAT Slave Information Specification》里有详细讲解。此外从站开发还需要实现CANopen等应用层协议。对于应用层协议的实现在《Application Note ET9300》里有比较详细的讲解。像ET1100、AX58100、LAN9252这些EtherCAT控制芯片其芯片厂商都会提供一些Demo程序这些Demo程序实际上都是基于《Application Note ET9300》里的软件框架来完成的。第四是SSC这是倍福提供的一个软件。前面说了从站开发的两个关键步骤是EtherCAT控制芯片的配置和应用层协议的实现。倍福提供了SSC这样一个软件它可以直接根据配置和需求生成所需的xml描述文件和应用层代码。当然这个软件生成的代码原生只适配与倍福自己的ET1100或ET1200芯片其它的LAN9252、AX58100都做一些修改。这个东西看着很美好也就那么回事。其实每个芯片厂商都有提供自己的Demo程序这些Demo程序都简单实现了应用层协议。如果是使用非倍福的芯片不如直接在芯片厂商的Demo程序上改这样可以避免一些莫名其妙的bug。不过如果所需的应用层协议芯片厂商没有提供Demo程序的话还是需要用SSC生成一个参考然后再基于这个参考来修改。