最简单的访问OPC服务器方法

上传人:ni****g 文档编号:486057194 上传时间:2023-12-16 格式:DOC 页数:7 大小:1.03MB
返回 下载 相关 举报
最简单的访问OPC服务器方法_第1页
第1页 / 共7页
最简单的访问OPC服务器方法_第2页
第2页 / 共7页
最简单的访问OPC服务器方法_第3页
第3页 / 共7页
最简单的访问OPC服务器方法_第4页
第4页 / 共7页
最简单的访问OPC服务器方法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《最简单的访问OPC服务器方法》由会员分享,可在线阅读,更多相关《最简单的访问OPC服务器方法(7页珍藏版)》请在金锄头文库上搜索。

1、 最简单的访问OPC服务器 在网上搜了很多关于VB.NET编写客户端访问OPC服务器的资料,同时也根据KEPWARE提供的案例源代码,同时进行研究,最后花了一个星期的时间进行研究,才粗略有了一点头绪,现共享出来,希望后来的初学者有所帮助。一 要建一个OPC服务器1)安装OPC服务器软件,KEPware是大家比较常用的,我使用的是Kepware OPC V4.54。如图,添加CHANNEL,添加TAG.把Plc的点位添加进去,我建了6个变量(item)。具体添加的方法需要自行去学习。我添加的三菱Q系列的PLC,PLC采用以太网通讯的方式,在局部网就可以访问了。 2)设置D,这个步骤很重要,具体的

2、设置方法,网上很多资料,按步骤设置就可以。我原来按照组态王提供的方法,总是不成功,后来上了微软,按微软提供的方法设置肯定可以成功。 完成了以上两步,你的电脑就变成OPC服务器了。二 访问服务器1.利用组态软件访问OPC服务器。如果用组态王访问,那就太简单了,左边列表,选opc服务器,点击添加服务器,就会弹出一个窗口,把本机的OPC服务器列成清单。在清单里面就可以发现KEPSERVER的名称:KEPware.KEPserverEx.V4,选择,然后按确定,就完成了添加服务器。 在组态王的数据词典,新建变量,I/O变量,连接设备选择OPC服务器,寄存器可以看到KEPserver的变量(item),

3、建立之后,就可以利用组网王,开发监控应用,组态软件的使用在此就不赘述了,总之,利用组态软件访问OPC是最简单的。2.用VB.NET开发客户端访问 访问opc服务器,必须使用OPC基金会提供的OPCdaauto.dll。 学习过程,最好下载说明书,OPC_20_Automation_Interface,网上可以下载。1) 注册OPCdaauto.dll。 这个动态连接库文件可以网上下载。拷贝到C:WINDOWSSYSTEM32目录, 打开运行输入框,输入:regsvr32 C:WINDOWSSYSTEM32OPCDAAUTO.DLL如果是64位windows,则拷贝在C:WINDOWS sysw

4、ow64。输入: regsvr32 C:WINDOWS syswow64OPCDAAUTO.DLL。2) VS2015,新建一个项目。在项目-点击“添加引用”,使用浏览,在,可以找到opc da automation的选项,点击确认,及完成添加。添加成功,则资源管理器,应用,可以看到OPCautomation的项目。3)编写程序的过程 最简单的一个案例,如下图,实现搜索服务器,连接服务器后,获取ITEM的实时值。A) 查找服务器点击“查找服务器”按钮,地址不填,则列出本机的OPC服务器。如果填写另一台服务器地址,则列出另一台电脑的服务器清单 如何知道计算机名?看网络邻居,至少你应该知道那台电脑

5、装了OPC服务器。PublicClassForm1Inherits System.Windows.Forms.FormDimWithEvents AnOPCServer As OPCAutomation.OPCServer用于搜索服务器,连接服务器DimWithEvents ConnectedGroup As OPCAutomation.OPCGroup对应后面添加组和项PrivateSub Form1_Load(sender AsObject, e AsEventArgs) HandlesMyBase.LoadEndSub以下程序:搜索OPC服务器,显示在列表框上面PrivateSub Bu

6、tton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONNET.ClickTryAnOPCServer = New OPCAutomation.OPCServer ListBox1.Items.Clear()Dim AllOPCServers AsObject AllOPCServers = AnOPCServer.GetOPCServers(TextBox1.Text)以括号用文本框输入,确定OPC服务器的路径,空白表示搜索本机,如果搜索内部网其他电脑,则写电脑的名称,例如:电脑名称

