ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

S7-1500R冗余系统组态、SYNCUP同步与主备切换避坑

S7-1500R冗余系统组态、SYNCUP同步与主备切换避坑

简介:面向西门子S7-1500R冗余系统初学者与工控现场调试人员的实战记录文档,以CPU 1513R-1PN搭配ET200SP(IM155-5 PN HF)的完整实验为主线,回答冗余系统从硬件组态到上线运行该如何逐步设置的问题。内容覆盖TIA V15.1/V16软件平台选择、PROFINET X1 P2端口互联与拓扑自动组态、X1接口公共IP与虚拟MAC地址规划、MRP介质冗余角色分配、IO模块版本与看门狗时间因子等参数配置,也记录了155模块在线报错、下载须先停机、备PLC需从STOP切回RUN完成同步等实际排错经验。文件为单个PDF,压缩包约2.12MB,图文结合、按步骤编号,便于对照操作。目前已有2648人学习。读者可据此掌握主备PLC状态判别(P/B显示)、公共参数只需在一侧组态等要点,快速搭建并复现一套可用的冗余环网实验。

1. 两台 1513R 上电,DISPLAY 上一个 P 一个 B,为什么我还不敢交付

两台 CPU 1513R 并排装在 482 mm 导轨上,上电后 DISPLAY 面板一个显示 P、一个显示 B,看起来冗余已经成了。可 ET200SP 那边 IM155-5 的在线诊断里挂着一条红,DQ 模块一个点都不亮。我第一次照着手册把 S7-1500R 冗余系统的组态从头点了一遍,就卡在这条红上耗掉大半天,最后发现原因是机架上有一个基座单元没插到位。这份《冗余系统设置实例》记录的是从硬件清单、设备组态、MRP 环网、系统 IP,一直到主备 SYNCUP 同步的完整一遍,中间踩到的翻车点也都留在里面。适合正在做 S7-1500R 双机热备、被“模块存在但不可用”或“下载按钮是灰的”卡住的一线调试人员,也适合第一次接触冗余组态、想先看清全貌再动手的人。

2. 先把硬件和拓扑定死:1513R 冗余系统的骨架怎么搭

冗余系统出问题,八成不是程序写错,而是骨架没对齐——设备版本、拓扑连线、IO 模块固件这三样里任意一样和组态不一致,编译能过、下载能过,运行起来照样报错。所以现场我一般先不打开程序块,而是把清单、拓扑、版本三件事挨个核对一遍,再谈参数。

2.1 一份清单定生死:六类硬件和它们在系统里的位置

这次实验用的硬件不多,但每一件都卡着冗余能不能成立。清单如下,订货号照抄,方便对照实物。

序号设备关键参数订货号数量在冗余系统里的角色
1负载电源PM 190W,120/230 V AC 进,24 V DC / 8 A 出6EP1333-4BA001给两台 CPU 与 IO 供电
2CPUS7-1500R,CPU 1513R-1PN6ES7513-1RL00-0AB02主备一对,构成冗余核心
3存储卡4 MB6ES7954-8LC03-0AA02每台 CPU 一张,不能共用
4安装导轨482 mm,19 英寸机柜用6ES7590-1AE80-0AA01两台 CPU 并排安装
5接口模块IM 155-5 PN HF6ES7155-5AA00-0AC01ET200SP 站挂环网
6数字量输出DQ 8×24 VDC / 0.5 A HF6ES7522-5FF00-0AB01验证输出是否真能带负载

有几个点容易被忽略。存储卡必须一台 CPU 一张,冗余系统的主备同步是靠备机自己的卡落地程序的,共用一张物理上就做不到。电源只配了一台,是因为 1513R 本体功耗不高,190 W 主要留给 IO 和外围;但真上产线,我都会配双电源加冗余模块,单电源在热备系统里等于留了个单点。导轨选 482 mm 是机柜宽度决定的,两台 CPU 并排加一个 ET200SP 接口模块,位置要提前排,别等装上去才发现 IO 模块没地方插。

2.2 拓扑视图里的 X1 P2:组态画什么,线上就得连什么

在 TIA Portal 里把两台 1513R 拖进项目,拓扑视图会自动生成两个 CPU 之间 PROFINET X1 的 P2 端口互联。这个自动生成的连线不是画着好看的,它描述的是“我期望的物理连接方式”,实际网线必须一一对应,否则 MRP 环网在逻辑上就不闭环,后面的主备同步根本起不来。

