Как я могу легко извлечь данные из историка с Python?
Я довольно новичок в Proficy Historian и Python. Цель моего приложения - начать извлечение данных из Proficy.
GE (Proficy) Historian устанавливается на виртуальной машине Server A
в то время как мой питон установлен в другой виртуальной машине Server B
,
Оба сервера находятся под одним и тем же межсетевым экраном и в одной VLAN, поэтому они могут обмениваться данными.
Я пытался осмотреться, но я не уверен, какой самый простой способ извлечь данные... Любая помощь?
2 ответа
Вы можете использовать API OLE DB, входящий в состав Proficy iHistorian, см. Руководство по iHistorian. В руководстве вы можете найти доступные таблицы и некоторые примеры кода SQL. Проверьте, правильно ли установлен API с помощью программы Historian Interactive SQL, включенной в iHistorian.
Я использовал пакет Python ' PyADO' для подключения к API OLE DB (полученный из GitHub Gist, также требуются пакеты 'win32com' и 'pythoncom'). Модуль недоступен в PyPi, поэтому просто скачайте его, извлеките и поместите в папку "site-packages" (или в ваш текущий рабочий каталог). В коде есть некоторые ошибки, исправьте это в файле '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' также не подходящим для этого. Если у кого-нибудь есть решение для подключения к API OLE DB с хорошо поддерживаемым пакетом Python, я был бы рад услышать об этом.
Возможно, вам придется согласиться на взаимодействие с интерфейсом REST API GE Historian с Python. Вот публичная ссылка на документацию Historian API для версии 5.5
Это все еще применимо к самым новым версиям, но у установки iso также есть последний документ API REST (в случае, если этот URL устарел). Если ваш клиентский язык гибкий, GE Historian также имеет библиотеки и примеры C, C++, VC++ и VC++6. Вы можете найти их, установив Historian API SDK из Client Tools во время установки Historian. Они будут расположены в C:\Program Files\Proficy\Proficy Historian\x86\api\