Как я могу легко извлечь данные из историка с помощью python?

Я новичок в Proficy Historian и Python. Цель моего приложения — начать извлечение данных из Proficy.

GE (Proficy) Historian установлен на виртуальной машине Server A, а мой python установлен на другой виртуальной машине Server B.

Оба сервера находятся под одним и тем же брандмауэром и в одной и той же VLAN, поэтому они могут обмениваться данными.

Я пытался осмотреться, но я не уверен, какой самый простой способ извлечь данные... Любая помощь?


person And. D.    schedule 11.10.2017    source источник
comment
На ум приходят фляги и пиромодули. Если ваши пульты — это ящики с Linux, paramiko также может помочь.   -  person BoboDarph    schedule 11.10.2017
comment
В основном я искал pyodbc. Скрипт: conn = pyodbc.connect(Driver={SQL Server}; Server=‹Server Name›; Database=‹Database Name›; uid=‹username›; pwd=‹Password›) Но этого недостаточно   -  person And. D.    schedule 20.10.2017


Ответы (2)


Вы можете использовать API OLE DB, входящий в состав профессионального iHistorian, см. руководство по iHistorian. . В руководстве вы можете найти доступные таблицы и несколько примеров кода SQL. Проверьте правильность установки API с помощью программы «Historian Interactive SQL», входящей в состав iHistorian.

Я использовал пакет python 'PyADO' для подключения к OLE DB API (получил это от GitHub Gist, также требуются пакеты win32com и pythoncom). Модуль недоступен в PyPi, поэтому просто скачайте его, распакуйте и поместите в папку «site-packages» (или в ваш текущий рабочий каталог). В коде есть некоторые ошибки, исправьте это в файле «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 также не подходит для этого. Если у кого-нибудь есть решение для подключения к OLE DB API с хорошо поддерживаемым пакетом Python, я был бы рад услышать об этом.

person Richard Eijsberg    schedule 22.03.2018

Возможно, вам придется согласовать взаимодействие с интерфейсом REST API GE Historian с Python. Вот общедоступная ссылка на документацию по API Historian для версии 5.5.

Он по-прежнему применим к новейшим версиям, но в образе установки также есть последний документ REST API (на случай, если этот URL-адрес устарел). Если язык вашего клиента является гибким, в GE Historian также есть библиотеки и примеры C, C++, VC++ и VC++6. Их можно найти, установив Historian API SDK из Client Tools во время установки Historian. Они будут расположены в C:\Program Files\Proficy\Proficy Historian\x86\api\

person Andrew Drake    schedule 22.02.2018