我是一个教授历史学家和Python的新手。我的应用程序的目的是开始从Proficy中提取数据。
GE (教授) Historian安装在一个虚拟机Server A上,而我的python安装在另一个VM Server B上。
两台服务器位于相同的防火墙和相同的VLAN中,因此它们可以通信。
我试着四处看看,但我不确定哪种方法最容易提取数据……有什么帮助吗?
发布于 2018-03-23 00:58:15
您可以使用包含在proficy iHistorian中的OLE DB API,请参阅manual of iHistorian。在该手册中,您可以找到可用的表和一些SQL代码示例。检查应用编程接口是否正确安装了随iHistorian提供的'Historian Interactive SQL‘程序。
我使用python包'PyADO‘来连接OLE DB API (这是从GitHub Gist获得的,还需要包'win32com’和'pythoncom')。该模块在PyPi上不可用,因此只需下载它,解压缩它并将其放入“site-packages”文件夹(或您当前的工作目录)。代码中存在一些错误,请在'PyADO.py‘文件中修复此错误,方法是将'not equal’的所有'<>‘符号替换为'!=’。对于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‘包也不适用于此。如果任何人有一个使用维护良好的python包连接到OLE DB API的解决方案,我将很高兴听到。
发布于 2018-02-22 11:41:48
您可能需要使用Python与GE Historian的REST API接口进行交互。这是一个指向Historian API documentation for Version 5.5的公共链接
它仍然适用于最新版本,但安装iso也有最新的REST API文档(以防此URL过期)。如果您的客户端语言很灵活,GE Historian还提供了C、C++、VC++和VC++6库和示例。在历史记录安装过程中,您可以通过从客户端工具安装历史记录API SDK来查找它们。它们将位于C:\Program Files\Proficy\Proficy Historian\x86\api\
https://stackoverflow.com/questions/46682248
复制相似问题