使⽤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\
通过这个应⽤程序可以查看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平台⽀持⾯向对象的语⾔
⼀、关于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)
windows开发平台具体代码见代码⽰例。
三、连接到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>
/// 构造函数
推荐:
/// </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();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。