我一般会做一张纸面拓扑:PLC1 的 X1 P1 去交换机,X1 P2 直连 PLC2 的 X1 P2;PLC2 的 X1 P1 也回交换机,形成环。接完线拿万用表或者直接看端口指示灯确认两端都 link up,再回组态里比对一遍拓扑视图。现场最常见的翻车是“交换机上乱插”,把本该系统直连的两个 P2 端口都插到交换机上,环是通了,但和拓扑视图对不上,编译不报错,运行起来 SYNCUP 一直不结束。

顺带说一句,这台设备如果是复用旧硬件,拓扑视图里的端口互联可能还留着上一套系统的痕迹,一定要手动点开确认,别默认它是对的。

2.3 版本号先对齐:TIA V16 与 IO 模块 V4.2

S7-1500R 冗余系统支持的软件平台是 TIA V15.1 或 V16,这次用的是 V16。软件版本不是随便挑的,工程里加 CPU 的时候要选对设备版本号:全新设备可以按实物固件选,但如果是组态过的旧硬件,TIA 里的设备版本必须和实物固件一致,否则编译就过不去,或者下载到一半报设备不匹配。

IO 侧还有一条更硬的限制:ET200SP 的 IM155-5 以及挂在它下面的 IO 模块,版本必须高于 V4.2,才支持冗余环网这套玩法。低于这个版本的模块,在硬件目录里能拖进来,组态也能编译,但一上电就报错。我见过有人为了省事从旧项目里复制了一个 IM155-5,版本还停在早期,怎么查都查不出原因,最后把模块固件升级才解决。

所以我的顺序是:先确认 TIA 版本 → 再确认两台 CPU 的固件与设备版本 → 再逐个确认 IO 模块版本 → 最后才动手组态。顺序反了,后面每一处报错都要重新怀疑一遍。

2.4 交换机与环网:普通千兆交换机够用,但别让它插一脚

这次实验用的是一台普通千兆交换机,加一台工业路由器做远程维护口。冗余系统的 MRP 环网是 PLC 自己管的,交换机在这个环里只负责透传,不需要支持什么环网协议。

坑在于:很多管理型交换机默认开着生成树协议(STP/RSTP)。生成树一介入,就会把环网里的某条链路逻辑上阻塞掉,PLC 眼里的环就不闭环了,主备同步直接卡死。如果现场必须用管理型交换机,记得把接冗余环的那几个端口上的生成树关掉,或者干脆换非管理型交换机。这一条我在后面避坑章节还会再提一次,因为它的现象和“网线没插好”几乎一模一样,非常能骗人。

3. 把参数落到数字:系统 IP、MRP 角色与 112 倍看门狗

骨架对了,接下来就是把每一个能填数字的地方填对。冗余系统的参数有个特点:大部分是“默认值就够”,但少数几个数字一旦填错,系统会在你以为成功之后才翻脸。这一章把 IP、MRP 角色、看门狗因子这三个必须落到具体数字的地方拆开讲。

3.1 两个 X1 IP 和一个系统 IP:谁在跟谁切

X1 接口的 IP 是每台 CPU 自己的地址,这次 PLC1 的 X1 是 192.168.18.10,PLC2 的 X1 是 192.168.18.12。这两个地址是“单机地址”,只代表这台 CPU 本身。

真正给上位机和 IO 通信用的,是系统 IP。系统 IP 是两台 CPU 的公共参数,通信时通过它始终访问到当前的主 PLC——主机切走了,系统 IP 跟着走。组态的时候,系统 IP 和虚拟 MAC 地址只需要在其中一台 PLC 的设备组里设置,另一台会自动同步,不用重复填。

虚拟 MAC 有一条必须满足的要求:整个以太网广播域里所有 MAC 地址唯一。这个“广播域”比很多人理解的大,凡是二层能通到的地方都算,包括你接在同一台交换机上的其他 PROFINET 设备。我一般会给冗余系统单独划一段地址,别和办公网、其他产线混在一个广播域里。

参数位置本次取值说明
PLC1 X1 IPPLC_1 的 PROFINET 接口192.168.18.10单机地址,仅代表这台 CPU
PLC2 X1 IPPLC_2 的 PROFINET 接口192.168.18.12同上
系统 IP冗余系统公共参数采用默认值通信始终指向当前主 PLC
虚拟 MAC冗余系统公共参数默认生成广播域内必须唯一
子网掩码两台一致255.255.255.0必须同网段

