zoukankan      html  css  js  c++  java
  • 使用C#调用PI-SDK进行基于PI的开发

    一、概述

    PI-SDK(Plant Information Software Develop Kit)是OSI公司提供的基于面向对象的访问PI数据库的软件开发工具包,它可以对以下数据库进行读写:

    ²        PIPoints (PI point table)

    ²        StateSets (Digital sets table)

    ²        PIUsers   (User table)

    ²        PIGroups (Groups table)

    ²        PIModuleDB (Modules Database)

    ²        PIBatchDB (Batches Database)

    ²        PITransferRecords (TransferRecords Database)

    ²        Point Classes (Attribute Sets)

    PI SDK只有在32位Windows平台下可以使用,可以调用任何平台下的PI数据库。

    二、PI-SDK对象继承图

    使用C调用PI-SDK进行基于PI的开发一 - .net - .net中国协会

    在这个对象继承图中,本人用得最多的是PIPoint了,所以,大家现在先清楚PISDK-Servers-Server- PIPoints-PIPoint这一条线,其它的以后我们再慢慢叙述。

    三、关于“About PI-SDK”程序

    当PI-SDK安装完成后,可以在如下目录下找到此应用程序:

    PIPCPISDKAboutPI SDK.exe

    使用C调用PI-SDK进行基于PI的开发一 - .net - .net中国协会

    通过这个应用程序可以查看PI-SDK的版本号,以及维护已知服务器列表(known servers list),测试与服务器列表中的各个服务器是否能正常连接(如下图所示,本地服务器localhost可以正常连接)。

    使用C调用PI-SDK进行基于PI的开发一 - .net - .net中国协会

    四、PI-SDK和PI-API的比较

    项目

    PI-API

    PI-SDK

    全称

    PI Application Programming Interface,PI应用程序接口

    PI Software Development Kit,PI软件开发工具包

    面向

    procedural methods,面向编程

    Object-oriented对象编程

    安装完成后创建目录

    (pipc, pipcdat, pipcin, pipclibrary, and pipcinclude),在WindowsSystem32目录下创建文件piapi32.dll和pilog32.dll

    pipcPISDK

    支持平台

    所有平台支持API调用的所有语言,如(VB, VBA, C, Fortran, Delphi,...)

    Windows平台支持面向对象的语言

    本文源代码可以到http://download.csdn.net/source/781107下载

    一、关于known servers list(已知服务器列表)

    PI-SDK创建和维护known servers lists(已知服务器列表);PI-API使用和维护/PIPC/DAT/PILOGIN.INI中的服务器表。

    PILOGIN.INI服务器表的修改会自动更新到PI-SDK的known servers lists中;而PI-SDK对known servers list的修改不会自动更新到PILOGIN.INI中。

    在使用PI-SDK时,如果需要连接的PI服务器不在known servers lists中,则应首先将它加入到known servers lists中。

    二、连接PI服务器的两种方式

    1、  以互动方式登陆——通过用户名和密码登陆

    互动方式登陆有3种方式:

    a) PISDK.Server.Open(string connectstring)

    ConnectionString为连接字符串,为string数据类型。它的格式如下:

    UID=PIUser;PWD=PIUserPassWord

    其中PIUser为PI用户名,PIUserPassWord为对应PI用户的密码,如果无密码则用空字符串。

    例如,如果用户为piadmin,对应的密码为123,则对应的连接字符串为:

    UID=piadmin;PWD=123

    b) PISDKDlg.Connections.Login(ref PISDK.Server PIServerref string PIUserref string PasswordboolOverridebool ForceShow)

    具体调用方法在实例中会进一步说明。

    这个方法本人还不太会用,主要对Override和ForceShow的含义不太清楚(我试了一下,当Override为false,ForceShow为true时,程序会出错)。有会用这个方法的请告知。

    c)PISDKDlg.Connections.ShowConnectionDialogbool ReadOnlyshort Modal

    使用这个方法会调用PI连接管理器对话框(PI Connection Manager dialog)。PI连接管理器会列出已知服务器表(Known Servers table)中的所有PI服务器,并且可以对PI服务器进行连接和断开连接、在已知服务器列表中添加和删除PI服务器、更改默认连接参数、定义服务器ID别名和路径别名等操作。

    2、  以非互动方式登陆——借用trust登陆

    PISDK.Server.Open(string.Empty)

    具体代码见代码示例。

    三、连接到PI窗口应用程序

    本实例建立一个Windows Form应用程序,其中包括了1个GroupBox控件、3个Label控件、1个ListBox控件、3个Button控件、2个TextBox控件,具体界面如下:

    通过“Establish Connection”按钮和“Connection Manager”按钮可以与PI数据库建立连接。

        首先在“解决方案资源管理器”窗口增加引用“OSIsoft.PISDK”和“OSIsoft.PISDKDlg”,方法如下截图所示:

    然后,右键单击界面,在弹出窗口中选择“View Code”,在一开始的using语句后增加一句:

    using PISDK;

     

    为Form1类增加2个字段,并且在构造函数中初始化piSDKserver字段。

        public partial class Form1 : Form

        {

            PISDK.PISDK piSDK;   // 定义PISDK接口piSDK

            Server server;       // 定义Server接口server

            /// <summary>

            /// 构造函数

    推荐:C# 调用 Google Earth Com API开发(二)

    原文地址:http://www.cnblogs.com/wpwen/archive/2009/02/22/1395622.html 继《C#调用GoogleEarth Com API开发(一)》,我Neil又带给大家第二篇文章。这一篇文

            /// </summary>

                    public Form1()

            {

                InitializeComponent();

                piSDK=new PISDKClass();  // 创建PISDKClass对象,并使接口piSDK指向它

     

                // ListBox控件lstServer进行初始化,使其列出服务器列表中的所有服务器名

                foreach (Server srv in piSDK.Servers)

                {

                    lstServer.Items.Add(srv.Name);

                }

     

                // 使lstServer控件的选中项为默认服务器名

                lstServer.SelectedItem = piSDK.Servers.DefaultServer.Name;

     

                // 使PI用户为默认服务器的默认用户

                txtUser.Text = piSDK.Servers.DefaultServer.DefaultUser;

     

                // 使接口server指向默认服务器

                server = piSDK.Servers[lstServer.SelectedItem.ToString()];

            }

    双击Form1界面中的ListBox控件,然后为lstServer_SelectedIndexChanged事件添加如下代码:

            private void lstServer_SelectedIndexChanged(object sender, EventArgs e)

            {

                // 如果选定的服务器已修改,则server指向修改后的服务器

                server = piSDK.Servers[lstServer.SelectedItem.ToString()];

                txtUser.Text = server.DefaultUser; // txtUser控件显示修改后服务器的默认用户

            }

    双击Form1界面中的“Establish Connection”按钮,然后为btnConnect_Click事件添加如下代码:

    private void btnConnect_Click(object sender, EventArgs e)

            {

                try

                {

                    // 如果已经连接到PI服务器,则先断开与PI服务器之间的连接

                    if (server.Connected)

                    {

                        server.Close();

                    }

     

                    #region 使用server.Open(connectString)以登陆方式连接PI服务器

                    string connectString = string.Format("UID={0};PWD={1}", txtUser.Text, txtPassword.Text);

                    server.Open(connectString);

                    #endregion

     

                    #region 使用server.Open()trust方式连接PI服务器

                    //if (!server.Connected)

                    //{

                    //    server.Open(String.Empty);

                    //}

                    #endregion

     

                    #region 使用PISDKDlg.Connections.Login()以登录方式连接PI服务器

                    //Server otherServer=piSDK.Servers["192.168.0.103"];

                    //string a = txtUser.Text;

                    //string b = txtPassword.Text;

                    //PISDKDlg.Connections connection = new PISDKDlg.ConnectionsClass();

                    //connection.Login(ref otherServer, ref a, ref b, true, true);

                    //if (otherServer.Connected)

                    //    server = otherServer;

                    #endregion

     

                    MessageBox.Show(server.ConnectionType + " connection established with the " + server.Name

                        + " server as " + server.CurrentUser + " on " + server.LastConnectedTime + ".");

                }

                catch (Exception ex)

                {

                    MessageBox.Show("Can not connect to PI Server./r/nDetail is: " + ex.Message);

                    return;

                }

            }

    注意:上面的代码段中包含3种连接PI数据库的方法,我们可以逐一测试,其中使用trust连接PI服务器的方法需要首先在PI数据库中建立恰当的trust。

    双击Form1界面中的“Connection Manager”按钮,然后为btnConnectionManager_Click事件添加如下代码:

            private void btnConnectionManager_Click(object sender, EventArgs e)

            {

                PISDKDlg.Connections connections = new PISDKDlg.ConnectionsClass();                  

                connections.ShowConnectionDialog(true, 22);

            }

    代码中首先创建connections对象,然后显示连接管理器对话框。

    双击Form1界面中的“Exit”按钮,然后为btnConnectionManager_Click事件添加如下代码:

            private void btnExit_Click(object sender, EventArgs e)

            {

                if (server.Connected)

                    server.Close();

                this.Dispose();

            }

    注意:文中,新增加的代码用加粗斜体字有底色

    四、小结

    在连接到PI服务器时,可以有如下几种方法:

    1、  使用PISDK命名空间下的server.Open(ConnectString)方法,如果ConnectString为空字符串,那么系统就自动用Trust方式连接。如果连接过程中发生错误,则会引起错误。

    2、  使用PISDKDlg命名空间下的connections.Login(params)方法,可以选择需要连接的PI服务器,并且如果连接过程中发生错误,会跳转到“PI服务器登陆”对话框。

    3、  使用PISDKDlg命名空间下的connections. ShowConnectionDialog (params)方法,则可以在弹出对话框中方便地选择需要连接的PI服务器和连接用户。

    建议通过对象浏览器(Object Browser)去熟悉以下PISDK.Server接口和PISDKDlg.Connections可以调用的各个属性和方法,并且尝试下使用各个属性和方法,或者画出相应的类视图。

  • 相关阅读:
    解决大量TCPIP连接后出现“因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作”的问题
    网站/网页 变灰的方法
    [收藏]General things to take into consideration while doing socket programming.
    数据库主体在该数据库中拥有 架构,无法删除解决方法
    Word字体与像素的对应关系
    50个网站设计开发必备的资源素材网站
    apache实现页面重定向(地址跳转)
    JS eval(function(p,a,c,k,e,r){e=function(c)*****解密
    JS打印指定区域内容
    如何才能做到网站高并发访问? .
  • 原文地址:https://www.cnblogs.com/zouhao/p/10048132.html
Copyright © 2011-2022 走看看