以下内容节选自机械工业出版社出版的西门子自动化技术丛书----《SIMATIC S7- 1500 与 TIA博途软件使用指南》, 作者崔坚。更多更详细的内容请您参考《SIMATIC S7- 1500 与 TIA博途软件使用指南》一书。
通过编写程序实现诊断
S7-1500 PLC也支持通过编写用户程序实现对系统的诊断。比如可以通过程序判断一个模块或I/O站的工作状态,该类指令位于“指令列表”—>“扩展指令”—>“诊断”目录下,如图12- 20所示。
图12- 20 诊断指令列表
下面通过示例的方式,介绍其中几个典型诊断指令的使用。
1) LED指令
在PLC中调用“LED”指令可实现对CPU的STOP/RUN、ERROR、 MAINT 3个LED的状态查询,程序调用如图12- 21所示。
图12- 21 LED诊断指令
参数 LADDR数据类型为“HW_IO”,调用时需要赋值CPU 的硬件标识符。例如,要查询 CPU LED (STOP/RUN) 的状态,需将硬件标识符“Local~Common”赋值给LADDR;1赋值给LED(表示查询STOP/RUN灯的状态)。根据LED指令返回的状态值“Ret_Val” 即可判断CPU的LED指示灯工作状态,示例中CPU工作在RUN模式。
2) DeviceStates 指令
通过调用“DeviceStates”指令可以读出PROFINET IO或者PROFIBUS-DP网络系统中IO设备或者DP从站的故障信息。该指令可以在循环 OB 以及中断 OB(例如,诊断中断OB82 )中调用。下面以示例的方式介绍如何使用DeviceStates 指令查询PROFINET IO和PROFIBUS-DP网络上有故障的站点。
在本示例中,S7-1516 CPU分别通过PN和DP接口分别连接了PN和DP的分布式I/O,系统配置如图12- 22所示。
图12- 22 S7-1500系统配置图
在CPU 中,插入一个循环中断 OB 200,并在该OB中调用“DeviceStates”指令,用于查询PROFINET IO网络上有故障的IO设备,如图12- 23所示。
图12- 23 使用“DeviceStates”指令对PROFINET网络进行诊断
同样再次调用“DeviceStates”指令,用于查询PROFIBUS-DP有故障的从站,如图12- 24所示。
图12- 24 使用“DeviceStates”指令对PROFIBUS网络进行诊断
“DeviceStates”指令参数介绍:
LADDR:PROFINET IO 或 DP 主站系统的硬件标识符,可以在项目树下的“PLC变量”->“显示所有变量”->“系统常量”中,查看名称分别带PROFINET和DP字样、数据类型为 “Hw_IoSystem”的变量。可以看到,对应PN网络的值为259,而对应DP网络的值为284,如图12- 25所示。
图12- 25 查看系统常量表确定PROFINET IO或DP主站系统的硬件标识符
MODE:通过对MODE赋不同的值,可以对分布式IO站的不同状态进行诊断:
1: IO 设备/DP 从站已组态
2: IO 设备/DP 从站故障
3: IO 设备/DP 从站已禁用
4: IO 设备/DP 从站存在
5: 出现问题的 IO 设备/DP 从站,例如:维护要求或建议、不可访问、不可用或出现错误。
Ret_Val:指令执行状态
STATE:每一个位信号指示一个IO设备/DP从站的状态,与 MODE 参数有关。示例中MODE选择2,表示查询PROFINET IO和PROFIBUS-DP 网络上有故障的从站。如果位0 = 1(组显示), 指示网络上至少有一个 IO 设备/DP 从站有故障。位n = 1,指示设备编号/DP地址为“n”的IO设备/从站有故障。
对于 PROFINET IO 系统,IO 设备的设备编号可以在“接口模块的属性”->“以太网地址”界面中PROFINET设备编号中查看,如图12- 26所示,设备编号为1 。
图12- 26 查看PROFINET设备编号
对于“STATE”参数,建议使用“BOOL”或“Array of BOOL”作为其变量的数据类型。如果仅需输出组信息(位0状态),在 STATE 参数中使用“ BOOL ”数据类型;如果需要输出所有 IO 设备/DP 从站的状态信息,在STATE参数中使用“Array of BOOL”数据类型。这种情况下, 对于PROFINET IO 系统需要1024 位,而对于 DP 主站系统需要128 位。
例如,在CPU 中创建一个全局DB 块,并在该DB块中创建一个名称为“PN_Device_Status”的数组变量,类型为 Array of BOOL,长度1024,那么这个数组变量可作为STATE参数的变量,用于指示有故障的IO设备,如图12- 27所示。
图12- 27 为“DeviceStates”的STATE参数建立数据区
同样,也可以创建一个“PB_Device_Status”的数组变量,类型为 Array of BOOL,长度128,用于指示有故障的DP从站。
3) ModuleStates指令
可以通过调用“ModuleStates”指令对某个分布式I/O上的模块进行诊断,例如,可以读取 PROFINET IO 设备或 PROFIBUS DP 从站中模块被拔出的当前信息或者模块存在的故障信息。
下面以示例的方式介绍如何使用“ModuleStates”指令查询一个PROFINET IO站点是否存在有故障的模块。该指令可以在循环 OB 以及中断 OB(例如,诊断中断OB82 )中调用。
在CPU 中,插入一个循环 OB 200,在该OB 中调用“ModuleStates”指令,如图12- 28所示。
图12- 28 使用“ModuleStates”指令对分布式IO站的模块进行诊断
“ModuleStates”指令参数介绍:
LADDR:分布式IO站的硬件标识符,该标识符可以在“PLC变量”->“显示所有变量”->“系统常量”中,查看名称分别带IODevice和DPSlave字样、数据类型为 “Hw_Device”或“Hw_DpSlave”的变量。 如图12- 29所示,该系统有2个PN站点,值分别为268和264;一个DP站点,值为285,示例中选择硬件标识符为264的站点。
图12- 29 查看系统常量表确定IO设备/DP从站的硬件标识符
MODE:通过对MODE赋不同的值,可以对分布式IO站点上模块的不同状态进行诊断:
1: 模块已组态
2: 模块故障
3: 模块禁用
4: 模块存在
5: 模块中存在故障。 例如:维护要求或建议、不可访问、不可用或者出现错误
Ret_Val:指令执行状态。
STATE:每一个位信号指示一个模块的状态,与 MODE 参数有关。示例中MODE选择2,表示查询站点上有故障的模块。如果位0 = 1,指示 站点上至少存在一个模块有故障;位n = 1,指示第n-1(例如:位 3 对应插槽 2)号插槽中的模块有故障。
在CPU 中创建一个全局DB 块,并在该DB块中创建一个名称为“PN_Module_1_Status”的数组变量,类型为 Array of BOOL,长度128,那么这个数组变量可作为STATE参数的变量,用于指示有故障的模块,如图12- 30所示。
图12- 30 为“ModuleStates” 的STATE参数建立数据区
“DeviceStates”和“ModuleStates”指令可以配合使用,用于PLC系统中所有PN和DP总线系统以及分布式I/O站点中各模块状态的诊断。