zoukankan      html  css  js  c++  java
  • 基于C#的PISDK研究(代码)

    本篇文章主要利用PISDK从PI服务器取数,介绍多种取数方法。

    首先需要一些基础的代码,比如获取PI服务的:

    /// <summary>
    /// 获取PI服务/// </summary>
    /// <param name="servername">//UID=PIUser;PWD=PIUserPassWord
    </param>
    /// <returns></returns>
    private Server GetServer(string servername)
    {
        try
        {
            if (!string.IsNullOrEmpty(servername))
            {
                //采用认证方式登录
                server = pi.Servers[servername];
                server.Open(connStr);
            }
            else
            {
                //采用默认方式登录
                server = pi.Servers.DefaultServer;
                server.Open();
            }
     
            if (server.Connected)
            {
                return server;
            }
            else
            {
                return null;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return null;
        }
    }
    

      还有到PI服务器中找点的方法:

    /// <summary>
    /// 搜索PI中对应的数据点
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="condition">选择tag的条件</param>
    /// <returns></returns>
    private PointList SearchPIPoints(Server server, String condition)
    {
          return server.GetPoints(condition);
    }
    

      

    下面介绍取数方法:

    1. 取得单个tag快照值

    /// <summary>
    /// 取得单个tag快照值
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="tag">tag名称</param>
    /// <returns></returns>
    private string GetSingleSnap(Server server, string tag)
    {
        string output=string.Empty;
        PIPoints piPoints = server.PIPoints;
        //采用标签名称的方式取得对象
        PIPoint piPoint = piPoints[tag];
        //调用方法取得快照值
        PIValue piValue = piPoint.Data.Snapshot;
        //取到该快照值时PI服务器时间
        PITimeServer.PITime piTime = piValue.TimeStamp;
        output = piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
        return output;
    }
    

      2. 取得单个tag一段时间内的历史值

    /// <summary>
    /// 取得单个tag段时间内的历史值
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="tag">tag名称</param>
    /// <returns></returns>
    private string GetSingleHistory(Server server, string tag)
    {
        string output = string.Empty;
        PIPoints piPoints = server.PIPoints;
        PIPoint piPoint = piPoints[tag];
        //取得分钟前到当前时间的历史值
        PIValues piValues = piPoint.Data.RecordedValues(DateTime.Now.AddMinutes(-5).ToString(),
            DateTime.Now.ToString());
        foreach (PIValue piValue in piValues)
        {
            PITimeServer.PITime piTime = piValue.TimeStamp; //PI时间
            output += piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
        }
        return output;
    }
    

      3. 取得多个tag快照值

    /// <summary>
    /// 取得多个tag取快照值
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="tag">tag值(tag='' or tag='')</param>
    /// <returns></returns>
    private string MultipleSnap(Server server, string tag)
    {
        string output = string.Empty;
        //取tag
        PointList ptlist = SearchPIPoints(server, tag);
        PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
        PointValues ptvalues = ptlist.Data.get_Snapshot(out nvErrs);
     
        foreach (PointValue myValue in ptvalues)
        {
            PITimeServer.PITime piTime = myValue.PIValue.TimeStamp; //PI时间
            if (myValue.PIValue.Value.GetType().IsCOMObject)
            {
                //状态值
                DigitalState myDigState = (DigitalState)myValue.PIValue.Value;
                output += myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + myDigState.Name + Environment.NewLine;
            }
            else
            {
                //模拟值
                output += myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + Convert.ToString(Math.Round(double.Parse(Convert.ToString(myValue.PIValue.Value)), 2)) + Environment.NewLine;
            }
        }
        return output;
    }
    

      4. 取得多个tag一段历史时间所有值

    /// <summary>
    /// 取得多个tag段历史时间所有值
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="tag">tag名称</param>
    /// <returns></returns>
    private string MultipleHistory1(Server server,string tag)
    {
        string output = string.Empty;
        PointList ptlist = SearchPIPoints(server, tag);
        string outPut = string.Empty;
     
        PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
     
        foreach (PIPoint piPoint in ptlist)
        {
            //获取5分钟前到当前时间的历史值
            PIValues piValues = piPoint.Data.RecordedValues(DateTime.Now.AddMinutes(-5).ToString(),
            DateTime.Now.ToString());
     
            foreach (PIValue piValue in piValues)
            {
                PITimeServer.PITime piTime = piValue.TimeStamp; //PI时间
                output+= piPoint.Name + " " + piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
            }
        }
        return output;
    }
    

      5. 取得多个tag历史时刻值

    /// <summary>
    /// 取得多个tag段历史时间点值
    /// </summary>
    /// <param name="server">PI服务对象</param>
    /// <param name="tag">tag名称</param>
    /// <returns></returns>
    private string MultipleHistory2(Server server, string tag)
    {
        string output = string.Empty;
        PointList ptlist = SearchPIPoints(server, tag);
         
        PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
     
        PITimeServer.PITimeFormat piTime1 = new PITimeServer.PITimeFormat();
        piTime1.InputString = "*-2h";//or "2012-2-2 2:2:2"
        //获取两小时前的时刻值
        PointValues ptvalues = ptlist.Data.ArcValue(piTime1, RetrievalTypeConstants.rtAuto, out nvErrs);
        foreach (PointValue myValue in ptvalues)
        {
            PITimeServer.PITime piTime = myValue.PIValue.TimeStamp; //PI时间
            if (myValue.PIValue.Value.GetType().IsCOMObject)
            {
                //状态值
                DigitalState myDigState = (DigitalState)myValue.PIValue.Value;
                output+= myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + myDigState.Name + Environment.NewLine;
                 
            }
            else
            {
                //模拟值
                output+= myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + Convert.ToString(Math.Round(double.Parse(Convert.ToString(myValue.PIValue.Value)), 2)) + Environment.NewLine;
     
            }
        }
        return output;
    }
    

      

    转载自:https://www.cnblogs.com/Johnny_Z/p/3234849.html

  • 相关阅读:
    [数分提高]2014-2015-2第6教学周第2次课(2015-04-09)
    牛吃草问题
    [家里蹲大学数学杂志]第395期中科院2015年高校招生考试试题
    PostreSQL崩溃试验全记录
    EnterpriseDb公司的Postgres Enterprise Manager 安装图解
    EnterpriseDB公司的 Postgres Solution Pack (一)
    PostgreSQL调整内存与IO的参数说明
    查内存命令之free
    PPAS通过DBLink,访问Oracle数据库
    PPAS的MTK tool 工具使用说明
  • 原文地址:https://www.cnblogs.com/guohu/p/9778328.html
Copyright © 2011-2022 走看看