基于Python读/写OPC服务器tag值的方法

阅读量224877

发布时间 : 2021-06-07 16:30:04

 

作者:thx

01.前言

最近在研究这样一个需求,通过OPC服务器的方式把多个PLC的数据集成到一个监控画面,OPC服务器通过硬件驱动获取设备的数据,上位监控再获取OPC服务器的数据,数据获取的方式可以是第三方成熟的OPCClient,也可以基于python开发来读/写数据,本文介绍了一种基于python开发的思路,当然这里要借助OpenOPC这样的python插件。

 

02.实验环境

OPC原理

OPC是工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据。O代表OLE(对象链接和嵌入)P (process过程)C (control控制)

OPC标准采用CS模式,OPC服务器负责向OPC客户端不断的提供数据。OPC服务器包括3类对象(Object):服务器对象(Server)、组对象(Group)和项对象(Item)

1OPC服务器对象维护有关服务器信息,并作为OPC组对象的包容器,它提供了对数据源进行读/写和通信的接口方法,可以动态地创建或释放组对象。

2OPC组对象由客户端定义和维护,它维护有关其自身的信息,提供包容OPC项对象的机制,从逻辑上实现对OPC项的管理。

3OPC项对象包含在OPC组中,可由客户端定义和维护。项代表了与数据源的连接,所有的OPC项的操作都是通过包容此项的OPC组对象完成的。

KEPServerEX

KEPServerEX是第三方的OPC服务器,各不同厂家多种设备下位PLC与上位机之间通讯。

真实实验环境的搭建如下图:

工具:pythonOpenOPC

工控设备:博智工控安全实验箱,提供s71200omron 2PLC,运行了5种工艺场景,本实验中以锅炉热水系统为实验的工艺场景。s71200omron PLCIP地址分别为172.16.28.112172.16.28.111.

opc服务器:KEPServerEX V5IP地址为172.16.28.252

上位监控:IP地址为172.16.28.197

PC操作系统:opc服务器及上位机都采用windows XP SP3

 

03.服务端KEPServer搭建

新建通道:New Channel

1)在OPC服务器中打开“KEPServerEX 5 Configuration”软件,新建一个工程,再单击软件界面“Click to add a channel.”或者工具栏上的“New Channel”,新建一个通道,修改通道名“Channel name”或不作修改:

2)选择你想分配给本通道的设备驱动“Device driver”,这里选择“Siemens TCP/IP Ethernet”,另外的omron PLC可以选择“Omron FINS Ethernet”:

3)完成通道的建立

新建设备:New Device

1)单击软件界面“Click to add a device”或者工具栏上的“New Device”,进行设备设置,修改设备名称为”s71200”

2)选择设备模型“Device model, 这里我们选择“S7-1200”,如果是omron PLC则选择“CS1”。

3)选择设备IDDevice ID, 这里指的是所要连接的PLC设备的IP地址。假如IP地址为:172.16.28.112,则设置如下:

4)完成新设备的添加。

新建标签:New Tag

1)单击软件界面“Click to add a static tag”,或者工具栏“New Tag”增加一个标签。设置Tag属性,定义名称,和地址。这里的地址要与PLC中定义的变量地址对应,例如,在博智工控安全实验箱中的S71200PLC中定义了一个如下的变量,在本通讯实例中我们只应用红框中的3个变量。

2)在KEPServer中创建3tag与上面的s71200 PLC3个变量对应,如下图。Omron PLC的创建方法类似。

4)最小化KEPServer

 

04.DCOM配置

在这里需要针对客户端(上位机)和服务端(OPC服务器)都要进行DCOM的配置,DCOM的配置资料网上较多,可以自行参考。

 

05.OPC客户端开发工具配置

1)在需安装pyhton工具,实验中使用的版本为V2.7.17。另外还要准备OpenOPCOpcOpen是一个开源的软件,通过安装一个服务,允许远程的TCP/IP链接传输OPC数据,从而越过DCOM来访问远程OPC服务器。

2)运行OpenOPC-1.3.1.win32-py2.7.exe安装文件,默认安装选择,如下图:

2)再运行pywin32-221.win32-py2.7.exe文件,点击“下一步”如下图:

3)完成客户端的配置。

06.pyhton运行环境读取OPC服务的值

1)根据05章节的建立的3tag

2)在OPC客户端编写读/tag namesp的值脚本如下:

3)逐行运行后,先写入tag值再获取tag位号的当前值:

4)操作时,用wireshark获取的流量,如下:

5)同时我们可以观察博智工控安全实验箱中锅炉热水系统场景中,频率设定值已被修改为40,原来值为30

6)获取tag namestart的值脚本如下:

7)最后我们也可以第三方OPCClient的获取,方式如下:

 

05.总结

本文只是以Python作为开发平台,利用Python的第三方OPC支持组件,逐步构建OPCClient的一种方式,更多的工作量还需前端显示界面的开发等。

本文由博智安全原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/242697

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
博智安全
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66