如何通过C#读取PI实时数据

     今天来说说PI实时数据库。PI 实时数据库系统(Plant Information System)在自动化行业的应用,可以说是最广泛的。 美国 OSI Software 公司开发。这个玩意确实很强大,某化工企业20多万点轻松搞定。读取数据一次5万点+,几秒搞定,也许还能快。但是,说话一定听但是。也不知道为什么,网上几乎搜不到相关资料。跟Oracle,Mysql等关系型数据库不同,相关资料网上多的是。但是这玩意,网上几乎搜不任何资料。据说这个有个圈子,只有在圈子里面人家才带你玩。

     如果企业准备用PI做实时数据库,部署、实施、数据采集等当然OSI自己的人来搞,这里我们只说一下怎么从PI读取数据,至于如何把数据写进去,一般是OSI公司的人自己干这个活。

     这个读数的套路和PHD差不多,也是先安装客户端,然后通过OSI自带的API程序读取数据。所谓的API其实就是OSIsoft.AFSDK.dll ,就这个玩意,这个是最新版本。如果PI版本比较老,那么API可能是OSIsoft.SDK.dll。

    客户端程序 PI-AF-Client_2018-SP3-Patch-3_.exe,安装过程其实也简单,基本上就是下一步下一步。这个程序也是OSI公司给的。

如何通过C#读取PI实时数据_第1张图片

 安装完了如上图现实,具体配置不算太复杂。如果有搞不定的场景,可以找PI的技术支持哦。这个不是重点。

 客户端搞好了就开始写代码了,C#程序建立工程什么的,这里就不说了。关键一步就是引用PI动态库 OSIsoft.AFSDK.dll,这个文件在客户端的安装目录下就有,找不到的在安装目录搜一下。

  具体写代码不难,首先是连接PI服务器,简单示意如下:

/**
using OSIsoft.AF;
using OSIsoft.AF.PI;
using OSIsoft.AF.Asset;
using OSIsoft.AF.Time;
**/

private static string piAddress =  "pi";   //配置客户端名称
private static PIServer piServer;

private string StartServer()
{
      try
      {
           if (piServer == null)
           {
                    piServer = PIServer.FindPIServer(piAddress);
                    piServer.Connect();
           }
            return string.Empty;
       }
       catch (Exception ex)
       {
            return "连接PIserver失败 " + ex.Message;
       }
}

  如果连接不报错,就可以读取数据了。

string[] tagArray = { "123.abc","124.abc" };  //点名

PIPointList pList = new PIPointList(PIPoint.FindPIPoints(piServer, tagArray));
AFListResults  list = pList.CurrentValue();  //遍历这个即可

foreach (AFValue value in list.Results)
{
      object o = value.Value;

      string key = value.PIPoint.Name;

      dateTime dt = value.Timestamp.LocalTime;
        
      int  i = (int)value.Status;

      //
}

  好像就差不多了,数据出来了,剩下事情是你想干啥你就干啥了。

  在客户端的安装路径下help目录,有个AFSDK.chm 的帮助文件,仔细看看,代码怎么写,想实现具体业务,在这里基本都有。

自动化行业编程似乎不难。

你可能感兴趣的:(技术,c#,PI,实时数据库,OSI)