多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

三菱Q系列+FX系列多站PLC分布式控制方案:CC-Link组网与调试实践

三菱Q系列+FX系列多站PLC分布式控制方案:CC-Link组网与调试实践 在自动化设备里遇到“三菱Q系列程序主站Q02UCPUFX3U-128MFX3S-14MFX3U-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-BDFX3U-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时应该是满量程偏了就用实际读值调整偏置增益。程序里再做一道保险采集值连续几次超出正常物理范围就报警而不是直接参与控制。比如温度信号读到-300012位原始值明显不合理直接用上次有效值并报传感器断线故障。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侧扩展以太网模块就能直接对接底层数据都不用动。这个方向扩展起来也很方便遇到类似的分布式控制需求照着这个架构搭基本不会有大问题。
返回列表