『7x24小时有问必答』
去年在苏州一个新能源电池线,8台iQ-R CPU通过CC-Link IE TSN组网,我拍胸脯说“1ms同步没问题”。结果一上电,数据从站1传到站8,延迟足足200ms——整条涂布机像得了帕金森,产品厚度偏差直接超标。排查三天,最后发现是分布式设计的“境界”没到:我还在第三层,却妄想实现第七层的效果。
后来我把分布式系统设计拆成8个层级,逐一吃透三菱iQ-R的通信协议和架构。今天把这套模板扔出来——你对照看看,现在卡在第几层?

第一层:独立单机——你以为的“分布式”多半是伪需求

痛点
:买8台CPU当8个独立PLC用,IO线拉得像蜘蛛网。   
实际
:一台iQ-R CPU(比如R08CPU)带4个远程IO站(CC-Link IE Field Basic),扫描周期完全够用,成本省40%。
知识点1:分布式不是越多CPU越好,而是数据流决定架构。当站间传输量低于100字/ms,单CPU+远程站比多CPU+网络更稳定。
数据:某包装线案例——单机方案扫描时间2.3ms,多CPU方案因站间握手延迟,扫描时间飙到8.7ms(实测)。

第二层:总线耦合——CC-Link IE Field Basic的“拨号上网”式连接

你以为
:一根网线连起来就能实时交互。   
实际上
:Basic模式本质是循环通信,节点越多,刷新周期线性增长。   
公式
:刷新周期(μs)≈ 16
节点数 + 0.5
总数据量(字节)   
一个32节点、每站64字节的系统,理论周期≈ 1632 + 0.532*64 = 1536μs = 1.5ms。但实测会因为CPU扫描时间叠加,往往翻倍。
代码1:GX Works3 网络参数配置核心片段(Basic模式)
// 主站设置(无需写代码,通过配置完成,但这里模拟参数)
// 实际在"网络参数"->"CC-Link IE Field Basic"中设置
// 设定站号、传输字节数
// 注意:远程站的数据刷新在END处理中自动进行
// 若需手动控制刷新周期,可在扫描时间的“恒定周期”中设定
// 建议:当节点>16时,改用TSN模式
踩坑
:Basic模式下,CPU扫描时间必须大于网络刷新周期,否则数据会错位。我见过有人把扫描时间设成0.5ms,结果网络数据包还没送完,CPU就读取了旧值——位置偏差累计到20mm。

第三层:网络互联——CC-Link IE TSN的“光纤级”实时性

这才是真正可以谈“分布式协同”的起点
。TSN(时间敏感网络)让所有节点共享同一个时钟基准(IEEE 1588v2),抖动小于1μs。   
对比
特性Basic模式TSN模式
刷新周期最小1ms(实际)31.25μs(理论)
时钟同步精度±100ns
最多节点64128
数据一致性无保证支持Cycle & Hold(同步冻结)
知识点2:Cycle & Hold
——当某个站通信失败,所有站的数据保持上一周期冻结状态,直到故障恢复。这个特性让多轴同步不会因为一个节点抖动就全线停机。
代码2:TSN模式下配置同步定时器(GX Works3参数片断)
// 在"网络参数"->"CC-Link IE TSN"中设置同步周期
// 同步周期: 500μs (500微秒)
// 此时所有站点的输入输出在同一时刻采样
// 需要启用"同步通信"和"循环数据冻结"
// 此时CPU的恒定周期中断可设为500μs,实现真正的同步控制
// 注意:中断程序不能在扫描时间内执行,否则会丢步

第四层:数据同步——用SLMP把8台CPU变成“分布式内存”

当每台CPU都有自己的控制逻辑,但需要交换中间结果时,SLMP(三菱简单通信协议)是神器。它允许你像读写本地寄存器一样读写远程CPU的数据,延迟仅几微秒。
代码3:R08CPU通过SLMP读取远程站D100(步进梯形图语言)
// 使用SLMP_READ功能块(系统库中调用)
// 假设远程站IP: 192.168.3.10,端口号: 5000
// 读取远程站D100开始的10个字到本地D200
bOk := SLMP_READ(
IP_ADDR := CStringToIP("192.168.3.10"),
PORT := 5000,
DEVICE := "D100",
DEVICE_NUM := 10,
DEST := "D200",
TIMEOUT := 500);  // 500ms超时
IF NOT bOk THEN
// 失败处理:置报警、记录日志
B_ALM := TRUE;
END_IF;
知识点3:SLMP的“伪共享内存”陷阱
——远程读写看似简单,但
不能
用于高速同步。实测单次SLMP命令耗时约200μs,10字读取没问题,但如果每扫描周期都读写,CPU扫描时间会膨胀。   
正确方案
:对于周期小于1ms的同步,必须用TSN循环通信;对于非实时数据(配方、状态),才用SLMP。

第五层:时间同步——IEEE 1588v2不止是“对时”

