『7x24小时有问必答』

调试现场的噩梦:PLC突然停机,ERROR红灯狂闪,程序不动了。新手只能瞎猜——硬件坏了?程序写错了?接线有问题?其实S7-1200早就把所有故障信息记录在诊断缓冲区里,它就是PLC的「黑匣子」,90%的故障靠它一分钟定位原因。

  

一
诊断缓冲区是什么?PLC的"黑匣子"
很多人把诊断缓冲区简单理解成"PLC的日志文件",但它远不止是流水账——它是一个高度结构化、具备时间因果链的运行时事件追踪系统。
诊断缓冲区是CPU系统存储器的一部分,遵循先进先出(FIFO)  原则,最多存50条记录,所有事件都带精准时间戳。即使断电,最近的故障信息依然可以被读取,这对现场排查意义重大。它会记录这些核心信息:
类别
典型事件
CPU状态切换
上电、RUN转STOP、STOP转RUN
系统错误
CPU本体故障、存储卡错误、组态不匹配
程序错误
访问不存在的DB块、数组越界、指令报错
I/O错误
模块丢失、通道故障、传感器断线、短路
通信问题
PROFINET IO断连、从站掉线
操作记录
强制变量激活、固件更新、下载程序
注意:必须转至在线后,才能查看实时的诊断缓冲区内容。
二
3步看懂诊断缓冲区,快速定位故障

第一步:看事件时间线

诊断缓冲区里的事件,按发生时间倒序排列,最新发生的事件在最上面。
PLC突然停机,直接看最顶部的第一条事件,就是导致停机的直接原因。
上图展示了博途TIA Portal中的诊断缓冲区界面——左侧导航栏进入"在线访问→诊断→诊断缓冲区",右侧事件列表按时间倒序排列,最新事件在最顶部。每条事件包含序号、日期时间和事件描述。

第二步:看事件类型和状态

每个事件前面都有图标,直接判断严重程度:
图标颜色
含义
是否影响运行
绿色正常
无故障,只是状态记录(如切换RUN模式)
不影响
黄色维护
需要维护(如强制变量激活)
不影响运行
红色错误
严重故障(如模块丢失、硬件故障)
可能导致停机
同时注意事件状态:
到达事件(Incoming)
  :故障发生了
离去事件(Outgoing)
  :故障消失了(如掉线的模块又连上了)

第三步:看事件详细信息,直接拿解决方案

点开任意一条故障事件,就能看到完整详情,这是诊断缓冲区最实用的功能:
精准定位
:事件ID、模块名称、机架号、插槽号,具体到哪个模块、哪个通道出了问题
故障说明
:直白告诉你错误原因
原因和解决办法
:直接给排查方向

上图展示了诊断缓冲区的事件详情面板——选中某条事件后,下方详情区会显示事件ID、模块信息、故障描述和帮助说明。图中标注了从事件列表到详情面板的关联路径,新手哪怕不懂原理,照着给的解决办法一步步排查,也能快速解决问题。
三
诊断缓冲区的2个实用操作

1. 另存诊断缓冲区,留档备查

现场故障排查完,一定要把诊断缓冲区存下来,方便后续复盘、给厂家技术支持看。操作很简单:
打开故障事件的详细信息
点击右下角  「另存为」
选择保存路径,导出为TXT记事本文件
导出的文件支持中文/英文,和博途界面语言一致

2. 自定义显示事件,过滤无效信息

诊断缓冲区默认记录所有事件,有时候信息太多找不到重点,可以自己设置显示内容:
点击诊断缓冲区的  「设置」
勾选你想显示的事件类型(如只看"IO系统设备故障""模块故障消息")
也可以勾选  「以十六进制格式输出事件信息」  ,方便给技术支持排查复杂故障

上图展示了诊断缓冲区的设置面板——12个事件类型复选框全部可选,可以根据排查需要自由勾选/取消,只显示关注的事件类别,过滤掉无关信息。
四
诊断中断OB82:让PLC自动处理故障
诊断缓冲区能帮你事后排查,但有些场景需要PLC自动响应故障——这就是诊断中断组织块OB82的作用。
如果具有诊断功能的模块(已为其启用了诊断中断)检测到诊断状态更改,就会触发OB82中断执行。

