AspenTech InfoPlus 21 - 如何连接和查询数据

AspenTech InfoPlus 21 - How to connect and query data

我将获得访问 AspenTech InfoPlus 21 端点的权限,但该系统似乎相当陈旧并且没有很好(公开)记录。 我将需要查询一些数据(即探索数据库中的内容)。我有几个关于连接和查询 InfoPlus 21 历史学家的问题。

  1. 如何连接到 InfoPlus 21 服务器(在最好的情况下以编程方式)?我主要使用 mac,可以通过虚拟机使用 linux 和 windows。真的,欢迎提出工作解决方案的想法。

  2. 如何从 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世界。

看看https://github.com/rhuanbarreto/ip21-ruby