使用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”,方法如下截图所示:
然后,右键单击界面,在弹出窗口中选择“”,在一开始的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可以调用的各个属性和方法,并且尝试下使用各个属性和方法,或者画出相应的类视图。
使用C#调用PI-SDK进行基于PI的开发的更多相关文章
- PI Square中文论坛: PI SDK 开发中级篇| PI Square
注: 为了更好的利用站内资源营造一个更好的中文开发资源空间,本文为转发修正帖,原作者为OSIsoft技术工程师王曦(Xi Wang),原帖地址:PI SDK 中级篇 来源:https://d.gg36 ...
- 基于PI的Webservice发布实例
[转自http://blog.csdn.net/yin_chuan_lang/article/details/6706816] 最近的项目中,接口较多,而Webservice技术是主要实现方式之一.下 ...
- Java 调用http接口(基于OkHttp的Http工具类方法示例)
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
- Unity3D调用第三方SDK(之一)从eclipse到Unity3D 友盟
原地址:http://www.360doc.com/content/14/0120/14/11670799_346638215.shtml 篇展示在Unity3D中调用友盟SDK的实现方法. 首先附上 ...
- 解决Java调用Azure SDK证书错误javax.net.ssl.SSLHandshakeException
Azure作为微软的公有云平台,提供了非常丰富的SDK和API让开发人员可以非常方便的调用的各项服务,目前除了自家的.NET, Java, Python, nodeJS, Ruby,PHP等语言都提供 ...
- 解决 Java 调用 Azure SDK 证书错误 javax.net.ssl.SSLHandshakeException
Azure 作为微软的公有云平台,提供了非常丰富的 SDK 和 API 让开发人员可以非常方便的调用的各项服务,目前除了自家的 .NET.Java.Python. nodeJS.Ruby,PHP 等语 ...
- c#调用c++制作的基于mfc的ocx控件
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51286926 原文中有问题部分已修改. c#调用c++制作的基于mfc的ocx控件 ...
- ART模式下基于Xposed Hook开发脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...
- Android SDK +Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows ...
随机推荐
- Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理
文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...
- 大数据-12-Spark+Kafka构建实时分析Dashboard
转自 http://dblab.xmu.edu.cn/post/8274/ 0.案例概述 本案例利用Spark+Kafka实时分析男女生每秒购物人数,利用Spark Streaming实时处理用户购物 ...
- 阿里云CentOS中vsftp安装、配置、卸载
1--卸载 查看当前服务器中的vsftpdrpm -qa|grep vsftpd 例如结果为:vsftpd-2.2.2-13.el6_6.1.x86_64执行卸载rpm -e vsftpd-2.2.2 ...
- MAC使用mysql报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
遇到这种错误,需要重置密码. Step1:停止mysql,命令如下: $ sudo service mysql stop 或者是 $ sudo /usr/local/mysql/support-fil ...
- 牛客HJ浇花。
我也不知道这是什么类型的题,算是简单模拟吧.但是有个方法很赞. 开两个数组,一个模拟花,一个记录不同浇花次数花的数量: 要找浇水的次数,那么记每次浇水的开头和结尾就行了,a—b;那么f[a]++;f[ ...
- EasyUI datagrid combox onchange 五
$("#sTwo").combobox({ onChange: function (n,o) { n改变后,o改变前 }
- [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题目大意:给一个大小为n的数组,数组编号从1到n,每一个元素的值代表 ...
- [Wannafly挑战赛28][B msc和mcc][预处理+枚举]
链接:https://ac.nowcoder.com/acm/contest/217/B来源:牛客网 msc和mcc 题目描述 msc和mcc是一对好朋友,有一天他们得到了一个长度为n的字符串s. 这 ...
- python------面向对象介绍之多态实例
一. 多态 一种接口,多种实现. 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作. ...
- shell 修改工作路径
import os os.getcwd() #查看现路径 os.chdir('新路径') #修改路径