OB82包含的启动信息可帮确定:哪个设备的哪个通道发生了错误当前事件是错误发生还是错误恢复可以在OB82中编写指令,读取这些启动值并采取相应措施——比如自动停机保护、切换备用通道、发送报警通知等。

  关键提醒:如果未添加OB82,CPU将忽略诊断错误事件可以在程序中只使用一个诊断中断OB块创建新项目时不会自动添加OB82,需要手动添加

OB82的启动信息包含:

参数
含义
IO_State
硬件状态(故障发生/恢复)
LADDR
触发中断的硬件对象标识符
Channel
通道编号
MultiError
是否有多个错误同时发生

硬件标识符(HW ID)用于标识模块或功能单元。在设备视图中选中模块→属性→"系统常量"可以查看模块的硬件标识符。
五
程序读取诊断信息:GET_ERROR与RDSYSINFO
除了通过博途在线查看,还可以通过编程方式在用户程序中读取诊断信息:GET_ERROR / GET_ERROR_ID
如果在代码块中添加了GET_ERROR或GET_ERROR_ID指令,便可在程序块中处理程序错误,实时获取当前块的执行错误信息。

RDSYSINFO指令

RDSYSINFO是系统函数块,可通过编程方式读取诊断缓冲区数据:
ITEM参数值
描述
诊断缓冲区最新一条有效条目
倒数第二条诊断条目
CPU运行模式变化记录
模块状态信息
️ 实战注意事项:调用频率不能太高,建议周期性扫描(如每5秒一次),频繁调用可能导致响应失败需在设备配置中勾选 "允许从用户程序访问诊断数据"未等待BUSY信号变为FALSE即进行下一次请求会导致数据无效接收变量应使用正确的结构体类型
六
状态LED vs 诊断缓冲区:互补而非替代

对比维度
状态LED指示灯
诊断缓冲区
信息量
粗略(红/绿/闪烁)
详细(事件ID、时间、描述、解决方案)
实时性
即时
需在线连接后查看
历史追溯
无(只能看当前状态)
有(最近50条事件)
适用场景
巡检、快速判断
故障排查、复盘分析
依赖软件
不需要
需要博途在线连接
正确姿势:  先用LED快速判断"有没有问题",再用诊断缓冲区精确定位"什么问题、在哪、怎么解决"。
七
3个典型故障案例

案例1:CPU突然停机现象: 设备运行中突然STOP,ERROR红灯亮。排查: 打开诊断缓冲区→看第一条事件→显示"未装载DB10,在OB30中对其访问"。原因: 程序访问了不存在的DB块,触发编程错误导致停机。解决: 在项目中创建DB10或修改程序中的DB引用。

案例2:PROFINET站点反复掉线现象: 设备间歇性通讯中断,DIAG灯红色闪烁。排查: 诊断缓冲区显示大量"PROFINET IO:站故障"和"PROFINET IO:站返回"交替记录,事件间隔仅几秒钟。原因: 从站硬件接线松动或网络干扰,导致通讯不稳定。解决: 检查PROFINET网线连接、交换机端口、从站供电,排除物理层问题。

案例3:数组越界导致停机现象: 系统运行一段时间后突然停机,重启后恢复正常,但几小时后又复现。排查: 诊断缓冲区显示"编程错误:访问地址超出允许范围(DB3,地址偏移65540)"。原因: 用于存储传感器历史数据的数组越界——DB块最大尺寸65536字节,程序试图写入第65540个字节,触发硬件级保护。解决: 扩大DB块容量或修改程序中的数组索引逻辑。

八
完整排障流程总结
记住这个排障口诀:停机先看灯,红灯进在线→打开诊断区,顶部第一条→点开看详情,原因和对策→排查按步骤,解决存记录。
完整流程:PLC停机报错 → 观察LED状态 → 博途转在线 → 进入诊断缓冲区 → 看顶部最新事件 → 点开详情看解决办法 → 按步骤排查 → 另存缓冲区留档
不用瞎猜、不用乱试,一分钟定位故障原因。
总结:诊断缓冲区是S7-1200排障的核心神器,但很多新手直到设备停了几次才学会用它。把它当成你的第一排障工具,而不是最后手段——会发现90%的"疑难杂症"其实都有明确的答案,只是没去读。
往期推荐

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码