在自动化设备里遇到“三菱Q系列程序,主站Q02UCPU+FX3U-128M+FX3S-14M+FX3U-4AD”这套配置,其实是一个很典型的分布式控制场景:Q系列做主站统筹全局,FX系列拆到现场去干活。我最近做完的一个项目就是这种结构,今天把整个系统的搭建思路、通信配置、程序编写和调试排查完整捋一遍,给正准备做三菱PLC多站控制的朋友一个可直接参考的落地方案。
这套系统能解决一个很实际的问题:设备分布在好几个工位,每个工位都有自己独立的IO和模拟量采集,但控制逻辑必须集中在一处处理。FX3U-128M负责一个128点的大工位,FX3S-14M管一个小工位,FX3U-4AD采集4路模拟量信号,最后全部汇聚到Q02UCPU做统一调度。如果你也遇到类似的多站点集中控制需求,这篇内容应该能帮你少走不少弯路。
1. 整体架构与选型思路
1.1 这套系统为什么这样组网
先讲清楚拓扑关系。Q02UCPU作为控制核心,它本身不带总线接口,所以必须在主站底板上配一个CC-Link主站模块,我用的是QJ61BT11N。FX3U-128M那边通过FX3U-16CCL-M从站模块挂到CC-Link总线上,FX3U-4AD模拟量模块则直接扩展在FX3U-128M的右侧总线上。
关键点在这里:FX3S-14M不能直接挂FX3U-16CCL-M。因为FX3S系列本体没有右侧扩展总线,装不了CC-Link从站模块。实际项目里我让FX3S-14M加一块FX3U-485-BD通信扩展板,通过RS-485线和FX3U-128M做无协议通信,再由FX3U-128M把FX3S的数据统一映射到CC-Link网络上。这样对主站来说,FX3S的数据就像从站数据一样可读,只是逻辑上隔了一层。
这种组网方式的好处是成本合理、层次清晰。主站只面对一个通信协议,从站内部怎么拆分是局部问题,后续想要增加工位,也只需要在总线上再挂一个从站节点。
1.2 各模块选型的实际考量
选Q02UCPU而不是性能更高的Q03/Q04,主要是看项目规模。这套系统没有太复杂的运动控制和高速中断需求,Q02U的程序容量和指令处理速度足够。它在三菱Q系列里属于性价比很高的基础型CPU,扩展能力强,GX Works2全系列支持,调试方便。
FX3U-128M选128点是因为那个工位的DI/DO加起来刚好够用。FX3U系列是三菱FX家族里扩展性最好的,可以带右侧智能模块,FX3U-4AD就是冲着这个来的。FX3U-4AD是4通道模拟量输入模块,12位分辨率,支持0到10V、0到5V、4到20mA几种输入模式,采集现场的压力、温度、液位这类信号非常常见。
FX3S-14M选它纯粹是小工位控制够用。14点IO,体积小,成本低,做简单逻辑和现场信号采集绰绰有余。它不能扩展右侧模块是一个限制,但配合485通信做桥接,这个限制完全可以绕过去。
1.3 为什么不用全Q系列或全以太网
有人可能会问,干脆全部用Q系列,或者全部用以太网连接不是更统一吗?全Q系列的成本会明显上浮,而且现场工位之间的线缆敷设、安装空间都更适合小体积的FX设备。全以太网方案听起来高级,但PLC之间的以太网通信需要处理IP地址、端口、协议栈,调试复杂度比CC-Link高不少。
CC-Link是三菱现场总线的老牌方案,主从站关系明确、周期性刷新稳定、延迟可控,非常适合这种分布式IO采集和简单控制。用拨码开关设好站号,终端电阻接好,通信基本不闹幺蛾子。对于工业现场,稳定简单往往比技术先进更重要。
2. CC-Link组网实操:从拨码开关到终端电阻
2.1 通信参数怎么定:速率、站号、占用站数
CC-Link组网第一步是确定通信速率。我这套系统现场总距离大约60米,直接用10Mbps。如果距离超过100米,建议降到5Mbps对应160米,2.5Mbps对应400米。注意距离长了速率必须降,这是CC-Link物理层的硬限制,别硬撑。
站号分配上,主站固定是0号站,不需要拨码。从站FX3U-128M那个节点我设为1号站。这个“站号”不是简单的节点编号,还牵扯到占用站数。
打个比方,一个CC-Link站默认对应32点远程IO和4字远程寄存器。如果从站的远程IO点超过32点,就得占用多个站。FX3U-16CCL-M可以根据需求通过拨码设置占用1到4个站。FX3U-128M有128点IO,我给它配置了占用4个站,也就是站号1到4被它占用。这样处理之后,下一个从站节点必须从5号站开始排,不能直接写2号站,否则就会站号冲突。
从站模块上看到了吧,站号拨码和占用站数拨码是两个独立设置,很多人现场调试时只想了站号,忘了占用站数,通信就是通不上。这个点务必记牢。
2.2 硬件接线与抗干扰处理
CC-Link总线用三菱专用的CC-Link电缆,总线两端必须各接一个110欧姆终端电阻。这是最容易被忽略的细节。无论网络里挂了几个站,终端电阻只接在物理两端,中间节点千万不要接。
我在现场遇到过几次找不到原因的通信闪断,最后发现都是施工时把终端电阻接到了中间某个从站上。其实只要按这个原则来:主站端一个,最末端从站一个,中间全部直通,就不会有这个问题。
屏蔽层接地也要注意。CC-Link电缆的屏蔽层应该在主站侧做单点接地,不要在每个站点都接地,多点接地会形成地环路,反而引入干扰。模拟量信号线要避开动力线缆,至少保持20厘米以上的间距,实在避不开就穿金属管屏蔽。
2.3 FX3S-14M为什么走了485桥接
这个前面提过,但我要再展开讲一下。FX3S系列是三菱FX家族里的低端型号,本体右侧没有扩展插槽,所有智能模块都装不上。所以现场如果写了FX3S-14M还要让主站能读到它,最合理的方案就是让FX3U-128M当二传手。
具体硬件连接是:FX3S-14M左侧加一块FX3U-485-BD,FX3U-128M本体的通信口也接一块485-BD,两块板子之间用双绞屏蔽线连接,波特率9600,两线制半双工。FX3U-128M做485主站,轮询FX3S-14M,取回来的数据存入D区,再通过CC-Link的远程寄存器映射给Q02UCPU。
这样做的代价是FX3S的数据实时性会比直接挂总线稍差一个轮询周期,但小工位信号变化没那么快,完全够用。如果以后现场要求FX3S直接接入CC-Link,最干脆的办法是把这个节点换成FX3U系列本体,一劳永逸。
3. 主站Q02UCPU程序设计:刷新区与读写逻辑
3.1 GX Works2里的主站参数配置
主站程序在GX Works2里做。新建工程选择Q02UCPU,然后添加QJ61BT11N的智能功能模块参数。进入模块参数界面后,重点设置三块内容:通信速率、总站数和自动刷新映射。
通信速率要和从站一致,设置成10Mbps。总站数填写网络里所有从站占用的总站数之和。我这套系统里FX3U-128M的节点占用了4个站,另外一个远程IO节点占1个站,所以总站数填5。注意这里填的是“总占用站数”,不是“从站个数”,千万别填成2。
自动刷新映射是主站和从站数据交换的通道。我给这套系统分配的是:主站输出区RY映射到M100开始的软元件区,主站输入区RX映射到M200开始;远程寄存器RWw映射到D100开始,RWr映射到D150开始。分配好之后,主站程序直接读写这些M区和D区,就等于在读写从站的数据。
3.2 自动刷新和FROM/TO怎么取舍
CC-Link主站读写数据有两种方式:一种是参数里配置自动刷新,让模块周期性把数据拷贝到软元件区;另一种是在程序里用FROM/TO指令手动读写缓冲存储器。这两种方式各有各的适用场景。
我习惯优先用自动刷新。原因很简单:少写程序、少出错、扫描周期稳定。所有从站的数据在每一个扫描周期都自动同步到主站D区,程序里当普通软元件用就行。FROM/TO指令适合处理事件型数据读写,比如某一路数据变化时才需要读取,但在CC-Link这种周期性总线上反而体现不出优势。
自动刷新唯一要小心的是软元件区规划不能重叠。我见过有人把两个从站的RWr刷到同一个D区,数据互相覆盖,现场查了很久才找到。建议画一张软元件分配表,每个从站的数据区段固定下来,写清楚起始地址和数据长度,程序里注释也要同步标好。
3.3 主站对模拟量数据的处理
FX3U-4AD通过FX3U-128M转发给主站后,主站拿到的数据是原始数字量。FX3U-4AD是12位分辨率,数字量范围是-2048到+2047。如果采集的是4到20mA电流信号,原始值通常用0到4095或-2048到+2047表示,具体取决于模块参数设置。
主站程序里需要把这些原始值换算成实际工程值。我这里的现场信号是4到20mA对应0到100度温度,那么换算公式就是:
实际温度 = (采集值 - 零点值) × 100 / (满量程值 - 零点值)
我把这个换算逻辑放在主站里,从站只负责把原始值传上来。这样做的考虑是,工程量单位和上下限报警逻辑都由主站统一管理,以后要改量程只需要改主站程序,不用动从站。
主站还要做模拟量超限判断。D150到D153存放四个通道的采集值,程序里用比较指令判断是否超上限或下限,输出报警M区,再通过自动刷新把报警信号发给触摸屏或者联动输出。
4. 从站程序设计:FX3U-128M和FX3S-14M分工
4.1 FX3U-128M的从站映射与模拟量采集
FX3U-128M这边的程序分两部分:一部分是FX3U-16CCL-M的从站参数配置,另一部分是FX3U-4AD的采集读写。
FX3U-16CCL-M在GX Works2里需要设置占用站数和远程IO映射。占用站数设成4站,远程输入输出点数和远程寄存器字数按默认配置。映射关系上,我习惯把主站来的RY映射到M区而不是直接映射到本体X区,因为直接映射X区很容易和本体的硬件IO地址冲突。程序里再用M区的中间变量去驱动真实的Y输出。
FX3U-4AD是特殊功能模块,通过FROM/TO指令读写。它的缓冲存储器BFM编号很关键,CH1到CH4的当前值分别在BFM#0到BFM#3,模拟量输入模式用BFM#20配置。比如我想让四个通道都工作在4到20mA模式,就往BFM#20写入H0000,同时把每个通道的偏置增益设定好。
从站程序里写一个FROM指令把BFM#0到#3的数据一次性读出来,存到D100到D103,再通过CC-Link自动刷新映射发到主站。采集周期要设置合理,FX3U-4AD的A/D转换需要时间,程序中加一个定时脉冲触发FROM指令即可,没必要每个扫描周期都读。
4.2 FX3S-14M的RS-485通信程序
FX3S-14M的程序主要是做485从站响应和本工位逻辑。无协议通信模式下,FX3U-128M作为主站发送请求帧,FX3S收到后返回数据帧。帧格式我用的是最简单的固定长度报文:帧头+站号+命令+数据区+校验和。
FX3S侧程序用RS指令接收数据,收到后先解析站号是否匹配,再校验数据和校验和,校验通过就把数据区内容更新到PLC内部D区,同时把需要上报的现场IO状态打包成发送帧。
这里有个很实用的经验:无协议通信的帧发送间隔不要设置得太密。我设置FX3U-128M每隔200毫秒轮询一次FX3S,用了两年多一直很稳定。如果缩短到50毫秒,偶尔会出现帧冲突或超时误报警,因为在嵌入式串口处理上FX3S接收缓冲区不大,处理不过来。
4.3 从站侧的数据可靠性设计
从站不能只是被动传数据,还要考虑通信中断后的安全状态。我至少会在每个从站里做两个保护逻辑。
第一是输出安全值。从站PLC检测到CC-Link通信断开时,自动把所有远程输出对应的中间变量清零,防止现场设备继续保持动作。这个逻辑放在从站程序的末尾,用主站心跳信号控制。主站每隔一秒钟翻转一次某个M区的位,从站检测到这个位超过两秒没有变化,就判断通信异常,立即切断输出。
第二是485链路异常处理。FX3S收到错误帧或连续多次轮询无响应时,把通信故障标志置位,同时保持上一次的有效输出状态,而不是直接清零。因为485短时干扰恢复很快,贸然清零现场设备反而会造成不必要的停机。故障持续超过一定时间再执行停机更稳妥。
从站程序里我还会把采集的模拟量做一次限幅滤波。移动平均窗口取5次采样,适当平滑信号,既能抑制噪声,又不会明显滞后。这比在主站做滤波更有效,因为减少了无效数据占用的总线带宽。
5. 现场调试与故障排查实录
5.1 CC-Link连不上,先从这几个灯看
CC-Link通讯出问题时,第一个动作是看主站和从站模块上的指示灯。QJ61BT11N上的L.RUN亮说明主站通信正常,L.ERR闪烁说明检测到从站故障。FX3U-16CCL-M上也有对应指示灯,POWER亮表示供电正常,L.RUN亮表示已参与数据链接,L.ERR亮或闪烁代表这个站没有在网络上。
我调过的最头疼一个问题是某个从站L.RUN一直不亮。查了站号拨码、终端电阻、通信速率,全部正常,最后发现是模块上的通信速率拨码和主站设置不一致。有些FX3U的CC-Link模块上有通信速率设定开关,必须手动拨到位。
还有一种情况很隐蔽:从站模块的“占用站数”拨码设成了4站,但主站那边的“总站数”参数只填了2个站,导致主站认为总线上只有2个站,后面几个站的地址成了未定义区域,通信就建立不起来。改主站参数把总站数改成5,重启后立刻恢复。
5.2 模拟量跳变和偏移的常见原因
FX3U-4AD采集的模拟量信号如果出现跳变,先检查信号线和动力线是不是走了一个线槽。工业现场电磁干扰是最常见的模拟量杀手,信号线尽量用屏蔽双绞线,屏蔽层只在PLC侧单端接地。
偏移问题则多半出在偏置增益设置上。4到20mA信号的零点偏置如果没设对,读出来的数值会在量程底部有一段明显偏置。FX3U-4AD的每个通道都可以独立设置偏置和增益,在GX Works2里通过初始化程序写入BFM。建议上电后做一次通道自检:输入4mA时读到的数值应该是零点,输入20mA时应该是满量程,偏了就用实际读值调整偏置增益。
程序里再做一道保险:采集值连续几次超出正常物理范围就报警,而不是直接参与控制。比如温度信号读到-3000(12位原始值),明显不合理,直接用上次有效值并报传感器断线故障。
5.3 从站掉站后的自动恢复
CC-Link总线上如果某个从站断电或线路松动,主站会立刻检测到该站通信断开,对应RX数据全部变为0。如果程序没有处理,主站会把这些0当成真实信号,可能造成设备误动作。
处理办法是在主站程序里检测掉站标志。QJ61BT11N的缓冲存储器里会保存数据链接状态,可以用FROM指令读出来判断哪个站掉线。我在主站里做了掉站处理逻辑:检测到某个从站掉线后,把所有从该站读取的数据保持为掉站前的最后有效值,而不是自然清零,同时输出报警,等从站恢复后自动重新同步。
CC-Link参数里还有一个“自动恢复”选项,我建议勾上。它允许从站从掉站状态自动重新参与数据链接,不需要主站断电重启。现场遇到过从站瞬间掉电又恢复的情况,有了这个功能,整个网络能自动回到正常状态。
5.4 我踩过的一些坑
分享一下这次项目里几个典型的坑。
第一个是CC-Link电缆剥线长度。总线端子压接时,我一开始剥了大概5毫米的线芯,压好后晃几下总觉得松动。后来发现三菱的CC-Link端子对剥线长度比较敏感,少了压不紧,多了会碰到相邻端子。用专用压线钳按线缆规格剥线,压完后用力拉一下确认不会脱出。
第二个坑是GX Works2里自动刷新区和主站程序里手动FROM读取同一个缓冲区。我一开始为了让数据“双保险”,既配了自动刷新又写了FROM指令,结果发现模块缓冲区被两种方式反复操作,某些扫描周期数据会短暂出现旧值。后来统一用自动刷新,去掉手动FROM,问题消失。
第三个坑是485通信线没有做终端匹配。FX3S-14M和FX3U-128M距离只有30米,我以为短距离不需要匹配电阻,结果运行几天后发现偶尔有一次通信超时。后来在485总线两端各接了一个120欧姆电阻,再没出现过。
第四个坑是关于站号文档。现场调试时因为没有及时更新站号分配表,后续有个新同事不知道FX3U-128M占用了4个站,又在5号站位置挂了一个新从站,结果两个节点地址冲突,整个网络全部断掉。按规范维护一张站号占用表,每加一个节点先查表再拨码,能省掉大量排查时间。
我个人在实际操作中的体会是,这套“Q主站+FX从站”的方案,成败往往不在程序写得多花哨,而在于通信规划是否细致。把站号表画清楚、软元件映射表写明白、终端电阻接正确,再配合从站的安全逻辑,系统跑起来会非常省心。后续如果想把触摸屏或上位机接进来,主站Q02UCPU侧扩展以太网模块就能直接对接,底层数据都不用动。这个方向扩展起来也很方便,遇到类似的分布式控制需求,照着这个架构搭基本不会有大问题。