使用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物件繼承圖
在這個物件繼承圖中,本人用得最多的是PIPoint了,所以,大家現在先清楚PISDK-Servers-Server- PIPoints-PIPoint這一條線,其它的以後我們再慢慢敘述。
三、關於“About PI-SDK”程式
當PI-SDK安裝完成後,可以在如下目錄下找到此應用程式:
\PIPC\PISDK\AboutPI SDK.exe
通過這個應用程式可以檢視PI-SDK的版本號,以及維護已知伺服器列表(known servers list),測試與伺服器列表中的各個伺服器是否能正常連線(如下圖所示,本地伺服器localhost可以正常連線)。
四、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 PIServer, ref string PIUser, ref string Password, boolOverride, bool ForceShow)
具體呼叫方法在例項中會進一步說明。
這個方法本人還不太會用,主要對Override和ForceShow的含義不太清楚(我試了一下,當Override為false,ForceShow為true時,程式會出錯)。有會用這個方法的請告知。
c)PISDKDlg.Connections.ShowConnectionDialog(bool ReadOnly, short 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個欄位,並且在建構函式中初始化piSDK和server欄位。
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可以呼叫的各個屬性和方法,並且嘗試下使用各個屬性和方法,或者畫出相應的類檢視。