3.2 MRP 角色对照:PLC 是管理员,ET200SP 必须改成客户端

介质冗余(MRP)这一块,两台 CPU 的默认角色是“管理员(自动)”,不需要改,直接用默认值就行。真正要动手的是 ET200SP:在 IM155-5 的高级选项里,把“介质冗余”下的“介质冗余角色”从默认值改成“客户端”。

这个改动看起来只是一行下拉框,意义却很大:管理员负责发起环网检测和切换,客户端只是环上的一个节点,跟着管理员的节奏走。如果 IO 设备也留成管理员,环上就有三个管理员,MRP 报文互相打架,表现就是网络时通时断、IO 偶尔掉站,而且这种故障没有固定规律,特别难查。

组态顺序上还有一条:把 ET200SP 加进来之后,要右键那个“未分配”,选择“分配给新 IO 控制器”,在弹出的窗口里同时勾选两台冗余 CPU。只勾一台的话,系统会退化成单机带 IO,冗余名存实亡。

3.3 更新时间 2 ms 与看门狗因子 112:为什么必须大于 111

PROFINET 的实时参数在 IM155-5 属性里的“实时设定”窗口设置。更新时间可以选自动,也可以手动固定;这次手动定在 2 ms。

看门狗时间因子是更新时间的倍数,也就是 IO 设备能容忍的“多久没收到报文就认为掉站”。冗余系统对它有硬性要求:当更新时间为 2 ms 时,看门狗时间因子必须大于 111,本次设为 112。算一下就是 2 ms × 112 = 224 ms,这就是切换窗口——主 PLC 挂掉、备 PLC 接管、环网重新收敛,整个过程要在这个时间窗内完成,超了 IO 就判掉站。

为什么不能设小?因为 MRP 环网切换本身要花时间,加上 SYNCUP 期间的报文抖动,因子设到 50、60 这种值,正常运行时看着没事,一旦主机故障,IO 成片掉站,然后你会在日志里看到一堆“看门狗超时”,还以为是网络硬件坏了。反过来也不能无限大,设到几千的话,真掉线了系统要很久才反应过来,等于把故障检测能力废掉。112 这个值是这套配置下的稳妥选择,更新时间和因子要成对看,改了一个另一个得重算。

3.4 公共参数只改一处:设备组态里的“影子同步”

冗余系统有一套“公共参数”机制:系统 IP 地址这类参数,只需要在其中一个 PLC 的设备组里设置,另一个 PLC 的参数会同时更改,不用两边各填一遍。编程相关的内容也一样,程序块只在第一个 PLC 下显示,第二个 PLC 里看不到,因为备机的程序是启动时从主机同步过去的,不需要你单独写。

这条机制的好处是省事,坏处是容易误判。有人在 PLC_2 下面翻半天找不到 OB1,以为组态出错了,其实是正常的。我一般会在项目里做个标注,写清楚“公共参数与程序只在 PLC_1 下维护”,避免交接的时候下一任调试人员重复劳动。

还有一件事要在下载前做完:设备名称。PROFINET 认设备名称不认 IP,IM155-5 的设备名称必须和组态里完全一致,大小写、连字符都算。名称和 IP 可以在在线访问里分配,也可以在组态里预设好再下载,顺序上先分配名称、再分配 IP,反过来的话有时候名称写不进去。

4. 下载与主备切换:为什么备 PLC 的下载按钮是灰的

组态做完、编译通过,接下来是最容易让人怀疑人生的一步:下载。冗余系统的下载逻辑和单机完全不是一回事,很多人第一次点下载,会看到备 PLC 那一栏的“下载”按钮直接是灰的,或者弹出一句“CPU 正处于冗余运行状态”,然后开始怀疑是不是软件版本不对。

4.1 只下载主 PLC:备机的程序是“同步”来的,不是“下载”去的

S7-1500R 通过 PROFINET X1 接口连上之后,会自动确定主备关系。下载窗口里选中备 PLC,下载按钮不可选,这不是 bug,是设计:程序只能下到主 PLC,备 PLC 的组态和程序是在启动时从主 PLC 同步过去的。

所以正确的操作路径是:转至在线 → 在右侧“测试”里把模式改为 STOP → 只对主 PLC 点下载。下载完成后启动 CPU,此时冗余系统工作在单机模式(RUN-Solo),只有主机在跑。

4.2 STOP → 下载 → RUN-Solo → 备机拨 STOP 再 RUN

