ARTICLE DETAIL

资讯详情

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

S7-1500与S7-1200通过Profinet IO通信的组态与调试全攻略

S7-1500与S7-1200通过Profinet IO通信的组态与调试全攻略 车间里干活久了总会遇到一个特别典型的现场主控柜里一台S7-1500远程机架上挂了几台S7-1200两个PLC之间只隔了一根普通网线。调试的时候网线插好、指示灯也亮着可1500那边就是读不到1200的数据或者监控表里看到的值永远是0。这种情况十有八九不是硬件坏了而是Profinet的组态关系没理顺。S7-1500PLC作为IO控制器、S7-1200PLC作为IO设备通过Profinet进行周期性数据交换是博途项目里最常见、也最适合中小型分布式控制的通信方案之一。这篇分享就拿这种场景做一个完整梳理从方案选型、硬件准备、博途组态、传输区配置到通信诊断和现场排障把关键步骤和踩过的坑一次说清楚。刚接触博途的电气工程师可以直接照着做带新人的老工程师也可以把它当一份现成的培训材料。1. 方案选型三种通信方式里为什么选Profinet1.1 先看需求再谈协议很多人一上来就问“1500和1200用什么方式通信”其实正确答案永远是那句看你的数据交换需求。我常说的一个例子是小型包装线一台1500做整线主控几台1200分别管输送带、贴标机构、称重模块。这种场景下每台从站需要和主站周期交换的数据无非是启停指令、速度设定、运行状态、故障代码、产量计数加起来一般不超过二三十个字节。这类数据的特点是周期性强、实时性要求不算苛刻但也不能太慢、数据量不大。最适合的方案就是Profinet IO让1500做控制器IO Controller1200做IO设备IO Device。数据不靠程序里写通信块来搬运而是靠组态好的传输区自动映射一个扫描周期就能同步一次。1.2 Profinet与PUT/GET、PROFIBUS的对比在选型时经常会被拿来对比的是另外两种方式PUT/GETS7通信和PROFIBUS DP。它们的区别我用一张表来归纳通信方式组态方式实时性程序复杂度适用场景Profinet IORT硬件组态建立IO控制器/IO设备关系数据直接映射到IO区毫秒级周期确定性好低无需通信指令直接读写IO地址PLC之间、PLC与远程IO/变频器等周期性过程数据PUT/GETS7通信调用PUT/GET功能块需指定伙伴CPU和地址非周期受程序扫描影响中需管理连接和数据一致性非周期性数据交换少量数据按需读写PROFIBUS DP硬件组态接专用总线毫秒级但受总线轮询限制中低老旧设备、已有PROFIBUS总线网络这里说一个我的实际感受如果数据量只有几十个字节而且要求两边周期同步、断线能自动恢复Profinet IO是首选。PUT/GET虽然也能用但需要在程序里反复调用功能块、管理连接状态数据刷新时机也不够固定一旦通信对象多了程序会显得很杂乱。PROFIBUS DP在旧项目里还会碰到新项目尽量走Profinet布线简单一条网线就能覆盖后续扩展也更灵活。需要注意的是S7-1200要作为Profinet IO设备使用CPU固件版本有硬性要求V4.0及以上才支持老固件只有IO控制器功能。这个问题我后面会单独拿出来说因为翻车的人特别多。2. 软硬件准备与网络规划2.1 硬件选型与固件版本以我自己项目里常用的一套配置为例1500侧用CPU 1511-1 PN1200侧用CPU 1215C DC/DC/DC。两个CPU都自带PN口不需要额外加通信模块。选型时主要确认两点一是CPU自带PN口数量够不够用二是固件版本是否支持你要的功能。S7-1200的Profinet接口一般集成在CPU本体上具体要看CPU型号有的型号还有一个额外的通信口。配置之前在博途的硬件目录里确认一下CPU固件版本尽量用V4.4以上的版本功能完整对Profinet IO设备的支持也稳定。2.2 博途版本与工程设置博途V13及以上版本就支持S7-1200作为IO设备的组态但我现在习惯用V15.1或者V16/V17界面和性能差别不大关键是CPU固件版本要和项目里组态的版本对应上。经常有人用博途V17打开一个固件版本V4.5的1200组态下载时却提示“设备固件不兼容”原因就是实际PLC固件比项目里设定的低。遇到这种情况不需要重新建项目直接双击CPU进入设备组态在“属性→常规→固件版本”里改成实际固件版本再编译下载即可。这个小细节能省一上午的折腾时间。2.3 IP规划与设备名称Profinet组态前有一个工作务必要先做到位把IP地址表和设备名称表画出来哪怕只画在笔记本上。我的习惯是开工前先固定下面这套规则设备IP地址设备名称S7-1500192.168.0.1plc_1500S7-1200192.168.0.10plc_1200编程电脑192.168.0.100无IP地址必须同一网段子网掩码统一255.255.255.0。设备名称是Profinet设备在以太网上的身份标识控制器就是靠这个名字找到IO设备的而不是靠IP地址。这一点很多新手搞反了。设备名称有命名规则全小写字母、数字、连字符不要用下划线不要用中文不要以数字开头。我见过有人把设备名命名为“PLC_1200_01”带下划线结果通信一直不稳定把下划线去掉就正常了。虽然理论上某些工具能容忍下划线但为了不踩坑统一用短小精悍的全小写名称最稳。3. 核心组态步骤与传输区配置3.1 组态前的准备把1200拖进Profinet系统打开博途新建项目先添加1500和1200两台设备。关键动作在“网络视图”里从右侧硬件目录里把S7-1200的CPU型号拖到网络视图中然后把鼠标放在1200的PN接口上按住拖到1500的PN接口松开后会生成一条Profinet连接线。连接线生成后博途会自动弹窗问是否把S7-1200作为IO设备分配给1500点确认即可。这是最快速的连接方式比手动去属性里选“IO控制器”要直观得多。如果拖拽后没有弹窗也可以手动在1200属性里设置但容易漏配置不建议新手走这条路。这里还要注意一个细节在“设备组态”界面的底部有“拓扑视图”如果现场网络是交换机连接的拓扑视图里可以不画网线不影响通信组态。拓扑视图主要用于IRT高实时通信的物理链路规划我们做标准RT通信不需要纠结。3.2 在1200侧启用IO设备模式建立连接后双击1200进入设备组态选中PN接口在“属性→Profinet接口→操作模式”里把模式从默认的“IO控制器”改成“IO设备”。改成IO设备后下方会出现“分配IO控制器”的列表选择1500的CPU即可。关键一步在“智能设备通信→传输区”。这是整个通信组态的核心区域传输区定义了两个PLC之间交换数据的地址映射关系。S7-1200作为IO设备时必须在传输区里明确指定哪些地址的数据发给控制器、哪些地址的数据从控制器收进来。不配置传输区通信连接建立不起来。3.3 配置传输区地址映射的逻辑传输区配置有两个方向特别容易搞混。我用一句话总结A的输出区就是B的输入区B的输出区就是A的输入区。以我常用的4字节交换为例整个映射关系是这样的方向1500侧地址1200侧地址1500 → 1200Q W2040 起始4字节I W2040 起始4字节1200 → 1500I W2040 起始4字节Q W2040 起始4字节也就是说1500写QW2040数据1200就能在自己的IW2040里读到1200写QW2040数据1500在自己的IW2040里读到。这个“写对方就是读自己”的逻辑一旦理解了地址配置就不会做错。在1200侧的传输区里要添加两个条目一个是“输入区”起始地址IW2040长度4字节用于接收1500发来的数据另一个是“输出区”起始地址QW2040长度4字节用于把数据发给1500。长度按字节算最小1个字节最大视具体CPU而定。我这里强调一下不要一上来就配置几十上百字节的传输区先用小数据量把链路打通确认无误后再加大这是最稳妥的调试节奏。3.4 在线分配设备名称与IP组态完成后需要把设备名称真正写进CPU。操作路径在项目树里选中1200右键“在线与诊断”进入“功能→分配设备名称”博途会扫描网络里的实际设备选择对应的PLC后点“分配名称”。分配名称时有个细节如果局域网里有多个型号相同的PLC靠IP地址不一定能区分这时候可以通过MAC地址来确认到底选中了哪一台。分配名称前还要确认CPU的访问保护级别如果设置了密码分配名称时会要求输入CPU密码很多人在这里卡住。名称分配完成后分别编译并下载到1500和1200。下载顺序我习惯先1500后1200。下载完成后观察LED状态正常情况下1500的IO设备指示灯是绿色常亮1200的PN口Link灯常亮、RX/TX闪烁说明通信已建立。如果LED呈黄色闪烁状态说明设备名称或IP配置有问题直接回到上面的步骤排查。4. 实战案例1500发指令1200控电机并回传状态4.1 控制逻辑设计为了把抽象地址映射讲透我模拟一个具体案例一台1200控制一台变频器驱动电机1500作为主站下传启动命令和转速设定值1200执行本地逻辑并把电机的运行状态、实际转速回传给1500。在两侧PLC的变量表里定义如下数据数据方向变量名地址数据类型含义1500→1200Send_ControlQW2040Word控制字bit0启动bit1停止1500→1200Send_SpeedQW2042Int转速设定值1200→1500Recv_StatusIW2040Word状态字bit0运行反馈1200→1500Recv_SpeedIW2042Int实际转速注意1500侧的Recv_Status、Recv_Speed地址是IW2040、IW2042对应的正是1200侧的QW2040、QW2042。在1200侧变量表里接收变量叫Rev_ControlIW2040、Rev_SpeedIW2042发送变量叫Send_StatusQW2040、Send_Speed_BackQW2042。两边的变量名可以不同但地址必须严格对应。4.2 PLC变量表和程序示例1500侧发送程序用SCL写非常简单// 1500侧发送控制字和转速设定 Send_Control : 16#0001; // 置位bit0启动命令 Send_Speed : 1500; // 设定转速1500转 // 1500侧读取1200回传的状态 IF (Recv_Status AND 16#0001) 16#0001 THEN // 1200已确认运行可继续后续逻辑 END_IF;1200侧接收和回传程序// 1200侧解析控制字 #Temp_Start : (Rev_Control AND 16#0001) 16#0001; #Temp_Stop : (Rev_Control AND 16#0002) 16#0002; IF #Temp_Start AND NOT #Temp_Stop THEN Motor_Output : TRUE; // 本地物理Q点驱动接触器 Send_Status : 16#0001; // 回传运行状态 ELSE Motor_Output : FALSE; Send_Status : 16#0000; END_IF; Send_Speed_Back : Motor_Actual_Speed; // 实际转速这段程序里的“Motor_Output”是1200本地的物理输出点实际项目中可能是驱动中间继电器或直接给变频器信号。“Motor_Actual_Speed”来自变频器的反馈通道通过模拟量模块或者串口通信读到。这里不展开讲变频器通信重点是构建设备之间的数据通道。4.3 下载与首次启动验证程序下载完成后验证步骤要两边一起看。打开两个监控表一个监控1500的Send_Control、Recv_Status一个监控1200的Rev_Control、Send_Status。把1500的Send_Control强制成16#0001看1200的Rev_Control是否变成1如果变成了说明下行链路通再把1200的Send_Status强制成1看1500的Recv_Status是否有变化如果有说明上行链路也通。这个方法百试百灵。很多人通信不通都喜欢去查网线查IP其实先把两侧监控表拉开一眼就能定位是发送侧的问题还是接收侧的问题。链路通了以后再做整体联调效率会高很多。5. 通信状态监控与诊断方法5.1 在线诊断的三个途径现场调试中光会组态还不够还得会看通信状态。博途提供了三个诊断途径我按使用频率排个序。最直观的是“网络视图”的在线模式。组态编辑器切换到在线状态选中1500的PN接口下方会列出所有IO设备的状态绿色对勾表示通信正常黄色感叹号表示设备名称或IP不一致红色表示通信中断。这个状态能快速反映链路的大致健康状况。第二招是“在线与诊断→功能→通信检查”相当于一个针对Profinet设备的底层连通性测试。输入目标设备的IP地址或设备名博途会模拟PROFINET帧发送请求检测设备是否在线。如果设备名称不对但IP能通这里会给出明确提示。第三招是用程序指令判断状态。在没有HMI显示诊断信息、或者需要在程序里做联锁保护时可以用博途指令列表里“通信→PROFINET通信”下的“DeviceStates”指令输入IO设备的硬件识别符返回设备状态字。返回值为0表示正常非0值对应不同诊断含义。硬件识别符可以在PLC变量表的“系统常量”里找到对应IO设备的标识。这一招在远程运维时特别有用可以把通信状态通过HMI或者SCADA系统展示出来。5.2 通信中断时的数据处理Profinet IO通信中断后输入区数据通常会被清零。这个特性很容易被忽略也是最容易出现安全隐患的地方。比如通信中断时1200侧的Rev_Control会变成0如果你的逻辑只判断“控制字bit01才运行”那么0会让电机停止也许安全但如果你的逻辑判断的是“控制字bit00才停止”通信中断时反而不会触发停止这就有风险了。所以我的建议是程序里必须有一个“通信正常”标志参与联锁。用DeviceStates指令读取设备状态通信异常时强制释放输出、保持安全状态。1500侧的输出区在通信中断时不会主动清零1200作为从站没有新数据时会按传输区属性里的“替换值”或“保持值”处理这个参数可以在传输区配置里设置。实际项目中我在1200侧还会做一个简单的看门狗如果Rev_Control连续几个周期保持不变判定为通信异常按安全逻辑处理。6. 常见问题与现场排障经验6.1 经典故障速查表做过的Profinet项目多了能总结出一份比较有共性的故障速查表现场排查时对照着处理能省不少时间。故障现象可能原因处理办法组态里1200显示为灰色/找不到设备网络不通、设备名称未分配检查IP网段用“分配设备名称”重新分配1500上IO设备指示灯闪黄设备名称或IP不一致核对设备名称大小写、IP地址重新分配1200的PN灯闪烁但数据全为0传输区地址映射错位检查双方传输区地址是否对应确认输入输出方向通信建立后数据偶发为0更新周期短或链路干扰在IO地址分配表里调大更新周期更换网线或交换机端口下载报错设备固件不匹配实际固件低于组态版本修改组态里的固件版本到实际值变量表里访问QW2040报错地址被占用或未编译先编译变量表和程序再查看地址分配情况6.2 三条现场心得第一Profinet通信出问题90%以上出在设备名称和IP地址上而不是协议本身。现场排查的顺序我建议固定下来先看IP能不能ping通再看设备名称有没有分配接着看传输区地址有没有对齐最后才考虑干扰和硬件问题。顺序反了会绕很多弯路。第二调试通信前先做1字节的小传输区确认链路通了再做最终数据量。我见过不少同事一上来就配一个32字节的结构体两边数据一传就是整个结构体乱掉到最后也搞不清是链路问题还是数据结构问题。1字节测试链路两分钟就能定位问题方向。第三关于交换机普通非网管千兆交换机在标准RT通信下能用我在调试阶段也用过家用交换机运行过一段时间没出过问题。但正式项目还是推荐用西门子SCALANCE系列或支持Profinet功能的工业交换机尤其后续要考虑IRT实时通信或网络负载较大时交换机选型直接决定稳定性。7. 从这套通信往外扩展的思路7.1 同样的PN链路可以挂哪些设备S7-1500和S7-1200之间的Profinet通信思路其实可以非常顺畅地扩展到整个西门子生态甚至非西门子设备。ET200SP远程IO模块、G120C变频器、第三方网关、库卡机器人、触摸屏只要支持Profinet都遵循这“三板斧”分配设备名称、划分IP地址、配置IO映射。比如热词里提到的“ABB变频器与西门子PLC通信”本质上就是给变频器装一个Profinet通信板或者通过网关接入然后在博途里导入GSD文件、分配IO地址和1200做IO设备的逻辑几乎一样。区别只在于S7-1200作为西门子自家设备不需要导入GSD文件博途直接能识别第三方设备必须先导入GSD文件才能在硬件目录里找到。7.2 跨网段与路由的提醒如果1500和1200不在同一网段就需要考虑跨网段通信。但我的建议是Profinet IO层面尽量不要跨网段虽然PROFINET协议支持跨路由器的IO通信但配置复杂、实时性受影响工业现场没必要给自己找麻烦。跨网段的场景更推荐用PUT/GET这类S7通信来做或者加一个带路由功能的网关让对方设备在逻辑上“感觉”在同一网段里。规划阶段把所有PN设备放进一个网段这个习惯能省掉后续90%的通信麻烦。8. 几点个人体会做了这么多年现场调试我的体会是PLC与PLC之间的Profinet通信本身不算复杂技术但新手通常不是死在组态上而是死在网络规划的随意上。设备名乱起、IP地址跨网段、传输区大小拍脑袋决定、通信状态不在程序里做判断这些问题都会在联调那天集中爆发。最后分享一个自己的习惯每个项目开工前先花十分钟做一张通信规划表列清楚每一对通信双方的设备名称、IP地址、传输区地址、数据结构、更新周期、参与联锁的状态位。这张表我后来在验收、交接、排障时反复用到投入产出比极高。如果你手头正好在做1500和1200的通信项目不妨也试试这个方法。
返回列表