ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

S7-300与ET200M、G120变频器PROFIBUS通讯实例与故障排查

S7-300与ET200M、G120变频器PROFIBUS通讯实例与故障排查 PROFIBUS这个总线新建项目里确实越来越少了很多新线直接上PROFINET。但如果你接触老产线改造、第三方设备对接、设备维护PROFIBUS仍然是一道绕不过去的坎。这次就以一个典型通讯实例来讲西门子S7-300 PLC作为DP主站下面挂ET200M远程IO和一个G120变频器从站实现远程信号采集和变频器启停、调速、状态反馈。这套结构看上去有点老但完整包含了分布式IO、带过程数据的从站、诊断机制和GSD文件安装跑通之后再看其他设备就很简单。文章按实际项目顺序拆开先理清拓扑再做接线和组态接着写通讯程序最后讲故障排查。适合刚入手PROFIBUS通讯、准备做设备改造和维护的工程师。先说明一句我这里给的是通用工程做法具体型号和固件版本不同时菜单名称和参数编号可能有差异落地时以你的实际软硬件版本为准。1. 先搞清楚这个PROFIBUS实例里的设备拓扑1.1 这个案例具体做什么很多刚接触PROFIBUS的人第一反应是打开组态软件把CPU拖进去然后开始找DP从站。但如果设备清单和现场拓扑没有确认清楚后面大概率反复报错。我建议的实例结构是这样主站西门子S7-300 CPU型号可以是CPU 315-2 DP或CPU 317-2 DP使用CPU本体集成的DP口。DP从站1ET200M远程IO配一块SM321数字量输入模块和一块SM322数字量输出模块。DP从站2西门子G120变频器配PROFIBUS通讯板走标准报文1。上位监控一台安装STEP 7或博图的电脑通过MPI或以太网口连接PLC用来组态和在线诊断。这个结构能覆盖最常见的两类PROFIBUS通讯场景一类是读写分布式IO直接看输入输出另一类是和带过程数据的从站交换数据比如变频器的控制字、状态字、速度给定和实际速度。1.2 为什么PROFIBUS还值得学老产线的设备替换、第三方设备对接都会闻到PROFIBUS的味道。很多厂里还有S7-300、ET200系列、老式变频器和现场仪表它们不是一两年就能全部换完的。新项目虽然更多用PROFINET但维护岗位必须能看懂老线。另外PROFIBUS通讯概念一旦理解后面学PROFINET、Modbus TCP会顺很多。通讯本质上就是主站轮询从站、地址分配、数据映射、一致性读写、诊断和故障排除。这套逻辑在PROFIBUS里表现得很清晰。有时候会遇到“西门子1200PLC和G120变频器485通讯”那是另一种串口通讯方案跟PROFIBUS DP不是一回事。S7-1200 CPU本身没有DP接口要用PROFIBUS就要加DP主站模块比如CM 1243-5。这个区别要先分清。1.3 组态之前先列一张地址表不要急着在软件里拖设备。先在纸上把地址表列清楚尤其是从站地址、I/O地址和功能对应关系。实例地址表可以这样规划项目内容DP主站S7-300 CPU 315-2 DP集成DP口DP波特率1.5 Mbps或12 Mbps取决于从站支持能力从站1ET200MDP地址3输入起始IW256输出起始QW256从站2G120变频器DP地址5标准报文1控制字和速度给定写入QW260状态字和实际速度读IW260终端电阻总线两端设备必须接入终端电阻为什么先做这张表因为PROFIBUS是总线型网络地址重复、波特率不一致、终端电阻丢失都会导致整个网段瘫痪。软件组态只是把设计固化下来现场地址和线缆连接才是真正决定通讯稳不稳的因素。我个人习惯是先确认从站地址有没有冲突再看波特率能不能统一最后才是软件组态。地址表里写清楚“哪个从站用哪个地址、对应哪个I/O起始地址”后面写程序时直接引用不用反复翻硬件配置。2. 硬件接线、GSD文件和从站地址设置2.1 线缆、接头和终端电阻别凭感觉接PROFIBUS线缆通常用紫色屏蔽双绞线两芯线颜色为绿色和红色。绿色对应A线红色对应B线。DP头的接线端子上标着A和B别接反。常见问题不是理论上的通讯不通而是接出来的线接触不良。老式DP头压在电缆上的时候要把线剥开足够长度压紧后轻轻拉一下确认没有松动。如果现场震动大建议用带螺丝锁紧的DP头不要图省事直接插上去。终端电阻的规则是总线最末端设备上的DP头必须把终端电阻开关拨到ON网段中间设备必须拨到OFF。如果整个网段只有两个设备那就是主站和最后一个从站都接终端电阻。很多掉站问题排查到最后就是中间某个DP头的终端电阻被拨到了ON导致信号反射。波特率也要提前约定。PROFIBUS DP在12 Mbps时理论传输距离约100米在1.5 Mbps时距离能到200米左右更低的波特率可以传更远。实际距离受线缆质量、接头、接地影响很大。不要以为现场只有20米就能放心跑12 Mbps如果经过多个端子排转接、走线靠近变频器动力线通信质量会明显下降。2.2 GSD文件在组态软件里怎么装PROFIBUS从站能被组态软件识别靠的是GSD文件。GSD全称是“设备数据库文件”描述了从站类型、支持的波特率、可配置的I/O长度和参数。西门子自家设备比如ET200M、G120变频器在STEP 7或博图里通常不需要手动装GSD硬件目录里自带。第三方设备、国产仪表、第三方远程IO一般都要装厂家提供的GSD文件。安装路径取决于软件版本。STEP 7的HW Config里通过“选项”菜单安装GSD文件博图里是在设备和网络的硬件目录中通过“安装GSD文件”入口选择.gsd文件。安装后重启硬件目录才能在“PROFIBUS DP”下面看到对应从站。需要注意GSD文件版本和固件版本之间的关系。老设备如果升级过固件老GSD可能认不出新功能反过来新GSD放在老型号上也可能报不兼容。遇到问题我一般先查从站当前固件版本和软件中用户手册推荐使用的GSD版本。2.3 从站地址拨码、软件设置和重复检查ET200M的DP地址通常由模块上的拨码开关设定。拨码按二进制编码设定后要断电重启才生效。G120变频器通常通过参数设置总线地址比如P918需要结合通讯板类型。设置地址时最容易出现的问题是“两个从站设成了同一个地址”。PROFIBUS从站地址同一网段内必须唯一。主站组态时设定的从站地址必须和现场设备实际拨码地址一致否则主站找不到那个从站系统报“从站故障”。有些设备支持软件和拨码两种方式但以拨码为准。还有S7-200 SMART可以通过EM DP01扩展模块作为DP从站地址也是通过模块上的拨码设定。这类从站在老产线改造中很常见。检查顺序建议断电查看每个从站地址拨码或参数值。在组态软件里比对从站属性中的DP地址。上电在线查看PLC诊断缓冲区看是否报“DP从站不可用”。不要依赖人眼扫一遍就完。几十个站的现场地址重复是排查起来非常头疼的事最好做一个地址台账。3. 在STEP 7或博图里完成DP组态3.1 创建项目添加主站和DP网络使用经典STEP 7时新建项目后插入一个S7-300站点在硬件配置里双击CPU弹出DP属性窗口。把DP接口的操作模式改成“DP主站”点击“属性”创建PROFIBUS子网选择波特率比如1.5 Mbps。这里最容易忽略的是“配置文件”和“波特率”选项。PROFIBUS子网的波特率必须和所有从站实际支持的最高波特率匹配。比如现场有老设备只支持1.5 Mbps网段就不能配12 Mbps否则老从站会找不到主站整个网络也可能瘫痪。在博图里流程类似新建项目添加PLC在设备视图里给CPU的DP接口创建PROFIBUS子网然后设置传输率。S7-1200或S7-1500做主站时先添加标准的S7-300程序。如果使用带集成DP口的S7-300直接就能看到DP接口如果主站没有DP口必须先在设备里添加DP通讯模块再在模块上创建PROFIBUS接口。3.2 添加DP从站并分配I/O地址主站和网络建好之后从硬件目录里把ET200M拖到PROFIBUS总线上。弹出属性窗口填从站地址比如3。然后在ET200M的硬件目录里配置IO模块的型号、数量和模块地址。G120变频器类似找到对应的DP从站或GSD条目设置为地址5然后选择报文类型。G120和PROFIBUS通讯最常用的是标准报文1方向第一个字第二个字主站到从站控制字STW1速度设定值NSOLL从站到主站状态字ZSW1实际速度NISTI/O地址分配时我给ET200M用IW256 / QW256给G120用IW260 / QW260。这个起始地址在组态里可以手动修改但要注意不要和已有地址重叠。地址一旦确定后面程序和HMI变量表都按这个地址引用。为什么把变频器地址放在IO区而不是数据块这是PROFIBUS DP的标准做法。主站和从站之间直接映射到过程映像区读写速度快程序里可以直接用。不过要注意DP从站数据如果超过4个字节或者需要保证整块数据一致就不能简单用I/Q位访问得考虑用系统功能块SFC14/SFC15。3.3 编译下载之后怎么确认通讯正常组态完成后不是马上写程序先编译下载。下载后把PLC切到RUN观察CPU面板上的DP指示灯以及每个从站模块上的通讯指示灯。正常情况下S7-300 CPU上的DP接口指示灯应该是绿色稳定或绿色闪烁。ET200M的从站模块上会亮绿灯。G120通讯板如果通讯建立也会有相应的数据交换状态显示。如果指示灯异常先在软件里在线看设备状态在STEP 7 HW Config或博图的设备和网络里进入在线模式。看PROFIBUS网络上的设备图标有没有红色叉号。双击主站DP口查看“在线站点”列表看哪些从站已被识别。查看PLC诊断缓冲区找“DP从站故障”或“总线故障”相关的条目。这一步非常关键。不要在组态还没确认联通的情况下就埋头写程序。通讯链路都没通程序写得再好也是白写。4. 编写通讯程序变频器控制字和远程IO读写4.1 先写分布式IO读写ET200M挂在DP总线上对PLC来说它的输入点就映射到IW256开始的地址区输出点映射到QW256开始的地址区。程序里可以直接用I0.0、I0.1这样的位地址来做逻辑控制也可以按字读取模拟量信号。例如变频器准备好信号、远程IO上的按钮信号在程序里直接用I0.0参与逻辑。输出接触器控制、电磁阀控制直接写Q0.0。这部分和本地IO编程没有区别DP只是在硬件层实现了远程映射。但有个边界要记住DP从站的I/O刷新不是实时扫描的主站按轮询周期和从站交换数据。如果控制要求非常高的同步性需要评估DP轮询周期是否满足而不是把所有设备都挂到一条DP总线上。4.2 为什么DP从站连续数据要优先使用SFC14和SFC15ET200M这类数字量IO按位访问问题不大。但G120变频器的控制字和状态字是连续两个字如果直接读IW260和IW262PLC扫描周期内两次读取之间从站数据可能已经刷新导致读到的时间点不一致。所以对连续、需要一致性的数据西门子提供了SFC14“DPRD_DAT”和SFC15“DPWR_DAT”。调用SFC15时参数里填参数说明LADDR从站在PLC侧的输出起始地址十六进制比如W#16#100RECORD要发送的数据所在的数据区比如DB1.DBX20.0开始的4字节RET_VAL返回值不等于0时说明读写异常调用SFC14时参数里LADDR填从站输入起始地址RECORD填接收数据的存放区。返回值和通讯状态要判断出错时置一个标志点方便HMI和后续程序处理。下面是示意写法不是某个具体CPU工程中的完整代码// 写G120控制字和速度给定 CALL SFC15 LADDR : W#16#104 // QW260的十六进制地址 RECORD : P#DB1.DBX20.0 BYTE 4 RET_VAL : MW40 // 读G120状态字和实际速度 CALL SFC14 LADDR : W#16#104 // IW260的十六进制地址 RECORD : P#DB1.DBX30.0 BYTE 4 RET_VAL : MW42注意LADDR必须使用组态时分配的十六进制地址。QW260转换为十六进制是W#16#104。如果I区和Q区地址相同LADDR的写法也一样。这一点很多人初次使用时容易填错导致SFC返回错误。4.3 G120变频器启停和调速的实用写法G120用标准报文1时主站发给从站的第一个字是控制字STW1第二个字是速度设定值。从站返回的第一个字是状态字ZSW1第二个字是实际速度。控制字里常用的几个位位含义BIT0准备就绪/启动BIT1使能运行BIT2禁止运行BIT3使能斜坡BIT7故障确认BIT10由PLC控制最简单的一套启停逻辑是先写入16#047E等待状态字准备好再写入16#047F让变频器运行。速度设定值用十六进制表示100%通常对应16#4000对应约为16384约等于4000H。程序里可以这样组织DB1.DBW20控制字。DB1.DBD22速度设定值取浮点数通过NORM_X等指令换算到0到16384之间再写入输出区。DB1.DBW30状态字。DB1.DBD32实际速度反馈从16#4000比例换算成实际转速。速度给定换算不能想当然。G120的P2000基准频率决定100%对应多少Hz或多少r/min实际工程中要先看参数表。这里给的是通用思路具体比例因子必须查G120手册里的P2000设置。4.4 触摸屏、上位机采集和这个通讯实例的关系很多项目要求在触摸屏上显示变频器当前速度或者在PC上用C#做数据采集。PROFIBUS侧程序负责把从站数据放到PLC数据块里HMI或上位机再读取PLC数据块。触摸屏连接PLC时变量表里直接关联DB1.DBW30、DB1.DBD32。如果走以太网只要PLC程序已经完成DP数据读写触摸屏不需要关心PROFIBUS组态。C#上位机通过西门子通讯库读取PLC数据块时也一样整套架构里PROFIBUS数据已经被PLC“翻译”成普通数据块变量。这也是PROFIBUS现场总线的一个好处只要主站程序把数据整理好上层所有监控系统都不需要处理总线协议。5. 通讯不稳定、掉站、数据错位的排查顺序5.1 第一步看现象和指示灯PROFIBUS故障最常见的现象有几种PLC报DP从站故障CPU进入STOP或部分模块丢失。从站设备红灯闪烁数据不刷新。通讯时好时坏掉站后自动恢复。数据错位比如变频器速度偶尔变成0或一个错误数值。HMI上变量更新缓慢看起来像程序卡死。遇到问题先看指示灯不要直接改程序。CPU的BF灯闪烁或常亮表示PROFIBUS总线故障。ET200从站模块上的SF和BF灯也能指示状态。G120变频器通讯板上的红色指示灯如果常亮或闪烁说明通讯中断。5.2 第二步看组态和诊断缓冲区打开PLC在线诊断缓冲区重点看OB86的报警。OB86是DP从站故障中断组织块当从站丢失或重新上线时CPU会记录事件。如果程序里没有下载OB86DP从站故障可能导致CPU进入STOP。生产环境一般建议下载OB86、OB82和OB122等诊断相关组织块即使程序里逻辑为空也能保证CPU不会因为IO故障停机。我一般排查顺序是先看诊断缓冲区里报的是哪个从站地址。到现场确认那个地址对应的实际设备。看该从站是拨码地址被改动还是通讯线接头松动。如果从站时好时坏用万用表量DP终端电阻看是不是中间设备被误拨ON。检查该段DP线路是否靠近变频器、伺服驱动器等大功率设备。5.3 第三步排查最常见的三类原因很多PROFIBUS故障不是逻辑复杂而是基础条件没满足。第一类波特率不一致。主站子网配置成1.5 Mbps但有从站只支持500 kbps或者某个现场设备被改成了12 Mbps。结果就是整个网段的从站都时好时坏。处理方式把主站和所有从站统一到同一个波特率优先使用现场绝大多数设备支持的最稳定速率。第二类地址重复或地址和组态不一致。比如ET200M拨码改成了5但组态里还是3主站就会一直尝试连接地址3现场设备却挂在地址5导致找不到从站。把每个从站实际地址和组态地址核对一遍。第三类屏蔽层、接地和终端电阻问题。PROFIBUS对屏蔽层和接地比较敏感。DP电缆屏蔽层要在两端可靠接地但要注意避免形成地环路。如果整条总线在电柜里经过多个端子排屏蔽层容易被断开。实际排查时我会用DP总线诊断工具或者看从站通讯质量数据但如果没有专业工具就先检查物理链路。5.4 数据错位和一致性问题的处理如果从站通讯状态正常但读取到数值偶尔跳变多半不是通讯断开而是数据一致性问题。比如变频器的状态字和速度值不是同一周期被读取或者程序里直接用M区地址做了跨DB复制。处理方式使用SFC14/SFC15整块读写不要分位操作。从站数据读写完成后先用临时变量保存再转换到实际使用的变量区。不要在中断程序里直接对外通信数据做长时间的运算。另外如果程序里使用了多个从站的I/O地址务必确认起始地址没有被重复赋值。两套设备共用同一个I字地址在高版本STEP 7中可能直接报错但在某些情况会编译通过运行后数据互相覆盖。6. 一次现场掉站的完整排查案例最后分享一个实际里非常典型的案例用来串起上面的排查思路。现场情况一条老产线上有S7-300主站、三套ET200M、两台G120变频器全部挂一条PROFIBUS网络。某天操作员反映其中一台变频器反复掉线分控柜面板上通讯故障灯一会亮一会灭。我没有先调程序先看了PLC诊断缓冲区。报的是地址5的DP从站故障地址5正好是那台反复掉线的变频器。然后到变频器柜后面检查通讯接头发现DP头的外壳锁扣没有完全扣死稍微碰一下线通讯就断。把DP头重新安装并锁紧后在线监视了一段时间从站状态恢复绿色。这时候才重新看程序发现SFC15返回的RET_VAL偶尔不等于0。查下来发现是因为通讯板固件版本和组态中使用的报文类型不完全匹配导致个别时刻写控制字失败。后来把报文类型按现场变频器实际型号重新配置问题才彻底消失。这个案例里有两个经验第一先判硬件还是软件。通过诊断缓冲区能快速定位从站地址然后先查物理连接再查组态和固件匹配。不要一上来就怀疑PLC程序。第二通讯恢复不等于数据可靠。从站灯绿了还要看SFC14/SFC15的返回值看HMI上速度、状态字是否持续稳定。如果只是偶尔断一下诊断缓冲区不一定每次都能捕捉到可以在程序里增加从站通讯状态统计比如记录RET_VAL非0的次数作为长期运行指标。如果遇到“掉站反复出现但现场检查没有明显问题”的情况我会建议增加一个PROFIBUS中继器把长距离线缆分成两段或者在靠近变频器的地方加EMC措施。这个属于硬件层面的改善不是程序能完全解决的。真正落地时最该盯住的不是组态功能多全而是从站地址、波特率、终端电阻和现场接地。这四样东西只要有一个不对后面的程序写得再漂亮通讯也稳不了。
RELATED READING

延伸阅读

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