【问题标题】:How to query data from an AspenTech IP21 Historian using PHP?如何使用 PHP 从 AspenTech IP21 Historian 查询数据?
【发布时间】:2017-10-13 13:18:59
【问题描述】:

是否可以使用 php 从 InfoPlus 21 (IP21) AspenTech 查询数据?

我愿意创建一个可以从 AspenTech Historian 访问标签和历史数据的 php 应用程序。

ODBC 是我的答案吗?即使这样想,我也不太确定如何进行。

更新: 我最终使用了 python 和 pyODBC。 这就像一个魅力! 谢谢大家的支持。

【问题讨论】:

  • “没有什么是不可能的”。我已经回答了这个问题。注意 Stack Overflow 不是免费的代码编写服务。
  • @tburd 你能回答一下你是如何使用python做到这一点的吗?我正在寻找如何使用 python 连接到 AspenTech IP 21 的方法,但还没有发现任何有用的东西:/
  • @DaveTheAl 抱歉耽搁了,我在这里添加了我的代码。如果您还有其他问题,请告诉我。有需要就给我发短信,我可以尝试支持。

标签: php python odbc aspen


【解决方案1】:

我不知道直接通过 PHP 访问 IP21 数据的方法,但是,如果您乐于通过 Web 服务访问数据,则有 REST 和 SOAP 选项。

这两种方法都非常快速且响应迅速。

AFW 安全仍然适用于访问 Web 服务的客户端。客户端将需要 SQL Plus 读取(至少)访问权限。

SOAP

  • 需要在 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 机器上,否则您将遇到跨域资源共享 (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

【讨论】:

  • 哇!非常感谢Marty131,这将为我打开更多的可能性。我现在将检查 SAOP 和 REST,看看我是否可以成功。最好的问候!
  • 您可以使用PHP调用上述2个Web服务之一,从而实现您想要的。
【解决方案2】:

是的 ODBC 驱动程序应该适用于满足您的要求。我们已经开发了一个应用程序来将数据插入使用相同协议的 IP21 historian。同样,一些分析工具(例如 Seeq Cooperation)也使用 ODBC 从 IP21 historian 中获取数据。因此,在您的情况下也应该是可能的。

【讨论】:

    【解决方案3】:

    正如@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!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多