AspenTech InfoPlus 21 - 如何连接和查询数据
AspenTech InfoPlus 21 - How to connect and query data
我将获得访问 AspenTech InfoPlus 21 端点的权限,但该系统似乎相当陈旧并且没有很好(公开)记录。
我将需要查询一些数据(即探索数据库中的内容)。我有几个关于连接和查询 InfoPlus 21 历史学家的问题。
如何连接到 InfoPlus 21 服务器(在最好的情况下以编程方式)?我主要使用 mac,可以通过虚拟机使用 linux 和 windows。真的,欢迎提出工作解决方案的想法。
如何从 InfoPlus 21 查询数据(在 bet 情况下以编程方式)以及数据是什么样的?任何指针等都会非常有帮助。
我有一些使用 NoSQL (mongodb) 和 SQL(postgres 和 mysql)数据库的经验,但找不到任何对 aspentech 有用的东西网络上的 infoplus 21。任何帮助将不胜感激。
InfoPlus21 是包含不同标签结构模板列表的过程历史记录,例如IP_AnalogDef、IP_DescreteDef、IP_TextDef 等。基于来自 DCS/OPC/Any 其他历史记录的过程标签,创建 IP21 记录并且每个记录在历史记录中充当 table .
ANS1: Aspentech 软件仅基于 windows 兼容性,但 IP21 aspenONE Process Explorer 是基于网络的,因此您可以使用主机 url.
ANS2:
您可以尝试 SELECT 语句使用其最终用户组件 SQLPlus 或 excel 加载项从 IP21 Historian 获取数据。例如
SELECT NAME, IP_DESCRIPTION, IP_PLANT_AREA, IP_ENG_UNITS FROM IP_ANALOGDEF
结果:
希望这能帮助您更好地理解。否则,您需要先了解 IP21 历史标签的结构来构建查询,例如如果它有自定义结构,那么你必须自己构建。
欢迎来到工业 IT!
对于这些技术,最好的选择是'AspenTech SqlPlus ODBC driver'。
也就是说,您说的是相当旧的 IP21 服务器上的端点,所以我想它类似于 http://.../SQLPlusWebService/SQLplusWebService.asmx。
在那种情况下,它是 SqlPlus 的 SOAP 包装器:您不必安装 Windows ODBC 驱动程序...但您仍然需要学习 SqlPlus 语法。
想了解更多可以咨询AspenTech,也可以安装SqlPlus客户端'Aspen SqlPlus',查看帮助文件
"C:\Program Files (x86)\AspenTech\InfoPlus.21\db21\code\ipsqlplus.chm"
编辑:这是一个 C# 示例,用于列出所有记录:
static void Main(string[] args)
{
const string SERVER_HOST = "SERVERHOST";
const string SERVER_URL = "http://{0}/SQLPlusWebService/SQLplusWebService.asmx";
const string SOAP12 =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
+ "<soap12:Body>"
+ "<ExecuteSQL xmlns=\"http://www.aspentech.com/SQLplus.WebService/\">"
+ "<command>{0}</command>"
+ "</ExecuteSQL>"
+ "</soap12:Body>"
+ "</soap12:Envelope>";
const string SQLPLUS_COMMAND_ALLRECORDS =
"SELECT * FROM all_records";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
string.Format(SERVER_URL, SERVER_HOST));
// If required by the server, set the credentials.
request.Credentials = CredentialCache.DefaultCredentials;
request.ContentType = "application/soap+xml; charset=utf-8";
request.Method = "POST";
XmlDocument soapEnvelopeDocument;
soapEnvelopeDocument = new XmlDocument();
soapEnvelopeDocument.LoadXml(string.Format(SOAP12, SQLPLUS_COMMAND_ALLRECORDS));
byte[] bytes;
bytes = Encoding.UTF8.GetBytes(soapEnvelopeDocument.OuterXml);
request.ContentLength = bytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Display the status.
Console.WriteLine(response.StatusDescription);
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
}
您还可以使用 Aspentech Process Data REST Web API。有一个 Aspentech 本机网页,其中包含许多示例,您可以在其中学习如何使用它。 URL 将是这样的:
http://<your server name>/ProcessData/samples/sample_home.html
Aspentech ProcessData REST API Samples home page
如果你更了解Aspentech IP21数据库结构,你可以使用上图中的"SQL"选项。如果不是,我建议您使用 "History" 选项。历史将允许您查询数据,只需传递标签名称、地图(对于可以拥有多个地图的自定义标签很有用)和时间范围。它还提供了一些过滤选项和您想要执行的请求类型(POST、GET 等)。这是此 "History" 选项的用法示例:
Aspen Process Data Rest API History sample
我可能回复晚了,但我想与 Python 共享查询代码。此 Python 代码以 5 分钟的时间间隔从 Aspen IP21 获取数据,并考虑当前时间减去 2 天。显然,您可以根据需要编辑此代码。但是我没有找到任何将实时视为修改查询的参考的代码。希望对Python爱好者有帮助-:
"""
import pandas as pd
import pyodbc
from datetime import datetime
from datetime import timedelta
#---- Connect to IP21
conn = pyodbc.connect("DRIVER={AspenTech SQLplus};HOST=10.XXX;PORT=10014")
#---- Query string
tag = 'TI1XXX/DACB.PV'
end = datetime.now()
start = end-timedelta (days=2)
end = end.strftime("%Y-%m-%d %H:%M:%S")
start=start.strftime("%Y-%m-%d %H:%M:%S")
sql = "select TS,VALUE from HISTORY "\
"where NAME='%s'"\
"and PERIOD = 300*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!
如果您喜欢 Ruby 世界,我制作了一个 gem 来简化连接并让您在进程浏览器中从 SQLplus 或 REST API 进行查询。
例如:
require 'ip21' # If you are using Ruby. Don't need require if you use Rails
IP21.new(
auth: {
account: 'john.doe',
domain: 'contoso.com',
password: 'set_your_own_password'
},
sqlplus_address: '127.0.0.1',
ip21_address: '127.0.0.1',
).query('SELECT IP_PLANT_AREA, Name, IP_DESCRIPTION FROM IP_AnalogDef')
然后就可以运行正常查询IP21了,不用被绑定到Windows世界。
我将获得访问 AspenTech InfoPlus 21 端点的权限,但该系统似乎相当陈旧并且没有很好(公开)记录。 我将需要查询一些数据(即探索数据库中的内容)。我有几个关于连接和查询 InfoPlus 21 历史学家的问题。
如何连接到 InfoPlus 21 服务器(在最好的情况下以编程方式)?我主要使用 mac,可以通过虚拟机使用 linux 和 windows。真的,欢迎提出工作解决方案的想法。
如何从 InfoPlus 21 查询数据(在 bet 情况下以编程方式)以及数据是什么样的?任何指针等都会非常有帮助。
我有一些使用 NoSQL (mongodb) 和 SQL(postgres 和 mysql)数据库的经验,但找不到任何对 aspentech 有用的东西网络上的 infoplus 21。任何帮助将不胜感激。
InfoPlus21 是包含不同标签结构模板列表的过程历史记录,例如IP_AnalogDef、IP_DescreteDef、IP_TextDef 等。基于来自 DCS/OPC/Any 其他历史记录的过程标签,创建 IP21 记录并且每个记录在历史记录中充当 table .
ANS1: Aspentech 软件仅基于 windows 兼容性,但 IP21 aspenONE Process Explorer 是基于网络的,因此您可以使用主机 url.
ANS2:
您可以尝试 SELECT 语句使用其最终用户组件 SQLPlus 或 excel 加载项从 IP21 Historian 获取数据。例如
SELECT NAME, IP_DESCRIPTION, IP_PLANT_AREA, IP_ENG_UNITS FROM IP_ANALOGDEF
结果:
希望这能帮助您更好地理解。否则,您需要先了解 IP21 历史标签的结构来构建查询,例如如果它有自定义结构,那么你必须自己构建。
欢迎来到工业 IT!
对于这些技术,最好的选择是'AspenTech SqlPlus ODBC driver'。
也就是说,您说的是相当旧的 IP21 服务器上的端点,所以我想它类似于 http://.../SQLPlusWebService/SQLplusWebService.asmx。
在那种情况下,它是 SqlPlus 的 SOAP 包装器:您不必安装 Windows ODBC 驱动程序...但您仍然需要学习 SqlPlus 语法。
想了解更多可以咨询AspenTech,也可以安装SqlPlus客户端'Aspen SqlPlus',查看帮助文件
"C:\Program Files (x86)\AspenTech\InfoPlus.21\db21\code\ipsqlplus.chm"
编辑:这是一个 C# 示例,用于列出所有记录:
static void Main(string[] args)
{
const string SERVER_HOST = "SERVERHOST";
const string SERVER_URL = "http://{0}/SQLPlusWebService/SQLplusWebService.asmx";
const string SOAP12 =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
+ "<soap12:Body>"
+ "<ExecuteSQL xmlns=\"http://www.aspentech.com/SQLplus.WebService/\">"
+ "<command>{0}</command>"
+ "</ExecuteSQL>"
+ "</soap12:Body>"
+ "</soap12:Envelope>";
const string SQLPLUS_COMMAND_ALLRECORDS =
"SELECT * FROM all_records";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
string.Format(SERVER_URL, SERVER_HOST));
// If required by the server, set the credentials.
request.Credentials = CredentialCache.DefaultCredentials;
request.ContentType = "application/soap+xml; charset=utf-8";
request.Method = "POST";
XmlDocument soapEnvelopeDocument;
soapEnvelopeDocument = new XmlDocument();
soapEnvelopeDocument.LoadXml(string.Format(SOAP12, SQLPLUS_COMMAND_ALLRECORDS));
byte[] bytes;
bytes = Encoding.UTF8.GetBytes(soapEnvelopeDocument.OuterXml);
request.ContentLength = bytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Display the status.
Console.WriteLine(response.StatusDescription);
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
}
您还可以使用 Aspentech Process Data REST Web API。有一个 Aspentech 本机网页,其中包含许多示例,您可以在其中学习如何使用它。 URL 将是这样的:
http://<your server name>/ProcessData/samples/sample_home.html
Aspentech ProcessData REST API Samples home page
如果你更了解Aspentech IP21数据库结构,你可以使用上图中的"SQL"选项。如果不是,我建议您使用 "History" 选项。历史将允许您查询数据,只需传递标签名称、地图(对于可以拥有多个地图的自定义标签很有用)和时间范围。它还提供了一些过滤选项和您想要执行的请求类型(POST、GET 等)。这是此 "History" 选项的用法示例:
Aspen Process Data Rest API History sample
我可能回复晚了,但我想与 Python 共享查询代码。此 Python 代码以 5 分钟的时间间隔从 Aspen IP21 获取数据,并考虑当前时间减去 2 天。显然,您可以根据需要编辑此代码。但是我没有找到任何将实时视为修改查询的参考的代码。希望对Python爱好者有帮助-: """
import pandas as pd
import pyodbc
from datetime import datetime
from datetime import timedelta
#---- Connect to IP21
conn = pyodbc.connect("DRIVER={AspenTech SQLplus};HOST=10.XXX;PORT=10014")
#---- Query string
tag = 'TI1XXX/DACB.PV'
end = datetime.now()
start = end-timedelta (days=2)
end = end.strftime("%Y-%m-%d %H:%M:%S")
start=start.strftime("%Y-%m-%d %H:%M:%S")
sql = "select TS,VALUE from HISTORY "\
"where NAME='%s'"\
"and PERIOD = 300*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!
如果您喜欢 Ruby 世界,我制作了一个 gem 来简化连接并让您在进程浏览器中从 SQLplus 或 REST API 进行查询。
例如:
require 'ip21' # If you are using Ruby. Don't need require if you use Rails
IP21.new(
auth: {
account: 'john.doe',
domain: 'contoso.com',
password: 'set_your_own_password'
},
sqlplus_address: '127.0.0.1',
ip21_address: '127.0.0.1',
).query('SELECT IP_PLANT_AREA, Name, IP_DESCRIPTION FROM IP_AnalogDef')
然后就可以运行正常查询IP21了,不用被绑定到Windows世界。