你以为时间同步只是让所有PLC的时钟一样?错了。在iQ-R中,时间同步是事件顺序记录(SOE)的基础。当故障发生时,你能精确到纳秒级知道哪台设备先跳闸。
数据:某汽车焊装线,10台R08CPU通过TSN同步,SOE分辨率±500ns。之前用Basic模式,SOE误差达到50ms——根本无法判断是传感器坏还是逻辑错。
配置要点
必须选用支持TSN的交换机(三菱推荐NZ2EX系列)
主时钟(Grandmaster)设为环网管理站
每个从站的“时钟同步偏移”要校准(在GX Works3的“系统监视”里查看)

第六层:冗余设计——不是双倍硬件就够

你以为
:两台CPU做主备,网络双链路,万事大吉。   
实际上
:冗余的难点在数据一致性——切换时保证输出不跳变。
iQ-R的CPU冗余(R12CCPU-V)支持热备,但要求:
两CPU之间的跟踪数据必须一致(通过专用光纤同步)
网络冗余用MRP(介质冗余协议),切换时间<20ms
重点:控制程序必须写成“无状态”或“状态恢复”模式,否则切换后输出会复位。
代码4:冗余模式下的初始化状态恢复
// 上电或切换时,读取冗余跟踪数据中的最后状态
// 使用系统函数 RD_REDUND_DATA
IF NOT bIsPrimary THEN
// 备份CPU:不执行输出,只同步数据
// 从跟踪区读取主CPU的最新运动位置
dCurPos := RD_REDUND_DATA('POS', SIZE := 8);
// 将位置赋值给本地轴,不执行运动指令
Axis.Position := dCurPos;
END_IF;
经验
:冗余系统调试时,建议先做“手动切换测试”——拔掉主CPU网线,观察备份CPU接管后是否有瞬跳。我见过有的项目切换后输出掉了0.5秒,产品已经废了。

第七层:协同控制——8台CPU如同一台巨型PLC

当系统达到这一层,站间通信延迟可以忽略,你可以在任何一台CPU中调用远程IO的数据,就像本地IO一样。用三菱的“分布式CPU连接(DCPLC)”功能,各CPU之间建立映射表。
知识点4:DCPLC映射
——在GX Works3的“工程”->“CPU组”中,将多台CPU加入同一个组。然后可以把远程CPU的D区映射到本地,读取时自动触发通信。这比SLMP更高效(集成在END处理中)。
数据对比
:某锂电卷绕机,8台CPU通过DCPLC实现凸轮同步,站间延迟小于扫描周期的5%(扫描2ms,延迟<100μs)。如果用SLMP,延迟会达到500μs-1ms。
注意
:DCPLC最多支持16台CPU,且所有CPU必须在同一子网内。

第八层:自优化与边缘决策——把你的PLC变成“分布式大脑”

这层是未来方向,iQ-R已支持边缘计算模块(比如MELSEC iQ-R 边缘计算模块NZ2FT-32)。你可以把机器学习模型(如异常检测)部署在边缘模块上,当某台设备振动超标时,边缘模块直接通过TSN广播给所有PLC,无需经过上位机。
案例
:某大型注塑机,用R32CPU+边缘模块,在线分析液压油温度变化率,提前1秒预测油封失效,并将减速指令广播到所有辅机。   
与传统方案对比:传统需要把数据发到PC,PC计算后再返回,延迟~200ms;边缘模块直接计算+广播,延迟<10ms。
代码5(伪码)
# 边缘模块上运行的Python脚本(三菱边缘模块支持Python)

监测某轴电流的突变率

current = read_cc_link_data('ST1.CURRENT', 100ms)
delta = current - last_current
if abs(delta) > 10:  # 单位A
# 广播报警码给所有CPU
send_cc_link_data('ALM.CODE', 0x1234, broadcast=True)

你到了第几层?

我当初卡在第三层,以为能处理第七层的事情。现在总结出分布式架构检查清单(一共10条,我列最重要的5条):
[ ] 是否明确这是真分布式需求(数据流 > 100字/ms且站间距>50m?否则用单机+远程IO)
[ ] 网络选型:TSN还是Basic?根据节点数和实时性要求填表计算(提供Excel公式:周期=16N+0.5D)
[ ] 时间同步:是否配置了IEEE 1588v2?SOE分辨率要求多少?
[ ] 冗余:是否用了“无状态”编程?切换测试做了吗?
[ ] 数据同步:关键实时数据是否走TSN循环?非实时是否用SLMP?
互动
:你在调试分布式系统时,踩过最深的坑是什么?是同步延迟还是数据错位?评论区分享,我帮你分析属于第几层的问题。下期我写《iQ-R TSN网络调试的7个死亡陷阱》,想看的人多就发车。
推荐阅读
摘要:今天深入学习静态代码分析技术,这是安全审计的核心技能。从 Python AST 模块到检测模式设计,收获满满!
发布于 202603
01-Python 环境搭建与第一个脚本
发布于 202603
【优化】Python代码优化与调试技巧
发布于 202603
KEYWORDS
PLC, GX Works, MELSEC, 三菱, 梯形图
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码