当前位置:文档之家› 最简单的访问OPC服务器方法

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

最简单的访问OPC服务器
在网上搜了很多关于编写客户端访问OPC服务器的资料,同时也根据KEPWARE提供的案例源代码,同时进行研究,最后花了一个星期的时间进行研究,才粗略有了一点头绪,现共享出来,希望后来的初学者有所帮助。

一.要建一个OPC服务器
1)安装OPC服务器软件,KEPware是大家比较常用的,我使用的是Kepware OPC 。

如图,添加CHANNEL,添加TAG.把Plc的点位添加进去,我建了6个变量(item)。

具体添加的方法需要自行去学习。

我添加的三菱Q系列的PLC,PLC采用以太网通讯的方式,在局部网就可以访问了。

2)设置DCOM,这个步骤很重要,具体的设置方法,网上很多资料,按步骤设置就可以。

我原来按照组态王提供的方法,总是不成功,后来上了微软网站,按微软提供的方法设置肯定可以成功。

完成了以上两步,你的电脑就变成OPC服务器了。

二.访问服务器
1.利用组态软件访问OPC服务器。

如果用组态王访问,那就太简单了,左边列表,选opc服务器,点击添加服务器,就会弹出一个窗口,把本机的OPC服务器列成清单。

在清单里面就可以发
现KEPSERVER的名称:选择,然后按确定,就完成了添加服务器。

在组态王的数据词典,新建变量,I/O变量,连接设备选择OPC服务器,寄存器可以看到KEPserver的变量(item),建立之后,就可以利用组网王,开发监控应用,组态软件的使用在此就不赘述了,总之,利用组态软件访问OPC是最简单的。

2.用开发客户端访问
访问opc服务器,必须使用OPC基金会提供的。

学习过程,最好下载说明书,《OPC_20_Automation_Interface》,网上可以下载。

1)注册。

这个动态连接库文件可以网上下载。

拷贝到C:\WINDOWS\SYSTEM32目录,打开
运行输入框,输入:regsvr32 C:\WINDOWS\SYSTEM32\
如果是64位windows,则拷贝在C:\WINDOWS\syswow64。

输入:regsvr32 C:\WINDOWS\ syswow64\。

2)VS2015,新建一个项目。

在项目---点击“添加引用”,使用浏览,在COM,可以找到opc da
automation的选项,点击确认,及完成添加。

添加成功,则资源管理器,应用,可以看到OPCautomation的项目。

3)编写程序的过程
最简单的一个案例,如下图,实现搜索服务器,连接服务器后,获取ITEM的实时值。

A)查找服务器
点击“查找服务器”按钮,地址不填,则列出本机的OPC服务器。


果填写另一台服务器地址,则列出另一台电脑的服务器清单
如何知道计算机名看网络邻居,至少你应该知道那台电脑装了OPC服务器。

Public Class Form1
Inherits Dim WithEvents AnOPCServer As'用于搜索服务器,连接服务器
Dim WithEvents ConnectedGroup As'对应后面添加组和项
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
End Sub
'以下程序:搜索OPC服务器,显示在列表框上面
Private Sub Button1_Click(ByVal sender As , ByVal e As Handles
Try
AnOPCServer = New
Dim AllOPCServers As Object
AllOPCServers = '以括号用文本框输入,确定OPC服务器的路径,空白表示搜索本机,如果搜索内部网其他电脑,则写电脑的名称,例如:\\电脑名称
Dim i As Short
For i = LBound(AllOPCServers) To UBound(AllOPCServers)
Next i
Catch ex As Exception
("List OPC servers failed with exception: " + , "SimpleOPCInterface Exception", '用于显示执行结果,如果失败,则可以显示失败的原因。

End Try
End Sub
B)连接服务器、添加项和组
代码如下:
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles
'以下程序连接服务器连接
Try
, '第一个是参数是opc服务器名称,第二个是电脑名称。

直接填写也可以,例如:(“4”,
“\\newPI”)
Catch ex As Exception
("OPC server 连接失败: " + , "OPCSample",
End Try
'以下程序添加group和item
Try
= True '使其活动,照抄就行。

= 0 '照抄就行。

ConnectedGroup = "GROUP1") '添加GROUP,名称自己随便填。

= 100 '更新速率,我实验过,值越小,获取ITEM值越灵敏。

= True'采用订阅的方式,后面用DATACHANGE的事件获取item值,与此对应。

".绿灯", 1)
".产量",2)
".黄灯", 3)
".省电",4)
".产量1",5)
".产量",6)
'ADDITEM和ADDITEMS,两种命令的格式不同,这里仅用最简单的additem命令,用最土的办法添加了6个ITEM,两个参数,第一个是item名称,必须和KEPSERVER建立的ITEM完全一致,第二个参数是CLIENTHANDLES,句柄。

6个ITEM,我给的是1-6,
随便数字都可以,不重复即可。

这个跟后面获取值有直接关系!!!!
Catch ex As Exception
("添加组和项失败: " + , "OPCSample",
End Try
End Sub
C)获取
前面提到的订阅的方式,是OPC服务器主动的方式,把有变化的ITEM,发送给客户端。

需要使用DataChange的事件来获取item值,《OPC_20_Automation_Interface》58页。

假设两个OPC服务器有2个item发生改变(绿灯,产量),那么会返回2个ITEMS, 返回的,其中ITEMVALUES是返回的ITEM实际值,ClientHandles是返回的句柄值,句柄值和添加ITEM时定义的句柄对应。

前面添加的".产量",我定义的ClientHandles是6。

如果数值发生变化,那么服务器返回的的值也是6。

实际返回值:
NumItems=2
ClientHandles(1)= 1,ITEMVALUES(1)=true ItemValues(1)=true
ClientHandles(2)= 6,ITEMVALUES(2)= 65 ItemValues(2)=65
因为返回的是数组,那么需要定义一个字符串的数组去接受ITEM值。

添加事件的方法:
源代码如下:
Private Sub ConnectedGroup_DataChange(TransactionID As Integer, NumItems As Integer, ByRef ClientHandles As Array, ByRef ItemValues As Array, ByRef Qualities As Array, ByRef TimeStamps As Array) Handles
Dim val(10) As String '用于接收ITEM值
Dim I As Integer '用于循环
Dim k As Integer '用于循环的方式给TEXTBOX赋值,如果是textbox2---TEXTBOX7,有规律。

就可以实现
For I = 1 To NumItems
k = 1 + ClientHandles(I)
val(ClientHandles(I)) = ItemValues(I)
Controls("textbox" & k).Text = val(ClientHandles(I))
Next
End Sub
获取item还可以用到同步读SyncRead和异步读AsynRead的方式,我暂时没有学会。

具体查看《OPC_20_Automation_Interface》。

相关主题