一、概述
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可以調用的各個屬性和方法,並且嘗試下使用各個屬性和方法,或者畫出相應的類視圖。