5

我对 Proficy Historian 和 Python 还很陌生。我的应用程序的目的是开始从 Proficy 中提取数据。

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

两台服务器在同一个防火墙下,在同一个 VLAN 中,所以它们可以通信。

我试图环顾四周,但我不确定哪种方法是提取数据的最简单方法......有什么帮助吗?

4

2 回答 2

5

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

我使用 python 包“ PyADO ”连接到 OLE DB API(从GitHub Gist获得,还需要包“win32com”和“pythoncom”)。该模块在 PyPi 上不可用,因此只需下载它,将其解压缩并将其放在“站点包”文件夹(或您当前的工作目录)中。代码中有一些错误,在 'PyADO.py' 文件中通过将所有 '<>' 符号替换为 '!=' 来修复此问题。对于 python 3 的使用,还将所有打印语句从“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' 也不适用于此。如果有人有一个使用维护良好的 python 包连接到 OLE DB API 的解决方案,我会很高兴听到它。

于 2018-03-22T16:58:15.357 回答
1

您可能需要解决与 GE Historian 的 REST API 接口与 Python 的接口。这是5.5 版 Historian API 文档的公共链接

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

于 2018-02-22T03:41:47.503 回答