使用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 PIServerref string PIUserref string PasswordboolOverridebool ForceShow)

具体调用方法在实例中会进一步说明。

这个方法本人还不太会用,主要对OverrideForceShow的含义不太清楚(我试了一下,当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”,方法如下截图所示:

然后,右键单击界面,在弹出窗口中选择“”,在一开始的using语句后增加一句:

using PISDK;

 

为Form1类增加2个字段,并且在构造函数中初始化piSDKserver字段。

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();

}

注意:文中,新增加的代码用加粗斜体字有底色

四、小结

在连接到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可以调用的各个属性和方法,并且尝试下使用各个属性和方法,或者画出相应的类视图。

时间: 2024-10-06 22:53:42

使用C#调用PI-SDK进行基于PI的开发的相关文章

PI Square中文论坛: PI SDK 开发中级篇| PI Square

注: 为了更好的利用站内资源营造一个更好的中文开发资源空间,本文为转发修正帖,原作者为OSIsoft技术工程师王曦(Xi Wang),原帖地址:PI SDK 中级篇 来源:https://d.gg363.site/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=2ahUKEwjJ3-HLrP3eAhXJULwKHWSqBloQFjADegQIBxAB&url=https%3A%2F%2Fpisquare.os

基于PI的Webservice发布实例

[转自http://blog.csdn.net/yin_chuan_lang/article/details/6706816] 最近的项目中,接口较多,而Webservice技术是主要实现方式之一.下面以项目中的一个具体实例来体验一下基于PI的Webservice发布. 业务场景 SAP系统实时接收一个外围接口系统(基于Web的电子商务平台)回传的数据. 技术分析 由于同步要求较高,数据量偏小,采用Webservice实现较为合理. 实例演示 创建好自建表,用于接收回传的数据: TC: SPRO

基于Library去开发android SDK——环境搭建

在项目开发中,有时候需要我们把项目中的某个功能或者模块打包成sdk供其他公司或者部门调用,以期快速实现某种功能.下面介绍一下我在开发中的整个思路历程,如发现有不对的或者不清楚的,请留言指正,我会定期查看回复并一起讨论. 1.新建一个工程,并在项目中新建一个Module. 2.新建好Library依赖库之后,我们就可以在里面实现我们需要的逻辑了.一般我们在写的时候往往需要自己写个app demo调用测试我们的代码是否能完成所需的功能,这个时候可以把Library依赖库添加项目中的app Modul

Unity3D调用第三方SDK(之一)从eclipse到Unity3D 友盟

原地址:http://www.360doc.com/content/14/0120/14/11670799_346638215.shtml 篇展示在Unity3D中调用友盟SDK的实现方法. 首先附上项目源代码地址:https://github.com/hiramtan/unity3d_test_umeng SDK下载及使用方法说明见官方开发文档:http://dev.umeng.com/doc/document_ana_android.html 打开eclipse新建一个android工程:

基于Library去开发android SDK——sdk打包

以上我们完成了sdk开发环境的搭建,以及sdk中功能代码的具体实现,这一篇将介绍如何通过gradle实现我们sdk打包. 1.在我们的mylibrary的gradle中做如下配置: task makeJar(type: Copy) { delete 'build/libs/mylibrary.jar' //删除已经存在的jar包 from('build/intermediates/bundles/default/')//从该目录下加载要打包的文件 into('build/outputs/')//

解决 Java 调用 Azure SDK 证书错误 javax.net.ssl.SSLHandshakeException

Azure 作为微软的公有云平台,提供了非常丰富的 SDK 和 API 让开发人员可以非常方便的调用的各项服务,目前除了自家的 .NET.Java.Python. nodeJS.Ruby,PHP 等语言都提供支持,详细的文档说明请参考: https://azure.microsoft.com/en-us/documentation/ 然而在使用过程中,以 Java 语言为例,在初始调用 Azure SDK/API 的时候大家会碰到类似下面的错误: [WARN] ServiceBusContrac

基于Android平台开发的手电筒Light

基于Android平台开发的手电筒Light 1.     需求分析: 在现代社会中,手机的功能越来越完善,手电筒就是这些功能中必不可少的一种.当行走在漆黑的道路上,当你在黑暗狭小的地方寻找物品,当你在家中停电之时,如果你的手机拥有了手电筒的功能,那将为你带来莫大的方便.当然,它的用处不仅仅只是这样,有了这样一个方便携带的手电筒,在许多时候都是大有益处,因此,开发出了手电筒这一应用程序. 2.     开发环境: 1. JDK Ver: jdk-7u4-windows-x64.exe 2. My

基于VisualC++2010开发windows7的tabelt pc应用的WindowsRibbon范例

Visual Studio 2010的新特性里面Ribbon界面是一个很重要的东西,Ribbon界面非常易用和高效,也不去强调和证明它将成为未来应用程序界面的一种趋势.为了让我们的应用程序"Ready for Windows 7",我们有必要根据实际的情况需要,为我们的应用程序添加Ribbon界面. 为了推广Ribbon界面,为了讨好程序员们,让程序员可以轻松地为各种应用程序创建Ribbon界面,微软真是不遗余力,不断地推出新的Ribbon界面接口.为了可以让所有基于C++的普通Win

优分享VR开源啦,优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件

欢迎来到优分享VR开源项目 优分享VR 开源中国Git地址: http://git.oschina.net/xumingwang/youkes_vr 优分享VR是 优分享安卓APP VR视频播放开源部分.其它开源部分:优分享开源浏览器 优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件.由于google vr sdk现在出于初级阶段,所以本软件也不能完美的支持一些VR视频资源的播放,不过随着Google VR的发展,优分享也会与时俱进的支持更多的VR视频资源. 优分享VR安卓