如何使用python轻松地从历史学家那里提取数据



我是Proficy Historian和Python的新手。我的应用程序的目的是开始从Proficy中提取数据。

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

两台服务器位于同一防火墙下,位于同一VLAN中,因此可以进行通信。

我试着四处看看,但我不确定哪种方法是提取数据最简单的。。。有什么帮助吗?

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

我使用python包"PyADO"连接到OLE DB API(从GitHub Gist获得,还需要包"win32com"one_answers"pythoncom")。该模块在PyPi上不可用,所以只需下载它,提取它并将其放在"站点包"文件夹(或您当前的工作目录)中即可。代码中存在一些错误,请在"PyADO.py"文件中通过替换所有"<>"来修复此错误"不等于"与"!="的符号。对于python 3的用法,还将所有print语句从"print blabla"更新为"print(blabla)"。为了提取数据,以下内容应该足够了(我包括了"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()

结果:

+---------------------------+--------------------+------------------+--------------+
|         timestamp         |       value        |     quality      |   tagname    |
+---------------------------+--------------------+------------------+--------------+
| 2018-03-01 13:58:15+00:00 | -4.422495365142822 | Good NonSpecific | SOMETAG      |
| 2018-03-01 13:59:15+00:00 | -3.046903133392334 | Good NonSpecific | SOMETAG      |
| 2018-03-01 13:58:00+00:00 | 61.07942581176758  | Good NonSpecific | OTHERTAG     |
| 2018-03-01 13:59:00+00:00 | 60.99810791015625  | Good NonSpecific | OTHERTAG     |
| 2018-03-01 14:00:00+00:00 | 62.58036422729492  | Good NonSpecific | OTHERTAG     |
+---------------------------+--------------------+------------------+--------------+

我还试着使用"adodbapi"软件包,但我没能让它工作。ODBC似乎根本无法与iHistorian配合使用,这使得包"pyodbc"也不适合使用。如果有人有一个解决方案来连接到一个OLE DB API与一个维护良好的python包,我会很高兴听到它

您可能需要通过Python与GE Historian的REST API接口进行接口。这是一个公共链接5.5版的Historian API文档

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

相关内容