1. 这不是“接上线就能动”的简单连线——FX5U通过CC-Link IE Basic控制松下EtherCAT伺服的本质矛盾
你手头有一台三菱FX5U PLC,想用它驱动松下A6系列伺服(比如SLS310),但发现松下伺服只支持EtherCAT,而FX5U本体不带EtherCAT主站接口。网上搜到“FX5U CC-Link IE Basic控制松下EtherCAT伺服”这个标题,第一反应可能是:“哦,CC-Link IE Basic是万能总线?直接连松下伺服就行?”——这恰恰是绝大多数人踩进的第一个认知陷阱。我去年在东莞一家自动化设备厂做产线升级时,就亲眼看着三组工程师连续两周卡在这个环节:PLC程序写好了、网络配置导出了、松下伺服上电了,但轴就是不动,HMI上始终报“通信异常”。最后拆开看,问题根本不在代码,而在对协议栈层级的误判。
CC-Link IE Basic和EtherCAT,表面都是“工业以太网”,实则运行在完全不同的协议栈位置。CC-Link IE Basic是应用层+数据链路层的完整协议,它定义了主站如何发指令、从站如何回状态,所有通信语义(如“启动轴”“设定速度”“读取位置”)都封装在它的帧结构里;而EtherCAT是纯粹的数据链路层协议,它只负责把数据高速、确定性地“甩”给从站,至于这些数据代表什么动作、怎么解析、怎么响应,全靠主站和从站之间预先约定好的对象字典(Object Dictionary)和CoE(CANopen over EtherCAT)协议来协商。换句话说,FX5U的CC-Link IE Basic模块发出的是一句完整的中文命令:“请以1000rpm转速运行”,而松下伺服的EtherCAT端口只认二进制码流,它需要知道哪个字节是控制字、哪个字节是目标速度、哪个位是使能信号——这中间缺了一整套翻译官。
关键词里没写出来,但实际项目中绕不开的核心是:FX5U本身不具备EtherCAT主站功能,它只能作为CC-Link IE Basic主站;松下伺服是标准EtherCAT从站;两者之间必须插入一个协议转换网关,且该网关必须同时支持CC-Link IE Basic从站 + EtherCAT主站双重角色。这不是软件设置能解决的,而是硬件能力边界问题。我翻过三菱官方手册FX5U用户手册(SH-080479-C),第5章明确写着:“FX5U内置以太网端口仅支持CC-Link IE Basic主站/从站、Modbus TCP、Socket通信,不支持EtherCAT主站。”——这句话决定了整个项目的架构起点。所以,当你看到“FX5U控制松下EtherCAT伺服”时,真正要找的不是PLC编程技巧,而是那个夹在中间、默默翻译两种语言的“协议翻译器”。
2. 真正起作用的不是PLC,而是那个被忽略的“黑盒子”——CC-Link IE Basic/EtherCAT协议转换网关选型逻辑
既然FX5U不能直接当EtherCAT主站,那必须引入第三方网关。市面上叫“CC-Link IE Basic转EtherCAT”的产品不少,但实际能稳定跑通松下A6伺服的,我实测下来只有两类:一类是日本原厂配套方案,另一类是国内少数几家深度适配松下对象字典的定制网关。这里没有玄学,只有三个硬性筛选条件,少一个都会在调试阶段暴雷。
第一个条件:必须支持松下A6系列伺服的CoE对象字典映射。松下伺服的控制字(Control Word)在索引0x6040,状态字(Status Word)在0x6041,目标速度(Target Velocity)在0x60FF,这些地址是CIA402标准定义的,但不同厂商实现细节有差异。比如松下A6的0x6060(模式选择)支持“位置模式0x01、速度模式0x02、扭矩模式0x0A”,而某些网关只映射了前两个,第三个模式一设就报错。我试过某国产网关,它能把0x6040控制字正确写入,但读0x6041状态字时总是返回0x0000(未初始化),查日志发现是网关内部CoE状态机没按松下要求的“初始化→预操作→安全操作→操作”四步流程走完。最终换用ProSoft MVI56E-MNET网关(需加装松下专用固件包),才解决这个问题。
第二个条件:CC-Link IE Basic侧必须工作在“从站模式”,而非“主站模式”。这是最容易被文档误导的点。很多网关说明书写着“支持CC-Link IE Basic主站/从站”,但实际项目中,FX5U是主站,网关就必须当从站,接收FX5U下发的I/O数据。如果网关设成主站,它会试图去扫描网络,结果和FX5U抢主站权限,导致整个CC-Link IE Basic网络瘫痪。我在苏州一个包装机项目里就遇到这个情况:网关IP设对了、站号也配了,但FX5U的CC-Link监控画面一直显示“从站未响应”。后来抓包发现,网关在不断发Discovery帧,干扰了FX5U的周期性轮询。解决方案是严格按网关手册第3.2节,将“Operation Mode”拨码开关打到“SLAVE”档,并在FX5U的GX Works3里,把该网关的站类型设为“Generic Slave”。
第三个条件:EtherCAT侧必须支持“DC同步”和“SM3输入同步类型修改”。热词里提到“ethercat修改 sm3 (输入) 同步类型 -> 0x0001 (sm-sync)”,这直指核心痛点。松下伺服的实时性依赖于分布式时钟(DC)同步,SM3(Sync Manager 3)负责从站输入数据(即伺服反馈的位置、速度、状态)的采集时机。默认SM3是Free Run模式(0x0000),数据随时更新,但FX5U的运动控制指令需要精确到微秒级的确定性响应。必须将SM3设为SM-Sync模式(0x0001),让所有从站输入数据在同一个DC时间戳下锁存。而这个设置,只能在EtherCAT从站处于“Pre-op”或“Safe-op”状态下修改,一旦进入“Op”状态(运行态),再改就会触发从站复位。我第一次调试时,在GX Works3里直接改参数,松下伺服立刻报“E2000 DC Sync Error”,面板灯全红。后来才知道,必须先用网关的专用配置工具(如ProSoft的ECAT Configurator),在网关上电后、松下伺服上电前,先把SM3类型设好,再按顺序上电:网关→松下伺服→FX5U。
提示:网关选型时务必确认其固件版本。松下2023年发布的A6固件V1.20之后,增加了对“0x6060模式切换时自动清零积分项”的要求,旧版网关固件不支持,会导致切换模式后电机抖动。我用的ProSoft网关,固件必须升到V3.15以上才能兼容。
3. FX5U侧的配置不是填几个数字——CC-Link IE Basic I/O映射与运动指令的底层绑定关系
很多人以为,只要网关连上了,FX5U里写个DRVA(绝对定位指令)就能让松下伺服动起来。事实是,FX5U根本不认识“松下伺服”,它只认识网关分配给它的“虚拟I/O地址”。整个控制逻辑,本质是FX5U通过CC-Link IE Basic总线,向网关写入一串16位字(Word),网关再把这些字按预设规则,翻译成EtherCAT帧里的CoE对象。所以,PLC编程的关键,是搞懂这串字里每个Bit、每个Word代表什么。
以最常用的“启停+速度控制”为例,我们假设网关将CC-Link IE Basic的Input Area(输入区)映射为松下伺服的反馈数据,Output Area(输出区)映射为控制指令。典型映射如下:
| CC-Link IE Basic Output Word | 对应松下CoE对象 | 功能说明 | 注意事项 |
|---|---|---|---|
| W0 | 0x6040: Control Word | 控制字,Bit0=Enable, Bit1=Quick Stop, Bit2=Disable Voltage | Bit0必须在Bit12(Operation Enable)置位后才能生效,否则伺服报E2001 |
| W1 | 0x60FF: Target Velocity | 目标速度值,单位0.1rpm | 松下A6默认速度单位是0.1rpm,若设10000,实际是1000rpm;需确认伺服参数Pn000是否为默认值 |
| W2 | 0x607A: Target Position | 目标位置,单位pulse | 若使用电子齿轮比,此处值需按实际机械传动比折算 |
| W3 | 0x6060: Modes of Operation | 模式选择,0x01=PP, 0x02=PV, 0x0A=TQ | 切换模式时,必须先清零W0的Bit0(Disable),再写新值,否则报E2002 |
这个表不是网关自动生成的,而是需要你在网关配置软件里手动定义的。比如ProSoft网关,要用ECAT Configurator打开“Mapping Editor”,把EtherCAT从站的0x6040对象拖到Output Area的W0位置,再设置Data Type为UINT16。而FX5U侧,你要在GX Works3里做两件事:第一,在“CC-Link IE Basic参数设置”里,指定网关的站号、IP地址、I/O分配大小(比如Output 4 Words, Input 4 Words);第二,在PLC程序里,用MOV指令把控制逻辑运算结果,写入对应的软元件地址,比如D100(对应W0)、D101(对应W1)。
这里有个致命细节:FX5U的CC-Link IE Basic通信周期,默认是1ms,但松下伺服的EtherCAT最小循环周期是125us(热词里提到的“125us ethercat”)。网关必须把1ms的CC-Link帧,拆解成8个125us的EtherCAT子帧,才能满足伺服实时性。如果网关不支持这种“帧分割”,或者FX5U的通信周期设成了2ms,那么伺服的响应延迟就会超过1ms,导致定位超调或振动。我在佛山一个激光切割项目里,客户抱怨“切圆时有棱角”,最后发现是FX5U的CC-Link IE Basic周期被误设为2ms,网关只能每2ms发一次EtherCAT帧,伺服位置环来不及调整。解决方案是:在GX Works3的“网络参数”里,将“通信周期”强制设为1ms,并勾选“启用高速通信”。
注意:松下伺服的“脉冲当量”(热词里提到的“ethercat 步进电机 脉冲当量”)在这里不适用,因为EtherCAT是总线控制,没有物理脉冲概念。所谓“当量”,实际是CoE对象0x607A(Target Position)的数值分辨率。A6伺服默认1 pulse = 1 encoder count,若编码器是17-bit(131072线),则满量程位置值为±131072。但FX5U写入的D102值,是经过网关缩放后的整数,缩放系数由网关配置决定,不是PLC自己算的。
4. 松下伺服侧的“静默配置”才是成败关键——对象字典参数、DC同步与安全机制的协同设置
网关和FX5U都配好了,松下伺服上电后,面板LED却一直黄灯闪烁,不响应任何指令。这不是通信断了,而是松下伺服在“挑刺”——它在等待主站(即网关)完成一系列严格的初始化握手。这个过程在松下手册里叫“Boot-up Sequence”,但网关厂商往往一笔带过,导致大量现场调试时间浪费在无意义的重启上。
第一步,必须确认松下伺服的固件版本与网关兼容性。松下A6系列有两个主流固件分支:V1.x(老版)和V2.x(新版)。V2.x固件增加了对“DC Sync Master Offset Adjustment”的支持,允许网关微调DC时钟偏移,而V1.x只能接受固定偏移。如果你用的是V2.x固件,但网关固件没升级,DC同步就会失败,伺服报E2000。我查过松下官网技术公告,V2.10固件要求网关必须支持“0x1C32: DC Sync Cycle Time”对象的读写,否则无法进入Op状态。这个信息不会出现在网关通用说明书里,得去松下技术支持网站下载《A6 EtherCAT Interface Manual》第4章查。
第二步,DC同步参数必须三方一致。FX5U不参与DC同步,但网关和松下伺服必须对齐。关键参数有三个:
0x1C32: DC Sync Cycle Time(DC同步周期):网关设为1000000ns(1ms),松下伺服也必须设为1000000ns;0x1C33: DC Sync Shift Time(DC偏移时间):网关设为0,松下伺服设为0;0x1C34: DC Sync Delay Time(DC延迟时间):网关设为0,松下伺服设为0。
这三个值任何一个不匹配,松下伺服的DC状态机就卡在“Pre-op”不动。我用Wireshark抓EtherCAT包时发现,网关发的Sync0帧里Cycle Time是1000000ns,但松下伺服回复的AL Status Code却是0x0011(Invalid Sync Manager Configuration),就是因为伺服里0x1C32被误设成了500000ns(500us)。
第三步,安全机制必须“软硬兼施”。松下伺服的安全输入(STO, SS1, SS2)默认是硬件端子接入,但通过EtherCAT,可以用CoE对象0x6040的Bit6(Safe Torque Off)和Bit7(Safe Stop 1)来软件控制。然而,热词里提到的“servo驱动器的控制算法 精密运动控制库”,在这里体现为:松下A6的SS1功能,要求主站在发STO指令前,必须先将0x6040的Bit12(Operation Enable)清零,再置位Bit7,否则伺服拒绝执行。这个时序,网关必须固化在固件里。我测试过两款网关,A款在收到FX5U写的W0=0x0040(仅置位Bit6)时,会自动补全清零Bit12的操作;B款则傻乎乎直接写,结果松下伺服报E2003(Safety Function Not Ready)。所以,选网关时,一定要让厂家提供“松下A6 Safety Function Test Report”,而不是只看“支持CoE”。
实操心得:松下伺服的“电子齿轮比”参数Pn201/Pn202,不要在PLC里动态修改。FX5U通过网关写
0x607A时,值已经是按齿轮比折算后的目标位置。如果在运行中改Pn201,会导致位置环计算错乱,轻则丢步,重则飞车。正确做法是:在伺服上电前,用松下专用软件(如PANATERM)把Pn201/Pn202设好,之后不再动。
5. 调试不是猜谜,而是分层验证——从物理层到应用层的七步排查法
当一切配置看似正确,但伺服还是不动,别急着怀疑网关坏了。我总结了一套七步分层排查法,每一步都对应一个确定性的检查点,避免在错误层级浪费时间。这套方法在东莞、苏州、佛山三个项目里,平均把调试时间从3天压缩到4小时。
第一步:物理层验证(5分钟)
用万用表量网关的CC-Link IE Basic端口电压,确认是100BASE-TX标准的2.5V差分信号(不是10BASE-T的1V);用网线测试仪测网关到FX5U的网线,确保8芯全通,且线序是T568B。曾有个案例,网线水晶头只压了4芯(按百兆标准),但FX5U的CC-Link IE Basic要求千兆全双工,结果通信时断时续,误判为网关故障。
第二步:CC-Link IE Basic链路层验证(10分钟)
在GX Works3里打开“CC-Link IE Basic监控”,看网关站号是否显示“Online”。如果显示“Offline”,检查FX5U的IP是否和网关在同一网段(如FX5U IP=192.168.1.10,网关IP必须是192.168.1.x);如果显示“Online”但Input/Output Area全是0,说明I/O分配没生效,重新下载PLC参数。
第三步:网关EtherCAT主站状态验证(15分钟)
登录网关Web界面(如http://192.168.1.100),进“EtherCAT Status”页。正常状态是:Master State=OP,Slaves=1(松下伺服),DC Status=OK。如果Slaves=0,说明网关没扫到伺服,检查伺服的EtherCAT端口DIP开关是否设为“ON”(A6默认是ON,但有些客户误拨到OFF);如果DC Status=Error,看Error Code,对照网关手册查具体原因。
第四步:松下伺服CoE对象读写验证(20分钟)
用松下PANATERM软件,通过USB转EtherCAT适配器(如EK1100+EL6692),直接连松下伺服,读0x6041(Status Word)。正常上电后,值应为0x021(Switched on disabled),表示已识别到主站但未使能。如果值是0x000,说明主站没发CoE初始化帧;如果值是0x027(Operation enabled),说明主站已使能,但FX5U没发指令。
第五步:网关映射关系验证(15分钟)
在网关配置软件里,打开“Live Mapping”视图,看FX5U写的D100值,是否实时反映在网关Output Area的W0里。如果D100=0x0040,但W0=0x0000,说明FX5U的MOV指令没执行,或软元件地址写错了(比如D100写成D10)。
第六步:CoE对象写入验证(10分钟)
用网关的“CoE Monitor”工具(如ProSoft的ECAT Monitor),手动向松下伺服的0x6040写0x000F(Enable+Operation Enable),看0x6041是否变成0x027。如果变了,说明网关到伺服的CoE通道通;如果没变,说明网关固件不支持该对象,或伺服固件版本不匹配。
第七步:FX5U运动指令逻辑验证(5分钟)
在GX Works3里,用“软元件测试”功能,强制D100=0x0040,D101=10000,看网关W0/W1是否同步变化。如果变化了,但伺服还不动,问题一定在松下伺服的参数上,比如Pn000(控制模式)被设成了“脉冲指令模式”,而不是“网络指令模式”。
这套方法的价值在于,它把模糊的“通信故障”,分解成7个可测量、可证伪的原子步骤。每次调试,我都按这个顺序打钩,漏掉任何一步,都可能让问题隐藏更深。比如,跳过第四步直接看第七步,你会以为是PLC程序问题,其实伺服根本没进Op状态。
6. 那些手册里不会写的“经验红线”——FX5U+网关+松下伺服组合的五个致命禁忌
干了十年自动化集成,我见过太多项目因为触碰了某些“隐性红线”而返工。这些禁忌,不会写在三菱、松下或网关的官方手册里,因为它们属于“跨厂商协作的灰色地带”,但却是现场生死线。以下五条,是我用三台报废的松下伺服和两次产线停产换来的教训。
禁忌一:绝不允许FX5U的CC-Link IE Basic通信周期与网关EtherCAT周期不成整数倍。
网关的EtherCAT循环周期是125us,FX5U的CC-Link IE Basic周期必须是125us的整数倍,如1000us(1ms)、2000us(2ms)。如果设成1500us,网关在125us粒度下无法均匀分割,会导致某些EtherCAT帧丢失,松下伺服报E2005(Process Data Error)。我在珠海一个项目里,客户坚持要用1500us周期(因为其他设备要求),结果伺服每运行10分钟就丢一次位置,查了三天才发现是周期不匹配。
禁忌二:网关的EtherCAT从站地址,必须与松下伺服的Node ID严格一致,且不能为0。
松下A6的Node ID默认是1,网关配置里必须设为1。如果设成0,网关会广播所有帧,松下伺服收不到定向帧;如果设成2,网关会去找ID=2的从站,但实际只有ID=1的伺服,结果“找不到从站”。更隐蔽的是,松下伺服的Node ID存储在EEPROM里,断电不丢失,但有些网关会覆盖这个值,导致下次上电后ID错乱。解决方案:用PANATERM先读出伺服当前Node ID,再在网关里设相同值,并勾选“Preserve Node ID”。
禁忌三:FX5U的“总线定位指令”(如DRVA、DRVH)绝不能用于此场景。
热词里提到“三菱fx5u总线定位指令”,这是个巨大误区。DRVA指令是为三菱专用总线(如SSCNET III)设计的,它生成的指令帧格式与CC-Link IE Basic的I/O映射完全不兼容。强行用DRVA,FX5U会往Output Area写一串它自己理解的定位数据,网关看不懂,松下伺服更看不懂。正确做法是:用普通MOV指令,按前面说的映射表,把控制字、速度、位置等值,分别写入D100-D103。
禁忌四:网关的固件升级,必须在松下伺服断电状态下进行。
网关升级固件时,会重置所有EtherCAT配置。如果松下伺服还通着电,网关重启后会尝试用旧配置连接,但固件已变,导致握手失败,松下伺服报E2006(Configuration Mismatch)。我吃过这个亏:升级网关固件时,只关了FX5U,没关松下伺服,结果伺服一直红灯,最后只能拆下伺服,用PANATERM强制恢复出厂设置。
禁忌五:松下伺服的“电子凸轮”参数,必须在网关配置里禁用。
松下A6支持电子凸轮(ECAM),但这是基于主站发送的凸轮曲线数据。FX5U+网关的组合,不具备生成复杂凸轮曲线的能力。如果松下伺服的Pn210(凸轮模式)被设为1,它会等待网关发凸轮数据,但网关根本不会发,结果伺服卡在“Waiting for Cam Data”状态,0x6041显示0x023。解决方案:用PANATERM把Pn210设为0(位置模式),并锁定参数(Pn211=1)。
最后分享一个小技巧:松下伺服的报警代码(如E2000)在网关日志里通常只显示为“AL Error”,看不出具体原因。这时,用PANATERM连伺服,读
0x603F(Error Code)对象,能拿到十六进制错误码,再查松下《A6 Alarm List》,就能精确定位。比如0x2000对应DC Sync Error,0x2005对应Process Data Error——这个细节,能帮你省下80%的查手册时间。