我对 Proficy Historian 和 Python 还很陌生。我的应用程序的目的是开始从 Proficy 中提取数据。
GE (Proficy) Historian 安装在 Virtual Machine 上Server A
,而我的 python 安装在另一个 VMServer B
上。
两台服务器在同一个防火墙下,在同一个 VLAN 中,所以它们可以通信。
我试图环顾四周,但我不确定哪种方法是提取数据的最简单方法......有什么帮助吗?
您可以使用 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 的解决方案,我会很高兴听到它。
您可能需要解决与 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\