EtherCAT入门之旅(学习笔记)
第一篇 EtherCAT基础篇:核心概念与系统架构解析
注意:
以上只作为学习笔记,偏向于电子嵌入式方向的,最后也是用STM32F407作为EtherCAT主站,通过CANopen协议与从站进行通信。进行步进电机的控制或者IO模块的控制。不偏向于PLC,但是,个人能力有限,不保证以上内容完全正确,如有错误,请指正。用到的模块是雷赛的RX2EC-0808-N4 IO模块和CL3C-EC503 步进电机驱动器
1.EtherCAT简介
EtherCAT是一种工业以太网通信协议,由Beckhoff公司于1997年提出,并得到广大工业自动化领域的认可和支持。它不同于传统的"先接收后转发"通信模式,采用了一种创新的"处理过程中传输"机制,使得数据在通过每个节点时几乎不产生延迟。可以达到us级别的通信延迟。
1.1 EtherCat接线
EtherCAT网络由主站和从站组成,主站的网口接从站1的IN口,从站2的IN网口接从站1的OUT口,以此类推,最后一个设备的输出口可以接也可以不接,不接就是标准 线型(daisy-chain)拓扑结构,接的话就是环型(ring)拓扑结构。
1.2 EtherCat数据帧格式
EtherCAT数据帧由帧头和帧数据组成,基于传统的以太网帧做了修改,只不过将其中的帧类型修改为0X88A4(用来标识EtherCAT协议)
1.3 EtherCAT寻址方式
EtherCAT 共有 4 种寻址方式
1.位置寻址(原理是这样的,不用管,知道怎么用就行)
原理:帧每路过 1 个从站,16-bit ADP 段自动 +1;谁看到 ADP=0 谁就应答。
用途:启动扫描、自动编号;主站最先靠它把"从站 0、1、2 ..."找出来。
字段:ADP 初值 = 0xFFFF-N(负偏移),ADO 放寄存器偏移
2. 节点寻址(这是区分不同从站的关键)
原理:主站给每个从站分配一个固定的 16-bit 地址,写入 ESC 寄存器 0x0010;以后用"ADP==我的地址"来单挑该站。
用途:邮箱通信(SDO)、参数下载、固件更新;地址掉电不保存,可改。
字段:ADP = 固定地址,ADO = 寄存器/内存偏移
3.逻辑寻址
原理:4 GByte 虚拟地址空间;每个从站事先把"本地物理寄存器"映射到一段 32-bit 逻辑地址。主站只发"逻辑地址+长度",所有从站并行比较,命中即读写。
用途:过程数据(PDO)周期交换,一帧可同时刷新几十个伺服;效率最高
4. 广播寻址(Broadcast)
原理:ADP 无"站号"意义,每经一站仍 +1,但全部站都对 ADO 指向的寄存器执行"读-改-或/写"操作。
用途:一次性读回所有站的 AL Status、故障码;或同时把整网拉进 SAFEOP。
字段:ADP 被忽略,ADO = 通用寄存器地址
总结:
扫描用位置,配置用节点,运行用逻辑,群发用广播
个人理解
1.我是用位置寻址来对不同从站进行区分,一般是ethercat协议根据网线连接顺序作为节点ID顺序,但是假如我要把这个模块的地址设为2,由连接顺序决定这肯定是不对的,
2.我用的雷赛的RX2EC-0808-N-4这个模块,上面一直有拨码开关,可以设置从站地址,链接顺序设置地址的优先级低于拨码开关的。
学习心路: 我一直以为是需要提供一个映射对象来让我读到拨码开关设置的地址,类似于读寄存器那种,哈哈,格局小了,我还问他们技术,他们说不用手动读取,是标准的框架,就像这个欧姆龙主站,E总线扫描出来就能看到,这个节点ID不是在SDO里面映射的,是总线扫描协议规定的,

stm32的EtherCat是用的soem开源主站库,一直打印的只有这三个,没法读啊。

那会后面看到网口芯片的手册,后面感觉能读,然后又仔细看了soem的源码数据结构,发现ec_slave结构体中的成员变量aliasadr貌似是我要的,直接用就行,哈哈,格局小了。问题解决,又是被当作傻子的一天。

最后
这是下班时间写的,太晚了,就写到这里了,如果有错误,请指正。下一篇再写XML文件中的映射PDO,SM同步管理器这些。