西门子 S7-1200 DeviceStates 诊断功能块编程实例 点击:24 | 回复:0



EE_Notes

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 0回
  • 年度积分:11
  • 历史总积分:11
  • 注册:2025年8月21日
发表于:2025-08-22 09:27:33
楼主

随着自动化系统规模逐渐增大,控制目标的种类越来越多,采用一个统一标准的网络协议,将各组件整合,以便于PLC控制是未来趋势。随着网络内组件的增多,通讯诊断程序成为了一个完整PLC程序必须包含的内容,简单易读的诊断程序可以帮助工程师和操作维护人员方便快速确认网络故障点,排除故障,减少停机。本例以一套西门子Profinet网络为实例,分享DeviceStates功能块的使用。

  实例网络视图如下:

图片

  该套设备控制器为 S7-1200 CPU 1214C,通过PN网络扩展了一套分布式I/O、4台G120变频器、2台V90伺服驱动器和一台HMI终端。使用DeviceStates功能块诊断这些网络组件的网络状态,以便网络发生故障时PLC做出连锁反应,HMI做出必要指示。

  本例在OB1组织块调用DeviceStates诊断功能块,该功能块可通过STATE参数引脚,输出由MODE参数指定的特定诊断功能的网络从站的布尔值状态。

图片
  DeviceStates功能块引脚定义如下:
图片
  首先在全局数据块创建一个数据类型为Array of Bool,数据长度为1024的数据组和一个数据类型为Int的两个变量。
图片
图片
  然后LADDR引脚分配网络系统硬件标识:双击引脚下拉菜单,选择本地网络I/O系统硬件标识即可。
图片
图片
之后指定MODE引脚参数,下图给出了各参数值代表的诊断功能含义,本例为了判断丢站、断线故障,选择参数值2即可。
图片

再然后分配STATE引脚地址,DeviceStates诊断功能块会将各从站诊断结果写入STATE引脚指定的数据组。双击引脚下拉菜单,选择之前在全局数据块中创建的数据类型为Array of Bool,数据长度为1024的数据组。

图片
最后分配Ret_Val功能块出错信息存储地址,DeviceStates诊断功能块会将诊断过程中功能块本身的正常或错误值写入该地址。其值代表含义如下表所示:
图片
分配之前在全局数据块创建数据类型为Int的变量。当该值结果为0,得到的诊断结果有意义。
图片
所有引脚分配完毕参数后,得到如下程序:
图片
这样当组织块OB1程序进入运行,PLC每个扫描周期都会执行网络诊断,输出诊断结果。那么怎么读取诊断结果,诊断结果和我们实际的设备又是如何对应的呢?我们添加在网络的变频器、伺服驱动器和分布I/O设备博途会分配给每个设备一个硬件编号,如下图所示:
图片

而我们之前在全局数据块中创建的数据类型为Array of Bool,数据长度为1024的数据组中的每一个Bool变址位对应着一个设备的硬件编号,对应关系如下:

图片变址0位为网络中至少有一台设备丢站或者出现网络故障,之后变址1位对应硬件编号1的设备,变址2位对应硬件编号2的设备,以此类推。变址值为1表示发生丢站,变址值为0表示该硬件编号设备网络通信正常。知道了这个对应关系我们就可以把需要诊断的设备的硬件编码提取出来编程使用,如下例:

图片

即可表示硬件编号为1、2、3、4、5、6、7的设备编组网络诊断情况。

  引申一步,可以将这些变址信息赋值给HMI画面的动画效果,设置方法如下图所示:

图片

  这样,当设备编号为3号的G120变频器出现丢站或网络故障,对应编组的网络诊断页面该设备就会消失,更直观的为工程师和操作员提供检修指示。

  DeviceStates功能块的使用就介绍到此,篇幅有限不能尽述,也可能有所遗漏。本例是以Profinet为例介绍,用于Profibus网络诊断,诊断输出变址是和Profibus从站号对应,其他并无大异。其功能和我们之前使用的FB125和简化版FC125类似。其实,在博途里还有两种方法可以完成这个诊断工作,欢迎大家留言区讨论。























楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师