ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

博途跨项目组态:PN/PN耦合器实现S7-1200与S7-1500通信

博途跨项目组态:PN/PN耦合器实现S7-1200与S7-1500通信 1. 两个项目组态之间的通信需求是怎么冒出来的做过产线改造的人大概都遇到过这种局面一条老产线上跑着一套S7-1200的控制系统后来新增了一段工艺设备电气负责人选了S7-1500做控制核心两套系统各自独立组态、独立调试本来井水不犯河水。结果工艺上要求新增段必须把几组运行状态、配方参数、联锁信号传给老段老段也要把启停指令和故障复位信号送过去。这时候问题就来了——两个项目文件是分开的硬件组态里各自有各自的PROFINET网络IP地址段甚至可能都不在同一个网段怎么让它们交换数据最直接的想法是把两个PLC接到同一台交换机上走普通的PROFINET IO通信一个做IO控制器另一个做IO设备。但这里有个现实障碍S7-1200和S7-1500在同一个PROFINET网络中做IO通信时智能设备I-Device功能虽然可用但它要求两个PLC在同一个项目中组态或者至少需要把其中一个站作为智能设备导出GSD文件再导入另一个项目。跨项目组态的情况下I-Device的组态步骤会变得比较绕而且一旦涉及两个不同工程师维护的项目文件后续修改和版本管理容易出乱子。PN/PN耦合器就是为这种场景准备的。它本质上是两个PROFINET IO设备背靠背装在一个模块里两侧各自独立分别作为两个PROFINET网络中的IO设备存在。左侧网络里的控制器把它当作一个普通IO设备右侧网络里的控制器也把它当作一个普通IO设备而耦合器内部把两侧的输入输出数据做映射交换。两个PLC不需要在同一个项目中不需要知道对方的存在各自按照自己项目里的GSD组态去读写耦合器的IO区域就行。这个方案的好处是解耦彻底两个项目组态完全独立IP地址、设备名称、网络拓扑互不干扰后期任何一侧改程序、改硬件只要耦合器的IO映射区域不变另一侧基本不用动。这篇文章面向的是已经有一定博途使用基础、做过PROFINET IO组态的电气工程师和调试人员。我会把PN/PN耦合器从选型、GSD导入、两侧组态、IO映射、下载调试到常见报错排查的完整链路讲清楚重点放在跨项目组态这个特定场景下容易踩的坑以及实际调试中怎么快速定位问题。文章里涉及的操作基于博途V16及以上版本的界面逻辑不同版本菜单文字可能略有差异但核心思路一致。2. PN/PN耦合器的硬件形态与数据交换原理2.1 耦合器到底长什么样、有几种型号PN/PN耦合器在西门子的产品线里是一个独立的模块常见型号是6ES7158-3AD10-0XA0后来有更新版本6ES7158-3AD10-0XA1。它的物理形态是一个类似ET200S风格的模块但没有背板总线两侧各有一个PROFINET接口通常标为X1和X2。X1侧连接第一个PROFINET网络X2侧连接第二个PROFINET网络。每个接口都是标准的RJ45或M12接口支持100Mbps全双工。从供电角度看耦合器需要24V直流电源通常从一侧或两侧同时供电都可以具体看手册的电源冗余说明。实际项目中我一般建议两侧都接24V虽然单侧供电也能工作但一旦供电侧掉电整个耦合器就断了两侧通信全丢。两侧都供电的话至少一侧电源故障时还有机会维持另一侧的通信当然这取决于内部电源切换逻辑具体以手册为准。模块上会有几个LED指示灯P1和P2分别对应两个端口的链路状态BF灯是总线故障指示还有电源指示灯。调试时这几个灯的状态是判断问题的最快入口后面排查章节会详细说。2.2 两侧数据是怎么映射和交换的PN/PN耦合器的核心机制是内部有一块共享的IO数据区两侧的PROFINET接口各自把这块区域映射成自己的输入和输出。举个例子假设你在耦合器里组态了16字节的传输区那么对于X1侧的控制器来说这16字节可以配置成它的输出控制器写到耦合器同时对于X2侧的控制器来说这16字节就是它的输入从耦合器读。反过来也一样X2侧控制器写的数据会出现在X1侧控制器的输入区。这里的关键点是耦合器本身不做任何逻辑运算它就是一个数据搬运工。你在博途里组态的传输区大小和方向决定了数据从哪一侧进、从哪一侧出。两侧的组态必须匹配——X1侧组态了16字节输出X2侧就必须组态对应的16字节输入否则数据对不上。传输区的数据一致性也有讲究。对于小于等于4字节的数据PROFINET通常保证整个字的原子性超过4字节的可能需要用一致性数据块或者拆分传输来保证数据完整性。实际项目中如果传输的是浮点数或双字建议把传输区按4字节对齐避免出现半更新状态。这个细节在调试时如果忽略可能会看到数据偶尔跳变。2.3 为什么跨项目组态时它比I-Device更省事I-Device方案要求两个PLC在同一个博途项目里或者通过GSD文件把智能设备导出再导入。跨项目时导出GSD文件这一步就带来版本管理问题如果一侧改了IO配置GSD文件要重新导出、重新导入另一侧两个工程师之间的协作成本很高。而且I-Device的传输区是在智能设备的组态里定义的修改时两边都要动。PN/PN耦合器则把这个问题隔离了。两个项目各自独立各自在硬件目录里找到耦合器的GSD文件各自组态自己那一侧的IO区域。只要双方约定好传输区的大小和数据类型比如“X1侧输出16字节给X2侧X2侧输出8字节给X1侧”那么两个项目可以完全独立地开发、下载、调试。耦合器内部的映射是硬件固定的不需要软件干预。这种解耦在多方协作、设备分标段采购的项目里优势非常明显。3. 跨项目组态前的准备工作与GSD文件处理3.1 确认固件版本与博途版本的匹配关系PN/PN耦合器的GSD文件版本和模块固件版本是有对应关系的。博途的硬件目录里可能已经内置了某些版本的耦合器但如果你手上的模块固件比较新内置目录里可能没有对应条目需要从西门子官网下载最新的GSDML文件。我遇到过的情况是模块是较新的固件博途V15内置目录里只有旧版本组态后下载报错提示设备类型不匹配。解决办法就是去下载对应固件版本的GSDML文件手动安装到博途里。安装GSD文件的路径在博途的“选项”菜单里找到“管理通用站描述文件”这一项选择GSDML文件所在目录勾选后安装。安装完成后硬件目录的“其他现场设备”下面会出现对应的耦合器条目。注意安装GSD文件后需要重启博途或者至少刷新硬件目录否则可能看不到新条目。3.2 两个项目分别需要做什么准备在开始组态之前两个项目的工程师需要先对齐几个关键信息这些信息如果不对齐后面调试会非常痛苦对齐项说明常见错误传输区大小双方约定X1到X2、X2到X1各多少字节一侧组态16字节另一侧组态8字节数据错位数据类型传输的是字节、字还是双字是否需要一致性浮点数未按4字节对齐数据跳变设备名称耦合器两侧的设备名称分别是什么两侧名称冲突或未分配IP地址两侧接口各自的IP地址和子网掩码IP不在同一网段导致无法连接更新时间PROFINET的更新时间设置一侧设1ms另一侧设8ms通信不稳定这些信息建议在项目开始前用一张表格确认清楚双方签字或邮件确认。实际项目中我见过因为传输区大小没对齐调试时数据全部错位查了半天才发现是两侧组态不一致。3.3 GSD文件在两侧项目中的安装一致性虽然两个项目是独立的但GSD文件的版本最好保持一致。如果一侧用V2.0的GSD另一侧用V2.1的GSD理论上只要传输区定义兼容通信可以工作但可能会出现一些奇怪的兼容性问题。我的做法是从同一个GSDML文件分别安装到两个项目的博途环境中确保硬件目录里的设备条目完全一致。另外要注意GSD文件安装后在硬件目录里的位置是“其他现场设备 PROFINET IO 网关 SIEMENS AG PN/PN Coupler”。不同版本的GSD文件这个路径可能略有不同但大体结构一致。安装后建议在硬件目录里搜索“PN/PN”快速定位。4. 两侧项目的硬件组态与IO区域映射实操4.1 在第一个项目中添加耦合器并组态X1侧打开第一个项目的博途进入硬件组态界面。从硬件目录里找到PN/PN耦合器拖到网络视图中。这时候耦合器会作为一个独立的IO设备出现在网络里。双击耦合器的X1接口设置IP地址和子网掩码。这个IP地址是X1侧在第一个PROFINET网络中的地址和第二个网络无关。接下来设置设备名称。设备名称在PROFINET通信中比IP地址更重要因为IO控制器是通过名称来建立连接的。名称建议用有意义的命名比如“PNPN_Coupler_X1”避免用默认名称。设置完成后在耦合器的设备概览里会看到X1侧的接口和端口。然后是组态传输区。在设备概览里耦合器的X1侧会有输入和输出的槽位。根据双方约定的传输区大小在X1侧添加相应的输入输出模块。比如约定X1到X2传16字节X2到X1传8字节那么在X1侧输出区域添加16字节X1控制器写到耦合器最终出现在X2侧输入区域添加8字节从X2侧控制器读过来的数据。这里有个容易混淆的点X1侧的“输出”是指X1侧控制器输出的数据这些数据会通过耦合器传到X2侧成为X2侧控制器的输入。所以组态时一定要站在“本侧控制器”的角度去理解输入输出方向。4.2 在第二个项目中添加耦合器并组态X2侧第二个项目的操作类似但方向要反过来。在第二个项目的硬件组态里添加同一个GSD文件下的PN/PN耦合器设置X2接口的IP地址和设备名称。注意X2侧的IP地址是在第二个PROFINET网络中的地址和X1侧可以完全不同网段。传输区组态时X2侧的输入对应X1侧的输出X2侧的输出对应X1侧的输入。也就是说如果X1侧组态了16字节输出那么X2侧就要组态16字节输入X1侧组态了8字节输入X2侧就要组态8字节输出。两侧的字节数必须严格对应否则下载后会报组态错误。实际调试时我习惯在两侧的组态里都把传输区的起始地址记下来比如X1侧输出从QB100开始X2侧输入从IB100开始这样在程序里读写数据时地址清晰不容易搞混。4.3 传输区地址分配与程序中的读写方式传输区的地址分配取决于你在组态时选择的起始地址。博途默认会自动分配地址但建议手动指定避免和现有IO地址冲突。比如第一个项目里X1侧输出可以指定从QB200开始长度16字节X1侧输入从IB200开始长度8字节。第二个项目里X2侧输入从IB300开始长度16字节X2侧输出从QB300开始长度8字节。在程序里读写这些数据就很简单了。第一个项目的PLC程序里直接把要发送的数据写到QB200开始的16字节区域然后从IB200开始的8字节区域读取对方发来的数据。第二个项目的PLC程序里从IB300开始的16字节区域读取第一个PLC发来的数据把要发送的数据写到QB300开始的8字节区域。如果传输的是结构化数据比如几个浮点数加几个布尔量建议在程序里用UDT或者结构体来映射这些地址避免直接操作绝对地址导致的可读性问题。比如定义一个结构体包含3个Real和8个Bool然后把这个结构体映射到传输区地址上。这样程序里用符号名访问维护起来方便很多。5. 下载、调试与通信建立的完整链路5.1 下载顺序对通信建立的影响两个项目的下载顺序理论上没有严格要求但实际调试时建议先下载一侧再下载另一侧。如果同时下载或者顺序混乱可能会出现一侧已经建立连接、另一侧还在等待的情况这时候BF灯会闪烁但等另一侧下载完成后会自动恢复。我通常的做法是先下载第一个项目X1侧观察耦合器的P1灯和BF灯状态。P1灯应该常亮或闪烁表示链路正常BF灯如果闪烁表示总线故障可能是因为X2侧还没组态。然后再下载第二个项目X2侧下载完成后观察P2灯和BF灯。如果两侧都正常BF灯应该熄灭P1和P2灯都表示链路正常。如果下载后BF灯一直亮说明通信没有建立。这时候先检查设备名称是否分配正确再检查IP地址是否在同一网段最后检查传输区组态是否匹配。5.2 用在线诊断功能快速判断通信状态博途的在线诊断功能是排查PN/PN耦合器问题的利器。在硬件组态界面点击耦合器选择“在线和诊断”可以看到模块的状态信息。里面会显示两侧接口的通信状态、传输区的数据交换状态、以及任何组态错误。我常用的几个诊断入口一是“诊断状态”里的“常规”页面看模块是否正常二是“PROFINET接口”页面看两侧接口的链路状态和通信质量三是“模块信息”页面看固件版本和序列号。如果传输区数据不更新可以在“诊断状态”里看是否有“组态错误”或“数据交换错误”的提示。另外在程序里可以用OB82、OB83、OB86等组织块来捕获通信故障事件。比如OB86可以捕获IO设备掉站事件在OB86里写一段诊断代码把故障设备的信息记录下来方便后期分析。这个技巧在实际项目中非常实用尤其是无人值守的现场。5.3 数据不更新的几种典型表现与快速定位数据不更新是PN/PN耦合器调试中最常见的问题表现可能有几种一是完全没数据输入区全是0二是数据部分更新某些字节有值某些没有三是数据偶尔跳变不稳定。完全没数据的情况先检查BF灯是否熄灭。如果BF灯亮说明通信没建立回到上一节的诊断步骤。如果BF灯熄灭但数据还是0检查传输区地址是否写对了程序里读写的地址是否和组态一致。我遇到过因为程序里用了错误的DB块地址导致读到的数据始终是0。数据部分更新的情况通常是传输区大小不匹配。比如一侧组态了16字节另一侧只组态了8字节那么超出的8字节可能读不到数据。这时候要回到两侧的组态里核对字节数。数据跳变的情况多半是一致性问题。如果传输的是超过4字节的数据结构且没有做一致性处理可能会出现半更新状态。解决办法是把传输区按4字节对齐或者使用DPRD_DAT和DPWR_DAT系统函数来做一致性读写。6. 实际调试中踩过的坑与排查链路6.1 设备名称分配失败导致的通信中断有一次在现场调试两侧项目都下载完成了BF灯也熄灭了但数据就是不更新。用在线诊断看发现X2侧的设备名称显示为“未分配”。原因是第二个项目的工程师在组态时设置了设备名称但下载后没有执行“分配设备名称”的操作。PROFINET的设备名称需要通过“分配设备名称”功能写入到模块里仅仅在组态里设置是不够的。解决办法是在博途的“在线访问”里找到耦合器的X2接口右键选择“分配设备名称”把组态里设置的名称写进去。写入成功后在线诊断里会显示正确的名称通信也会恢复。这个坑我踩过不止一次后来养成了习惯每次下载完硬件组态后都手动执行一次分配设备名称确认名称写入成功。6.2 传输区字节数不匹配引发的数据错位另一个典型的坑是传输区字节数不匹配。有一次两个工程师各自组态一个组态了32字节输入输出另一个组态了16字节。下载后通信能建立但数据只更新了前16字节后面的全是0。查了半天才发现是两侧组态不一致。这个问题的排查链路是先看在线诊断里有没有组态错误提示如果有提示会指出哪一侧的组态有问题。如果没有提示但数据不对就要回到两侧的硬件组态里逐字节核对传输区的大小和方向。建议在项目初期就用表格把传输区定义固定下来双方确认后再组态避免后期返工。6.3 IP地址冲突与网段隔离问题跨项目组态时两个PROFINET网络可能是物理隔离的也可能通过交换机连在一起。如果连在一起要确保两个网络的IP地址段不冲突。我遇到过两个项目用了同一个网段比如都是192.168.0.x结果耦合器两侧的IP地址冲突通信时断时续。解决办法是规划好两个网络的IP地址段比如第一个网络用192.168.1.x第二个网络用192.168.2.x。如果两个网络需要互通通过路由器或三层交换机做路由而不是让它们在同一网段里冲突。PN/PN耦合器的价值就在于它不需要两个网络互通它本身就是隔离的所以保持两个网络的独立性是最佳实践。6.4 固件版本不匹配导致的兼容性报错还有一次是模块固件版本和GSD文件版本不匹配。模块是较新的固件但项目里用的是旧版GSD文件下载后报“设备类型不匹配”的错误。解决办法是下载对应固件版本的GSDML文件重新安装到博途里然后更新硬件组态中的设备条目。这个问题的排查方法是在在线诊断里看模块的固件版本然后和硬件组态里选择的版本对比。如果不一致就去西门子官网下载对应版本的GSD文件。建议在项目开始前就确认好模块的固件版本避免调试时才发现问题。7. 跨项目协作中的版本管理与文档约定7.1 传输区定义文档的编写与维护跨项目组态最大的风险不是技术问题而是协作问题。两个工程师各自组态如果没有一份共同的传输区定义文档后期修改时很容易出现不一致。我的做法是在项目初期就编写一份《PN/PN耦合器传输区定义表》包含以下内容项目内容耦合器型号6ES7158-3AD10-0XA1X1侧设备名称PNPN_Coupler_X1X2侧设备名称PNPN_Coupler_X2X1到X2传输区16字节起始地址QB200X2到X1传输区8字节起始地址IB200数据类型定义前4字节为控制字后4字节为状态字其余为预留更新时间4ms版本V1.0日期2024-XX-XX这份文档双方各存一份任何修改都要更新版本号并通知对方。实际项目中这份文档在后期维护时价值极大尤其是当原工程师离职、新工程师接手时能快速理解通信结构。7.2 两侧程序中的接口注释规范程序里的接口注释也很重要。我习惯在两侧的程序里都加上注释标明传输区的用途和对应关系。比如在第一个项目的程序里QB200开始的16字节注释为“发送到X2侧控制字状态字预留”IB200开始的8字节注释为“从X2侧接收状态反馈故障码”。第二个项目里对应注释反过来。这样即使程序被其他人接手也能快速理解数据流向。注释建议用中文避免用拼音缩写因为拼音缩写在不同人眼里可能有不同理解。7.3 后期修改时的同步流程后期如果需要修改传输区比如增加几个字节的数据流程应该是先更新传输区定义文档双方确认新版本然后两个项目分别修改硬件组态增加对应的输入输出模块重新下载两侧组态最后验证数据交换是否正常。这个流程中最容易出问题的是“只改了一侧”。我见过一个项目一侧增加了4字节输出另一侧没有对应增加输入结果通信直接中断。所以修改时一定要双方同步改完后互相确认。8. 几个容易被忽略的细节与个人经验8.1 更新时间设置对通信稳定性的影响PROFINET的更新时间设置会影响通信的实时性和稳定性。PN/PN耦合器的更新时间可以在两侧分别设置但建议保持一致。如果一侧设1ms另一侧设8ms可能会出现数据更新不同步的情况。实际项目中我一般设4ms或8ms除非有特殊的高速要求否则不需要设得太小。设得太小会增加网络负载反而可能导致通信不稳定。另外更新时间还和看门狗时间有关。看门狗时间通常是更新时间的若干倍如果更新时间设得太小看门狗时间也相应变小网络稍有波动就可能触发看门狗超时导致通信中断。所以更新时间不是越小越好要根据实际网络负载和实时性要求来平衡。8.2 电源冗余与掉电保护的实际效果前面提到过耦合器两侧都接24V电源可以提高可靠性。但实际效果取决于内部电源切换逻辑。我实测过两侧都接电源时拔掉一侧电源通信不会立即中断耦合器会切换到另一侧供电。但切换过程中可能会有短暂的数据中断具体时间取决于模块的电源切换电路。如果对通信连续性要求很高建议两侧电源都来自不同的供电回路并且加上UPS。这样即使一路电源故障另一路还能维持通信不会中断。当然这只是提高可靠性的措施不能完全避免掉电导致的问题。8.3 用仿真软件验证组态的思路博途的PLCSIM Advanced支持PROFINET仿真可以用来验证PN/PN耦合器的组态。思路是在仿真环境里创建两个PLC实例分别模拟两个项目的控制器然后组态耦合器下载组态观察数据交换是否正常。这样可以在地理上分离的两个项目之间做联合调试前的预验证减少现场调试时间。不过PLCSIM Advanced的仿真和实际硬件还是有差异的尤其是通信时序和故障行为。所以仿真验证只能作为参考最终还是要以实际硬件调试为准。我一般用仿真来验证组态逻辑和地址映射实际通信性能还是要在现场测。8.4 现场调试时随身带的几样东西最后分享一个个人习惯现场调试PN/PN耦合器时我会随身带这几样东西——一台带博途的笔记本、一根备用网线、一个USB转网口适配器、一个24V电源模块用于临时给耦合器供电、以及一份打印好的传输区定义文档。这些东西看起来不起眼但现场调试时经常能救急。尤其是备用网线和USB转网口遇到过好几次因为网线水晶头接触不良或者笔记本网口驱动问题导致连不上PLC的情况。另外调试前一定要确认笔记本的IP地址和PLC在同一网段且没有和现场其他设备冲突。我习惯把笔记本设成固定IP比如192.168.1.100避免用自动获取导致连不上。这些细节虽然简单但现场调试时往往就是这些小问题耽误时间。
返回列表