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

Dav*_*eAl 7 sql sql-server historian aspen

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

  1. 如何连接到InfoPlus 21服务器(最好以编程方式连接)?我主要使用Mac,可以通过VM使用Linux和Windows。的确,欢迎提供解决方案的想法。

  2. 如何从InfoPlus 21中查询数据(以打赌方式进行编程),数据是什么样的?任何指针等都将非常有帮助。

我在使用NoSQL(mongodb)和SQL(postgres和mysql)数据库方面有一些经验,但是在Web上找不到真正对aspentech infoplus 21有用的东西。任何帮助将不胜感激。

Mr.*_*han 7

InfoPlus21是过程历史记录器,包含具有不同标签结构的模板列表,例如IP_AnalogDef,IP_DescreteDef,IP_TextDef等。基于DCS / OPC /其他任何历史记录器的过程标签,将创建IP21记录,每个记录都充当历史记录器中的表。

ANS1: Aspentech软件仅基于Windows的兼容性,而IP21 aspenONE Process Explorer是基于Web的,因此您可以使用主机URL通过任何操作系统进行访问。

ANS2:

您可以尝试使用SELECT语句使用最终用户组件SQLPlus或excel外接程序从IP21 Historian获取数据。例如

SELECT NAME, IP_DESCRIPTION, IP_PLANT_AREA, IP_ENG_UNITS FROM IP_ANALOGDEF  
Run Code Online (Sandbox Code Playgroud)

结果: 上查询结果

希望这对您有所帮助。否则,您首先需要学习IP21历史记录器标签的结构以构建查询,例如,如果查询具有自定义结构,则必须构建自己的查询。


Mad*_*gui 5

欢迎来到工业 IT!
对于这些技术,最好的选择是“AspenTech SqlPlus ODBC 驱动程序”。

话虽如此,您正在谈论相当旧的 IP21 服务器上的端点,所以我想它类似于http://.../SQLPlusWebService/SQLplusWebService.asmx
在那种情况下,它是 SqlPlus 的 SOAP 包装器:您不必安装 Windows ODBC 驱动程序……但您仍然必须学习 SqlPlus 语法。

想了解更多可以咨询AspenTech,也可以安装SqlPlus客户端'Aspen SqlPlus',查看帮助文件“C:\Program Files (x86)\AspenTech\InfoPlus.21\db21\”代码\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();

}
Run Code Online (Sandbox Code Playgroud)


小智 3

我可能回复晚了,但我想与 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!
Run Code Online (Sandbox Code Playgroud)