1. 程式人生 > >使用C#呼叫PI-SDK進行基於PI的開發

使用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可以呼叫的各個屬性和方法,並且嘗試下使用各個屬性和方法,或者畫出相應的類檢視。