[西门子] 西门子S7-1200/1500-用程序诊断故障

[复制链接]
查看122 | 回复0 | 2025-3-19 10:34:51 | 显示全部楼层 |阅读模式
>

7.6 用程序诊断故障

7.6.1通过编写程序诊断故障

1.硬件组态

将项目“用博途诊断故障”另存为“用程序诊断故障”(见随书光盘中的同名例程)。双击指令树中的“设备和网络”,打开网络视图。CPU1516C-3PN/DP为IO控制器,设备名称为hsx1的ET200SP为1号10设备(见图7-39)。为了演示故障诊断功能,组态了一个并不存在的IO 设备ET200AL。将“硬件列表”窗口的文件夹“分布式I/O\ET 200AL\Interfacemodules\PROFINET”中的接口模块IM157-1PN拖拽到网络视图中,将它连接到PROFINETIO系统网络上。

选中ET 200AL的以太网接口,再选中巡视窗口的“属性〉常规〉以太网地址”,ET200AL 的 IO 设备的默认编号为2,IP地址为192.168.0.3。

2.用于故障诊断的指令

打开主程序OB1,指令列表的“扩展指令”窗格的“诊断”文件夹中的10条指令用于读取各种硬件信息和诊断信息。其中最重要和最实用的是“读取IO系统的模块状态信息”指令DeviceStates和“读取模块的模块状态信息”指令ModuleStates。可以在OB1和中断 OB(例如诊断中断OB82)中调用这两条指令。

3.编写诊断故障的程序

指令“DeviceStates”用于查询PROFINET IO 系统中所有IO设备的状态信息,或DP主站系统中所有DP从站的状态信息。

在OB1 中调用DeviceStates指令,参数LADDR为PROFINETIO系统或DP主站系统的硬件标识符。输入该参数时两次单击地址域的<???>,再单击出现的□按钮,选中列表中的“Local~PROFINETIO-System”,其值为261。

参数MODE的值为1~5时,分别读取整个PROFINETIO系统或DP主站系统的下列状态信息之一。MODE为1读取已组态的IO设备/DP从站;为2读取有故障的IO 设备/DP从站;为3读取已禁用的IO设备/DP从站;为4读取存在的IO 设备/DP从站;为5读取出现问题的IO设备/DP从站,例如有维护要求或维护建议、不可访问、不可用和出现错误的IO设备/DP从站。图7-40中该指令的MODE为2,用DeviceStates指令读取有故障的 IO 设备/DP从站。

InOut 参数 STATE用于输出由MODE参数选择的IO 设备或DP从站的状态,其数据类型为VARIANT。在全局数据块“诊断状态”(DB1)中,生成数组“IO设备状态”,数据类型为Array[0..4]of Bool,该数组由5个数据类型为Bool的元素组成,作为参数STATE的实参。数组元素的个数应大于等于IO设备的个数+1。

两条指令的返回值Ret_Val是指令执行状态,它们的实参是数据类型为Int的临时局部变量RET1 和 RET2。

指令“ModuleStates”用来读取PROFINET IO设备或PROFIBUS-DP从站中的模块状态信息。参数LADDR为IO设备或DP从站的硬件标识符。PLC默认的变量表中1号IO设备hsx1~IODevice的硬件标示符的值为267。

参数MODE的值为1~5时,分别读取模块的下列状态信息之一:模块已组态、模块故障、模块已禁用、模块存在,和模块中存在故障,例如有维护要求或维护建议、不可访问、不可用和出现错误。图7-40中该指令的MODE为2,用该指令读取有故障的模块。

InOut 参数 STATE用于输出由MODE参数选择的模块状态。在全局数据块“诊断状态”(DB1)中,生成数组“PN模块状态”,数据类型为Array[0..6] of Bool,该数组由7个数据类型为Bool的元素组成,作为参数STATE的实参。数组元素的个数应大于模块的个数+2。

4.故障诊断的实验

人为设置一些故障,将程序和组态数据下载到CPU,打开网络视图,单击工具栏上的“在线”按钮,由IO设备上的诊断符号可知1号IO设备ET 200SP有故障,CPU不能访问2号IO 设备 ET 200AL。

双击打开数据块“诊断状态”DB1(见图7-41),启动监控,打开两个数组,可以看到其中的诊断状态。

