S7-300与ET200M、G120变频器PROFIBUS通讯实例与故障排查
2026/8/31 19:14:53 网站建设 项目流程

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从站1:ET200M远程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,取决于从站支持能力
从站1ET200M,DP地址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从站,地址也是通过模块上的拨码设定。这类从站在老产线改造中很常见。

检查顺序建议:

  1. 断电,查看每个从站地址拨码或参数值。
  2. 在组态软件里比对从站属性中的DP地址。
  3. 上电,在线查看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实际速度NIST

I/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和SFC15

ET200M这类数字量IO,按位访问问题不大。但G120变频器的控制字和状态字是连续两个字,如果直接读IW260和IW262,PLC扫描周期内两次读取之间,从站数据可能已经刷新,导致读到的时间点不一致。

所以对连续、需要一致性的数据,西门子提供了SFC14“DPRD_DAT”和SFC15“DPWR_DAT”。

调用SFC15时,参数里填:

参数说明
LADDR从站在PLC侧的输出起始地址,十六进制,比如W#16#100
RECORD要发送的数据所在的数据区,比如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会记录事件。如果程序里没有下载OB86,DP从站故障可能导致CPU进入STOP。生产环境一般建议下载OB86、OB82和OB122等诊断相关组织块,即使程序里逻辑为空,也能保证CPU不会因为IO故障停机。

我一般排查顺序是:

  1. 先看诊断缓冲区里报的是哪个从站地址。
  2. 到现场确认那个地址对应的实际设备。
  3. 看该从站是拨码地址被改动,还是通讯线接头松动。
  4. 如果从站时好时坏,用万用表量DP终端电阻,看是不是中间设备被误拨ON。
  5. 检查该段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措施。这个属于硬件层面的改善,不是程序能完全解决的。

真正落地时,最该盯住的不是组态功能多全,而是从站地址、波特率、终端电阻和现场接地。这四样东西只要有一个不对,后面的程序写得再漂亮,通讯也稳不了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询