如何使用python轻松地从historian中提取数据?

2024-09-28 22:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Proficy历史学家和Python相当陌生。我的应用程序的目的是开始从Proficy中提取数据。在

GE(Proficy)Historian安装在虚拟机Server A上,而我的python安装在另一个VM Server B上。在

这两台服务器都在同一个防火墙和同一个VLAN中,因此它们可以通信。在

但我不确定我要找的最简单的方法是。。。有什么帮助吗?在


Tags: 数据方法目的服务器应用程序servervm防火墙
2条回答

您可以使用proficy iHistorian附带的oledbapi,请参阅manual of iHistorian。在手册中,您可以找到可用的表和SQL代码的一些示例。检查API是否正确安装了iHistorian附带的“Historian Interactive SQL”程序。在

我使用了python包PyADO来连接到oledbapi(从GitHub Gist获得,还需要包'win32com'和'pythoncom')。该模块在PyPi上不可用,所以只需下载它,提取它并将其放入“site packages”文件夹(或您当前的工作目录)。代码中有一些错误,请在'皮亚多.py'将“不等于”的所有“<;>符号替换为”!='. 对于python3的用法,还将所有print语句从“print blablabla”更新为“print(blablabla)”。为了提取数据,以下内容就足够了(我包括了“prettytable”以获得数据的适当打印):

import PyADO
from prettytable import PrettyTable

conn = PyADO.connect(None,host='IHISTORIAN_SERVER_NAME',user='USERNAME',password='PASSWORD',provider='iHOLEDB.iHistorian.1')
curs = conn.cursor()

curs.execute("SELECT timestamp, value, quality, tagname FROM ihrawdata WHERE samplingmode=rawbytime AND timestamp>='01-Mar-2018 13:58' AND timestamp<='01-Mar-2018 14:30' AND (tagname=SOMETAG OR tagname=OTHERTAG)") 
result = curs.fetchall()
descr = curs.description

header = [i[0] for i in descr]
table = PrettyTable(header)
for row in result:
    table.add_row(row)
print(table)

curs.close()
conn.close()

导致:

^{pr2}$

我还试图使用包'adodbapi',但是我不能使它工作。ODBC似乎根本不适用于iHistorian,这使得包“pyodbc”也不适合于此。如果有人有一个解决方案,用一个维护良好的python包连接到oledbapi,我很乐意听到。在

您可能需要解决与GE Historian的REST API接口与Python的接口。这里有一个公共链接 Historian API documentation for Version 5.5

它仍然适用于最新版本,但是安装iso也有最新的restapi文档(以防这个URL过期)。如果你的客户端语言是灵活的,GE历史学家也有C,C++,VC++,VC++ 6库和例子。您可以通过在Historian安装期间从客户端工具安装Historian API SDK来找到它们。它们将位于C:\Program Files\Proficy\Proficy Historian\x86\api\

相关问题 更多 >