首页 VB写OPC客户端

VB写OPC客户端

举报
开通vip

VB写OPC客户端VB写OPC客户端!(1)~~~~~ 2008-01-18 13:06 今天在找OPC客户端,试下自己的OPC服务器是不是好用!~结果搜到这个咯,就拿来给大家看看!~ 先在“引用”将近 Siemens OPC DAAutomation 2.0加入,然后开始定义全局变量。在本程序中,我使用了两个OPC组进行OPC访问,所以定义了全局变量。我们要首先定义OPC服务类型与计算机结点名。定义OPC组与OPC标签组。并定义OPC的标签数组与值数,注意,值数组一定要设为Variant。 'OPC处理:只对WINCC C...

VB写OPC客户端
VB写OPC客户端!(1)~~~~~ 2008-01-18 13:06 今天在找OPC客户端,试下自己的OPC服务器是不是好用!~结果搜到这个咯,就拿来给大家看看!~ 先在“引用”将近 Siemens OPC DAAutomation 2.0加入,然后开始定义全局变量。在本程序中,我使用了两个OPC组进行OPC访问,所以定义了全局变量。我们要首先定义OPC服务类型与计算机结点名。定义OPC组与OPC标签组。并定义OPC的标签数组与值数,注意,值数组一定要设为Variant。 'OPC处理:只对WINCC Const ServerName = "OPCServer.WinCC" ‘OPC的类型 Const NodeName = "GUK" ‘结点名,即计算机名 ‘Dim NodeName As String Dim WithEvents MyOPCServer As OPCServer ‘OPC服务 Dim MyOPCGroupColl As OPCGroups ‘ Dim WithEvents MyOPCGroupOut As OPCGroup ‘OPC组,本程序用两个组进行OPC连接 Dim WithEvents MyOPCGroupIn As OPCGroup Dim MyOPCItemCollIn As OPCItems ‘OPC标签组 Dim MyOPCItemCollOut As OPCItems Dim ServerHandlesIn() As Long ‘句柄 Dim ServerHandlesOut() As Long Dim ErrorsIn() As Long ‘错误句柄 Dim ErrorsOut() As Long Dim WatchDataReadItem(100) As String '记录OPC的标签 Dim WatchDataReadValue(100) As Variant '存放OPC的值 Dim WatchDataWriteItem(100) As String '记录OPC的标签 Dim WatchDataWriteValue(100) As Variant '存放OPC的值 在定义所有变量后,我们就要进行OPC连接了,要进行OPC连接之前,先要配置要访问的OPC标签名,我们WatchDataReadItem、WatchDataWriteItem中加入相应的标签名,注意:这两个数组必须由1开始,不能由0开始。 配置好标签后就要进行OPC连接了。如下面子程序: 1、 ClientHandles1先配置名柄索引,这将在读取OPC标签的值时可要用到 2、 生成OPC对象, 3、 进行OPC标签连接 至此:OPC连接就成功了,我们可以对OPC进行读与写的操作了。 VB写OPC客户端!(2)~~~~~ 2008-01-18 13:07 '--------------------------------------------------------------------- ' Sub StartClient() ' 目的:连接至OPC_server,创建组和添加条目 '--------------------------------------------------------------------- Private Sub StartClient() Dim ItemNum As Integer Dim TarnscationID As Long Dim CanceID As Long Dim ClientHandles1(100) As Long Dim ii As Integer On Error GoTo HANDLEeRROR For ii = 0 To 100 ClientHandles1(ii) = ii 先配置名柄索引,这将在读取OPC标签的值时可要用到 Next ii TarnscationID = 1 ‘ NodeName = xProfile.GetValue("SYSTEM", "NodeName") ‘生成OPC对象, Set MyOPCServer = New OPCServer MyOPCServer.Connect ServerName, NodeName Set MyOPCGroupColl = MyOPCServer.OPCGroups MyOPCGroupColl.DefaultGroupIsActive = True Set MyOPCGroupIn = MyOPCGroupColl.Add("MYGROUPIN") Set MyOPCGroupOut = MyOPCGroupColl.Add("MYGROUPOUT") Set MyOPCItemCollIn = MyOPCGroupIn.OPCItems Set MyOPCItemCollOut = MyOPCGroupOut.OPCItems ‘进行OPC标签连接 If WriteItemIdex > 0 Then MyOPCItemCollOut.AddItems WriteItemIdex, WatchDataWriteItem, ClientHandles1, ServerHandlesOut, ErrorsOut '初始化OCP连接 MyOPCGroupOut.IsSubscribed = True End If If ReadItemIdex > 0 Then MyOPCItemCollIn.AddItems ReadItemIdex, WatchDataReadItem, ClientHandles1, ServerHandlesIn, ErrorsIn '初始化OCP连接 MyOPCGroupIn.IsSubscribed = True End If Exit Sub HANDLEeRROR: needOPCRestart = True xLog1.log "OPCl连接发生错误" End Sub VB写OPC客户端!(3)~~~~~ 2008-01-18 13:09 二、OPC的标签读写 对OPC标签的读可以通过MyOPCGroupIn组与MyOPCGroupOut的DataChange事件来读取。该事件有多个参数:其中NumItems是指标签改变值的个数,ClientHandles是改变值的标签索引,ItemValues为改变值的数据,具体的意思是ClientHandles(1)的值是其对应的标签数组的索引,其所指的OPC标签的值在ItemValues(1)中。一般来说,刚连接上时,该事件会把全部所要求访问的OPC标签值全部读取过来(顺序不一,要通过ClientHandles索引),此后只有数据发生变化时才会触发该事件。也只会传输发生了变化的数据,没有变化的数据不会出现在本事件的ItemValues中。 Private Sub MyOPCGroupOut_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date) '产生要通知下一级的数据变化,根椐不再的控件有不同的处理 For ii = 1 To NumItems WatchDataWriteValue(ClientHandles(ii) - 1) = ItemValues(ii) '对改变的值读入本数组 Next ii End Sub 对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。 要进行数据传输,先要将值数据进行赋值,注意:值数据要由0开始,也就是说,值数组与标签数据不是一、一对应,值要比标签前一位,这一点,在WINCC说明中没有,但在我的实际的使用中一直要这样,不然数据就产生错位,看下面程序。 VB写OPC客户端!(4)~~~~~ 2008-01-18 13:09 这是一个拔号完毕后返回的数据进行OPC传递的程序。包含解包过程, Private Sub showSuccess(msg As String) Dim location As String Dim nowTime As String Dim logStr As String Dim Value() As String Dim ii, temp As Integer Dim isPack As Boolean Dim sHead, sDelimited, sTail As String location = xProfile.GetValue(WatchPoint(nowRunID), "LOCATION") nowTime = Now logStr = "拔" & location & "取数成功" & msg xLog1.log logStr logStr = " " & msg xLog2.log logStr '记录数据 '数据上传 '如果有包结构,则显示包结构, isPack = xProfile.GetValue(WatchPoint(nowRunID), "ISRECHEAD") If WatchPointRBegin(nowRunID) < 0 Then Exit Sub If isPack Then sHead = xProfile.GetValue(WatchPoint(nowRunID), "RECHEAD") sDelimited = xProfile.GetValue(WatchPoint(nowRunID), "RECDELIMITER") sTail = xProfile.GetValue(WatchPoint(nowRunID), "RECEND") Value = Split(msg, sDelimited) For ii = 0 To UBound(Value) - 1 temp = WatchPointRBegin(nowRunID) + ii If temp > WatchPointREnd(nowRunID) Then Exit For WatchDataReadValue(temp - 1) = Value(ii + 1) 'VALUE要从0开始,比ITEM少1,所以减一。 有包头,占去一位,向后延一 Next ii Else WatchDataReadValue(WatchPointREnd(nowRunID) - 1) = msg End If MyOPCGroupIn.SyncWrite ReadItemIdex, ServerHandlesIn, WatchDataReadValue, ErrorsIn '数据上传 '记录上次成功执行的时间 xProfile.SetValue WatchPoint(nowRunID), "LASTTIME", nowTime End Sub 、OPC连接断开。 OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开。 断开的程序相当简单,释放资源即可。如下, Sub StopClient() On Error Resume Next '----------- 释放组和服务器对象 MyOPCGroupColl.RemoveAll '----------- 与服务器断开连接并且清除 MyOPCServer.Disconnect Set MyOPCItemCollIn = Nothing Set MyOPCItemCollOut = Nothing Set MyOPCGroupIn = Nothing Set MyOPCGroupOut = Nothing Set MyOPCGroupColl = Nothing Set MyOPCServer = Nothing End Sub 但在实际的使用中发现,频繁的连接与断开,将使服务器的资源被大量的消耗,最终让服务器出错。所以尽量减少无谓的OPC连接与断开。 关于VB与EXCEL之间的操作 2008-01-22 11:35 今天又一个要合作下的公司的一个软件员问我VB怎么操作EXCEL,帮他找了点资料就顺便发出来了!~   一、 VB读写EXCEL表:   VB本身提自动化功能可以读写EXCEL表,其方法如下:   1、在工程中引用Microsoft Excel类型库:   从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。表示在工程中要引用EXCEL类型库。   2、在通用对象的声明过程中定义EXCEL对象: Dim xlApp As Excel.Application Dim xlBook As Excel.WorkBook Dim xlSheet As Excel.Worksheet   3、在程序中操作EXCEL表常用命令: Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象 Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件 xlApp.Visible = True '设置EXCEL对象可见(或不可见) Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表 xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值 xlSheet.PrintOut '打印工作表 xlBook.Close (True) '关闭工作簿 xlApp.Quit '结束EXCEL对象 Set xlApp = Nothing '释放xlApp对象 xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏 xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏 关于VB与EXCEL之间的操作(2) 2008-01-22 11:36 二、 EXCEL的宏功能:   EXCEL提供一个Visual Basic编辑器,打开Visual Basic编辑器,其中有一工程属性窗口,点击右键菜单的"插入模块",则增加一个"模块1",在此模块中可以运用Visual Basic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(Sub Auto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 来运行启动宏和关闭宏。   三、 VB与EXCEL的相互勾通:   充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:   在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。   四、举例   1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输入如下程序: Dim xlApp As Excel.Application '定义EXCEL类 Dim xlBook As Excel.Workbook '定义工件簿类 Dim xlsheet As Excel.Worksheet '定义工作表类 Private Sub Command1_Click() '打开EXCEL过程  If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开   Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类   xlApp.Visible = True '设置EXCEL可见   Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL工作簿   Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表   xlsheet.Activate '激活工作表   xlsheet.Cells(1, 1) = "abc" '给单元格1行驶列赋值   xlBook.RunAutoMacros (xlAutoOpen) 运行EXCEL中的启动宏  Else   MsgBox ("EXCEL已打开")  End If End Sub Private Sub Command2_Click()  If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL   xlBook.RunAutoMacros (xlAutoClose) '执行EXCEL关闭宏   xlBook.Close (True) '关闭EXCEL工作簿    xlApp.Quit '关闭EXCEL  End If  Set xlApp = Nothing '释放EXCEL对象  End End Sub   2、在D盘根目录上建立一个名为Temp的子目录,在Temp目录下建立一个名为"bb.xls"的EXCEL文件。   3、在"bb.xls"中打开Visual Basic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入入下程序存盘: Sub auto_open()  Open "d:\temp\excel.bz" For Output As #1 '写标志文件  Close #1 End Sub Sub auto_close()  Kill "d:\temp\excel.bz" '删除标志文件 End Sub   4、运行VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的无缝连接。 AB PLC 通过OPC方式和VB客户端的通讯 收藏帖子 举报本帖 1楼 姜寒伟  发新帖 回复 删除 编辑 姜寒伟 查看档案 加为好友 1、授权 AB PLC通过 OPC方式和 第三方软件进行通讯,必须要先经过授权。在当前使用的电脑上安装了AB PLC 相关的软件后,可以在如下图所示的菜单路径下找到“Move Activation – 32 Bit”的菜单项。 此主题相关图片如下,点击图片看大图: 点击运行会弹出如下对话框: 此主题相关图片如下,点击图片看大图: 现在将授权软盘插入到软驱,点击“OK”按钮将授权文件拷贝到电脑硬盘上,如果授权成功,会弹出如下对话框,以确认RSLINX.EXE应用软件已经授权成功。 此主题相关图片如下,点击图片看大图: 2、RSLinx.EXE软件的设置。 在设置好RSLinx.exe应用软件的授权后,运行RSLogix 500软件,设置好AB PLC的串口通讯参数或网口通讯参数,下载到PLC。测试运行确保PLC参数设置正确,PLC能和编程软件已经能够正确通讯。 然后运行RSLinx.软件,选择Communictions-RSWho菜单项,如果有能和当前上位机正常通讯的PLC将会显示在如下的窗体列表里: 此主题相关图片如下,点击图片看大图: 在列表里选中要通讯的PLC,选择Station – Data Monitor的菜单项,检查是否已经能够将数据正确采集上来。 此主题相关图片如下,点击图片看大图: 3、OPC服务器的配置 在确认RSLinx软件已经能够正确和PLC进行通讯后,就可以开始配置OPC服务器了。首先必须先打开一个DDE/OPC工程,可以通过选取File – Open Project选项,来通过“Open DDE Projiect”对话框,选取打开一个已经建立好的DDE工程。 此主题相关图片如下,点击图片看大图: 如果还没有建立过DDE/OPC工程,则会弹出如下对框,要求用户输入要建立的工程名,这样建立好的工程名就添加到了工程列表框中。 此主题相关图片如下,点击图片看大图: 打开一个OPC工程后,就可以正式开始配置OPC 服务器了,通过选取DDE/OPC-Topic configuration菜单项,建立一个OPC服务主题。在弹出的如下窗体中,选取要配置成OPC服务器的对应选项,点击“New”按钮,编辑一个OPC服务器主题名称(可取任意名称)。 此主题相关图片如下,点击图片看大图: 切换到“Data Collection”页,通过Processer Type下拉框,选择正确的PLC的处理器类型。 此主题相关图片如下,点击图片看大图: 切换到“Advanced Communication”页,通过Comunication Driver下拉框,选择和PLC的通讯方式。 此主题相关图片如下,点击图片看大图: 设置好OPC服务器后,点击“Done”按钮,确认关闭窗口。 配置好一个服务器后,在如下图的列表中选定刚才配置过的PLC选项,选取Eidt-Copy DDE/OPC Link菜单项,打开Copy DDE/OPC Link窗口可以查看已经正确配置好的OPC数据项。 此主题相关图片如下,点击图片看大图: 目前为止OPC Server已经正确配置。可以通过vb客户端的OPC设备构件,进行数据的连接。 VB客户端连接RSLinx 首先我们为了调试方便,先编写一个PLC程序如下图: 此主题相关图片如下,点击图片看大图: 将程序下载进PLC中并让PLC在运行状态。 VB客户端是通过KEPServerEx这个服务器端的动态链接库编写的,所以在运行vb客户端程序前,必须安装KEPServerEx服务器端,使vb能够调用它所提供的DLL。 安装KEPServerEx服务端如下: 安装完毕后,运行vb工程文件如图: 编译程序并运行: 此主题相关图片如下,点击图片看大图: 打开后程序运行如下: 点击List OPC Server列出所有OPC Server并选择RSLinx OPC Server,点击Connect连接RSLinx服务器: 在Add Group to OPC Server框中加入Group Name组名 1、更新数据速率等选项后,点击Add Group,如下图 这时就可以添加标签了,标签对应着OPC Server的路径,路径可以由RSLinx中的,copy DDE/OPC LINK中看到。添加好后如下图: 此主题相关图片如下,点击图片看大图: 这样就可以通过vb客户端软件上的 Current value读到这个变量的值,通过Write value来写这个变量。
本文档为【VB写OPC客户端】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_486300
暂无简介~
格式:doc
大小:754KB
软件:Word
页数:16
分类:互联网
上传时间:2011-11-30
浏览量:51