西门子PLC在OB82中使用SFB54进行诊断

工业控制

1201人已加入

描述

诊断错误 OB82

● 诊断错误 OB82 的功能

S7-1200支持诊断错误中断,可以为具有诊断功能的模块启用诊断错误中断功能来检测模块状态。

出现故障(进入事件),故障解除(离开事件)均会触发诊断中断 OB82 。当模块检测到故障并且在软件中使能了诊断错误中断时,操作系统将启动诊断错误中断,诊断错误中断 OB82 将中断正常的循环程序优先执行。此时无论程序中有没有诊断中断 OB82,CPU 都会保持 RUN 模式,同时 CPU 的 ERROR 指示灯闪烁。如果希望 CPU 在接收到该类型的错误时进入 STOP 模式,可以在 OB82 中加入 STP 指令使 CPU 进入 STOP 模式。

● 与诊断错误 OB82 相关的信息

当触发诊断错误中断时,通过 OB82 的接口变量可以读取相应的启动信息,可以帮助确定事件发生的设备、通道和错误原因。OB82 的接口变量及启动信息参考下图1、2。

西门子

图1. OB82 接口变量

西门子

图2. OB82 启动信息

● 诊断错误 OB 的使用示例:

例如:模拟量输出模块 SM1232 的电压输出通道,对于通道1使能短路诊断,当通道1出现短路错误时,随即触发诊断错误 OB82 ,此时可从 OB82 的启动参数中读取诊断信息。

1、按如下步骤创建诊断错误 OB82 。如图3。

西门子

图3. 创建诊断错误 OB82

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

西门子

图4. OB82 中编程

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

西门子

图5. 设置诊断功能

4、测试结果:程序下载后,在监控表中给“channel1”设置输出值5000,如果此时出现了短路故障,则将立即触发诊断错误功能。如图6。

西门子

图6. 测试结果

在 OB82 中使用 SFB 54 进行诊断 

支持诊断的信号模块和功能模块将检测内部和外部错误,并生成诊断中断(可通过调用中断 OB 对其进行响应)。与错误事件有关的 OB 编码和开始信息提供有关错误原因和位置的初始信息。  

然后可以通过在此错误 OB 中调用 SFB54(读取附加的中断信息)获得详细的错误事件信息。 

SFB54 功能 

SFB54“RALARM”将从支持诊断的所有模块读取中断数据,而不管这些模块是插入到中央机架中还是用在 PROFIBUS DP 或 PROFINET IO 中。  

此信息将写入到输出参数 STATUS、ID、LEN、TINFO 和 AINFO。可以在 TINFO 目标区域中找到 OB 启动和管理信息。页眉信息和附加的中断信息(例如,发生短路)位于 AINFO 目标区域中。 

通过在 OB82 中调用 SFB54 进行诊断 

如果支持诊断的模块检测到错误,它将向 CPU 输出诊断中断请求(不管是进入事件还是离开事件)。这要求已对相关模块启用诊断中断。操作系统调用 OB82 以对诊断请求进行响应。 

OB82 的局部变量包含逻辑基址和关于故障模块的四个字节的诊断数据。如果未对 OB82 进行编程,则 CPU 状态将更改为 STOP。 

使用 SFB54 对 OB82 进行编程 :

要求: 

1.   您已创建并命名了新的 STEP 7 项目。 

2.   您已添加了带有 CPU 317-2 PN/DP 的 SIMATIC 300 站。 

3.   您已在 CPU 317-2 PN/DP 的 PROFINET 子网上组态了 ET 200S。 

执行以下步骤: 

1.   生成可以存储中断数据的背景数据块(IDB)。为此 IDB 分配称“IDB_SFB54”。 

2.   插入 OB82 

–  在 STEP 7 中打开您的项目 

–  选择  Insert(插入) -> S7 block(S7 块)-> Organization block(组织块),然后在对话框中输入块名称“OB82”。 

3.   启动 LAD/STL/FBD 编辑器 

–  双击“OB82”符号,打开 LAD/STL/FBD 编辑器。 

4.   声明 SFB54 中的变量 

–  在对话框中输入“CALL SFB54, DB54”以调用 SFB。 

–  然后为 SFB54 的参数分配从下表中获取的值。 

CALL  SFB54, DB54  通过实例 DB54 调用 SFB54 

MODE :=  1  将设置所有输出参数(与中断触发组件无关) 

F_ID :=   不必进行设置,因为 F_ID 在模式 1 下不相关

MLEN :=  1500  将要读取的记录信息的最大长度设置为 1500 字节 

NEW :=  M1000.1  如果已接收新记录,则存储器位 1000.1 = 1 

STATUS :=  MD10  MD10 包含错误代码 

ID :=  MD16  存储器双字 16 包含模块或子模块的逻辑起始地址,该地址用于接收中断。 

LEN := MW24  存储器字 24 返回读取的记录信息的长度 

TINFO := P#M 500.0 BYTE 32  指向 MB500 的 ANY 指针,长度为 32 个字节 

AINFO :=  P#M 1500.0 BYTE 1431  指向 MB1500 的 ANY 指针,长度为 1431 个字节 

在标志字节 500 或 1500 处开始,输入 TINFO 和 AINFO 变量中返回信息,长度为 32 字节或 1431 字节。TINFO 和 AINFO 目标区域的数据存储器未完全分配,取决于哪个 OB 调用 SFB54。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分