前阵子接了个项目,一个做塑料包装的工厂,有一条用了快二十年的热封切生产线,控制器还是三菱FX2N——就是那种黑色外壳、跑RS422的老家伙。最近这老PLC三天两头罢工,有时候下载程序都连不上,客户终于下决心要升级。
本来嘛,PLC升级听着不像什么难事——三菱自家的FX2N升到FX5U,都是三菱的东西,总比跨品牌移植简单吧?结果真上手了才发现,从8位机到32位机,中间差了将近二十年的技术迭代,坑多得让我头皮发麻。
今天把这次移植踩的坑掰开揉碎了讲,以后有兄弟接这类活儿可以参考。
一、第一关:老程序读不出来
到现场第一件事,用编程电缆连FX2N读程序。结果GX Developer提示”通讯超时”——PLC上的RS422口可能是年久失修,信号不稳定。试了七八次才把程序读出来,又发现程序没有加注释,梯形图里几千步全是X000、Y000、M0、D100这种裸地址,一个备注都没有。
更要命的是,客户那边的电工五年前就走了,图纸早就找不到了。整条产线20多个传感器、8个气缸、3台伺服、2台变频器,全要靠我对着程序反推I/O分配。
我的办法:先用万用表把每根线的去向标清楚,做个I/O对照表。然后用GX Developer的软元件注释功能,自己手工一个一个加注释——比如X000标上”入料传感器”,Y002标上”切刀下行电磁阀”。这个过程花了一整天,笨是笨了点,但后面调试的时候发现这一步比什么都值钱。
二、第二关:指令集对不上
FX2N的指令和FX5U有不少差异。FX5U用的是GX Works3,支持的是新的标签式编程,和老GX Developer那套传统的梯形图+软元件地址方式差别很大。虽然GX Works3兼容老指令,但实际做起来问题一箩筐:
MOV指令的参数宽度。FX2N的MOV是16位操作,我把一堆D寄存器搬到FX5U的程序里,一开始没注意数据长度,结果定时器的设定值被高位截断了——原来设定的是K60000(相当于1小时),移植后变成了K-5536,整个定时逻辑全乱了。后来把所有涉及时间的参数都改成了32位操作(DMOV),才算搞定。
高速计数器的差异。原来的FX2N切刀定位用了两个高速计数器(C251、C252),配合编码器做定长裁切。FX5U的高速计数功能完全不一样,原来C251在FX2N里默认就是AB相计数,到FX5U里需要单独配置高速计数器的计数模式。我一开始没仔细看手册,直接移植程序,结果编码器脉冲数永远不对,切出来的袋子长度忽长忽短。翻了一下午手册才发现要设参数。
FROM/TO指令。FX2N时代扩展模块读写数据用的FROM/TO指令,在FX5U里被新的智能模块配置工具替代了。我原来FX2N外挂了一个模拟量输入模块(FX2N-4AD)和一个温控模块,到FX5U里需要改用FX5扩展模块,直接在GX Works3里做模块配置,不再需要FROM/TO写一大坨梯形图了——这个是好事,省了不少程序步。
三、第三关:脉冲输出的坑
这是让我最头疼的一个。FX2N用的是晶体管输出,通过PLSY指令发脉冲给伺服驱动器控制切刀位置。FX5U虽然也支持脉冲输出,但两者的脉冲输出指令和一轴定位指令(DSZR、PLSV、DRVI这些)的底层实现方式不同。
FX2N的PLSY指令是非加减速的,发脉冲的频率是恒定值,到终点直接停。FX5U我本来想换成DRVI(相对定位指令),但DRVI自带加减速曲线,同样程序逻辑下伺服起停位置差了十几毫米。
折腾了一整天,最后我的做法是在FX5U里用PLS(脉冲输出指令)+DPLSY的组合,并且把加减速时间设成0来模拟FX2N的行为。虽然这样伺服起停有冲击,但客户原来那个机械结构就那个水平,加个软启动反而是画蛇添足。
四、第四关:扫描周期变了,逻辑时序乱了
FX2N的扫描周期大概十几毫秒,FX5U跑得快多了,同一条程序扫描周期只有两三毫秒。听起来是好事对吧?但问题出在一些依赖时间的逻辑上。
原来的程序里有一段”防抖动”逻辑,用了两个定时器的差值来做延迟判断——T0和T1的差值来判断某个信号持续了多长时间。FX2N跑的时候T0和T1因为扫描周期长,计时精度低,反而刚好满足防抖需求。换了FX5U后扫描周期快了五六倍,同样的定时器差值逻辑完全失效,导致一个到位信号老是误触发。
最后我把那段逻辑重写成了用M8012(100ms时钟脉冲)来采样,做了个三次确认的软件防抖程序,才算解决。
五、第五关:现场调试——改完程序发现气缸跑反了
把所有程序移植完、编译通过、下载到FX5U,满心欢喜按了启动按钮——结果第一个气缸就给我表演了反向运动,夹具直接往反方向顶过去了。赶紧拍急停,场面一度非常尴尬。
排查了半天发现原因是FX2N和FX5U的晶体管输出内部电路极性有差异。FX2N的某个Y点输出是NPN型接法,FX5U的对应点是漏型/源型可配置。原来的NPN传感器接法在FX2N上是对的,到FX5U上因为输出模块的类型配置不一样,电磁阀的线圈方向反了。
这个其实在硬件设计阶段就应该发现的。但我当时图省事,想着I/O表一对一复制过去就行了,没仔细看输出模块的规格。后来在GX Works3里把输出模块的”输出类型”从”源型”改成”漏型”就解决了。
所以兄弟们,做PLC升级的时候,别光盯着程序,硬件接口的电气参数也必须重新对一遍。
六、总结几点经验
- 读程序前先确认硬件接口——老PLC的通讯口状态、I/O模块型号、特殊模块版本,这些基础信息不搞清楚,后面全白干
- 一定要做注释——花一天加注释,能省调试时三天的时间
- 指令差异看手册——别靠经验猜,三菱的指令集在不同系列之间差异比你想象的大
- 留好调试时间——程序移植看起来是”复制粘贴”的活儿,实际上改动量可能占30%-50%,交货的时候要给客户打好预防针
这台FX2N最后被我带回家了,擦干净装了个框放在书架上当纪念。干了十多年工控,看着一个时代慢慢过去,也挺感慨的。
你们有接过老设备升级的项目吗?遇到过什么奇葩的坑?评论区交流一下,大家一起长经验。