如何使用 PHP 从 AspenTech IP21 Historian 查询数据?
How to query data from an AspenTech IP21 Historian using PHP?
是否可以使用 php 从 InfoPlus 21 (IP21) AspenTech 查询数据?
我愿意创建一个 php 应用程序,可以从 AspenTech Historian 访问标签和历史数据。
ODBC 是我的答案吗?即使是这样想,我也不太确定如何进行。
更新:
我最终使用了 python 和 pyODBC。
这就像一个魅力!
谢谢大家的支持。
我不知道通过 PHP 直接访问 IP21 数据的方法,但是,如果您乐于通过 Web 服务访问数据,则有 REST 和 SOAP 两种选择。
这两种方法都非常快速且响应迅速。
AFW 安全仍然适用于访问 Web 服务的客户端。客户端将需要 SQL 加上读取(至少)访问权限。
肥皂
- 需要在 IP21 服务器上安装 "Aspen SQL plus Web Server/Service and Health Monitor" 组件(在安装 IP21 时选择)。
最新版本的 IP21 需要对 web.config 文件稍作修改以允许远程访问。如果您无法远程执行 Web 服务,请尝试在本地执行(即在与 IP21 服务器相同的机器上)并查看这是否是一个问题。
- 示例:
http://IP21ServerHostName/SQLPlusWebService/SQLplusWebService.asmx/ExecuteSQL?command=select%20*%20from%20compquerydef;
休息
- 我的偏好(优于 SOAP),因为使用 JQuery (JavaScript) 非常容易访问 - 几行代码!
- 不确定安装时究竟需要什么 IP21 组件,但它似乎已经在我的大多数 IP21 服务器上了。
- URL中的参数可以控制返回的行数(方便)。
如果在 Jquery / JavaScript 内使用,网页必须托管在 AspenOneServerHostName
机器上,否则您将 运行 进入 Cross -原始资源共享 (CORS) 问题。
- 示例:
http://AspenOneServerHostName/ProcessData/AtProcessDataREST.dll/SQL?%3CSQL%20c=%22DRIVER={AspenTech%20SQLplus};HOST=IP21ServerHostName;Port=10014;CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N%22%20m=%22DesiredMaxNumberOfRowsReturned%22%20s=%221%22%3E%3C![CDATA[select%20*%20from%20compquerydef]]%3E%3C/SQL%3E
- 备注:
AspenOneServerHostName
可以和IP21ServerHostName
一样
AspenOneServerHostName
必须配置 ADSA 才能查看 IP21ServerHostName
- 用数字替换
DesiredMaxNumberOfRowsReturned
是的 ODBC 驱动程序应该适用以满足您的要求。我们已经开发了一个应用程序来将数据插入到使用相同协议的 IP21 历史数据库中。同样,一些分析工具(例如 Seeq Cooperation)也使用 ODBC 从 IP21 historian 获取数据。因此,在您的情况下也应该是可能的。
正如@DaveTheAI 所问,我在这里分享我是如何解决这个问题的:
我能够使用 pyODBC 连接器从 AspenTech 历史学家那里读取数据。
首先,您需要确保安装了所需的 ODBC 驱动程序(我使用的是 Windows)。 此处重要的一点是拥有与您的 python/anaconda 版本兼容的驱动程序:32/64 位
之后:
import pyodbc
#---- Connect to IP21
conn = pyodbc.connect("DRIVER={AspenTech ODBC driver for Production Record Manager};HOST=hostname;PORT=port")
#---- Query string
tag = 'YOUR_TAG'
start = '2019-01-01 12:00:00'
end = '2019-01-02 12:00:00'
sql = "select TS,VALUE from HISTORY "\
"where NAME='%s'"\
"and PERIOD = 60*10"\
"and REQUEST = 2"\
"and REQUEST=2 and TS between TIMESTAMP'%s' and TIMESTAMP'%s'" % (tag, start, end)
data = pd.read_sql(sql,conn) # Pandas DataFrame with your data!
是否可以使用 php 从 InfoPlus 21 (IP21) AspenTech 查询数据?
我愿意创建一个 php 应用程序,可以从 AspenTech Historian 访问标签和历史数据。
ODBC 是我的答案吗?即使是这样想,我也不太确定如何进行。
更新: 我最终使用了 python 和 pyODBC。 这就像一个魅力! 谢谢大家的支持。
我不知道通过 PHP 直接访问 IP21 数据的方法,但是,如果您乐于通过 Web 服务访问数据,则有 REST 和 SOAP 两种选择。
这两种方法都非常快速且响应迅速。
AFW 安全仍然适用于访问 Web 服务的客户端。客户端将需要 SQL 加上读取(至少)访问权限。
肥皂
- 需要在 IP21 服务器上安装 "Aspen SQL plus Web Server/Service and Health Monitor" 组件(在安装 IP21 时选择)。
最新版本的 IP21 需要对 web.config 文件稍作修改以允许远程访问。如果您无法远程执行 Web 服务,请尝试在本地执行(即在与 IP21 服务器相同的机器上)并查看这是否是一个问题。
- 示例:
http://IP21ServerHostName/SQLPlusWebService/SQLplusWebService.asmx/ExecuteSQL?command=select%20*%20from%20compquerydef;
- 示例:
休息
- 我的偏好(优于 SOAP),因为使用 JQuery (JavaScript) 非常容易访问 - 几行代码!
- 不确定安装时究竟需要什么 IP21 组件,但它似乎已经在我的大多数 IP21 服务器上了。
- URL中的参数可以控制返回的行数(方便)。
如果在 Jquery / JavaScript 内使用,网页必须托管在
AspenOneServerHostName
机器上,否则您将 运行 进入 Cross -原始资源共享 (CORS) 问题。- 示例:
http://AspenOneServerHostName/ProcessData/AtProcessDataREST.dll/SQL?%3CSQL%20c=%22DRIVER={AspenTech%20SQLplus};HOST=IP21ServerHostName;Port=10014;CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N%22%20m=%22DesiredMaxNumberOfRowsReturned%22%20s=%221%22%3E%3C![CDATA[select%20*%20from%20compquerydef]]%3E%3C/SQL%3E
- 备注:
AspenOneServerHostName
可以和IP21ServerHostName
一样
AspenOneServerHostName
必须配置 ADSA 才能查看IP21ServerHostName
- 用数字替换
DesiredMaxNumberOfRowsReturned
- 备注:
- 示例:
是的 ODBC 驱动程序应该适用以满足您的要求。我们已经开发了一个应用程序来将数据插入到使用相同协议的 IP21 历史数据库中。同样,一些分析工具(例如 Seeq Cooperation)也使用 ODBC 从 IP21 historian 获取数据。因此,在您的情况下也应该是可能的。
正如@DaveTheAI 所问,我在这里分享我是如何解决这个问题的:
我能够使用 pyODBC 连接器从 AspenTech 历史学家那里读取数据。 首先,您需要确保安装了所需的 ODBC 驱动程序(我使用的是 Windows)。 此处重要的一点是拥有与您的 python/anaconda 版本兼容的驱动程序:32/64 位
之后:
import pyodbc
#---- Connect to IP21
conn = pyodbc.connect("DRIVER={AspenTech ODBC driver for Production Record Manager};HOST=hostname;PORT=port")
#---- Query string
tag = 'YOUR_TAG'
start = '2019-01-01 12:00:00'
end = '2019-01-02 12:00:00'
sql = "select TS,VALUE from HISTORY "\
"where NAME='%s'"\
"and PERIOD = 60*10"\
"and REQUEST = 2"\
"and REQUEST=2 and TS between TIMESTAMP'%s' and TIMESTAMP'%s'" % (tag, start, end)
data = pd.read_sql(sql,conn) # Pandas DataFrame with your data!