[西门子] 西门子S7-1200/1500怎样利用诊断错误组织块(OB82)来诊断模块...

[复制链接]
查看33084 | 回复0 | 2024-8-21 20:01:04 | 显示全部楼层 |阅读模式
之前我曾经写过S7-300/400利用诊断错误组织块进行错误诊断的文章(见:如何使用中断组织块OB82对系统进行故障诊断?),由于S7-1200/1500的组织块接口有些不同,今天我们来介绍下在S7-1200/1500下利用诊断错误组织块来诊断模块错误的方法。



很多模块本身具有诊断功能,比如S7-1500的模拟量输入模块AI 4xU/I/RTD/TC,它是具有4个模拟量输入通道的模块,能接收电压/电流/热电阻/热电偶等模拟量信号(通过硬件配置选择不同的信号类型)。它集成了多种诊断功能,比如可以检测信号的上溢、下溢、断线、无电源电压等,如下图所示:



不过这些诊断功能默认是关闭的,当我们想激活某个诊断功能时,比如断线,需要手动勾选它。当勾选后,该功能就被激活。如果模块检测到该通道连接的传感器出现断线故障,它就会发送一个诊断中断给CPU。CPU接收到该诊断中断后,会尝试调用诊断错误组织块(OB82)。如果CPU没有找到该组织块,将进入停机模式。所以,要启用诊断并且不让CPU停机,首先要添加诊断错误组织块(OB82)并下载到CPU中。

添加的方法如下:

在项目树“程序块”双击“添加新块”,在弹出的对话框中选择“组织块”→“Diagnostic error interrupt(诊断错误中断)”,如下图所示:



该组织块的输入参数如下图所示:



各参数的含义如下:


    IO_State:表示模块的状态(16位)。第0位表示组态是否正确,1=正确,0=错误;第4位表示是否出现错误,1=有错误,0=无错误;第6位表示是否有I/O范围错误,1=有错误,0=无错误;

    LADDR:模块的硬件标识符;

    Channel:模块的通道编号;

    MultiError:是否有多个错误,1=有,0=无;


CPU在接收到诊断错误中断后,会调用诊断错误中断组织块(OB82),并且将相关的信息赋值给该组织块的输入参数,我们可以在组织块OB82中编写代码将相关信息保存到全局数据块中,以便在某个具体模块的中进行判断。

比如,我创建了全局数据块“GlobalDiagnostic_DB82”,如下图所示:



在OB82中编写代码如下:



在传感器的函数块中,可以通过与GlobalDiagnostic_DB82中的信息进行比较,获得模块的诊断信息,从而判断传感器是否发生断线等错误。如果有错误发生,可以触发报警提醒操作人员。

诊断错误中断组织块在错误发生时被操作系统调用一次,当错误消失后会再调用一次。如果有多个模块发生类似错误,只能当上一个错误消除后,才会触发下一个错误的消息。


本帖子中包含更多资源

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

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

本版积分规则