7、 Dim i AsShortFor i = LBound(AllOPCServers) To UBound(AllOPCServers) ListBox1.Items.Add(AllOPCServers(i)Next iCatch ex AsExceptionMessageBox.Show(List OPC servers failed with exception: + ex.Message, SimpleOPCInterface Exception, MessageBoxButtons.OK)用于显示执行结果,如果失败,则可以显示失败的原因。EndTryEndSubB) 连接服务器、添加项

8、和组代码如下:PrivateSub Button1_Click_1(sender AsObject, e AsEventArgs) Handles Button1.Click以下程序连接服务器连接Try AnOPCServer.Connect(ListBox1.Text, TextBox1.Text)第一个是参数是opc服务器名称,第二个是电脑名称。直接填写也可以,例如:AnOPCServer.Connect(“KEPware.KEPserverEx.V4”,“newPI”)Catch ex AsExceptionMessageBox.Show(OPC server 连接失败 : + ex.M

9、essage, OPCSample, MessageBoxButtons.OK)EndTry以下程序添加group和itemTry AnOPCServer.OPCGroups.DefaultGroupIsActive = True使其活动,照抄就行。 AnOPCServer.OPCGroups.DefaultGroupDeadband = 0照抄就行。 ConnectedGroup = AnOPCServer.OPCGroups.Add(GROUP1)添加GROUP,名称自己随便填。 ConnectedGroup.UpdateRate = 100更新速率,我实验过,值越小,获取ITEM值越灵敏

10、。 ConnectedGroup.IsSubscribed = True采用订阅的方式,后面用DATACHANGE的事件获取item值,与此对应。 ConnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE1.绿灯, 1) ConnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE1.产量, 2) ConnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE1.黄灯, 3) ConnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE1.省电, 4) Co

11、nnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE1.产量1, 5) ConnectedGroup.OPCItems.AddItem(CHANNEL2.DEVICE2.产量, 6)ADDITEM和ADDITEMS,两种命令的格式不同,这里仅用最简单的additem命令,用最土的办法添加了6个ITEM,两个参数,第一个是item名称,必须和KEPSERVER建立的ITEM完全一致,第二个参数是CLIENTHANDLES,句柄。6个ITEM,我给的是1-6,随便数字都可以,不重复即可。这个跟后面获取值有直接关系!Catch ex AsExceptionMes

12、sageBox.Show(添加组和项失败 : + ex.Message, OPCSample, MessageBoxButtons.OK)EndTryEndSubC)获取 前面提到的订阅的方式, 是OPC服务器主动的方式,把有变化的ITEM,发送给客户端。需要使用DataChange的事件来获取item值,OPC_20_Automation_Interface58页。假设两个OPC服务器有2个item发生改变(绿灯,产量),那么会返回2个ITEMS, 返回的,其中ITEMVALUES是返回的ITEM实际值,ClientHandles是返回的句柄值,句柄值和添加ITEM时定义的句柄对应。前面添加

13、的CHANNEL2.DEVICE2.产量,我定义的ClientHandles是6。如果数值发生变化,那么服务器返回的的值也是6。实际返回值:NumItems=2ClientHandles(1)=1,ITEMVALUES(1)=true ItemValues(1)=trueClientHandles(2)=6,ITEMVALUES(2)= 65ItemValues(2)=65因为返回的是数组,那么需要定义一个字符串的数组去接受ITEM值。 添加事件的方法: 源代码如下:PrivateSub ConnectedGroup_DataChange(TransactionID AsInteger, Nu

14、mItems AsInteger, ByRef ClientHandles AsArray, ByRef ItemValues AsArray, ByRef Qualities AsArray, ByRef TimeStamps AsArray) Handles ConnectedGroup.DataChangeDim val(10) AsString用于接收ITEM值Dim I AsInteger用于循环Dim k AsInteger用于循环的方式给TEXTBOX赋值,如果是textbox2-TEXTBOX7,有规律。就可以实现For I = 1 To NumItems k = 1 + ClientHandles(I) val(ClientHandles(I) = ItemValues(I) Controls(textbox & k).Text = val(ClientHandles(I)NextEndSub获取item还可以用到同步读SyncRead和异步读AsynRead的方式,我暂时没有学会。具体查看OPC_20_Automation_Interface。 /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号