S7-1200支持诊断错误中断,可以为具有诊断功能的模块启用诊断错误中断功能来检测模块状态。
出现故障(进入事件),故障解除(离开事件)均会触发诊断中断OB82。当模块检测到故障并且在软件中使能了诊断错误中断时,操作系统将启动诊断错误中断,诊断错误中断OB82将中断正常的循环程序优先执行。此时无论程序中有没有诊断中断OB82,CPU都会保持RUN模式,同时CPU的ERROR指示灯闪烁。如果希望CPU在接收到该类型的错误时进入STOP模式,可以在OB82中加入STP指令使CPU进入STOP模式。
与诊断错误OB82相关的信息当触发诊断错误中断时,通过OB82的接口变量可以读取相应的启动信息,可以帮助确定事件发生的设备、通道和错误原因。OB82的接口变量及启动信息如图1、表1所示。

图1.OB82接口变量
输入
数据类型
说明
IOstate
WORD
设备的IO状态:
如果组态正确,则位0=1,如果组态不正确,则位0=0
如果出现错误(如断线),则位4=1。(如果没有错误,则位4=0)
如果组态不正确,则位5=1,如果组态再次正确,则位5=0。
如果发生了I/O访问错误,则位7=1。有关存在访问错误的I/O的硬件标识符,请参见laddr。(如果没有错误,则位6=0。)
laddr
HW_ANY
报告错误的设备或功能单元的硬件标识符
channel
UINT
通道号
multierror
BOOL
如果存在多个错误,参数值为TRUE
表1.OB82启动信息
诊断错误OB的使用示例:
例如:模拟量输出模块SM1232的电压输出通道,对于通道1使能短路诊断,当通道1出现短路错误时,随即触发诊断错误OB82,此时可从OB82的启动参数中读取诊断信息。
1、按如下步骤创建诊断错误OB82。如图2所示。

图2.创建诊断错误OB82
2、OB82中编程如下图,创建地址为MW100、MW102、MW104的变量用于存储出现诊断错误时读取到的启动信息。如图3所示。

图3.OB82中编程
3、在硬件组态窗口中,选中模拟量输出模块,选择模拟量输出通道1的“启用短路诊断”功能。如图4所示。

图4.设置诊断功能
4、测试结果:程序下载后,在监控表中给“channel1”设置输出值5000,如果此时出现了短路故障,则将立即触发诊断错误功能。如图5所示。
图5.测试结果
常见问题触发诊断错误中断时,CPU如何响应?
1、启用诊断错误中断且CPU中创建了OB82;
2、OB82是唯一支持诊断错误事件的OB;一次只能报告一个通道的诊断错误;
3、如果多通道设备的两个通道出现错误,则第二个错误只会在以下情况触发OB82:第一个通道错误已清除,由第一个错误触发的OB82已执行完毕,并且第二个错误仍然存在;
4、事件的进入或离开都会触发一次OB82;
5、触发OB82,CPU不会进入STOP模式。
哪些情况会触发诊断错误中断?
如下错误将触发诊断错误中断OB82:
①无用户电源
②超出上限
③超出下限
④断路(电流输出、电流4~20mA输入、RTD、TC)
⑤短路(电压输出)