数组元素“IO设备状态[0]”为组显示,它为1(TRUE)表示网络上至少有一个IO设备有故障。“IO 设备状态[1]”和“IO设备状态[2]”为TRUE,表示1号IO设备ET 200SP和 2号IO设备ET 200AL有故障。如果“IO设备状态[n]”为TRUE,表示n号IO设备有故障。

ET 200SP 有3块模块有故障,2号槽的DI模块被拔出,3号槽的DQ模块和5号槽的AQ模块的输出负载断路。将组态信息和程序下载到CPU。打开网络视图,双击ET 200SP,打开它的设备视图。单击工具栏上的“在线”按钮,切换到在线模式。由模块上的诊断符号可以看到该IO设备的第2、3、5号槽的模块有故障。

数组元素“PN模块状态[0]”为组显示(见图7-41的右图),它为TRUE表示I0设备至少有一个模块有故障。“PN模块状态[n]”为TRUE,表示第n-1号模块有故障。数组“PN模块状态”的第3、4、6号元素为TRUE,表示第2、3、5号模块有故障。

切换到离线模式后,将指令DeviceStates的参数MODE改为4(读取存在的IO设备),将程序下载后,“IO设备状态[1]”为TRUE,“IO设备状态[2]”为FALSE,表示1号IO设备ET200SP存在,2号I0设备ET200AL不存在。

可以用HMI画面上的指示灯,显示指令DeviceStates检测到的有故障的IO设备/DP从站,

以及指令ModuleStates检测到的有故障的模块。

本节配套的视频教程为“用指令诊断故障”。

7.6.2通过用户自定义报警诊断故障

通过调用“生成具有相关值的程序报警”指令Program_Alarm (FB),可以创建一个基于过程事件的报警消息。可以用前述的各种显示方法显示报警消息。

本例要求水轮发电机组的转速超过300转时,触发一个报警消息,并且在该报警消息中,包含事件触发时的机组转速。

打开上一节的项目“用程序诊断故障”,双击指令树的“程序块”文件夹中的“添加新块”,生成函数块FB1。在FB1的接口区,生成数据类型为Program_Alarm的静态变量“自定义报警”。

将指令列表的“扩展指令”窗格的“报警”文件夹中的指令Program_Alarm拖拽到FB1的程序区。在打开的“调用选项”对话框中(图7-42),“多重背景”按钮被自动选中。用下拉式列表设置“接口参数中的名称”为“自定义报警”,用它提供指令Program_Alarm的多重背景数据。

在图 7-43 中的指令Program_Alarm的输入信号SIG的上升沿(转速刚大于300转/分钟)生成一个到达的程序报警,下降沿(转速刚小于300转/分钟)生成一个离去的程序报警。在程序的执行过程中,将同步触发该程序报警。输入参数TIMESTAMP(时间戳)如果设置为默认的“未分配”(即灰色的LDT#1970-01-01-00:00:00.0),意味着当信号发生变更时将使用CPU 的系统时间作为报警消息的时间戳。如果中断的时间戳使用本地时间,则必须用一个转换模块将本地时间转换为系统时间。

选中指令Program_Alarm,再选中巡视窗口中的“属性>报警〉基本设置”,用“报警类”选择框设置是否需要确认。在“报警文本”框中输入报警文本。用右键单击报警文本中要插入变量“转速”值的位置,选中出现的对话框(见图7-44的左图)中的“插入动态参数(变量)..”。单击出现的对话框(见图7-44的右图)中的“变量”列表框右边的按钮,选中PLC变量表中的变量“转速”,在报警文本中嵌入变量“转速”(见图7-43)。在“格式”域设置显示的格式。

选中图7-43 巡视窗口左边窗口的“附加报警文本”,设置信息文本“转速超过300转/分钟时报警”。此外还可以设置9条附加文本。

在报警文本中嵌入变量“转速”后,“转速”自动出现在指令Program_Alarm的SD_1输入端(见图7-43)。单击指令框下边沿的三角形符号▼,可以看到隐藏的输入参数SD_2~SD_10,如果有多个变量嵌入报警报文中,它们将依次出现在SD_2~SD_10输入端。单击指令框下边沿的按钮,将隐藏输入参数SD_2~SD_10。



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

本帖子中包含更多资源

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

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

本版积分规则