【VB开源代码栏目提醒】:网学会员在VB开源代码频道为大家收集整理了“计算机软件课程设计报告 - 其它论文“提供大家参考,希望对大家有所帮助!
1 计算机
软件课程设计
报告含源程序 一、 课设目的 通过实际操作进一步了解OPC的各种概念掌握OPC客户端的编写方法。
并对微软的DCOM有一定的了解要求通过合适的DCOM配置使客户端能够读取网络上服务器中的数据。
二、 内容 1利用
VB语言编写出一个简单的OPC客户端程序要求这个客户端能够读取服务器中的数据并显示出来。
2配置DCOM使客户端能够能过DCOM读取另一台服务器上的数据。
三、 步骤 1 建立一个Visual Basic工程 1启动Visual Basic新建一个Visual Basic工程。
选择Standard EXE作为新建工程的类型。
图3-1 Visual Basic 工程的建立 2设置OPC包装DLL 因为在新建的Visual Basic工程OPC包装DLL还没有被注册 2 必须用下述方法对OPC包装DLL进行注册。
设置方法 1.从Visual Basic菜单里选择Project-References。
2.在Available References表示中选择对应OPC包装DLL的文件名。
这里我们选择OPC Automation 2.0。
图3-2 引用的设置 2建立一个OPC对象 在Visual Basic里是以对象的单位对OPC服务器进行访问。
OPC自动化接口是由以下四种对象所定义。
OPC服务器 OPC组OPC组集合 OPC标签OPC标签集合 OPC浏览器 这里只说明OPC服务器OPC组以及OPC标签对象的使用方法。
具体的来说先连接一个特定的OPC服务器然后建立OPC组最后添加OPC标签。
1 变量声明 参考图3-3所示的示范
代码先对OPC对象变量进行声明。
变 3 量的数据类型应该指定为对象型。
这些对象变量最好在窗体
代码的General部分声明。
因为在General部分声明的变量可以在窗体的任何方法的
代码内引用。
图3-3 OPC对象变量的声明 有关定义OPC对象的声明及其说明列于表3-1 表3-1 OPC对象变量的声明 变量名 说明 objServer OPCServer对象用于连接OPC服务器。
objGroups OPCGroups对象用于添加OPC组的OPC组集合 objTestGrp OPCGroup对象演示用的OPC组。
objItems OPCItems对象用于添加OPC标签的OPC标签集合。
lServerHandles 长整型的数组用于保存OPC标签的服务器句柄。
2 连接OPC服务器和建立OPC组 下面说明如何连接OPC服务器和建立OPC组。
考虑到
代码的可反复使用性这里采用子程序进行编程。
这里用“NEW”关键词生成OPC服务器的对象然后调用OPC服务 4 器对象的“Connect”方法和OPC服务器连接。
在连接远程服务器的时候需要指定作为选用参数的远程计算机名表3-2 表3-2 Connect子程序 Sub ConnectstrProgID As String Optional strNode As String If objServer Is Nothing Then 建立一个OPC服务器对象 Set objServer New OPCServer End If If objServer.ServerState OPCDisconnected Then 连接OPC服务器 objServer.Connect strProgID strNode End If If objGroups Is Nothing Then 建立一个OPC组集合 Set objGroups objServer.OPCGroups End If If objTestGrp Is Nothing Then 添加一个OPC组 5 Set objTestGrp objGroups.AddquotTestGrpquot End If End Sub 3 添加OPC标签 对OPC服务器进行访问前必须先在OPC组里添加要访问的OPC标签。
这里添加OPC标签的标识符和数目是固定的但是实际的OPC应用程序往往要按照用户的指定或读取组态文件取得和处理需要添加OPC标签表3-3 表3-3 AddItem子程序 Sub AddItem Dim strItemIDs2 As String Dim lClientHandles2 As Long Dim lErrors As Long Dim I As Integer If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Nothing Then If objItems.Count gt 0 Then 6 Exit Sub End If End If 设置组活动状态 objTestGrp.IsActive True 取消组非同期通知 objTestGrp.IsSubscribed False 建立OPC项集合 Set objItems objTestGrp.OPCItems 生成标签的项标识符 strItemIDs1 quot反应罐温度.Valuequot strItemIDs2 quot反应罐液位.Valuequot lClientHandles1 1 lClientHandles2 2 添加OPC项 Call objItems.AddItems2 strItemIDs _ lClientHandles lServerHandles lErrors End Sub 4 断开OPC服务器 7 连接着OPC服务器的OPC应用程序在退出前必须断开和OPC服务器的连接表3-4。
因为OPC服务器并不知道OPC应用程序的退出如果不先断开连接那么OPC服务器使用的计算机资源就不被释放。
如果这样的问题反复发生久而久之连续运转的自动控制系统可能会使计算机资源渐渐枯竭从而发生严重问题。
表3-4 Disconnect子程序 Sub Disconnect Dim lErrors As Long If Not objItems Is Nothing Then If objItems.Count gt 0 Then 清除OPC项 objItems.Remove 2 lServerHandles lErrors End If Set objItems Nothing End If If Not objTestGrp Is Nothing Then 清除OPC组 objGroups.Remove quotTestGrpquot Set objTestGrp Nothing End If 8 If Not objGroups Is Nothing Then Set objGroups Nothing End If If Not objServer Is Nothing Then If objServer.ServerState ltgt OPCDisconnected Then 断开OPC服务器. objServer.Disconnect End If Set objServer Nothing End If End Sub 3同步数据读写 到此为止我们已经基本说明了OPC对象。
现在让我们制作一个实际的OPC数据访问应用程序。
我们采用同步方式的数据访问。
1窗体设计 让我们制做如图3-4所示窗体的OPC应用程序。
9 图3-4 窗体
设计 这个程序读取2点的数据并用棒图表示读取的数据。
棒图的更新周期为0.1秒使用定时器以0.1秒的周期对OPC服务器进行同小数据读取。
窗体中所使用的控件种类如表3-5所示 表3-5 fmMain的控件 控件 名称 窗体Form FmMain 命令按钮CommandButton BtnConnect 命令按钮CommandButton BtnAddItem 命令按钮CommandButton BtnQuit 定时器Timer TmUpdate 图像PictureBox picBar作为数组使用从左开始12 标签Label lbBar作为数组使用。
从左开如 10 12 标签Label abel1反应罐温度 标签Label Label2反应罐液位 命令按钮的事件处理 当按下在窗体上的命令按钮的事件发生时通过调用在第一部分说明的各种方法对发生的事件进行处理表3-6表3-7表3-8 表3-6 btnConnect命令按钮的单击事件处理 Private Sub btnConnect_Click 调用Connect子程序 Call Connectquotkingview.view.1quot End Sub 表3-7 btnAddItem命令按钮的单击事件处理 Private Sub btnAddItem_Click 调用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count gt 0 Then 启动定时器 tmUpdate.Enabled True Else End If 11 End If End Sub 表3-8 btnQuit命令按钮的单击事件处理 Private Sub btnQuit_Click 卸载窗体 Unload fmMain End Sub 为了在中止应用程序时断开和OPC服务器的连接在窗体的Unload事件处理中调用了断开OPC服务器连接子程序表3-9 表3-9 fmMain窗体的卸载事件处理 Private Sub Form_UnloadCancel As Integer 调用Disconnect子程序 Call Disconnect End Sub 3同步数据读取 在本示范程序中是利用定时器事件进行数据更新的显示。
这时所有的数据是采用同步方式对OPC服务器进行读取的。
表3-10是定时器事件处理以及同步读取处理的
代码。
表3-10 tmUpdate定时器的定时事件处理 12 Private Sub tmUpdate_Timer Dim vtItemValues As Variant Dim lErrors As Long Dim strBuf 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 FormatvtItemValuesI quot.000quot 表示数据字符串 lbBarI.Caption strBuf 计算棒的宽和高 nWidth picBarI.ScaleWidth nHeight picBarI.ScaleHeight sglScale vtItemValuesI / 700 13 nDrawHeight CIntnHeight sglScale 清除现棒图 picBarI.Cls 绘制棒图 picBarI.Line 0 nHeight - nDrawHeight-nWidth nHeight _ RGB255 0 0 BF Next End Sub 定时器事件处理内调用的“SyncRead”子程序如表3-11所示。
再有在读取前为了避免错误发生对OPC组和OPC标签进行检查。
表3-11SyncRead子程序 Sub SyncReadnSource As Integer ByRef vtItemValues As Variant _ ByRef lErrors As Long Dim lServerHandlesTemp2 As Long Dim j As Integer If objTestGrp Is Nothing Then Exit Sub End If 14 If objTestGrp.OPCItems.Count gt 0 Then 同期读取 objTestGrp.SyncRead nSource 2 lServerHandles _ vtItemValues lErrors End If End Sub 在窗体开始加载时对定时器进行初始化如表3-12所示 表3-12 窗体载入时定时器的初始化 Private Sub Form_Load tmUpdate.Enabled False tmUpdate.Interval 100 End Sub 运行结果如图3-5所示 图3-5运行结果 15 以上是服务器与客户端在一台计算机上。
如果服务器与计算机在两台计算机上只需将表3-6的connect后面再加上服务器的IP地址。
例如服务器的IP是128.0.0.101调用Connect程序就可以变为: Private Sub btnConnect_Click 调用Connect子程序 Call Connectquotkingview.view.1quotquot128.0.0.101quot End Sub 4运行环境的设置 本节的主要内容是怎样设置上面用
VB开发的应用
程序计算机运行环境。
主要是就OPC服务器和OPC客户应用程序分别在不同的计算机上运行的远程连接形式说明OPC运行环境的设置方法。
OPC服务器和OPC客户应用程序在相同的计算机上运行的本地连接形式形态几乎使用分布式COM的默认设置就可以运行或者参考下面介绍的远程连接设置方法将OPC服务器的设置和OPC客户应用程序的设置在同一台计算机上也可以解决问题。
由于操作系统不同DCOM的配置方法也稍有不同。
下面依次介绍 1 Windows 2000/NT DCOM 设置 1.1 运行DCOMCNFG 进入DCOM 配置程序 16 1.2 这是DCOM 配置界面 1.3 设置默认属性为以下设置 17 1.4 设置默认安全机制 1.5 设置默认访问权限如下即加入Everyone 允许访问 18 1.6 设置默认启动权限如下即加入Everyone 允许调用 1.7. 设置引用程序OpcEnum 属性 19 1.8. 常规设置如下 1.9. 安全性设置如下 20 1.10. 身份标识设置如下 然后设置OPC 服务器程序实际应用过程中服务器的
注册信息是不 21 同的本例的OPC 服务器为 kingview.view其设置与OpcEnum 相同。
1.12. 客户端设置默认安全设置设置同服务器4、5、6 步骤。
1.13. 客户端登录的用户必须是服务器中合法的用户。
例如在服务其中包括 aaaa 用户客户端可以以aaaa 用户登录而且密码与服务器中aaaa 用户的密码相同就可以访问访问服务器了。
1.14. 如果经过以上各步还有
问题那么让客户端和服务器以相同用户名和口令登录一定可以正确连接 2Windows Xp SP2
系统 首先需要关闭SP2的防火墙具体可由开始——gt控制面板——gt安全中心——gtwindows防火墙——gt关闭 接着按以下步骤配置DCOM 22 2.1 点击开始——gt运行再输入DCOMCNFG如下图 点回车进入XP的DCOM配置界面 再依次选择组件服务——gt计算机——gt我的电脑——gt属性 23 进入我的电脑属性界面之后选择COM安全页 首先选择访问权限编辑限制从中加入everyone并将本地连接与 24 远程连接前的复选框都选上 同样再选择启动激活权限编辑限制并接下图配置 25 到此XP的DCOM就已经配置完成。
OPC客户端的编程 四、 实验目的 通过实际操作进一步了解OPC的各种概念掌握OPC客户端的编写方法。
并对微软的DCOM有一定的了解要求通过合适的DCOM配置使客户端能够读取
网络上服务器中的数据。
五、 实验内容 1利用
VB语言编写出一个简单的OPC客户端程序要求这个客户端能够读取服务器中的数据并显示出来。
2配置DCOM使客户端能够能过DCOM读取另一台服务器上的数据。
六、 实验步骤 26 2 建立一个Visual Basic工程 1启动Visual Basic新建一个Visual Basic工程。
选择Standard EXE作为新建工程的类型。
图3-1 Visual Basic 工程的建立 2设置OPC包装DLL 因为在新建的Visual Basic工程OPC包装DLL还没有被注册必须用下述方法对OPC包装DLL进行注册。
设置方法 1.从Visual Basic菜单里选择Project-References。
2.在Available References表示中选择对应OPC包装DLL的文件名。
这里我们选择OPC Automation 2.0。
图3-2 引用的设置 27 2建立一个OPC对象 在Visual Basic里是以对象的单位对OPC服务器进行访问。
OPC自动化接口是由以下四种对象所定义。
OPC服务器 OPC组OPC组集合 OPC标签OPC标签集合 OPC浏览器 这里只说明OPC服务器OPC组以及OPC标签对象的使用方法。
具体的来说先连接一个特定的OPC服务器然后建立OPC组最后添加OPC标签。
1 变量声明 参考图3-3所示的示范
代码先对OPC对象变量进行声明。
变量的数据类型应该指定为对象型。
这些对象变量最好在窗体
代码的General部分声明。
因为在General部分声明的变量可以在窗体的任何方法的
代码内引用。
图3-3 OPC对象变量的声明 有关定义OPC对象的声明及其说明列于表3-1 表3-1 OPC对象变量的声明 28 变量名 说明 objServer OPCServer对象用于连接OPC服务器。
objGroups OPCGroups对象用于添加OPC组的OPC组集合 objTestGrp OPCGroup对象
演示用的OPC组。
objItems OPCItems对象用于添加OPC标签的OPC标签集合。
lServerHandles 长整型的数组用于保存OPC标签的服务器句柄。
2 连接OPC服务器和建立OPC组 下面说明如何连接OPC服务器和建立OPC组。
考虑到
代码的可反复使用性这里采用子程序进行编程。
这里用“NEW”关键词生成OPC服务器的对象然后调用OPC服务器对象的“Connect”方法和OPC服务器连接。
在连接远程服务器的时候需要指
定作为选用参数的远程计算机名表3-2 表3-2 Connect子程序 Sub ConnectstrProgID As String Optional strNode As String If objServer Is Nothing Then 建立一个OPC服务器对象 Set objServer New OPCServer End If 29 If objServer.ServerState OPCDisconnected Then 连接OPC服务器 objServer.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.AddquotTestGrpquot End If End Sub 3 添加OPC标签 对OPC服务器进行访问前必须先在OPC组里添加要访问的OPC标签。
这里添加OPC标签的标识符和数目是固定的但是实际的OPC应用程序往往要按照用户的指定或读取组态文件取得和处理需要添加OPC标签表3-3 30 表3-3 AddItem子程序 Sub AddItem Dim strItemIDs2 As String Dim lClientHandles2 As Long Dim lErrors As Long Dim I As Integer If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Nothing Then If objItems.Count gt 0 Then Exit Sub End If End If 设置组活动状态 objTestGrp.IsActive True 取消组非同期通知 objTestGrp.IsSubscribed False 建立OPC项集合 31 Set objItems objTestGrp.OPCItems 生成标签的项标识符 strItemIDs1 quot反应罐温度.Valuequot strItemIDs2 quot反应罐液位.Valuequot lClientHandles1 1 lClientHandles2 2 添加OPC项 Call objItems.AddItems2 strItemIDs _ lClientHandles lServerHandles lErrors End Sub 4 断开OPC服务器 连接着OPC服务器的OPC应用程序在退出前必须断开和OPC服务器的连接表3-4。
因为OPC服务器并不知道OPC应用程序的退出如果不先断开连接那么OPC服务器使用的计算机资源就不被释放。
如果这样的问题反复发生久而久之连续运转的自动控制系统可能会使计算机资源渐渐枯竭从而发生严重问题。
表3-4 Disconnect子程序 Sub Disconnect Dim lErrors As Long If Not objItems Is Nothing Then 32 If objItems.Count gt 0 Then 清除OPC项 objItems.Remove 2 lServerHandles lErrors End If Set objItems Nothing End If If Not objTestGrp Is Nothing Then 清除OPC组 objGroups.Remove quotTestGrpquot Set objTestGrp Nothing End If If Not objGroups Is Nothing Then Set objGroups Nothing End If If Not objServer Is Nothing Then If objServer.ServerState ltgt OPCDisconnected Then 断开OPC服务器. objServer.Disconnect End If 33 Set objServer Nothing End If End Sub 3同步数据读写 到此为止我们已经基本说明了OPC对象。
现在让我们制作一个实际的OPC数据访问应用程序。
我们采用同步方式的数据访问。
1窗体设计 让我们制做如图3-4所示窗体的OPC应用程序。
图3-4 窗体设计 这个程序读取2点的数据并用棒图表示读取的数据。
棒图的更新周期为0.1秒使用定时器以0.1秒的周期对OPC服务器进行同小数据读取。
窗体中所使用的控件种类如表3-5所示 表3-5 fmMain的控件 34 控件 名称 窗体Form FmMain 命令按钮CommandButton BtnConnect 命令按钮CommandButton BtnAddItem 命令按钮CommandButton BtnQuit 定时器Timer TmUpdate 图像PictureBox picBar作为数组使用从左开始12 标签Label lbBar作为数组使用。
从左开如12 标签Label abel1反应罐温度 标签Label Label2反应罐液位 命令按钮的事件处理 当按下在窗体上的命令按钮的事件发生时通过调用在第一部分说明的各种方法对发生的事件进行处理表3-6表3-7表3-8 表3-6 btnConnect命令按钮的单击事件处理 Private Sub btnConnect_Click 调用Connect子程序 Call Connectquotkingview.view.1quot End Sub 表3-7 btnAddItem命令按钮的单击事件处理 Private Sub btnAddItem_Click 35 调用AddItem子程序 Call AddItem If Not objTestGrp Is Nothing Then If objTestGrp.OPCItems.Count gt 0 Then 启动定时器 tmUpdate.Enabled True Else End If End If End Sub 表3-8 btnQuit命令按钮的单击事件处理 Private Sub btnQuit_Click 卸载窗体 Unload fmMain End Sub 为了在中止应用程序时断开和OPC服务器的连接在窗体的Unload事件处理中调用了断开OPC服务器连接子程序表3-9 表3-9 fmMain窗体的卸载事件.