茶馆

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
作为一个热能工程的研究生,现在基本上的工作都是编程编程再编程,直到前几天把那个自定义报表系统完成,现在才真正的接触到专业的东西,但是同样还是没有 离开编程,只是对象换成了PI数据库,原来也有师兄有基于PI数据库的程序开发经验,但是基本上用的都是VC6,可惜我不太懂那么高深的玩意儿(虽然我们 老板说这个只要会菜单+对话框就好了,汗一个先),再加上这个要做成B/S架构的,所以我还是选择了C#,没有前例,只好自己研究了,去到OSIsoft 的网站上面看到download里面有.net sample,小开心了一阵,赶快注册了一个帐号,激活,正在开心中,挨了当头一棒,说什么我的公司不对,没有资格注册,我晕,学习你的资料还要这么多条 件?不给软件下载,给文档看看也不行.难道是怕盗版?闲话少说,下面开始正题.==,再补充一下,这个PI数据库可是电厂正规购买的,但是打电话去电厂问 得时候他们信息部竟然没有人知道什么网站资料啊这些,看来是没有基于pi做过什么了,唉,10多万的美金呢?怎么就没有人去研究一下呢?
做个广告,如果这里谁有OSIsoft网站帐号或者在研究这个的,可以联系我啊,大家一起来,我的QQ:315339469,Email:sacprog#gmail.com
还好这里有一个SDK的文档,就从这里开始下手吧,这个文档的版本有点早,大概是2002年的,里面没有.net的例子,还好里面大多数是VB的例子,我想应该可以直接搬过来吧.于是开始动手.
首先欲基于PI-SDK开发PI数据库,必须先安装PI-SDK,然后再VS中新建了一个aspnet网站,添加引用:PI-SDK 1.2 Type Library 和 PISDKCommon 1.2 Type Library
接着看文档上面VB的例子代码是
Option Explicit
Dim srv as Server
Dim pt As PIPoint
for Each srv In Servers
Combo1.AddItem srv.Name
Next srv
为 了把这两个地方改成能运行得C#代码还花费了不少力气,因为原来没有做的东西都是很简单的.net东西,基本上没有用到过和COM组件进行交互.首先说什 么不能实例花,接着又说什么Servers不行,花了很多时间在PISDK下面找了一个能实例化的类PISDKClass,后来又发现原来Servers 是这个对象的一个属性.
private PISDK.IPISDK piSDK= new PISDK.PISDKClass();
private PISDK.Server _piServer;
private PISDK.PIPoint _piPoint;
在Page_Load事件枚举所有的数据源,添加到DropSownlist.
foreach(PISDK.Server item in piSDK.Servers)
{
DropDownList1.Items.Add(srv.Name);
}
设置_piServer为dropdown里面选中的数据库
_piServer = piSDK.Servers[DropDownList1.Text];
然后下面接着防置一个文本框来读取用户输入的Tag点,Tag有点相当于普通数据库的字段.但是又不一样,关于这个暂时不细说了
和一个ListBox来得到这个Tag的所有属性.代码如下:
_piPoint = _piServer.PIPoints[tbxTagName.Text];
ListBox1.Items.Clear();
foreach (PISDK.PointAttribute ptatr in _piPoint.PointAttributes)
{
ListBox1.Items.Add(ptatr.Name);
}
读取Tag属性的值可以用下述属性.
tbxAttValue.Text = _piPoint.PointAttributes[ListBox1.Text].Value.ToString();
如果要更新这个属性的值呢?仍然很简单
PISDK.PointAttribute ptatr;
_piPoint = _piServer.PIPoints[tbxTagName.Text];
ptatr = _piPoint.PointAttributes[lblAttrName.Text];
_piPoint.PointAttributes.ReadOnly = false;
ptatr.Value = tbxAttValue.Text;
_piPoint.PointAttributes.ReadOnly = true;
blNotion.Text = "更新成功!";
其实最后一句想用MessageBox可惜在asp.net下面一直找不到好的使用MessageBox的方法,原来在CodeProject上面找了一个,但是因为后来发现在Atlas的updatepanel中不能使用,也就作罢了
OK,上面就是我根据SDK-Manual里面的一个Basic例子,用C#改写了一下,实现了和例子一样的功能,虽然今天花费了不少时间,最后做出来的东西看起来却很简单,不过自己感受到了收获,第一次发文到首页,有点紧张,呵呵!
下面是一个简单的截图和SDK截图的对比:

我的


SDK的VB例子



posted on 2006-05-30 20:48  laue  阅读(6651)  评论(11编辑  收藏  举报