1. 方案选型与整体思路
1.1 为什么用TwinCAT 3在Windows上做EtherCAT主站
做运动控制或者设备互联的工程师,对EtherCAT这个词应该都不陌生。它是目前工业自动化领域占有率很高的实时以太网总线,市面上绝大多数伺服驱动器、远程IO、气动阀岛、编码器模块都能看到它的身影。而在Windows平台上搭建一个EtherCAT主站,“TwinCAT 3 + 普通网卡”几乎是最不用动脑子、也最省钱的路子,很多国产伺服厂家的调试软件内部也是用这套逻辑在做底层通信。
先说清楚一个概念:TwinCAT 3是倍福的软件自动化平台,本身可以免费下载和安装。日常做开发、做原型验证、带小批量设备调试,完全可以靠试运行模式跑起来。真正需要长期稳定运行时才需要购买对应的运行时授权,而这个成本比起动辄几万块的专用主站卡加SDK授权方案,已经是数量级的差距了。更关键的是,EtherCAT主站功能在TwinCAT 3里属于基础功能模块,不需要额外买什么“EtherCAT主站包”,装完就有了,这对预算敏感的个人开发者和中小设备商非常友好。
1.2 几种常见EtherCAT主站方案对比
我把这些年接触过的EtherCAT主站方案放在一起对比一下,方便你看清不同路子的适用场景:
| 方案 | 运行平台 | 成本 | 上手难度 | 实时性 | 适合场景 |
|---|---|---|---|---|---|
| TwinCAT 3 + 普通Intel网卡 | Windows | 软件免费,运行时授权按需购买 | 低 | 好 | 设备调试、中小型设备控制、快速原型 |
| 专用主站卡(PCIe + SDK) | Windows/Linux | 高,卡和授权分开卖 | 中 | 很好 | 高端设备、大规模轴控、对抖动要求极高的场景 |
| IGH开源主站 | Linux | 免费 | 高 | 好 | 嵌入式产品、自研控制器、熟悉Linux内核的团队 |
| 嵌入式SoC方案 | 自定义硬件 | 中 | 高 | 很好 | 批量定型产品,如机器人控制器、专用运控板卡 |
这里我重点说下TwinCAT 3这个方案为什么值得优先尝试。首先是省掉了专用硬件,一个普通工控机甚至高性能笔记本,搭配Intel千兆网卡就能当主站用。其次是开发环境成熟,变量监视、PLC编程、运动控制、示波器、在线诊断都集成在同一个环境里,不用在多个工具之间来回切。第三是从站生态兼容性极好,倍福在EtherCAT协议上有主导话语权,绝大多数从站设备都能被TwinCAT正确识别和配置。
选择这个方案也有要注意的地方。Windows平台和EtherCAT的“实时性”其实是有矛盾的,TwinCAT通过安装实时网卡驱动,把网卡从Windows协议栈里解绑出来,独占给EtherCAT通信使用,这样才能保证总线周期稳定在1ms甚至更短的级别。但代价是这块网卡就不能再当普通网卡用了,所以我在实际项目里习惯准备双网卡:一个专用网卡接EtherCAT总线,另一个板载网卡用来连上位机、PLC调试、数据采集。
1.3 硬件选型需要注意的几个点
很多人在网上问“为什么我的笔记本跑TwinCAT扫描不到设备”,一半以上是网卡兼容性问题。TwinCAT对网卡的芯片方案有要求,实测下来最稳的是Intel网卡,比如82574L、82579LM、I210、I219系列的PCIe网卡或者部分板载网卡都能正常识别。而Realtek、Atheros、Broadcom这些芯片方案的网卡,很多连“兼容设备列表”里都看不到,基本可以放弃。
工控机方面,CPU建议i5或以上,内存8GB起步,16GB会更从容,硬盘换固态。我见过有人用i3工控机跑8个EtherCAT轴加一堆IO模块,也能跑起来,但周期降到500微秒时CPU占用就明显吃紧。另外建议把BIOS里的CPU节能功能、C-States、SpeedStep关掉,Windows电源计划切成“高性能”,这些细节对总线周期的稳定性影响很大,后面找问题的时候很值钱。
网线这块很多人不重视,我要多说一句。EtherCAT是标准的以太网物理层,用普通超五类或六类网线就行,但必须是质量可靠的屏蔽网线。我踩过坑:用一根看着挺新的跳线接伺服,结果在1000微秒周期下一会儿掉线一会儿状态复位,换了一根带屏蔽的成品线之后问题彻底消失。接线顺序上,主站网卡直接连第一个从站的IN口,后面的从站手拉手串联,最后一个从站OUT口不需要接回主站,协议本身支持开放环拓扑。
2. 环境准备与双网卡规划
2.1 软件安装的完整流程
安装TwinCAT 3之前,先把Windows系统检查一遍。实测最好用的是Windows 10专业版或Windows 11专业版,家庭版偶尔会出现一些奇怪的权限问题,不建议用来做开发环境。系统装好后,建议把Windows更新暂停,避免半夜自动重启打断调试。
第一步是下载TwinCAT 3。从倍福官网的软件下载页面能找到TwinCAT 3的安装包,目前主流版本是3.1.4024系列的某个修订版。下载的时候注意区分32位和64位、有没有包含对应版本的集成环境。TwinCAT 3本身依赖Visual Studio外壳,安装包会检测系统里已有的VS环境,如果没装VS,安装程序会自己带上一个精简的集成开发界面,也能正常用。我个人习惯先装一个Visual Studio Community版再装TwinCAT,这样补丁更新、工程管理会更顺手。
安装过程有几点要特别注意。关闭杀毒软件和Windows Defender的实时防护,否则安装过程中一些驱动文件和授权相关组件可能被拦截或隔离,导致装完以后TwinCAT启动报错。安装路径默认放C盘就行,不要改到中文路径下。装完以后建议重启一次系统,让内核驱动正确加载,然后打开“TwinCAT XAE”环境,确认左下角状态能切到“Run”模式。
注意:TwinCAT安装后的默认试运行模式是有限制的。未经授权的TC3运行大约30分钟或2小时后会停止,重启服务可以再获得一段时间,但这只适合开发测试。真正常期运行需要向倍福申请或购买运行时授权,授权方式和价格可以去官网查,也可以问当地分销商。
2.2 将网卡配置为EtherCAT实时网卡
装好TwinCAT之后,最关键的一步是把一张空闲网卡从Windows网络协议中解绑出来,变成EtherCAT专用网卡。这一步做不对,后面所有扫描、通信都无从谈起。
在TwinCAT环境中找到“TwinCAT”菜单下的“Show Realtime Ethernet Compatible Devices”功能,打开后耐心等待几秒,界面会列出当前系统里被识别为“兼容”的所有物理网卡。如果在列表里没看到希望使用的网卡,说明这张网卡不在支持列表里,那就需要换卡了。找到目标网卡后,先确认这张网卡当前没有连接任何业务网络,然后点击“Install”按钮,TwinCAT会在该网卡上安装实时驱动。装完之后网卡会多出一个“TcEtherCAT”相关的设备或驱动,普通TCP/IP网络功能就被暂时接管了。
这里有个经验:系统里有多张网卡时,建议按物理位置或MAC地址做好记录,把“接EtherCAT总线的网卡”和“连办公室网络的网卡”明确区分。我见过有人装驱动时装错了卡,把连接PLC和HMI的那张网卡变成了EtherCAT专用网卡,结果整个上位机网络全断了,排查了半天才找到原因。
2.3 双网卡组网的几种常见拓扑
实际设备调试中,双网卡分组是最常见的做法。我推荐按这个规划来接线:
- 主板板载网卡(如Realtek RTL8111或Intel I219)→ 走Windows常规网络,连接路由器或交换机,用TCP/IP和上位机、视觉系统、MES通信。
- 独立PCIe Intel网卡(如Intel I210-T1)→ 安装TwinCAT实时驱动,只用它连接EtherCAT总线的第一个从站。
这样做的逻辑是隔离。Windows系统的网络波动、广播风暴、软件防火墙拦截都不会影响到EtherCAT总线的实时性。反过来,EtherCAT总线上的高频周期报文也不会去占用上位机网络带宽。
还有一种不需要双网卡的临时方案:只用一张网卡,在网卡属性里关掉TCP/IP协议栈,让系统里所有网络应用都走另一张USB无线网卡。这个方案应急调试可以,但不建议当成正式使用,因为USB网卡和无线网络的稳定性远不如有线网卡,碰上网络中断很容易误判成EtherCAT通信有问题。
3. 创建工程、扫描从站与PDO配置
3.1 新建TwinCAT工程并激活本地配置
打开TwinCAT XAE环境,新建一个项目,模板选择“TwinCAT XAE Project (XML format)”。工程创建完成后,解决方案树里会出现“SYSTEM”、“MOTION”、“PLC”、“I/O”等几个大节点,我们接下来的操作基本都在“I/O”下完成。
在“SYSTEM”节点下,把目标系统切换成“Local”(也就是本机)。这个动作的含义是告诉TwinCAT,我们要把本机当作实时运行内核。如果这里指向了远程设备,后面的“Activate Configuration”和“Scan Devices”都会跑到远程机器上,新手很容易在这多绕一圈。
然后回到“I/O”节点,右键选择“Scan Devices”,TwinCAT会自动扫描出安装过实时驱动的网卡设备。确认选中这张网卡,点击“OK”,系统会自动创建一个EtherCAT主站设备,名字一般是“Device 1 (EtherCAT)”。这里如果没扫描到任何设备,大概率是网卡驱动没装好,回上一章检查。
3.2 用ESI文件正确识别从站
EtherCAT从站设备都有对应的ESI文件,全称EtherCAT Slave Information,里面描述了从站的类型、名称、对象字典、PDO默认映射、同步模式这些信息。TwinCAT扫描从站时就是靠这个文件来识别和加载设备功能的。
市面上主流的伺服驱动器、IO模块厂家,官网都会提供对应产品的ESI文件下载。这里我以常见的国产汇川SV660N系列伺服为例,它的ESI文件一般在官网的技术支持/下载中心能找到,文件名通常类似“SV660N_Vx.x.esi”或“SV660N.xml”。拿到文件后,放到C:\TwinCAT\3.1\Config\Io\EtherCAT目录下,重启TwinCAT工程,再扫描就能正确识别出“SV660N”而不是一个无名盒子。
实操提醒:有些从站固件更新过以后,ESI版本会和主站缓存里的不一致。如果扫描出来的从站型号对但对象字典和实际固件不符,建议把旧版ESI删掉,只保留最新版本,再重新扫描。遇到“Unknown Device”时,优先怀疑ESI没装或者装错版本。
3.3 扫描从站并检查拓扑
激活配置后,在EtherCAT主站设备上右键选择“Scan Boxes”。TwinCAT会发送查询命令,在总线上找到所有从站,并和本地ESI库比对,然后把匹配结果添加到工程中。扫描完成后,设备树里会列出一个个从站节点,双击每个从站节点,在“EtherCAT”选项卡里能看到当前从站的厂商ID、产品代码、版本号以及实际状态。
这一步重点关注几个信息:
- 从站节点名称是否正确,能否对应到实际硬件模块;
- 产品代码和版本号是否和实物标签一致;
- 每个从站的“Current State”是否为“PREOP”或“SAFEOP”。
如果从站状态一直卡在“INIT”不动,说明主站和从站之间的基础通信都还没建立好,常见原因有接线错误、从站24V没上电、ESI不匹配等,这些问题会在后面章节专门讲排查思路。
3.4 PDO映射配置的正确打开方式
PDO(Process Data Object)是EtherCAT主站与从站之间周期性交换用户数据的基本单位。从站里每个PDO实际上是一组对象字典条目的集合,比如一个伺服轴的控制字、目标速度、状态字、实际位置,都可以放进一个PDO里。
双击从站节点打开配置界面,切到“Process Data”选项卡,左侧会列出从站默认支持的PDO列表,右侧是PDO里包含的条目。修改映射时,可以通过勾选和取消条目来定制PDO内容。但是这里要注意,PDO的修改不是即时的,改完以后必须重新激活配置,TwinCAT才会重新计算FMMU和同步参数并下发到从站。
映射不是越大越好,每个从站周期要交换的数据,够用就行。我见过有人图省事,把从站对象字典里所有变量全勾上,结果一个轴的输入输出数据多了几十个字节,总线周期直接拉长。对伺服控制来说,控制字、状态字、目标速度/目标位置、实际速度/实际位置、模式字,这六七个变量就已经能覆盖绝大多数应用场景。
有时我们需要添加从站默认PDO里没有的变量,比如某些伺服的“转矩百分比”。这时直接在“Process Data”界面里点“Add New Item”,然后在对象字典里选择需要的索引和子索引就行。但我强调一下,任何对PDO的修改,都要在从站处于PREOP状态下进行,如果从站已经在OP态运行,先切回PREOP再改,改完再切回OP,否则容易收到从站返回的报错信息。
4. 实操:带一个国产伺服把轴转起来
4.1 接线与伺服参数预设置
拿一台SV660N或同级别国产EtherCAT伺服做演示。伺服驱动器上电后,用网线把驱动器面板上的IN口接到主站网卡。注意确认驱动器上的EtherCAT网口标识,IN和OUT不要接反,接反了主站会扫描不到设备。
上电后伺服本身可能默认处于“位置模式”或“速度模式”,先用伺服自带的操作面板或上位机调试软件把运行模式修改为“CSP(循环同步位置模式)”或者“CSV(循环同步速度模式)”,这两个模式都是EtherCAT主站周期性下发给定值的标准模式。不同伺服的参数命名有差异,常见的控制字地址是0x6060(模式字)、0x6040(控制字)、0x6041(状态字),这些名称在EtherCAT协议里是固定的。
还要检查伺服的通讯超时参数。很多厂家伺服有个“通讯超时时间”参数,默认几百毫秒到几秒不等。调试阶段经常出现主站稍微卡了一下,伺服就报通讯中断故障的情况,如果超时时间能调大就调大,可以避免很多误报。
4.2 把伺服的PDO和主站匹配起来
在TwinCAT的设备树里,找到刚才扫描出来的伺服节点,双击打开配置界面。在“Process Data”里检查默认PDO的映射。如果默认映射里已经包含0x6040(控制字)和0x6041(状态字),那直接使用就行;没有的话,按下表增加一条自定义PDO:
| 变量含义 | 索引 | 子索引 | 长度 |
|---|---|---|---|
| 控制字 | 0x6040 | 0x00 | 16位 |
| 状态字 | 0x6041 | 0x00 | 16位 |
| 模式字 | 0x6060 | 0x00 | 8位 |
| 目标速度 | 0x60FF | 0x00 | 32位 |
| 实际速度 | 0x606C | 0x00 | 32位 |
| 目标位置 | 0x607A | 0x00 | 32位 |
| 实际位置 | 0x6064 | 0x00 | 32位 |
添加条目和调整顺序后,在“SM Configuration”里检查同步单元。通常一个输出SM(从主站到从站)和一个输入SM(从站到主站)就够了。如果默认是三个SM,大概率是附加了厂商自定义的调试数据,可以保持不动,也可以手动简化,但要确认删错后不影响从站正常工作。
4.3 状态机切换:从INIT到OP的完整过程
EtherCAT从站运行有明确的状态机,依次是INIT、PREOP、SAFEOP、OP。主站启动时会把从站逐级往高状态切,每一步都有对应的工作内容:
- INIT:上电或复位后的初始状态,只能做最基本的参数读写。
- PREOP:邮箱通信已经建立,可以读写对象字典,但还没有周期过程数据通信。
- SAFEOP:周期过程数据开始传输,输入数据有效,但输出数据仍处于安全零值状态,伺服不会接收运动指令。
- OP:完全运行状态,输出数据生效,伺服可以接收控制字和运动指令。
在TwinCAT中,选中EtherCAT主站设备,在“Advanced Settings”里或者直接在设备树的右键菜单中找到“Set OP”功能。点击后观察状态栏,如果一切正常,所有从站会稳定在“OP”。如果某个从站切不上去,TwinCAT会显示具体卡在哪个状态并给出报警码。
伺服使能的动作是这样的:从站在OP状态下,先向0x6040写入0x06,让伺服进入“Ready to switch on”;再写入0x07,让伺服进入“Switched on”;最后写入0x0F,伺服才真正使能。这三个值不能跳步,很多新手一上来就想写0x0F,结果伺服没有任何反应,就是因为没有按顺序走完前置状态。
可以在TwinCAT里直接打开从站的“CoE Online”选项卡,找到0x6040和0x6041,手动写值测试。把0x6040依次从0x00、0x06、0x07、0x0F写下去,同时观察0x6041状态字的变化,确认使能流程正常。这一步通了,说明PDO映射和状态机都没有问题。
4.4 用Python脚本通过ADS控制伺服转动
TwinCAT本身支持用PLC写控制逻辑,但调试阶段我更习惯用Python快速验证通信链路。TwinCAT对外提供ADS通信协议,Python里通过pyads库可以直接读写TwinCAT实时内核里的变量。
先安装pyads库:
pip install pyads然后写一段最简单的脚本,让伺服以固定速度转起来。这里假设我们在TwinCAT的PLC程序中,已经把伺服的控制字、目标速度映射到了全局变量GVL_Servo_ControlWord、GVL_Servo_TargetVelo、GVL_Servo_StatusWord上。如果没写PLC程序,也可以直接通过TwinCAT的ADS符号地址来访问,我把两种方式都演示一下:
import pyads import time # 连接本机TwinCAT Runtime,AMSNetId一般是 127.0.0.1.1.1 plc = pyads.Connection('127.0.0.1.1.1', pyads.PORT_TC3PLC1) plc.open() # 方法一:如果PLC里建了变量,直接用符号名访问 plc.write_by_name('GVL_Servo_ControlWord', 0) # 方法二:不带PLC,直接通过地址访问设备树的PDO,需要查询具体的AMS地址 # 这里示意,实际需要从TwinCAT信息里拿 # plc.write_by_name('.Box1^O_Pddo', ...) # 使能流程 plc.write_by_name('GVL_Servo_ControlWord', 0x06) time.sleep(0.2) plc.write_by_name('GVL_Servo_ControlWord', 0x07) time.sleep(0.2) plc.write_by_name('GVL_Servo_ControlWord', 0x0F) time.sleep(0.5) # 设置目标速度,单位取决于伺服参数,常见是 rpm 或 0.1rpm plc.write_by_name('GVL_Servo_TargetVelo', 300) time.sleep(3) # 停止并复位控制字 plc.write_by_name('GVL_Servo_TargetVelo', 0) time.sleep(0.5) plc.write_by_name('GVL_Servo_ControlWord', 0x07) plc.write_by_name('GVL_Servo_ControlWord', 0x06) plc.write_by_name('GVL_Servo_ControlWord', 0x00) plc.close() print('伺服完成一圈测试')这样跑通后,说明从物理接线、网卡驱动、从站识别、PDO映射到状态机切换这条链路全部正常。之后不管是用TwinCAT的PLC编程,还是对接其他上位机软件,逻辑都是一样清晰的。
5. DC分布式时钟同步的配置与排障
5.1 DC同步是什么,为什么它对伺服控制重要
EtherCAT的一个突出优势是具备分布式时钟(Distributed Clocks,简称DC)功能。直白地说,DC能让总线上所有从站共享一个高精度的系统时钟,并且保持同步。不同从站模块在同一时刻采集输入数据或更新输出数据,这对伺服同步控制、龙门双轴、电子凸轮这类应用至关重要。
如果DC没有配置好,常见的后果是轴运行时电流噪声明显、位置同步误差偏大、多轴设备运行起来“像在抖动”。在一些对同步要求不高的场合,比如单个伺服做简单运动,DC没配好也能跑,但一旦涉及多轴协调或者高精度定位,DC配置几乎决定了系统的层次上限。
DC同步的基本机制是:主站在启动阶段会选择一个从站作为参考时钟,通常选拓扑上离主站最近的那个从站,然后把主站本地时间与参考时钟对齐,再通过后续报文持续校准其他所有从站的本地时钟。每个从站内部的“System Time”寄存器(0x0910等)会在每个同步周期里校正一次,维持和其他从站的时间偏差在纳秒级。
5.2 TwinCAT中DC参数的配置步骤
在TwinCAT中配置DC,需要进入从站节点的“DC”选项卡。首先勾选“Enable DC”以及“DC in Output”等选项,具体参数因从站不同而略有差异,但核心是三个:
- DC同步周期:和总线周期一致,比如1ms或500us;
- 同步信号偏移:可以设置从站相对于参考时钟的触发延迟,通常填0;
- 同步模式:一般从站默认选择“SM-Synchron”或“DC-Synchron”,两者区别是一个沿输入事件同步,一个沿DC系统时间同步,对伺服控制来说,DC-Synchron更适合做高精度插补。
配置完从站节点后,回到EtherCAT主站设备,在“DC”选项里选择“Start DC Synchronization”,TwinCAT会在每次激活配置时把DC时钟分发到所有从站。
我习惯在第一个从站上设置为参考时钟,因为它离主站最近,传播延迟最小,时间校正精度最高。如果你的总线里第一个从站是个很简单的IO模块,那也可以把参考时钟指定到第一个伺服驱动器上,这个没有强制规定,关键是要在激活配置前选好,中途切换参考时钟会导致一段时间内所有从站重新同步。
5.3 同步误差过大时的排查思路
DC同步问题在工程里表现得非常狡猾,不像接线短路那样一眼就能看出来。它更像“轴动起来总有点怪”的慢性病。你要是在示波器里看到位置跟随误差曲线上下抖动,或者多轴同步时电流谐波特别明显,先把DC相关检查过一遍。
首先是网络质量。EtherCAT的DC同步虽然做了很多补偿算法,但对线路延迟的稳定性还是有要求的。网口或者网线接触不良、强电线和网线捆在一起、使用了非屏蔽网线,都会造成传播延迟抖动。我排查过的一个现场,总线周期是从站BOARD上电瞬间跳变导致同步丢失,最后发现是机柜里一根伺服动力线和EtherCAT网线走了同一个线槽,把线分开后问题消失。
其次是主站网卡中断和CPU延迟。如果在Windows任务管理器里看到CPU占用率忽高忽低,或者某个系统进程频繁抢占CPU,TwinCAT的实时线程就可能被延迟,进而影响DC同步报文的下发精度。建议调试时关闭Windows自动更新、关掉各类云盘后台同步、关掉不必要的桌面特效。
最后是周期选择。总线周期太短,比如低于250微秒,对网卡和CPU的压力都会陡增,DC同步误差也会放大。如果实际应用对同步精度要求没那么苛刻,建议优先考虑用1ms或500us的周期,稳定很多,然后再根据实际测试结果往下压。
6. 常见问题速查与避坑建议
6.1 TwinCAT扫描不到从站设备
这是刚接触EtherCAT时遇到最多的问题,没有之一。我按排查优先级整理一份清单:
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 网卡驱动列表为空 | 网卡芯片不被TwinCAT支持 | 换Intel网卡,或用兼容列表里的型号 |
| 驱动安装成功但扫描不到设备 | 网卡未绑定实时驱动,或网卡被系统其他协议占用 | 重新安装实时驱动,关闭该网卡的Windows防火墙和无关协议 |
| 扫描到主站但扫描不到盒子 | 从站未上电、接线方向接反、网线坏 | 检查24V供电、IN/OUT口方向、换一根网线测试 |
| 扫描到但显示Unknown Device | ESI文件缺失 | 下载对应从站的ESI文件,放入C:\TwinCAT\3.1\Config\Io\EtherCAT后重新扫描 |
| 扫描到但从站状态异常 | 从站本身固件有问题 | 单独用厂家的调试软件连接从站,确认从站EtherCAT通信功能正常 |
6.2 状态无法从PREOP切换到SAFEOP/OP
状态卡在PREOP是第二步高频问题。出现这种情况,TwinCAT报警区通常会给出错误码,常见的有从站返回的状态错误码、邮箱通信超时、PDO映射不一致等。直接从这几个方向查:
- 检查从站配置页的“Mailbox”和“State”日志,看从站给出的具体拒绝原因;
- 确认PDO映射里所有条目都在从站对象字典中真实存在,映射长度也符合字典定义;
- 看看是不是改了从站参数但没激活配置,激活一下再试;
- 如果总线里有过个从站,试着只保留一个从站做最小系统,逐级加从站定位问题。
这里有个很容易被忽略的坑:部分国产伺服在PREOP阶段会要求主站先配置某几个特定对象,比如“伺服模式字0x6060”必须在SAFEOP之前写入。如果没写,从站会一直拒绝往SAFEOP切换。这属于厂家的个性化设计,没有统一规律,务必把官网手册和从站的配置XML文档精度过一遍。
6.3 使能伺服时报跟随错误或通信错误
很多人在TwinCAT把从站切到OP后,给控制字写0x0F,结果伺服报警。我先说几个高频原因:
第一,控制字写得太快。从0x06到0x0F之间建议留一定的延时,至少几十毫秒,有些伺服对状态跳变有最短时间要求,时间太短会认为状态机异常。第二,伺服本身没处于OP态的“准备使能”状态,比如还没完成回零、轴还在找原点,需要先满足伺服内部的使能条件。第三,配置了DC同步但实际同步没建立,伺服会报同步跟随错误。这种情况回DC选项卡查看“Sync error count”,如果这个值持续增长,说明同步没锁住。
排查手法上,我习惯从两处入手。先在TwinCAT的CoE Online里实时读0x6041状态字,看伺服到底处于哪个状态;然后打开厂家伺服调试软件看最近一次报警的历史代码。这样能快速缩小范围。我遇到过装完新固件以后PDO默认映射变了,导致控制字根本没写到正确位置的情况,这类问题用“逻辑分析仪看发送数据”基本能一眼看出来,但很多纯软件切不到的现场,就只能靠从站自身的诊断信息逆着推了。
6.4 几个补充的日常操作习惯
最后分享几个我的日常习惯,每一个背后都有过实实在在的教训。
第一,每次改从站配置前先备份原工程。不要只依赖TwinCAT的自动备份目录,关键是“配置没生效前能回退”。Windows系统自带的文件历史记录或者网盘同步,在实时工程上经常会产生版本错乱,建议统一用代码仓库管理大型工程配置。
第二,EtherCAT总线周期变短时,一定要实测,不要只看配置里的理想值。可以把主站状态和伺服状态字一起做记录,观察整段运行期间有没有抖动或偶发报警。如果偶发报警出现频率较高,比如几分钟一次,大概率是网卡中断延迟或电源纹波问题。
第三,工控机的USB口不要接乱七八糟的东西。虽然USB不影响EtherCAT总线本身,但USB设备插入时Windows的PnP管理会做大量枚举操作,严重抢占CPU时会导致TwinCAT实时线程卡顿,反映在总线上就是从站偶发掉线。这个问题在笔记本+USB转网卡调试时尤其明显,所以我一再强调,正式设备调试不要用USB转网卡跑EtherCAT。
我自己踩过最深的坑,莫过于一开始总想着“配置看着没问题应该就能跑”,结果无数次被现实教育。EtherCAT主站搭建这件事,七分在硬件基础和物理链路,三分在软件配置。只要网卡、网线、供电这几样硬件根子正,软件上面的问题基本都是能查出来的。真要遇到疑难杂症,先把复杂度降下来,用最小系统、最稳定周期、最少的从站数量,等跑通了再逐步加回原先的条件。这套思路帮我处理了不少项目现场的问题,写下来给正在折腾TwinCAT和EtherCAT的同行做个参考。