软件课程设计报告OPCWord格式.docx
《软件课程设计报告OPCWord格式.docx》由会员分享,可在线阅读,更多相关《软件课程设计报告OPCWord格式.docx(19页珍藏版)》请在冰豆网上搜索。
![软件课程设计报告OPCWord格式.docx](https://file1.bdocx.com/fileroot1/2022-11/15/9ecec6e9-70dd-4555-a086-4ec15ebf89be/9ecec6e9-70dd-4555-a086-4ec15ebf89be1.gif)
3.1.1变量声明2
3.1.2连接OPC服务器和建立OPC组2
3.1.3添加OPC标签2
3.1.4断开OPC服务器3
3.1.5窗体设计3
3.2访问WINCC服务器的VB客户端3
3.2.1OPC连接3
3.2.2OPC的标签读写4
3.2.3OPC连接断开4
3.2.4建立窗体4
4程序测试5
4.1测试过程5
4.2测试结果5
4.2.1VB客户端访问老师提供的服务器5
4.2.2VB客户端访问WINCC服务器6
5程序文档9
5.1使用说明9
5.1.1VB客户端访问老师提供的服务器9
5.1.2VB客户端访问WINCC服务器9
5.2程序说明9
5.2.1VB客户端访问老师提供的服务器的源程序9
5.2.2VB客户端访问WINCC服务器的源程序16
6总结19
1设计内容
通过VB编程,编写一个OPC客户端程序,实现对任意OPC服务器的访问读取。
本设计涉及到老师提供的服务器、WINCC服务器、VB客户端、OPCScoutV10客户端、Matlab客户端。
我们组在两个服务器,三个客户端的基础上进行了多种组合,并一一实现。
包括:
(1)VB客户端访问老师提供的服务器。
(2)VB客户端访问WINCC服务器。
(3)VB客户端、OPCScoutV10客户端对WINCC服务器的同步读取。
(4)VB客户端、MATLAB客户端对WINCC服务器的同步读取。
2应用程序总体分析与设计
2.1访问老师提供的服务器的VB客户端
VB客户端需要完成的操作有:
(1)变量声明
(2)连接OPC服务器和建立OPC组
(3)添加OPC标签
(4)断开OPC服务器
(5)窗体设计
(6)命令按钮的事件处理
(7)同步数据读取
2.2访问WINCC服务器的VB客户端
(1)OPC连接
(2)OPC的标签读写
(3)OPC连接断开
(4)建立窗体
3应用程序各功能模块分析与设计
3.1访问老师提供的服务器的VB客户端
3.1.1变量声明
变量的数据类型应该指定为对象型。
这些对象变量在窗体代码的(General)部分声明。
因为在(General)部分声明的变量,可以在窗体的任何方法的代码内引用。
有关定义OPC对象的声明及其说明列于表3-1-1
表3-1-1OPC对象变量的声明
变量名
说明
objServer
OPCServer对象,用于连接OPC服务器。
objGroups
OPCGroups对象,用于添加OPC组的OPC组集合
objTestGrp
OPCGroup对象,演示用的OPC组。
objItems
OPCItems对象,用于添加OPC标签的OPC标签集合。
lServerHandles()
长整型的数组,用于保存OPC标签的服务器句柄。
3.1.2连接OPC服务器和建立OPC组
考虑到代码的可反复使用性,这里采用子程序进行编程。
这里用“NEW”关键词生成OPC服务器的对象,然后调用OPC服务器对象的“Connect”方法,和OPC服务器连接。
在连接远程服务器的时候,需要指定作为选用参数的远程计算机名。
3.1.3添加OPC标签
对OPC服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。
这里添加OPC标签的标识符和数目是固定的,但是实际的OPC应用程序往往要按照用户的指定或读取组态文件取得和处理需要添加OPC标签。
3.1.4断开OPC服务器
连接着OPC服务器的OPC应用程序,在退出前必须断开和OPC服务器的连接。
因为OPC服务器并不知道OPC应用程序的退出,如果不先断开连接,那么OPC服务器使用的计算机资源就不被释放。
如果这样的问题反复发生,久而久之,连续运转的自动控制系统可能会使计算机资源渐渐枯竭从而发生严重问题。
3.1.5窗体设计
图3.1.5VB客户端
(1)窗体设计
3.2访问WINCC服务器的VB客户端
3.2.1OPC连接
先在工具栏中“工程\引用”将近SiemensOPCDAAutomation2.0加入,然后开始定义全局变量。
在本程序中,我使用了一个OPC组进行OPC访问,所以定义了全局变量。
首先定义OPC服务类型与计算机结点名。
定义OPC组与OPC标签组。
并定义OPC的标签数组与值数,值数组设为Variant。
在定义所有变量后,我们就要进行OPC连接了,要进行OPC连接之前,先要配置要访问的OPC标签名(即WinCC内部变量名),我们ItemIDs中加入相应的标签名,注意:
这数组必须由1开始,不能由0开始。
配置好标签后就要进行OPC连接了。
如下面子程序:
①先配置名柄索引,这将在读取OPC标签的值时可要用到。
②生成OPC对象,③进行OPC标签连接,至此OPC连接就成功了,我们可以对OPC进行读与写的操作了。
3.2.2OPC的标签读写
对OPC标签的读可以通过ItemIDsValue(4)组的DataChange事件来读取。
该事件有多个参数:
其中NumItems是指标签改变值的个数,ClientHandles是改变值的标签索引,ItemValues为改变值的数据,具体的意思是ClientHandles(ii)的值是其对应的标签数组的索引,其所指的OPC标签的值在ItemValues(ii)中。
一般来说,刚连接上时,该事件会把全部所要求访问的OPC标签值全部读取过来(顺序不一,要通过ClientHandles索引),此后只有数据发生变化时才会触发该事件。
也只会传输发生了变化的数据,没有变化的数据不会出现在本事件的ItemValues中。
对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。
3.2.3OPC连接断开
OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开。
断开的程序相当简单,释放资源即可。
3.2.4建立窗体
图3.2.4VB客户端
(2)窗体设计
4程序测试
4.1测试过程
程序测试前必须在工程/引用中添加相应组件,老师提供的服务器要添加OPCAutomation2.0组件,WINCC服务器要添加SiemensOPCDAAutomation2.0组件。
编辑好窗体和程序点击保存运行即可。
对于VB客户端
(1),先点击连接,再点击加项即可实现OPC服务器的变量读取。
对于VB客户端
(2),可以在Text1中输入主机名称,设定WINCC服务器所在电脑,再点击连接实现服务器访问。
此时,变量值列将显示对应变量的变量值,在变量值更改列输入0~200任意值即可对相应变量赋值。
此时服务器端的变量值会相应更改。
通过OPCSCOUTV10实现WINCC/VB/OPCSCOUTV10的连接:
OPCSCOUTV10作为客户端对WINCCSERVER进行读写,通过写操作实现WINCC内部变量的函数变化,VB程序作为另一个客户端同步读取WINCCSERVER的数据。
同理,VB程序也可以作为客户端对WINCCSERVER进行读写,通过写操作实现WINCC内部变量的赋值,OPCSCOUTV10作为另一个客户端同步读取WINCCSERVER的数据。
反之可以通过WINCC画面对变量进行赋值,两个客户端同步读取WINCC变量。
同样还可以通过MATLAB实现对WINCCSERVER进行读写操作。
详见测试结果。
4.2测试结果
4.2.1VB客户端访问老师提供的服务器
图4.2.1VB客户端访问老师提供的服务器
4.2.2VB客户端访问WINCC服务器
4.2.2-1VB客户端访问WINCC服务器-读操作
4.2.2-2VB客户端访问WINCC服务器-写操作
4.2.2-3OPCSCOUTV10读取WINCC变量并修改变量值,返回服务器,VB读取
(1)
4.2.2-4OPCSCOUTV10读取WINCC变量并修改变量值,返回服务器,VB读取
(2)
4.2.2-5MATLAB读取WINCC变量并修改变量值,返回服务器,VB读取
(1)
4.2.2-6MATLAB读取WINCC变量并修改变量值,返回服务器,VB读取
(2)
5程序文档
5.1使用说明
5.1.1VB客户端访问老师提供的服务器
棒图可以直观的显示当前的变量值。
点击退出,退出客户端应用程序。
5.1.2VB客户端访问WINCC服务器
此时,状态显示图标(复选框)将变为选中状态,变量值列将显示对应变量的变量值,在变量值更改列输入0~200任意值即可对相应变量赋值。
点击断开即可断开服务器的连接,此时状态显示图标(复选框)将变为未选中状态。
点击退出按钮,关闭客户端应用程序。
5.2程序说明
5.2.1VB客户端访问老师提供的服务器的源程序
‘定义全局变量
OptionBase1
OptionExplicit
DimWithEventsobjServerAsOPCServer
DimobjGroupsAsOPCGroups
DimobjTestGrpAsOPCGroup
DimobjItemsAsOPCItems
DimlServerHandles()AsLong
‘连接服务器
SubConnect(strProgIDAsString,OptionalstrNodeAsString)
IfobjServerIsNothingThen
'
建立一个OPC服务器对象
SetobjServer=NewOPCServer
EndIf
IfobjServer.ServerState=OPCDisconnectedThen
连接OPC服务器
objServer.ConnectstrProgID,strNode
IfobjGroupsIsNothingThen
建立一个OPC组集合
SetobjGroups=objServer.OPCGroups
IfobjTestGrpIsNothingThen
添加一个OPC组
SetobjTestGrp=objGroups.Add("
TestGrp"
)
EndSub
‘断开服务器连接
SubDisconnect()
DimlErrors()AsLong
IfNotobjItemsIsNothingThen
IfobjItems.Count>
0Then
清除OPC项
objItems.Remove2,lServerHandles,lErrors
SetobjItems=Nothing