简介面向西门子S7-1500R冗余系统初学者与工控现场调试人员的实战记录文档以CPU 1513R-1PN搭配ET200SPIM155-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 190W120/230 V AC 进24 V DC / 8 A 出6EP1333-4BA001给两台 CPU 与 IO 供电2CPUS7-1500RCPU 1513R-1PN6ES7513-1RL00-0AB02主备一对构成冗余核心3存储卡4 MB6ES7954-8LC03-0AA02每台 CPU 一张不能共用4安装导轨482 mm19 英寸机柜用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 P2PLC2 的 X1 P1 也回交换机形成环。接完线拿万用表或者直接看端口指示灯确认两端都 link up再回组态里比对一遍拓扑视图。现场最常见的翻车是“交换机上乱插”把本该系统直连的两个 P2 端口都插到交换机上环是通了但和拓扑视图对不上编译不报错运行起来 SYNCUP 一直不结束。顺带说一句这台设备如果是复用旧硬件拓扑视图里的端口互联可能还留着上一套系统的痕迹一定要手动点开确认别默认它是对的。2.3 版本号先对齐TIA V16 与 IO 模块 V4.2S7-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.10PLC2 的 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单机地址仅代表这台 CPUPLC2 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为什么必须大于 111PROFINET 的实时参数在 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 认设备名称不认 IPIM155-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完整流程我按现场顺序列一下这几步一步都不能跳确认两台 CPU 都处于 STOP。在线状态下通过“测试”菜单切不要直接拔电。在下载窗口里只勾选主 PLC 的“下载”备 PLC 的按钮保持灰色不用管。下载完成后把主 PLC 切到 RUN此时系统状态是 RUN-Solo。到机柜前把备 PLC 硬件上的模式开关先拨到 STOP停一两秒再拨到 RUN。观察系统状态从 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 面板概览页上会显示 PPrimary主或 BBackup备。宽屏的 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 看门狗窗口内 } } }几个参数值得说清楚Rack0、Slot1是 S7-1500 的固定寻址DB100是我在 PLC 侧专门开的诊断块前两个字放心跳计数和角色标志主备切换时角色字会翻转上位机据此判断当前连的是谁轮询周期 200 ms 略小于看门狗窗口 224 ms切换期间丢一两帧属于正常靠重连补上。最忌讳的是把重连做成“失败就退出”冗余系统的价值恰恰体现在那几百毫秒的抖动里程序必须自己扛过去。这套代码我后来在三个项目里复用思路没变过连系统 IP、短周期轮询、异常即重连、用角色字做状态确认。从那以后我每次做冗余项目都会在上位机侧强制走一遍“拔掉主 PLC 网线看切换”的验证而不是只看 DISPLAY 上的 P/B 就签字。希望帮到你。本文还有配套的精品资源点击获取