完整流程我按现场顺序列一下,这几步一步都不能跳:

  1. 确认两台 CPU 都处于 STOP。在线状态下通过“测试”菜单切,不要直接拔电。
  2. 在下载窗口里只勾选主 PLC 的“下载”,备 PLC 的按钮保持灰色,不用管。
  3. 下载完成后把主 PLC 切到 RUN,此时系统状态是 RUN-Solo。
  4. 到机柜前,把备 PLC 硬件上的模式开关先拨到 STOP,停一两秒,再拨到 RUN。
  5. 观察系统状态从 RUN-Solo 进入 SYNCUP,同步完成后变成 RUN-Redundant。

第 4 步是很多人漏掉的:只在软件里改模式不够,备机必须物理拨一次 STOP 再 RUN,才会触发从主机到备机的同步过程。这一步不做,备机永远停在 STOP,系统一直是单机运行,表面上 P/B 显示正常,实际没有冗余。

4.3 SYNCUP 的两个前提:同步连接正常、MRP 环网闭环

主备同步能不能成,卡在两个硬条件上:同步连接正常,以及 MRP 环网处于闭环状态。前者靠两台 CPU 之间那根 X1 P2 直连,后者靠整个环没有断点、也没有被生成树协议逻辑阻塞。

现场排查的顺序我一般是反的:先看环,再看同步连接。因为环断了的时候,同步连接的表现也是“连不上”,容易误导。看环最快的方式是看交换机端口指示灯和 CPU 的 PROFINET 端口灯,两个方向都亮才叫闭环。

还有一个细节:SYNCUP 进行中是不能建立在线连接的。也就是说你在同步的那几秒里去点“转至在线”,会失败,这不是故障。等状态稳定到 RUN-Redundant 再连。

4.4 DISPLAY 上的 P/B 和在线诊断两条路

CPU 1513R 用的是窄屏 DISPLAY 面板,概览页上会显示 P(Primary,主)或 B(Backup,备)。宽屏的 1515R、1517H 显示内容更多,但 P/B 这两个字母的含义一样。

软件侧看状态更全面:选中项目里的冗余系统,点“转至在线”,目录树里两个 PLC 的图标上会直接标出 P 和 B;再看“在线和诊断”窗口,系统状态、配对状态、主备各自的运行状态、主备关系都在里面。默认的“转至在线”连的是主 PLC,够日常调试用;要看备机的诊断,右键冗余系统,选“与备用 PLC 建立在线连接 > 转至在线”。

5. 避坑与排查:五个把我卡住的现场问题

这一章全是血泪经验,每条都按“现象 → 原因 → 解决”写,遇到类似症状可以直接对号入座。

5.1 IM155-5 在线报“模块存在但不可用”,下面挂的 IO 全红

现象:ET200SP 站能连上,CPU 也正常,但 IM155-5 在线诊断里一直报模块存在问题,挂在它下面的 DQ 模块指示灯不亮,输出点全部无效。

原因:机架侧没装到位。这次实验里,IM155-5 下面那一段没有安装扩展基座,接口模块本身插上了,后面的槽位是空的,组态里却按有模块来编译,实际和组态对不上,模块就一直报错。另一条常见原因是 IO 模块固件版本低于 V4.2,不支持冗余环网。

解决:断电,把 ET200SP 的基座单元逐个按到位,听到卡扣声为止;服务器模块不需要在组态里添加,编译时会自动补上,但物理上必须插。上电后进在线诊断,用“在线与实际组态比对”功能看差异,比一个个猜快得多。固件问题就去查模块版本,低于 V4.2 的换掉或升级。

5.2 点下载弹出提示,说 CPU 处于冗余运行状态,下载按钮不可用

现象:下载对话框正常打开,点确认后报错,提示需要切换到 STOP;或者备 PLC 那一栏的下载按钮始终是灰的。

原因:一是系统当前在 RUN-Redundant 下,冗余运行时不允许下载;二是备 PLC 本来就不能单独下载,这是冗余机制决定的,不是权限问题。

解决:先转至在线,在“测试”里把主 PLC 切到 STOP,再下载;备机不用管,它会在主机启动后同步。下载完记得回到 4.2 的流程,把备机物理拨一次 STOP 再 RUN。

5.3 备机拨到 RUN 后一直停在 SYNCUP,同步永远不结束

现象:主机 RUN-Solo,备机开关从 STOP 拨到 RUN,系统状态显示 SYNCUP,等了十几分钟还是同步中,最后超时退回单机。

