怎样编程实现对PROFINET子站的诊断?
怎样编程实现对PROFINET子站的诊断?
founderchip
原创工业智能控制领域(PLC、单片机、嵌入式、机器人、通信)的技术及经验分享。
前几天读书群中有小伙伴提出一个实际项目的客户需求:在HMI屏幕上显示当前系统的子站状态,比如哪些站点已经组态?哪些站点在报错?这涉及到如何对PROFINET子站进行诊断。今天这篇文章,我给出一种解决方案。
在西门子S7-1200/1500硬件条件下,我们可以使用诊断指令“DeviceStates”来实现对子站的诊断功能,具体方法如下:
在博途指令列表的“扩展指令”→“诊断”中找到DeviceStates指令,其基本语法如下:
DeviceStates(LADDR:=_hw_iosystem_in_,
MODE:=_uint_in_,
STATE:=_variant_inout_)
指令中各参数含义如下表所示:
| 名称 | 类别 | 数据类型 | 说明 |
|---|---|---|---|
| LADDR | 输入 | HW_IOSYSTEM | PROFINET IO硬件标识符 |
| MODE | 输入 | UInt | 要读取的状态信息类别 |
| STATE | 输入/输出 | Variant | 状态缓存区 |
参数MODE有如下几种取值:
1=已经组态的I/O设备;
2=出现故障的I/O设备;
3=被禁用的I/O设备;
4=存在的I/O设备或者说找到的I/O设备;
5=出问题的I/O设备,比如不可用,不可访问的;
STATE是布尔型数组,其第0个元素表示组的状态,若其值=1,则表示数组中至少有一个数据满足查询要求;从1个元素开始,表示相应编号的子站是否满足查询要求,1=满足,0=不满足。
回到文章开头的问题,我们使用DeviceStates来查询三种状态:已经组态的子站(MODE=1)、成功找到的子站(MODE=4)及出现故障的子站(MODE=2),将指令执行的结果存放到全局数据块中。
为了方便,新建用户自定义数据类型:typeNetDiagnostic,它是布尔型数组,如下图所示:
新建全局数据块NetDiagnosticDB,其元素IODeviceState是有三个元素的数组,其数据类型为用户自定义类型typeNetDiagnostic,如下图所示:
新建函数块FB5009_NetDiagnostic,其参数如下:
代码如下:
在主程序中调用该函数块,并对参数进行赋值,代码如下:
说明:参数“270”是当前组态的PROFINET的硬件标识符。
编译下载程序运行,在线查看运行结果。
在我的当前系统中组态了三个子站,站号分别是11,13和16,如下图所示:
已经成功找到的站点也是11,13和16 ,如下图所示:
出故障/在报错的站点是11,如下图所示:
这样就可以通过触摸屏(HMI)向外展现站点的诊断信息,可以通过动画演示,让人一目了然的看到所有站点的状态。
好了,关于PROFINET子站的诊断就先介绍到这里。我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》的第11.5.3节也对这个指令有详细的介绍,还配有相关的视频。如果你感兴趣的话,可以看看下面的链接:
如果你已经购买了这本书,想加入读书群,可以私信我。
你喜欢,就好
微信扫一扫赞赏作者
赞赏
发送给作者
人赞赏
长按二维码向我转账
你喜欢,就好
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
