作者 | 主题 |
---|---|
checkitout 官方工程师 经验值:1628 发帖数:180 精华帖:17 |
楼主 2018-05-07 16:20:09
主题:《Python 通过WebService 接口查询WinCC OA服务器的数据》 Python 作为功能强大的语言在很多领域都已经有所应用,在做数据分析或机器学习方面应用也比较多。 而WinCC OA通过Reporting Manager提供了一种WebService 接口,给第三方提供数据。 第三方软件或程序,如:Python,可以方便的通过这个WebService 接口读取到WinCC OA的实时和历史数据,从而进一步充分利用SCADA的数据。 下面给大家一个Python通过WebService接口查询WinCC OA实时数据的简单的例子参考,可以酌情修改适应自己的应用:
# -*- coding: utf-8 -*- #需要检查Python是否已安装了suds库 from suds.client import Client
# Reporting manager 需要在WinCC OA中启动 #Reporting manager 的使用和配置的具体内容请参考 #WinCC OA在线帮助 my_url="http://localhost:8080/?wsdl"
#webService 读取 #url:为webservice的地址 #data:为需要查询的数据 def wsQuery(url,data): client = Client(url)#创建一个webservice接口对象 #具体可以根据wsdl文件中描述的函数列表,灵活使用具体的服务调用 res=client.service.dpQuery(data) #print res #res[2][2][0] #[2][2][0] is dp name #res[2][2][2] #[2][2][1] is value
if(len(res)> 2): for i in range(0, len(res[2])): #打印查询结果 print str(res[2][i][0]) + '=' + str(res[2][i][1]) else: #如果没有查到数据 print "no data returned"
if __name__ =='__main__': #'Ex*': 返回所有以Ex打头的变量 #关于通配符的使用以及 SELECT 查询语法可以参考WinCC OA的在线帮助。 wsQuery(my_url,"SELECT '_online.._value' FROM 'Ex*.'")
注: 其中WinCC OA 返回给 Python的数据, 打印出来格式如下: (returnQueryValueList){ errorCode = 0 errorText = None table[] = (QueryValue){ column1 = "System1:ExampleDP_Arg1." column2 = 4.0 column3 = "" column4 = "" column5 = "" column6 = "" column7 = "" }, (QueryValue){ column1 = "System1:ExampleDP_Arg2." column2 = 50.0 column3 = "" column4 = "" column5 = "" column6 = "" column7 = "" }, ……. }
|