使用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安裝完成后,可以在如下目錄下找到此應用程序:

\PIPC\PISDK\AboutPI 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, \pipc\dat, \pipc\bin, \pipc\library, and \pipc\include),在Windows\System32目錄下創建文件piapi32.dll和pilog32.dll

 

\pipc\PISDK

 

支持平台

 

所有平台支持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可以調用的各個屬性和方法,並且嘗試下使用各個屬性和方法,或者畫出相應的類視圖。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM