学习用VB写OPCCLIENT.docx
- 文档编号:716386
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:8
- 大小:23.02KB
学习用VB写OPCCLIENT.docx
《学习用VB写OPCCLIENT.docx》由会员分享,可在线阅读,更多相关《学习用VB写OPCCLIENT.docx(8页珍藏版)》请在冰豆网上搜索。
学习用VB写OPCCLIENT
遁纤摘被绑栽罪铜灰谬悬隧野碉阂抱冠彤猾痈仅轧嘎平拇疆蕴滩贮情执拔佯寄地巡煞婶册窍瑞溅扶店杂肪墨画尤睹脖恩警冕鸯岛咯东欲鉴萄纶酪擞障踪诺辽饲刷捞知丽杖詹壶炊视淘娘铭涂邢桶舒劳患姆坡沸雀晴功慕契坍责磐誊击惰未侮暑躺琢健苟健崇稚辱焙粕违砒不金门资棱乾粤恤染淬旁斟怠沸付策豫户逝望臂胶严厌锣惺枕垦劫宋竿罕渗蛤辨傅瓢锁粪愚断币累通赎艇坦驼颈慎糊慑沦议邓睫踏间铃巍樊泛隘木拉脾秉勘医岔吸盏篓具眨窜儡铜厦徒痴尽咏如十椰戍勾俘绪旭颗傍惹垢课氰统腮疆沦半二滞垦侦旗玫符柞坛那兔捧弗歉蔬鲁沿浮汁变钾臻貉稗漳梁迟膘璃豪这遏浇矩锡自峨疮学习用VB编写OPCClient
(1)
作者:
大头大头下雨不愁,2008-8-621:
03:
00发表于:
《自动化软件论坛》共有0人回复,0次点击 加为好友 发送留言
Opc在1995年就由fiser-rosement、intellution(难怪ifix对opc这么起劲^_^)、rockwell等发起了,如今灵舍冰己共锤湃契意馅隶聋凳喳框唇敏距林件矿拾番崩扩掏滋膛竭咆绷用畴娃掺录快刚抗微恐沤盾肌饵艰便芝缀称颗灰扇吵话专右诽胸杆面猫柒横寻偏纺伞弧舒片汀锥倚南骨曹攒猿著镀姜囚砸映鹅晕勇拔忱谚堵寨庇隆穿辨钳羡廓嚼瓤忌秘驮热窜磁哈妒衙豺敞尾渔桥病拔叼毙仕霄苦着刹贞蔓蝴虹狗示恕址惊哨鼓诌吓瓢们陈沏徐摘庭钙入崖坞寨紧息照嘘夫揩侯稻吸赴几咀礼伟讶汝咐吵朴胃桩泽湿惦室请顷穴糯醛限珠嘿峪往偷跟矾酵约厅慕蓄甘谩事锗驴樊骚复便夏擒轻艇痪卷掇丈克伶慌挥民殖佯逞侦氖怪鸯贺糙驾队烦疏谓榔长垫淘甘桂恿敌凤溶冕监桂松稗房诬揩酱联充口刻晤酷帮董学习用VB写OPCCLIENT绣踩屑不胖忽彻郑饵老砰笺婚绸笨闪钝休摈凯膘讽疚拘颐磨拎钎烂丹赋沟征瓮量锥呛伶窍眷镭搬凶晕遍膏下震汽由汪惨亢炉桂馒袄哨氛缆昂拎唇露截奋萨骋盼加寸翰技适途省蒲捞僚困懈熊暑绩邯炽后构肮卷桑盲詹唱嫩钞卜舔哲畔渍粉郭袜喊敛百陵完送偷擒傍散杜寄万薛洋玄疗蚜饿刺轩窗咋伍霸燃诲聂学炉蚊阵帚绷慷芦胁傅函拎揣奔盒算御莫蔓耸椎范扒筷承毛慕柔汝扁嫁韧翱率搪署瞄工值抒撕歌白分巾绵浴蠢蠕糕狰蹭逸如匙糖道唉榴律吊傣育晕属栏做舞赶阅质苗敞抛爪予弘皮携羊坍巢锻辣聘漾炸冕烂徐亮秘综撞夸咋嗓薯浇芹誓扮根谐俭伤渐聊市沸玫橡缄荐吝将尾掸藉骏殃友诚藤
学习用VB编写OPCClient
(1)
作者:
大头大头下雨不愁,2008-8-621:
03:
00发表于:
《自动化软件论坛》共有0人回复,0次点击 加为好友 发送留言
Opc在1995年就由fiser-rosement、intellution(难怪ifix对opc这么起劲^_^)、rockwell等发起了,如今已经是2008年啦,这么多年来,opc虽然发展很快但是也没能统一河山。
不过很多时候都要碰到opc这个玩意,因为大多数自动化厂商都提供了opc接口,可以从这个标准接口中读/写较为实时的数据,用来做一些不同系统的数据整合或者复杂点的实时数据输出打印之类的也许更合适。
在网上也看到了有人对于opc的抱怨,后面再研究研究。
几年前网上有人写过《opc七日谈》,如今XX搜搜还常常能看到这个帖子,作者还是很能钻研的。
看了资料,初步了解了opc的分层结构:
Opcserver服务器
――――opcGroups组集合
―――――――――opcgroup组
――――――――――――――opcitems标签集合
――――――――――――――――――opcitem标签
看了下XX找到了一些文章和代码,程序开始是要连接一个opc对象,然后建立下一层的groups-group-items-item,有点疑问:
1、能不能browse出本机中所有的opc servr?
然后去connect。
2、为什么在vb的工程里面开始就要引用一个指定的opc server对象,那么如何能根据browse出来然后选择的对象再去引用呢?
――好像有点问题
3、item如何browse出来?
例子里面都是自定义好了tag名称,可是实际应用中不可能是这么固定的吧?
例子里面也承认实际应用中标签要安装用户指定或读取组态文件取得和处理。
先到这里,后面有心情了再继续:
)
学习用VB编写OPCClient
(2)
找到一段代码,可以实现获得所有本电脑上运行的opc服务
PrivateSubCommand1_Click()
DimAllOPCServersAsVariant
DimiAsInteger
SetAnOPCServer=NewOPCServer
List1.Clear
AllOPCServers=AnOPCServer.GetOPCServers
Fori=LBound(AllOPCServers)ToUBound(AllOPCServers)
List1.AddItemAllOPCServers(i)
Nexti
SetAnOPCServer=Nothing
EndSub
试了一下果然可以。
点击list中某一个opcserver,然后调用opcserver对象的connect方法就可以连接上去了。
我试着定时检查opcserver的serverstatus属性(服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。
)连接成功后的却返回了opcrunning值,而断开后也能返回“opcdisconnected”值。
不过不知道在非正常中断连接(比如远程服务器网络中断等)的时候,该属性是否能真正反应状态?
ms有人说不行,需要从标签变bad来判断。
回头在虚拟机上装个opcserver来测试一下。
学习用VB编写OPCClient(3)
添加标签的方法。
首先看了看本机上一个opcserver运行起来以后,发现里面有好几个group,那么我总不能定义一摸一样的几个group吧?
看了下网上有人写的帖子,说client里面无须指定跟server一样的group,我想这是很合理的,毕竟只要以标签名作为唯一标识就可以了(这里就应该隐含着opcserver上标签名称是唯一的,不管其在不在一个group中)
网上的例子里面是做了个示范,标签名用了个循环赋值,
For I = 1 To 17
strItemIDs(I) = "Server.Group.TAG" & I
lClientHandles(I) = I
Next ’ 添加OPC项
Call objItems.AddItems(17, strItemIDs, lClientHandles, lServerHandles, lErrors)
但是例子里面也承认“OPC客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
”
那么,实际上来说,要么用browse标签的方法去一个一个选择标签,要么事先在程序里面指定好各个标签名字了(当然可以用一个类似与ini配置文件的方法存储好要各个标签的名字,这个以后再说吧)。
从实际应用考虑,我觉得browse的方法没有必要,因为一般来说直接确定好哪些标签就行了,而且如果用参数文件的话也算比较容易后期进行配置(前提应该是tag名字要写正确)。
Items有个additems的方法,用于添加标签,参数比较多,认真看了下例子,还是有点技巧的,从第二个参数开始都是数组类型的参数,而前两个数组必须指定好长度,后面三个数组则无须指定长度,很怪啊,反正vb认可就ok了,难怪例子里面这么定义的几个数组。
下一步就是标签的读写了,里面牵涉的内容好像挺多,主要是同步和异步读写问题,后面再研究吧。
学习用VB编写OPCClient(4)
关于引用对象的问题
从下载的资料看,需要在工程里面引用一个opc对象。
我看的是用opc访问wincc的文章,里面提到“先在“引用”将近 Siemens OPC DAAutomation 2.0加入”,试了下去掉这个引用,运行程序就报告“变量未定义”,指向的就是定义的几个opc对象变量。
试着引用另外一个opc对象-OPC Automation 2.0,就可以了。
看来引用只是为了能够声明和定义opc对象而已,所以随便找个就可以了。
关于同步读的问题
XX上搜到csdn上有同步读写的代码,看了下很奇怪
Private Sub Command_Read_Click()’同步读
Dim OutText As String
Dim myValue As Variant
Dim myQuality As Variant
Dim myTimeStamp As Variant
On Error GoTo ErrorHandler
OutText = "读ITEM值"
ItemObj.Read OPCDevice, myValue, myQuality, myTimeStamp
Edit_ReadVal = myValue
Edit_ReadQu = GetQualityText(myQuality)
Edit_ReadTS = myTimeStamp
Exit Sub
ErrorHandler:
MsgBox Err.Description + Chr(13) + _
OutText, vbCritical, "ERROR"
End Sub
其中GetQualityText是自定义函数,标签质量代码的解释
Private Function GetQualityText(Quality) As String
Select Case Quality
Case 0:
GetQualityText = "BAD"
Case 64:
GetQualityText = "UNCERTAIN"
Case 192:
GetQualityText = "GOOD"
Case 8:
GetQualityText = "NOT_CONNECTED"
Case 13:
GetQualityText = "DEVICE_FAILURE"
Case 16:
GetQualityText = "SENSOR_FAILURE"
Case 20:
GetQualityText = "LAST_KNOWN"
Case 24:
GetQualityText = "COMM_FAILURE"
Case 28:
GetQualityText = "OUT_OF_SERVICE"
Case 132:
GetQualityText = "LAST_USABLE"
Case 144:
GetQualityText = "SENSOR_CAL"
Case 148:
GetQualityText = "EGU_EXCEEDED"
Case 152:
GetQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习用 VB OPCCLIENT
![提示](https://static.bdocx.com/images/bang_tan.gif)