首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >西门子S7-1200/1500系列PLC如何采用GET_DIAG指令获取第三方IO模块的通信状态?

西门子S7-1200/1500系列PLC如何采用GET_DIAG指令获取第三方IO模块的通信状态?

作者头像
Hello工控
发布2025-12-23 14:39:10
发布2025-12-23 14:39:10
2440
举报
文章被收录于专栏:Hello工控Hello工控

我们在项目中,如果是西门子PLC的分布式IO模块,可以通过调用 DeviceStates 指令或者ModuleStates指令来获取模块的详细信息。

下图是采用DeviceStates指令来获取两个IO device的状态信息,当IO device故障的时候,state的对于的bool量值置为TRUE:

那针对第三方支持PN通信的一些IO模块的状态可以通过什么指令获取呢?

诊断指令

打开博图软件,我们可以在【指令】-->【诊断】栏下方找到详细的诊断指令,包括我们提到的DeviceStates和ModuleStates,如下图所示:

还有可以读取LED状态来读取CPU上面LED的状态等等,这样就可以很方便的在程序中使用它,并且可以做在触摸屏HMI上做详细的报警或指示,很方便查看设备的状态和实际的故障。

GET_DIAG

我们这次项目用到的是第三方的国产PN IO模块,从说明书及资料上看,可以通过GET_DIAG指令来获取具体的模块状态信息。

具体的参数:

其中,Mode模式的选择参考下面解释:

我们此示例采用Mode=1即可获取IO模块的所有状态信息。而当参数 MODE = 1 时,以 DIS 结构输出诊断信息。此时,在变量声明中输入系统数据类型“DIS”作为数据类型。

图片
图片

DIS数据结构

数据类型“DIS”具体包括以下几个参数:

具体的接口信息可以打开TIA,按下F1进入帮助系统查询。

示例

我们通过这种方式,新建程序后下载,打开监视,如下图所示:

我们通过这个DIS结构里面的OwnState可以确定:

模块不可访问,实际我们查看现场,确实该模块没有通电,所以处于不可访问的状态。

另外,IOState为16进制的8020,我们转换成2进制:

即第15位和第5位=1,查询对照如下表:

结合这些信息,就是硬件无法访问,跟实际现场对应上了,这样把它做成报警信息,显示在触摸屏上,直接可以看到模块无法访问,就能直接准确快速定位到具体IO模块设备,实现高效快速解决问题。

好了,关于第三方设备的通信问题,你是通过哪种方式获取的呢?有更好的方法请留言讨论哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hello工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 诊断指令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档