




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 最简单的访问OPC服务器 在网上搜了很多关于VB.NET编写客户端访问OPC服务器的资料,同时也根据KEPWARE提供的案例源代码,同时进行研究,最后花了一个星期的时间进行研究,才粗略有了一点头绪,现共享出来,希望后来的初学者有所帮助。一 要建一个OPC服务器1)安装OPC服务器软件,KEPware是大家比较常用的,我使用的是Kepware OPC V4.54。如图,添加CHANNEL,添加TAG.把Plc的点位添加进去,我建了6个变量(item)。具体添加的方法需要自行去学习。我添加的三菱Q系列的PLC,PLC采用以太网通讯的方式,在局部网就可以访问了。 2)设置DCOM,这个步骤很重要,
2、具体的设置方法,网上很多资料,按步骤设置就可以。我原来按照组态王提供的方法,总是不成功,后来上了微软网站,按微软提供的方法设置肯定可以成功。 完成了以上两步,你的电脑就变成OPC服务器了。二 访问服务器1.利用组态软件访问OPC服务器。如果用组态王访问,那就太简单了,左边列表,选opc服务器,点击添加服务器,就会弹出一个窗口,把本机的OPC服务器列成清单。在清单里面就可以发现KEPSERVER的名称:KEPware.KEPserverEx.V4,选择,然后按确定,就完成了添加服务器。 在组态王的数据词典,新建变量,I/O变量,连接设备选择OPC服务器,寄存器可以看到KEPserver的变量(i
3、tem),建立之后,就可以利用组网王,开发监控应用,组态软件的使用在此就不赘述了,总之,利用组态软件访问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
4、 syswow64。输入: regsvr32 C:WINDOWS syswow64OPCDAAUTO.DLL。2) VS2015,新建一个项目。在项目-点击“添加引用”,使用浏览,在COM,可以找到opc da automation的选项,点击确认,及完成添加。 添加成功,则资源管理器,应用,可以看到OPCautomation的项目。3)编写程序的过程 最简单的一个案例,如下图,实现搜索服务器,连接服务器后,获取ITEM的实时值。A) 查找服务器点击“查找服务器”按钮,地址不填,则列出本机的OPC服务器。如果填写另一台服务器地址,则列出另一台电脑的服务器清单 如何知道计算机名?看网络邻居,至少
5、你应该知道那台电脑装了OPC服务器。 Public Class Form1 Inherits System.Windows.Forms.Form Dim WithEvents AnOPCServer As OPCAutomation.OPCServer '用于搜索服务器,连接服务器 Dim WithEvents ConnectedGroup As OPCAutomation.OPCGroup '对应后面添加组和项 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Su
6、b '以下程序:搜索OPC服务器,显示在列表框上面 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONNET.Click Try AnOPCServer = New OPCAutomation.OPCServer ListBox1.Items.Clear() Dim AllOPCServers As Object AllOPCServers = AnOPCServer.GetOPCServers(TextBox1.Text) '以括号用
7、文本框输入,确定OPC服务器的路径,空白表示搜索本机,如果搜索内部网其他电脑,则写电脑的名称,例如:电脑名称 Dim i As Short For i = LBound(AllOPCServers) To UBound(AllOPCServers) ListBox1.Items.Add(AllOPCServers(i) Next i Catch ex As Exception MessageBox.Show("List OPC servers failed with exception: " + ex.Message, "SimpleOPCInterface Ex
8、ception", MessageBoxButtons.OK) '用于显示执行结果,如果失败,则可以显示失败的原因。 End Try End SubB) 连接服务器、添加项和组 代码如下: Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click '以下程序连接服务器连接 Try AnOPCServer.Connect(ListBox1.Text, TextBox1.Text) '第一个是参数是opc服务器名称,第二个是电脑名称。直接填写也可以,例如:
9、AnOPCServer.Connect(“KEPware.KEPserverEx.V4”,“newPI”) Catch ex As Exception MessageBox.Show("OPC server 连接失败 : " + ex.Message, "OPCSample", MessageBoxButtons.OK) End Try '以下程序添加group和item Try AnOPCServer.OPCGroups.DefaultGroupIsActive = True '使其活动,照抄就行。 AnOPCServer.OPCGro
10、ups.DefaultGroupDeadband = 0 '照抄就行。 ConnectedGroup = AnOPCServer.OPCGroups.Add("GROUP1") '添加GROUP,名称自己随便填。 ConnectedGroup.UpdateRate = 100 '更新速率,我实验过,值越小,获取ITEM值越灵敏。 ConnectedGroup.IsSubscribed = True '采用订阅的方式,后面用DATACHANGE的事件获取item值,与此对应。 ConnectedGroup.OPCItems.AddItem(&q
11、uot;CHANNEL2.DEVICE1.绿灯", 1) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.产量", 2) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.黄灯", 3) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.省电", 4) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.产量1&quo
12、t;, 5) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE2.产量", 6) 'ADDITEM和ADDITEMS,两种命令的格式不同,这里仅用最简单的additem命令,用最土的办法添加了6个ITEM,两个参数,第一个是item名称,必须和KEPSERVER建立的ITEM完全一致,第二个参数是CLIENTHANDLES,句柄。6个ITEM,我给的是1-6,随便数字都可以,不重复即可。这个跟后面获取值有直接关系! Catch ex As Exception MessageBox.Show("添加组和项失败
13、: " + ex.Message, "OPCSample", MessageBoxButtons.OK) End Try End SubC)获取 前面提到的订阅的方式, 是OPC服务器主动的方式,把有变化的ITEM,发送给客户端。 需要使用DataChange的事件来获取item值,OPC_20_Automation_Interface58页。 假设两个OPC服务器有2个item发生改变(绿灯,产量),那么会返回2个ITEMS, 返回的, 其中ITEMVALUES是返回的ITEM实际值,ClientHandles是返回的句柄值,句柄值和添加ITEM时定义的句柄对应
14、。前面添加的"CHANNEL2.DEVICE2.产量",我定义的ClientHandles是6。如果数值发生变化,那么服务器返回的的值也是6。 实际返回值: NumItems=2ClientHandles(1)= 1,ITEMVALUES(1)=true ItemValues(1)=trueClientHandles(2)= 6,ITEMVALUES(2)= 65 ItemValues(2)=65 因为返回的是数组,那么需要定义一个字符串的数组去接受ITEM值。 添加事件的方法: 源代码如下: Private Sub ConnectedGroup_DataChange(Tr
15、ansactionID As Integer, NumItems As Integer, ByRef ClientHandles As Array, ByRef ItemValues As Array, ByRef Qualities As Array, ByRef TimeStamps As Array) Handles ConnectedGroup.DataChange Dim val(10) As String '用于接收ITEM值 Dim I As Integer '用于循环 Dim k As Integer '用于循环的方式给TEXTBOX赋值,如果是textbox2-TEXTBOX7,有规律。就可以实现 F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络工程师沟通技巧试题及答案
- 项目管理的战略导向与实施流程试题及答案
- 未来公共政策的社会责任探讨试题及答案
- 机电工程焊接技术试题及答案
- 策略性公共政策制定模型试题及答案
- 西方政治危机的成因分析试题及答案
- 网络工程师2025年考试信息化建设及试题与答案
- 公共政策与社会企业的融合实践试题及答案
- 社会政策的可持续发展策略及答案
- 网络工程师考试理论与实践试题及答案
- 2025年四川省建筑安全员-B证考试题库及答案
- 传输质量评估体系-全面剖析
- 养老机构九防培训课件
- 杭州市拱墅区部分校教科版六年级下册期末考试科学试卷(解析版)
- 2025年邮政运营面试试题及答案
- 交际英语视听说(山东联盟)知到智慧树章节测试课后答案2024年秋齐鲁师范学院
- 上海2025年上海电机学院教师招聘100人笔试历年参考题库附带答案详解
- 2025年山东省新动能基金管理有限公司招聘笔试参考题库含答案解析
- 电力公司综合办公室安全职责
- 幕墙质量策划
- 儿童故事绘本愚公移山课件模板
评论
0/150
提交评论