版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京科技大学课程设计(软件设计)报告班 级: 姓 名: 学 号: 指导教师: 日 期: 2014 年 10 月 28 日北京科技大学自动化学院 课程设计(软件设计)报告目 录1设计内容12应用程序总体分析与设计12.1访问老师提供的服务器的VB客户端12.2访问WINCC服务器的VB客户端13应用程序各功能模块分析与设计23.1访问老师提供的服务器的VB客户端23.1.1变量声明23.1.2连接OPC服务器和建立OPC组23.1.3添加OPC标签23.1.4断开OPC服务器33.1.5窗体设计33.2访问WINCC服务器的VB客户端33.2.1 OPC连接33.2.2 OPC的标签读写43.2
2、.3 OPC连接断开43.2.4建立窗体44程序测试54.1测试过程54.2测试结果54.2.1 VB客户端访问老师提供的服务器54.2.2 VB客户端访问WINCC服务器65程序文档95.1使用说明95.1.1 VB客户端访问老师提供的服务器95.1.2 VB客户端访问WINCC服务器95.2程序说明95.2.1 VB客户端访问老师提供的服务器的源程序95.2.2 VB客户端访问WINCC服务器的源程序166 总结19ii1设计内容通过VB编程,编写一个OPC客户端程序,实现对任意OPC服务器的访问读取。本设计涉及到老师提供的服务器、WINCC服务器、VB客户端、OPC Scout V10客
3、户端、Matlab客户端。我们组在两个服务器,三个客户端的基础上进行了多种组合,并一一实现。包括:(1)VB客户端访问老师提供的服务器。 (2)VB客户端访问WINCC服务器。 (3)VB客户端、OPC Scout V10客户端对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客户
4、端VB客户端需要完成的操作有:(1)OPC连接(2)OPC的标签读写(3)OPC连接断开(4)建立窗体3应用程序各功能模块分析与设计3.1访问老师提供的服务器的VB客户端3.1.1变量声明变量的数据类型应该指定为对象型。这些对象变量在窗体代码的(General)部分声明。因为在(General)部分声明的变量,可以在窗体的任何方法的代码内引用。有关定义OPC对象的声明及其说明列于表3-1-1表3-1-1 OPC对象变量的声明变量名说明objServerOPCServer对象,用于连接OPC服务器。objGroupsOPCGroups对象,用于添加OPC组的OPC组集合objTestGrpOPC
5、Group对象,演示用的OPC组。objItemsOPCItems对象,用于添加OPC标签的OPC标签集合。lServerHandles()长整型的数组,用于保存OPC标签的服务器句柄。3.1.2连接OPC服务器和建立OPC组考虑到代码的可反复使用性,这里采用子程序进行编程。这里用“NEW”关键词生成OPC服务器的对象,然后调用OPC服务器对象的“Connect”方法,和OPC服务器连接。在连接远程服务器的时候,需要指定作为选用参数的远程计算机名。3.1.3添加OPC标签对OPC服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。这里添加OPC标签的标识符和数目是固定的,但是实际的OP
6、C应用程序往往要按照用户的指定或读取组态文件取得和处理需要添加OPC标签。3.1.4断开OPC服务器连接着OPC服务器的OPC应用程序,在退出前必须断开和OPC服务器的连接。因为OPC服务器并不知道OPC应用程序的退出,如果不先断开连接,那么OPC服务器使用的计算机资源就不被释放。如果这样的问题反复发生,久而久之,连续运转的自动控制系统可能会使计算机资源渐渐枯竭从而发生严重问题。3.1.5窗体设计图3.1.5 VB客户端(1)窗体设计3.2访问WINCC服务器的VB客户端3.2.1 OPC连接先在工具栏中“工程引用”将近 Siemens OPC DAAutomation 2.0加入,然后开始定
7、义全局变量。在本程序中,我使用了一个OPC组进行OPC访问,所以定义了全局变量。首先定义OPC服务类型与计算机结点名。定义OPC组与OPC标签组。并定义OPC的标签数组与值数,值数组设为Variant。在定义所有变量后,我们就要进行OPC连接了,要进行OPC连接之前,先要配置要访问的OPC标签名(即WinCC内部变量名),我们ItemIDs中加入相应的标签名,注意:这数组必须由1开始,不能由0开始。 配置好标签后就要进行OPC连接了。如下面子程序:先配置名柄索引,这将在读取OPC标签的值时可要用到。生成OPC对象, 进行OPC标签连接,至此OPC连接就成功了,我们可以对OPC进行读与写的操作了
8、。3.2.2 OPC的标签读写对OPC标签的读可以通过ItemIDsValue(4)组的DataChange事件来读取。该事件有多个参数:其中NumItems是指标签改变值的个数,ClientHandles是改变值的标签索引,ItemValues为改变值的数据,具体的意思是ClientHandles(ii)的值是其对应的标签数组的索引,其所指的OPC标签的值在ItemValues(ii)中。一般来说,刚连接上时,该事件会把全部所要求访问的OPC标签值全部读取过来(顺序不一,要通过ClientHandles索引),此后只有数据发生变化时才会触发该事件。也只会传输发生了变化的数据,没有变化的数据不
9、会出现在本事件的ItemValues中。对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。3.2.3 OPC连接断开OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开。断开的程序相当简单,释放资源即可。3.2.4建立窗体图3.2.4 VB客户端(2)窗体设计4程序测试4.1测试过程程序测试前必须在工程/引用中添加相应组件,老师提供的服务器要添加OPC Automation 2.0组件,WINCC服务器要添加Siemens OPC DAAutomation 2.0组件。编辑好窗体和程序点击保存运行即可。
10、对于VB客户端(1),先点击连接,再点击加项即可实现OPC服务器的变量读取。对于VB客户端(2),可以在Text1中输入主机名称,设定WINCC服务器所在电脑,再点击连接实现服务器访问。此时,变量值列将显示对应变量的变量值,在变量值更改列输入0200任意值即可对相应变量赋值。此时服务器端的变量值会相应更改。通过OPC SCOUT V10实现WINCC/VB/OPC SCOUT V10的连接:OPC SCOUT V10作为客户端对WINCC SERVER进行读写,通过写操作实现WINCC内部变量的函数变化,VB程序作为另一个客户端同步读取WINCC SERVER的数据。同理,VB程序也可以作为客
11、户端对WINCC SERVER进行读写,通过写操作实现WINCC内部变量的赋值,OPC SCOUT V10作为另一个客户端同步读取WINCC SERVER的数据。反之可以通过WINCC画面对变量进行赋值,两个客户端同步读取WINCC变量。同样还可以通过MATLAB实现对WINCC SERVER进行读写操作。详见测试结果。4.2测试结果4.2.1 VB客户端访问老师提供的服务器图4.2.1 VB客户端访问老师提供的服务器4.2.2 VB客户端访问WINCC服务器4.2.2-1 VB客户端访问WINCC服务器-读操作4.2.2-2 VB客户端访问WINCC服务器-写操作4.2.2-3 OPC SC
12、OUT V10读取WINCC变量并修改变量值,返回服务器,VB读取(1)4.2.2-4 OPC SCOUT V10读取WINCC变量并修改变量值,返回服务器,VB读取(2)4.2.2-5 MATLAB读取WINCC变量并修改变量值,返回服务器,VB读取(1)4.2.2-6 MATLAB读取WINCC变量并修改变量值,返回服务器,VB读取(2)5程序文档5.1使用说明5.1.1 VB客户端访问老师提供的服务器对于VB客户端(1),先点击连接,再点击加项即可实现OPC服务器的变量读取。棒图可以直观的显示当前的变量值。点击退出,退出客户端应用程序。5.1.2 VB客户端访问WINCC服务器对于VB客
13、户端(2),可以在Text1中输入主机名称,设定WINCC服务器所在电脑,再点击连接实现服务器访问。此时,状态显示图标(复选框)将变为选中状态,变量值列将显示对应变量的变量值,在变量值更改列输入0200任意值即可对相应变量赋值。此时服务器端的变量值会相应更改。点击断开即可断开服务器的连接,此时状态显示图标(复选框)将变为未选中状态。点击退出按钮,关闭客户端应用程序。5.2程序说明5.2.1 VB客户端访问老师提供的服务器的源程序定义全局变量Option Base 1Option ExplicitDim WithEvents objServer As OPCServerDim objGroups
14、 As OPCGroupsDim objTestGrp As OPCGroupDim objItems As OPCItemsDim lServerHandles() As Long连接服务器Sub Connect(strProgID As String, Optional strNode As String) If objServer Is Nothing Then 建立一个OPC服务器对象 Set objServer = New OPCServer End If If objServer.ServerState = OPCDisconnected Then 连接OPC服务器 objServ
15、er.Connect strProgID, strNode End If If objGroups Is Nothing Then 建立一个OPC组集合 Set objGroups = objServer.OPCGroups End If If objTestGrp Is Nothing Then 添加一个OPC组 Set objTestGrp = objGroups.Add(TestGrp) End IfEnd Sub断开服务器连接Sub Disconnect()Dim lErrors() As Long If Not objItems Is Nothing Then If objItems
16、.Count 0 Then 清除OPC项 objItems.Remove 2, lServerHandles, lErrors End If Set objItems = Nothing End If If Not objTestGrp Is Nothing Then 清除OPC组 objGroups.Remove TestGrp Set objTestGrp = Nothing End If If Not objGroups Is Nothing Then Set objGroups = Nothing End If If Not objServer Is Nothing Then If o
17、bjServer.ServerState OPCDisconnected Then 断开OPC服务器. objServer.Disconnect End If Set objServer = Nothing End IfEnd Sub添加变量Sub AddItem() Dim strItemIDs(2) As String Dim lClientHandles(2) As Long Dim lErrors() As Long Dim I As Integer If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Not
18、hing Then If objItems.Count 0 Then Exit Sub End If End If 设置组活动状态 objTestGrp.IsActive = True 取消组非同期通知 objTestGrp.IsSubscribed = False 建立OPC项集合 Set objItems = objTestGrp.OPCItems 生成标签的项标识符 strItemIDs(1) = Tag1.value strItemIDs(2) = Tag2.value lClientHandles(1) = 1 lClientHandles(2) = 2 添加OPC项 Call ob
19、jItems.AddItems(2, strItemIDs, _ lClientHandles, lServerHandles, lErrors)End Sub加项按钮的动作函数Private Sub btnAddItem_Click() 调用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count 0 Then 启动定时器 TmUpdate.Enabled = True Else End If End IfEnd Sub连接按钮动作函数Private Sub btnConnec
20、t_Click() 调用Connect子程序 Call Connect(OPCJ.SampleServer.1)End Sub退出按钮动作函数Private Sub btnQuit_Click() 卸载窗体 Unload FmMainEnd Sub退出Private Sub Form_Unload(Cancel As Integer) 调用Disconnect子程序 Call DisconnectEnd Sub读取周期定义Private Sub tmUpdate_Timer() Dim vtItemValues() As Variant Dim lErrors() As Long Dim st
21、rBuf As String Dim nWidth As Integer Dim nHeight As Integer Dim nDrawHeight As Integer Dim sglScale As Single Dim I As Integer 同期读取 SyncRead OPCCache, vtItemValues, lErrors 棒图的表示 For I = 1 To 2 数据的格式化 strBuf = Format(vtItemValues(I), #.000) 表示数据字符串 lbBar(I).Caption = strBuf 计算棒的宽和高 nWidth = picBar(I
22、).ScaleWidth nHeight = picBar(I).ScaleHeight sglScale = vtItemValues(I) / 700 nDrawHeight = CInt(nHeight * sglScale) 清除现棒图 picBar(I).Cls 绘制棒图 picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BF NextEnd Sub读取变量Sub SyncRead(nSource As Integer, ByRef vtItemValues() As Vari
23、ant, _ ByRef lErrors() As Long) Dim lServerHandlesTemp(2) As Long Dim j As Integer If objTestGrp Is Nothing Then Exit Sub End If If objTestGrp.OPCItems.Count 0 Then 同期读取 objTestGrp.SyncRead nSource, 2, lServerHandles, _ vtItemValues, lErrors End IfEnd Sub启动画面Private Sub Form_Load() TmUpdate.Enabled
24、= False TmUpdate.Interval = 100End Sub5.2.2 VB客户端访问WINCC服务器的源程序定义全局变量Option ExplicitOption Base 1 这数组必须由1开始,不能由0开始Const ServerName = OPCServer.WinCC.1 OPC的类型Dim NodeName As String 结点名,即计算机名Dim WithEvents MyOPCServer As OPCServer OPC服务Dim WithEvents MyOPCGroup As OPCGroup OPC组Dim MyOPCGroupColl As OP
25、CGroupsDim MyOPCItemColl As OPCItems OPC标签组Dim MyOPCItems As OPCItemsDim MyOPCItem As OPCItemDim ClientHandles(1) As Long 句柄Dim ServerHandles() As LongDim Errors() As LongDim ItemIDs(4) As String 记录OPC的标签Dim ItemIDsValue(4) As Variant 存放OPC的值Dim GroupName As Variant连接按钮动作函数Private Sub Command1_Click
26、()Dim ii As IntegerDim ClientHandles1(4) As LongFor ii = 1 To 4ClientHandles1(ii) = iiItemIDs(ii) = Text4(ii).Text 指明WinCC内部变量名称Next iiOn Error GoTo ErrorHandlerGroupName = MyGroupNodeName = Text1.Text 结点名,即计算机名Set MyOPCServer = New OPCServerMyOPCServer.Connect ServerName, NodeNameSet MyOPCGroupColl
27、 = MyOPCServer.OPCGroupsMyOPCGroupColl.DefaultGroupIsActive = TrueSet MyOPCGroup = MyOPCGroupColl.Add(GroupName)Set MyOPCItemColl = MyOPCGroup.OPCItemsFor ii = 1 To 4ClientHandles1(ii) = iiItemIDs(ii) = Text4(ii).TextMyOPCItemColl.AddItems 4, ItemIDs, ClientHandles1, ServerHandles, Errors 初始化OCP连接Next iiMyOPCGroup.IsSubscribed = TrueOption1.Value = True 连接成功标志Exit SubErrorHandler:MsgBox Error: & Err.Description, vbCritical, ERROR 连接发生错误End Sub退出按钮动作函数Private Sub Command3_Click()Unload Form1End Sub从服务器读取变量Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumIt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 零售连锁企业内部审计案例
- 基于网络数据安全的个人信息匿名化技术分析
- 列车延误与应对的调度管理
- 链家房产销售顾问面试问题及解析
- 基于核心素养的古诗文教学方法研究
- 基于激光雷达的夜间驾驶辅助系统研究
- 旅游策划师面试要点分析
- 护理培训:静脉输液技术
- 护理病历书写的基本规范与要求
- 护理护理案例教学法课件与教案分享
- 心律失常的非药物治疗刘金来
- 矿井防治水文常用计算公式
- 水稻幼穗发育
- GB/T 4925-2008渔网合成纤维网片强力与断裂伸长率试验方法
- GB/T 39363-2020金银花空气源热泵干燥通用技术要求
- 复工复产安全检查表
- 第三章表面活性剂的功能与应用
- 心理学主要理论流派课件讲义
- 延1024井马五层酸化压裂设计
- 部编版六年级下册道德与法治全册优秀课件
- 中国经典广告案例评析之公益广告课件
评论
0/150
提交评论