如何使用 python 从历史数据库中轻松提取数据?

And*_* D. 5 python pull proficy historian

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

GE (Proficy) Historian 安装在虚拟机上,Server A而我的 python 安装在其他 VM 中Server B

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

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

Ric*_*erg 5

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

我使用了 python 包“ PyADO ”来连接到 OLE DB API(从GitHub Gist得到这个,也需要包“win32com”和“pythoncom”)。该模块在 PyPi 上不可用,因此只需下载它,将其解压缩并将其放在“site-packages”文件夹(或您当前的工作目录)中。代码中存在一些错误,通过将“不等于”的所有“<>”符号替换为“!=”来修复“PyADO.py”文件中的错误。对于 python 3 用法,还将所有打印语句从“print blabla”更新为“print(blabla)”。为了提取数据,以下内容就足够了(为了获得像样的数据打印,我包含了“漂亮的”):

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()
Run Code Online (Sandbox Code Playgroud)

导致:

+---------------------------+--------------------+------------------+--------------+
|         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     |
+---------------------------+--------------------+------------------+--------------+
Run Code Online (Sandbox Code Playgroud)

我也尝试使用包“ adodbapi ”,但我无法让它工作。似乎 ODBC 根本不适用于 iHistorian,这使得包 'pyodbc' 也不适合于此。如果有人有一个解决方案可以使用维护良好的 python 包连接到 OLE DB API,我会很高兴听到它。


And*_*ake 1

您可能需要解决通过 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\Proficy Historian\x86\api\