原因:MRP 环网没闭环。可能是两个 X1 P2 之间的直连线和拓扑视图不一致,可能是环上某一段网线松了,也可能是交换机开了生成树把一条链路阻塞了。少数情况是设备名称没分配,同步连接建不起来。

解决:先看端口指示灯确认环的两个方向都通,再回拓扑视图比对连线;管理型交换机把接环那几个端口的 STP/RSTP 关掉;最后在在线访问里确认 IM155-5 的设备名称已分配且拼写与组态一致。

5.4 下载完成后 CPU 正常,ET200SP 整个站掉线

现象:主 PLC 跑起来了,程序也在执行,但 ET200SP 站整体显示不可用,所有 IO 模块报错。

原因:IM155-5 没有分配设备名称或 IP,或者名称拼错。PROFINET 靠设备名称寻址,名称对不上,CPU 就找不到这个站。名称区分大小写,多一个空格、少一个连字符都算错。

解决:在“在线访问”里找到网卡,扫描可访问节点,对 IM155-5 执行“分配设备名称”,再分配 IP;名称必须和组态里一字不差。分配完断电重启一次 IO 站,比在线反复改更稳。

5.5 复用旧 CPU 组态时编译报错,提示设备版本不一致

现象:从旧项目里复制了一台 1513R 进来,编译直接报错,或者下载到一半提示设备不匹配。

原因:TIA 里的设备版本号和实物固件版本不一致。全新设备可以随便选,组态过的旧硬件必须严格对齐。

解决:看 CPU 正面的订货号和固件标识,或者在线上读取实际固件版本,回组态里把设备版本号改成一致;改动大的话用“替换设备”功能整体替换,比手动改参数可靠。改完重新编译,别急着下载。

6. 上位机侧:用 C# 盯住主备切换的那 200 毫秒

冗余系统组态完,最后一公里通常是上位机。这里有个关键选择:C# 程序连哪个地址?连 PLC1 的 192.168.18.10 就错了——主备一切换,那个地址上的 CPU 变成备机,读不到数据。正确做法是只连系统 IP,让通信跟着主 PLC 漂移。我给系统 IP 单独留了一个地址,比如 192.168.18.20,程序里只认它。

using System; using System.Threading; using Sharp7; // 轻量 S7 通信库,够读 DB 就行 class RedundantReader { // 只连系统 IP:主备切换后它自动指向新的主 PLC private const string SystemIp = "192.168.18.20"; private const int Rack = 0; private const int Slot = 1; // S7-1500 槽号固定为 1 static void Main() { var plc = new S7Client(); var buf = new byte[16]; // DB100 前 16 字节:心跳 + 角色字 while (true) { if (!plc.Connected) { int rc = plc.ConnectTo(SystemIp, Rack, Slot); if (rc != 0) { Console.WriteLine($"连接失败 {plc.ErrorText(rc)},1s 后重试"); Thread.Sleep(1000); continue; } } try { int rc = plc.DBRead(100, 0, buf.Length, buf); if (rc != 0) throw new Exception(plc.ErrorText(rc)); ushort heartbeat = S7.GetWordAt(buf, 0); ushort roleFlag = S7.GetWordAt(buf, 2); // 1=主 2=备 Console.WriteLine($"心跳={heartbeat} 角色={roleFlag}"); } catch (Exception ex) { // 切换瞬间读失败是正常现象,断开重连即可 Console.WriteLine($"读取异常:{ex.Message}"); plc.Disconnect(); } Thread.Sleep(200); // 200ms 轮询,落在 224ms 看门狗窗口内 } } }

几个参数值得说清楚:Rack=0、Slot=1是 S7-1500 的固定寻址;DB100是我在 PLC 侧专门开的诊断块,前两个字放心跳计数和角色标志,主备切换时角色字会翻转,上位机据此判断当前连的是谁;轮询周期 200 ms 略小于看门狗窗口 224 ms,切换期间丢一两帧属于正常,靠重连补上。最忌讳的是把重连做成“失败就退出”,冗余系统的价值恰恰体现在那几百毫秒的抖动里,程序必须自己扛过去。

这套代码我后来在三个项目里复用,思路没变过:连系统 IP、短周期轮询、异常即重连、用角色字做状态确认。从那以后我每次做冗余项目,都会在上位机侧强制走一遍“拔掉主 PLC 网线看切换”的验证,而不是只看 DISPLAY 上的 P/B 就签字。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进