mcgs系统内部数据对象_第1页
mcgs系统内部数据对象_第2页
mcgs系统内部数据对象_第3页
mcgs系统内部数据对象_第4页
mcgs系统内部数据对象_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCGS 高级开发指南 1 目目 录录 第一章第一章 MCGS 的可扩充性的可扩充性 4 1 1 概述 4 1 2 可扩充的设备驱动构件 6 1 3 可扩充的功能构件 7 1 4 MCGS 实时数据库对象 8 1 5 MCGS 存盘服务对象 10 1 6 通过 OLE 自动化和其它应用程序交互 12 1 7 通过 DDE 和其它应用程序交互 14 1 8 直接操作 MCGS 的存盘数据库 16 第二章第二章 开发开发 MCGS 功能构件功能构件 17 2 1 功能构件的实现方法 17 2 2 功能构件接口规范 18 2 3 利用开发向导生成框架 19 2 4 利用样例程序移植 22 2 5 测试和挂接功能构件 25 第三章第三章 开发开发 MCGS 设备驱动设备驱动 27 3 1 设备驱动构件的实现方法 27 3 2 设备驱动构件接口规范 28 3 3 利用开发向导生成框架 32 3 4 利用样例程序移植 35 3 5 测试和挂接设备驱动构件 37 3 6 IO 端口的操作 40 3 7 串行口的操作 43 3 8 设备驱动构件的运行机制 44 3 9 增加设备构件的属性 45 MCGS 高级开发指南 2 3 10 定制设备属性设置对话框 47 3 11 编制简单的设备驱动构件 48 第四章第四章 MCGS 系统内部数据对象系统内部数据对象 52 4 1 Year 53 4 2 Month 53 4 3 Day 53 4 4 Hour 53 4 5 Minute 54 4 6 Second 54 4 7 Week 54 4 8 Date 54 4 9 Time 55 4 10 Timer 55 4 11 RunTime 55 4 12 PageNum 55 4 13 UserName 56 第五章第五章 MCGS 系统内部函数系统内部函数 57 5 1 数学函数 57 5 2 字符操作函数 59 5 3 窗口操作函数 61 5 4 设备操作函数 62 5 5 策略操作函数 63 5 6 事件操作函数 64 5 7 报警操作函数 64 5 8 存盘操作函数 67 5 9 用户权限操作函数 70 5 10 系统操作函数 71 第六章第六章 MCGS 中提供的对象中提供的对象 205 MCGS 高级开发指南 3 6 1 实时数据库对象 205 6 2 存盘服务对象 223 MCGS 高级开发指南 4 第一章第一章 MCGS 的可扩充性的可扩充性 1 1 概述概述 MCGS 组态软件是一套功能丰富 简单易用的组态软件 大部分工程师都可以很 容易的使用这套组态软件来完成一个完整的工程项目 但是 当用户熟练的掌握了这 套组态软件以后 用户必然会寻求在这套组态软件上进一步开发的能力 以实现有自 己风格的界面 自己设计的控制算法和与自己硬件相匹配的驱动程序 其他一些长期 使用 Visual Basic C Delphi 的高级工程开发人员 为了充分利用自己的编程特长 和已有的程序积累 也希望能够把自己编写的程序装配到 MCGS 组态软件中 大部分面向工程应用的工程人员 虽然没有时间和精力开发自己的专有模块 但 是 却希望能够从 MCGS 开发组或第三方的专业 业余开发者那里获得为自己定制 的特殊模块 并且能够很方便的装配到现有的 MCGS 组态软件上 而对硬件开发商 和一些高级的开发人员 都希望能够开发出自己的设备驱动模块和专业化 行业化的 模块以充分利用 MCGS 软件的组态功能 当然 对于这些专业化的高品质模块 位 于工程一线的工程人员也是具有非同一般的兴趣的 为了满足用户的这些要求 MCGS 提供一套可扩充的接口规范和配套的高级开发 工具包 使用接口规范和工具包开发出来的扩充构件 具有很优越的特点 安全保密 扩充构件是编译成二进制代码的 可以很好的保护您的工作 非 法用户不可能通过反编译你的扩充构件来获得你独有的设备驱动构件 特殊 的运算构件和特殊的窗口界面 你更可以使用扩充构件来进行自己的加密 以防止你制作的工程被任意拷贝 保护你自己的利益 简单快速 MCGS组态软件高级开发包中提供了常用的数据后处理构件源代 码 初级用户可以直接使用这些数据后处理构件 但高级用户则可以修改这 些构件的源代码 以满足自己特殊的要求 众所周知 工控工程的数据后处 理部分具有各自不同的要求 因此一般的组态软件 都要求用户自己使用例 如Excel Access等软件来完成自己的特殊的后处理 但是MCGS组态软件除 MCGS 高级开发指南 5 了可以用类似的方法处理外 还提供了另外一种不同的处理方法 那就是高 级用户可以修改MCGS组态软件高级开发工具包中所提供的后处理构件源代 码 然后生成自己的扩充构件 装配到MCGS组态软件上 就可以组成自己 独有的后处理系统 性能优异 使用这种方法开发出来的MCGS组态软件的扩充构件具有很高的 速度和性能 据微软公司测试 使用Visual C 软件开发出来的程序 只比 使用Visual Basic开发出来的速度高百分之十 有时甚至还低于Visual Basic 而使用Visual Basic开发的方便性和易用性又是Visual C 所远远不能比拟的 在编写MCGS组态软件的扩充构件时 Visual Basic确实是一种最佳选择 任务明确 MCGS的这种扩充构件具有清晰的结构 你完全可以向MCGS组 态软件的开发组或第三方的开发人员提出要求 为你编写一个定制的扩充构 件 而不会存在功能纠缠不清 任务确定不明的问题 MCGS 组态软件的高级开发 基本上是基于微软公司的 OLE 标准 利用了最新 的 ActiveX 技术 这种新技术保证能够方便地使用当前各种先进的开发工具来开发自 己的扩充构件 如 Visual Basic Visual C 以及其它公司的各种编程软件也可以方 便地开发 MCGS 组态软件的扩充构件 但是 MCGS 为使用微软公司的 Visual Basic 准备了丰富的样例程序和功能强大的高级开发向导 这个高级开发向导可以帮助你很 方便的生成各种扩充构件的框架结构 使你能够快速的进入自己的编程工作 在 MCGS 组态软件高级开发工具包中 还提供了给开发员使用的一个源代码级调试程序 因此 MCGS 强烈建议使用微软公司的 Visual Basic 软件来开发 MCGS 的扩充构件 在本书中 主要介绍如何使用 Visual Basic 来开发 MCGS 组态软件扩充构件 但由于 它是基于 OLE 技术标准的 所以如果你能够熟练地使用 Visual C Delphi 等软件 你也可以按照本书中给出的 OLE 界面标准 来制作自己的组态软件扩充构件 为了能够使用 MCGS 组态软件高级开发工具包 你应该具有如下条件 硬件方面硬件方面 必须具有Pentium以上的CPU 以及十六兆以上的内存 软件方面软件方面 应使用微软的Windows 95或Window NT 4 0操作系统 安装了微 软的Visual Basic 6 0专业版或企业版 还应安装了MCGS光盘上的MCGS组态 软件和MCGS组态软件高级开发工具包 使用 MCGS 组态软件高级开发工具包和微软 Visual Basic 软件来开发 MCGS 组态 软件扩充构件 要求你应该大致了解 Visual Basic 软件的功能和使用方法 如果你对 Visual Basic 软件不太了解 那麽就应该首先学习和了解一下 Visual Basic 软件 我们 MCGS 高级开发指南 6 建议采用如下的方法进行学习 首先 你应该仔细阅读 Visual Basic 联机手册 这 本书中的 程序员指南 这一章 其次 你应该仔细读懂 Visual Basic 安装后附带的 三到四个例子 这些例子安装在 Visual Basic 目录下的 Samples 目录中 在这期间你 可参考和阅读 程序员指南 这一章中的 VB 基础 这一节中的有关菜单 窗体 构件等的描述 通过大约经过一个星期的学习 你就可以在 MCGS 组态软件高级开发 包中的高级开发向导的帮助下 制作一些你自己的简单的扩充构件 也可以从高级开 发包中的样例程序出发 通过修改相应的部分 来生成自己的扩充构件 MCGS 组态软件的可扩充性主要有以下几个方面组成 挂接定制的设备驱动构件 挂接定制的功能构件 在其它应用程序中通过OLE直接操作MCGS所提供的对象 通过DDE连接 建立MCGS和其它应用程序间的数据传递 MCGS 可扩充构件的提出和设计都经过了长期的工程实践的检验和考虑 能够确 保实现工程进一步开发中的所有任务 而且具有结构简单 功能齐备的特点 1 2 可扩充的设备驱动构件可扩充的设备驱动构件 可扩充的设备驱动构件能实现多种设备驱动的方式 你可以使用独立的设备驱动 构件形式 如 A D D A 板采集驱动构件 也可以使用父子设备驱动结构形式 如 使用串口为父设备 使用挂接在串口上的各个 PLC 为子设备 这已经涵盖工控工程 中常用的板卡采集 现场总线等等设备硬件连接模式 在设备驱动构件中 你可以使用查询的工作方式 查询的周期从十毫秒到任意长 的时间 也可以使用中断的方式 来高效完成设备驱动的任务 尤其在使用串口等低 速率传送的设备时 使用中断方式来采集数据 可以充分利用等待串口通讯的时间来 完成诸如图形动画等其它工作 以保证动画的平滑运动和界面反应的灵敏性 在使用 板卡采集的时候 由于板卡采集速度较快 而且设备驱动运行都处在各自独立的线程 内 一般都采用查询采集的方式来处理设备驱动的工作 在设备驱动构件中 你还可以实现设备热更换的功能 MCGS 组态软件可以从设 MCGS 高级开发指南 7 备驱动构件的返回值中得到设备运行状态的 对于有错误的设备 MCGS 组态软件将 自动停止其采集 但是 每隔十个采集周期 MCGS 组态软件将自动重新驱动设备驱 动构件一次 再重新确定设备驱动构件的工作状态 因此设备驱动构件可以利用这个 功能 在被驱动采集时 如果当前设备的上一次工作状态测试为设备失效 这时就可 以重新测试工作状态 如果工作状态已经正常 就可以向 MCGS 组态软件返回工作 状态正确的返回值 使 MCGS 组态软件重新开始正常设备驱动采集 准备了这样的 功能后 在父子设备采集中 就可以动态的卸载和挂接子设备 MCGS 组态软件会自 动在子设备卸载时自动暂停设备采集 在子设备挂接时自动开始设备采集 设备驱动构件的概念还可以扩充到所有的高可靠性要求 数据输入输出 执行命 令等任务方面 在 MCGS 组态软件中 就实现了一个使用网络在两台计算机之间共 享数据对象的设备驱动构件 实际上 像网络数据库 多台计算机 各个程序间的通 讯等等类似的任务 都可以使用设备驱动构件的方法来完成 本手册的第十九章专门 讲述开发 MCGS 设备驱动构件的具体方法和步骤 请参阅 1 3 可扩充的可扩充的功能功能构件构件 可扩充的功能构件主要用于实现用户定制的和用户特殊的功能模式 如参数出入 窗口 特殊的操作画面 特殊的数据处理等等 功能构件提供了一个使用户可以实现 自己独有的人机界面的手段 可以完成特殊的用户交互的工作 并且 可以完成一些 MCGS 组态软件所不适宜完成的工作 如体现事务性操作的任务 象填写输入表单 填写发票等任务需要填好后一次提交 要么所有修改全部完成 要么所有修改被全部 退回 这种任务就与 MCGS 组态软件所运行的实时监控模式不一致 这种任务就适 宜于使用功能构件来完成 还有一些任务 诸如从存盘文件中恢复各个变量的设定值 或选定一组设定值 也可以在功能构件中通过读取存盘文件中的数据 并用 MCGS 组态软件的自动化功 能写入 MCGS 组态软件中的各个变量来完成 MCGS 系统的报警信息浏览 存盘数据浏览 存盘数据提取等部分的功能就是用 Visual Basic6 0 来编程实现的功能构件 并且随系统提供了部分源代码 目的是因为 MCGS 高级开发指南 8 这几个部分的灵活性比较大 用户的需求也各不一样 这样可方便用户在这些源代码 的基础上 快速修改完成自己需要的功能 本手册的第二十章专门讲述开发 MCGS 功能构件的具体方法和步骤 请参阅 1 4 MCGS实时数据库对象实时数据库对象 实时数据库是 MCGS 的核心 MCGS 把整个实时数据库作为一个对象封装起来 提供一系列的方法和属性 使外部程序通过这些方法和属性能对 MCGS 进行各种操 作 MCGS 运行起来后 实时数据库对象被暴露出来 在其它应用程序中 通过 OLE 自动化操作 就可取到实时数据库对象 从而做到在外部应用程序直接操作 MCGS 的目的 注意 注意 MCGS 分为组态环境和运行环境两个部分 每个部分作为一个独立的整体 都有一个对应的实时数据库对象 两个对象的方法和属性都相同 只是有些方法在不 同的对象内的表现不同 如 CreateNewData 方法在组态环境的实时数据库对象中是创 建一个新的数据对象 而在运行环境的实时数据库对象中该方法不进行任何操作 因 此 在实际应用中 用户要根据需要选择是对哪个实时数据库对象进行操作 注意 注意 MCGS 的实时数据库对象及其对应的属性和方法仅供扩充构件和外部应用 程序在编程时使用 在 MCGS 内 脚本程序和表达式中 不能直接使用 实际上 实时数据库的大多数方法在 MCGS 内都提供了对应的内部函数 脚本程序和表达式 中应使用内部函数完成有关操作 下面列出 MCGS 实时数据库对象所提供的属性和方法 关于它们的详细含义和 用法请参阅 MCGS 参考手册 中的说明 MCGS实时数据库对象的实时数据库对象的属性属性 WinVer 当前操作系统的版本标志 McgsVer MCGS 的版本号 McgsDataNum 当前工程的实时数据库中数据对象的个数 MCGS 高级开发指南 9 McgsStgyNum 当前工程中运行策略的个数 McgsWinNum 当前工程中用户窗口的个数 McgsDevNum 当前工程中设备构件的个数 McgsSetName 当前工程的名称 McgsSaveName 当前工程存盘数据库文件的名称 SvrPackage 存盘服务对象 MCGS实时数据库实时数据库的的方法方法 CreateNewData 在实时数据库中产生一个新的数据对象 GetDataFromName 通过数据对象的名称取到数据对象的其它属性值 GetDataFromID 通过数据对象的 ID 号取到数据对象的其它属性值 GetDataName 通过数据对象的 ID 号取到数据对象的名称 GetDataType 通过数据对象的名称取到数据对象的类型 GetDataID 通过数据对象的名称和类型取到数据对象的 ID 号 SetDataDlg 调用显示组态环境中的对象浏览对话框 GetDbIDFromID 通过数据对象 ID 号读取数据对象在数据库中的存储位置号 GetIDFromDbID 通过数据对象在数据库中的存储位置号读取数据对象的 ID 号 GetAlmDatName 读取定义有报警信息自动存盘属性的所有数据对象名称 GetSaveDatName 读取定义有数据存盘属性的所有数据对象名称的集合 GetGroupObj 读组对象的所有成员的 ID 号 GetValueArray 根据数据对象 ID 号成组读取多个类型相同的数据对象的当前值 SetValueArray 根据数据对象 ID 号成组写入多个类型相同的数据对象的当前值 GetValueFromID 根据数据对象的 ID 号读取数据对象的当前值 GetValueFromName 根据数据对象的名称读取数据对象的当前值 SetValueFromID 根据数据对象的 ID 号写入数据对象的当前值 MCGS 高级开发指南 10 SetValueFromName 根据数据对象的名称写入数据对象的当前值 GetDeviceName 根据序列号读取设备构件的名称 GetDeviceState 读取设备构件的当前工作状态 SetDevice 对指定的设备进行操作 GetWindowName 根据序列号读取用户窗口的名称 GetWindowState 读取指定用户窗口的状态 SetWindow 对指定的用户窗口进行操作 GetStgyName 根据序列号读取运行策略的名称 SetStgy 执行指定运行策略 DelAlmDat 删除数据对象对应的报警存储数据 DelAllAlmDat 删除数据对象对应的所有报警存储数据 MoveAlmDat 转储数据对象所对应的报警存盘信息 SetAlmValue 设置数据对象 DatName 对应的报警限值 GetAlmValue 读取数据对象的报警限值 DelSaveDat 删除数据对象对应的存盘数据 DelAllSaveDat 删除数据对象对应的所有存盘数据 ChangeSaveDat 改变数据对象所对应的存盘数据的存盘间隔 MoveSaveDat 转储数据对象所对应的存盘数据 SaveData 把数据对象对应的当前值存入存盘数据库中 SaveDataInit 把数据对象的当前值作为初试值存入组态结果数据中作为初试值 1 5 MCGS存盘服务对象存盘服务对象 MCGS 提供有一个存盘服务对象 用于设备驱动构件和功能构件保存构件内部需 要保存的数据 在构件中 通过操作该对象的方法来保存和读取数据 而数据具体放 MCGS 高级开发指南 11 在什么地方由 MCGS 来管理 MCGS 把这些数据和构件的其它属性一起保存在组态 结果数据库中 注意 MCGS 把存盘服务对象作为一个参数通过构件的接口传送到 设备驱动构件和功能构件内 供构件保存数据时使用 下面详细列出存盘服务对象所 提供方法 方法 方法 SetStartPos 方法用途 方法用途 设置存储数据的操作方式 使用范围 使用范围 可用于组态环境和运行环境 语法形式 语法形式 SetStartPos Byval Flag as Long as Long 返返 回回 值 值 0 调用正常 0 调用不正常 参数说明 参数说明 Flag 长整型 操作标志 具体含义如下 0 设置对数据的操作为读模式 使得 GetDat 从起始位置开始 顺 序读取数据 1 设置对数据的操作为写模式 使得 PutDat 从起始位置开始 顺 序把数据存入 方法 方法 GetDat 方法用途 方法用途 读取存储在 MCGS 内的数据 使用范围 使用范围 可用于组态环境和运行环境 语法形式 语法形式 GetDat Value as Variant as Long 返返 回回 值 值 0 调用正常 0 调用不正常 参数说明 参数说明 Value Variant 型 返回读取的值 也可以使用具体的数据类型和数 组来返回数据 方法 方法 PutDat 方法用途 方法用途 把数据存入到 MCGS 内 使用范围 使用范围 可用于组态环境和运行环境 语法形式 语法形式 PutDat Value as Variant as Long 返返 回回 值 值 0 调用正常 0 调用不正常 参数说明 参数说明 Value Variant 型 要存入的值 也可以使用具体的数据类型和数组 MCGS 高级开发指南 12 来存入数据 MCGS 存盘服务对象使得在设备驱动构件和功能构件中 能使用 流化 的方式 来编程实现保存和读取存盘数据 GetDat 和 PutDat 的使用一定要配对 如在某接口 中编写的保存数据代码如下 dim I as long j as long msg as string Dat 10 as single SaveObj SetStartPos 1 SaveObj PutDat I SaveObj PutDat j SaveObj PutDat msg SaveObj PutDat Dat 则对应的读取数据的代码应如下 dim I as long j as long msg as string Dat 10 as single SaveObj SetStartPos 0 SaveObj GetDat I SaveObj GetDat j SaveObj GetDat msg SaveObj GetDat Dat 1 6 通过通过OLE自动化和其它应用程序交互自动化和其它应用程序交互 MCGS 组态软件本身的自动化功能可以帮助用户在其它应用程序中很方便地操纵 MCGS 组态软件的运行 比如说 用户可以在一个程序里指挥 MCGS 运行环境打开 某个窗口 执行某个策略 或者向某个设备发出命令等等 基本上 在 MCGS 组态 软件中用户脚本程序可以完成的功能也都可以通过 MCGS 组态软件的自动化功能来 完成 MCGS 把其核心作为一个对象包装起来 把 MCGS 的大多数功能作为对象的属 性和方法暴露出来 使其它的应用程序通过 OLE 自动化来操作 MCGS 在 Visual Baisc Excel Access 和 Delphi 中都可以通过 OLE 自动化来取得 MCGS 实时数据 库对象 编程操作 MCGS 提供的属性和方法 MCGS 高级开发指南 13 在在Visual Basic中操作中操作MCGS 假定 MCGS 运行环境正在运行一个工程 且该工程有 20 个数值型数据对象 其 名称为 Dat01 到 Dat20 要求用 VB 编制一个应用程序 该程序的界面如下图所示 按 从 MCGS 读数据 按钮时 能把 MCGS 中 Dat01 到 Dat10 的值读回显示在左列 文本框内 按 向 MCGS 写数据 按钮时 能把右列文本框内输入的数据写到 MCGS 的 Dat11 到 Dat20 数据对象中 Dim DatObj As Object Private Sub Form Load On Error Resume Next Set DatObj GetObject McgsRun DataCentre If Err Then MsgBox 请先启动 MCGS 运行环境 End End If End Sub Private Sub Cmd Read Click Dim msg As String tt As Variant MCGS 高级开发指南 14 For i 1 To 10 msg Dat Format i 00 DatObj GetValueFormName msg tt Txt i Format tt Next i End Sub Private Sub Cmd Wirte Click Dim msg As String tt As Variant For i 1 To 10 msg Dat Format i 00 tt Val Txt i 10 DatObj SetValueFormName msg tt Next i End Sub 在 Assess Excel 中都有对应的 VB 程序可以编程 实现对 MCGS 的各种操作 其方法和在 Visual Basic 中基本相同 可参考上面的代码进行 1 7 通过通过DDE和其它应用程序交互和其它应用程序交互 MCGS 提供了动态数据交换 DDE 方式和其它应用程序进行数据交换 不同于 OLE 自动化操作 DDE 方式只能传递数据 不能直接对 MCGS 进行操作 而且 DDE 方式数据传递的速度较慢 可靠性也不如 OLE 建议采用 OLE 来代替 DDE 下面举例说明如何在 MCGS 和 Excel 中建立 DDE 连接 要求在 Excel 表单 Sheet1 第 1 行到第 10 行的第一列显示 MCGS 数据对象 Dat01 到 Dat10 的值 把表单 Sheet1 的第 1 行到第 10 行的第二列输入的值送到 MCGS 数据对象 Dat11 到 Dat20 中 要使用 DDE 和其它应用程序进行交互 首先应在 MCGS 中进行一些定义工作 在 MCGS 组态环境的 工具 菜单中选取 DDE 连接管理 菜单项 弹出如下窗口 MCGS 高级开发指南 15 在 DDE 连接管理窗口中 把 Dat01 到 Dat10 设置为 DDE 输出 选中各数据对象 对应的 DDE 输出选项框 把 Dat11 到 Dat20 设置为 DDE 输入 同时对服务节点进 行如下配置 按 服务节点配置 按钮 弹出如下配置窗口 按 增加 按钮 弹出如下配置窗口 把服务节点名设为 Excel表单 把 服务名设为 Excel 主题名设为 Sheet1 当把Excel应用软件作为DDE 服务器时 服务名永远为 Excel 主题名为对应表单 Sheet的名称 MCGS 高级开发指南 16 配置好服务器节点后 把 Dat11 到 Dat20 的连接节点都设为 Excel 表单 连 接项目分别设为 R1C2 到 R10C2 运行 Excel 在表单 Sheet1 的 R1C1 到 R10C1 中输入 McgsRun DataCentre Dat01 到 McgsRun DataCentre Dat10 这样就完成了所有的 DDE 连接设置工作 当进入 MCGS 运行环境后 MCGS 数据对象 Dat01 到 Dat10 的值就显示在 Excel 的表单 Sheet1 的第一列中 同时 当改变表单 Sheet1 的第二列值时 MCGS 中数据对象 Dat11 到 Dat20 的值也随之而改变 1 8 直接操作直接操作MCGS的存盘数据库的存盘数据库 MCGS 运行时的存盘数据是保存在标准 Access7 0 数据库中 所有报警数据信息 对应存盘数据表名为 MCGS AlarmInfo MCGS 组对象对应的存盘数据表名为 组对 象名称 MCGS 用户可以在外部应用程序中直接对 MCGS 的存盘数据库进行操 作 编制独立的后处理软件 MCGS 的脚本程序中有一个名为 Shell 的内部函数 可以启动一个外部应用程 序 通过在 MCGS 脚本程序中使用 Shell 函数 可以使外部应用程序和 MCGS 看起来 是一个整体 MCGS 高级开发指南 17 第二章第二章 开发开发 MCGS 功能功能构件构件 MCGS 提供了一套运行策略机制 使用户能根据实际应用的需要 对工作流程进 行精确的控制 运行策略由不同的策略块组成 而策略块又由多个策略行组成 每个 策略行分为条件和功能两个部分 以实现 在什么条件下执行什么功能 的机制 MCGS 提供了大多数应用所必须的功能构件 同时也提供了一套开放的可扩充接口 允许用户能根据自己的需要 定制特定的功能构件 达到扩充 MCGS 功能的要求 本章下面各节将详细介绍开发 MCGS 功能构件的方法和步骤 请在开始之前 先安装 Visual Basic6 0 中文专业版或企业版 然后安装 MCGS 高级开发工具包 建 议你按下面各节介绍的方法和步骤来一步一步地学习开发 MCGS 功能构件 2 1 功能功能构件的实现方法构件的实现方法 MCGS 用 Active DLL 构件的方式来实现功能构件 通过规范的 OLE 接口挂接到 MCGS 中 使其构成一个整体 由于功能构件和 MCGS 运行在同一个进程内 故功 能构件的运行速度快 可靠性高 即使构件本身有问题 也不会影响到 MCGS 的可 靠运行 同时 OLE 是一个可扩充的开放标准 用于实现不同软件之间的相互操作 而不管软件本身是使用什么编程语言 因此 只要遵守 MCGS 的接口规范 可以使 用 VB VC Delphi 等语言来编制 MCGS 的功能构件 鉴于 Visual Basic 通用性和简 单性 建议使用 VB 来开发 MCGS 的设备驱动程序 本书也只讲解使用 VB 进行开发 的技术问题 由于 VB6 0 以上版本是以二进制码来编译执行程序 其运行速度已接近 或超过 VC 完全能满足功能构件所需的速度要求 MCGS 提供的大多数功能构件就 是使用 VB 来编程的 开发工具包中提供了部分功能构件的源代码 可在其基础上修 改 实现比 MCGS 功能更完善的功能构件 MCGS 高级开发指南 18 2 2 功能功能构件接口规范构件接口规范 MCGS 设备构件的实现方法和原理与标准 VB 的 ActiveDLL 完全一致 但 MCGS 规定了一套接口规范 只有遵守这些接口规范的 ActiveDLL 才能用作 MCGS 的功能 构件 MCGS 功能构件必须具有如下 4 个接口 接口 SvrMenuCommand组态时调用 执行菜单命令 接口 SvrStgySetOperator组态时调用 设置构件的属性 接口 SvrStgyRunOperator 运行时调用 执行构件的功能 接口 SvrCheck 组态中 编译查错时时调用 开发 MCGS 功能构件的过程 实际上就是根据功能构件的特性和含义来完成 4 个接口功能的编程过程 下面详细讲述各个接口的含义和用法 接口接口 SvrMenuCommand 接口作用 接口作用 本接口用于在 MCGS 组态环境中增加一个用户自定义的菜单项 本 接口在组态环境装载时被 MCGS 组态环境调用 检查是否有有对应 的菜单要求 如有 在 MCGS 的 工具 菜单中增加一菜单项 组 态环境运行时 当用户选取增加的菜单项时 也调用本接口 语法形式 语法形式 SvrMenuCommand strName As String bQuery As Long DatObj As Object As Long 返返 回回 值 值 0 调用成功 1 调用失败 参数说明 参数说明 strName 返回用于显示在 工具 菜单中的菜单项的名称 如为空 表示本功能构件不增加菜单 bQuery MCGS 初试化时调用本接口时 把本参数的值设置为 1 在菜单中调用本接口时 把本参数的值设置为 0 DatObj MCGS 实时数据库数据对象 接口 接口 SvrStgySetOperator 接口作用 接口作用 本接口的作用是读取功能构件的类型名称 注释和所对应的图标资源 的 ID 号以及组态时设置构件的属性时调用 MCGS 高级开发指南 19 语法形式 语法形式 SvrStgySetOperator strName As String strNotes As String iIcon As Long DatObj As Object SaveObj As Object bQuery As Long As Long 返返 回回 值 值 0 调用成功 1 调用失败 参数说明 参数说明 strName 返回功能构件的类型名 显示在功能构件列表框中 strNotes 返回功能构件的注释 显示在策略行的右边 iIcon 返回功能构件所对应的图标资源的 ID 号 该图标显示在策 略行的功能构件块上 如 ID 0 表示没有对应的图标 MCGS 显示 缺省图标 bQuery MCGS 初试化时调用本接口时 把本参数的值设置为 1 在设置构件属性调用本接口时 把本参数的值设置为 0 DatObj MCGS 实时数据库数据对象 SavObj 存盘服务对象 接口程序中通过该对象来保存和读取数据 接口接口 SvrStgyRunOperator 接口作用 接口作用 本接口在运行环境中 当需要执行本构件的功能时调用 语法形式 语法形式 SvrStgyRunOperator DatObj As Object SaveObj As Object As Long 返返 回回 值 值 0 调用成功 1 调用失败 参数说明 参数说明 DatObj MCGS 实时数据库数据对象 SavObj 存盘服务对象 接口程序中通过该对象来保存和读取数据 接口 接口 SvrCheck 接口作用 接口作用 本接口在组态环境中 当 MCGS 进行查错和编译调用 语法形式 语法形式 SvrCheck DatObj As Object CheckFlag As Long As Long 返返 回回 值 值 0 调用成功 1 调用失败 参数说明 参数说明 DatObj MCGS 实时数据库数据对象 CheckFlag 标志位 MCGS 高级开发指南 20 2 3 利用开发向导生成框架利用开发向导生成框架 MCGS 提供了一个高级开发工具包 能快速为用户生成功能构件的源程序框架 在此基础上编程既快速 可减少出错的可能性 请按如下步骤来生成功能构件的框架 确保MCGS的高级开发工具包已安装正确 启动Visual Basic6 0 中文专业版或企业版 选择 外接程序 菜单 单击该菜单下的MCGS开发向导菜单项 弹出开发向导 窗口后 按 下一步 按钮 弹出如下图所示窗口 选择扩展构件的类型为运行策略功能构件 按 下一步 按钮 弹出如下图所示 的窗口 MCGS 高级开发指南 21 设置构件工程名为 MyDLL 构件类型名为 我的构件 构件工程名为功能 构件在VB下源程序的工程名 编译生成的Active DLL构件的名称为 MyDLL DLL 构件类型名用于标识对应的构件 最后可显示在MCGS的设备 工具箱中 按 下一步 按钮 出现如下图所示的窗口 设置生成目录和输出目录都为 D AddIn 使开发向导自动生成的源程序和编译生成的构件都位于同一 目录下 在一此按 下一步 按钮 然后按 完成 按钮 MCGS即开始自 动生成功能构件的源程序框架 开发向导完成工作后 自动生成一个名位 MyDLL 的工程组 如下图所示 在 VB的工程组窗口中可以看到该工程组包含如下二个VB工程 MyDLL工程对应于设备驱动构件 该工程包含一个类模块和一个程序模块 类模 MCGS 高级开发指南 22 块AddInObj完成了功能构件所需的所有接口 TestDLL工程只用于在VB环境下对功能构件进行调试 该工程包含两个窗体和两 个程序模块 在实际编程时 无需对该工程进行任何修改工作 MCGS开发向导生成的所有源程序代码和编译生成的输出文件都放在D AddIn目 录下 注意 注意 MCGS 开发向导只是生成构件的源程序框架 没有任何具体的功能 要完 成特定的功能 还需要在此基础上 针对具体要求进行进一步的编程和调试工作 2 4 利用样例程序移植利用样例程序移植 MCGS 把部分功能驱动构件的源程序代码都随系统一起提供 在实际应用中 开 发定制自己的功能构件的最好方法就是在 MCGS 提供的源程序代码的基础上进行 由于 OLE 技术本身的复杂性 建议按照本节给定的方法和步骤来进行你的开发工作 避免产生不可预料的错误 如果你能严格按照本节的步骤进行开发工作 则可省去对 Active DLL 编程技术及有关概念的学习和了解 直接集中精力实现功能构件的功能 从MCGS高级开发工具包中找到你所需的样例源程序代码 假定安装开发工具包 时所选的安装目录为D Mcgssdk 则源程序位于D Mcgssdk samples AddIn目 录下 而且按功能构件的名称来命名对应的目录 如 报警数据处理构件源 代码的目录为AlmAddIn 为方便说明 下面各步骤中假定选取报警数据处理 构件为样例程序 建立一个新目录 D MyDLL 把ALmAddIn目录内的所有内容拷贝到D MyDLL 目录下 新功能构件的源程序将位于本目录下 MCGS 高级开发指南 23 每个功能构件源代码中都一个后缀为 vbg 的工程组文件 本例中为 TestDLL vbg 启动Visual Basic6 0 打开该文件 如下图所示 在VB工程组 窗口中 包含有二个工程 AlmAddIn TestDLL 先在工程组窗口中选中工程AlmAddIn 被选中的工程下面显示为蓝条 用鼠标 右键弹出下拉菜单或从 工程 菜单中 单击 AlmAddIn属性 打开该工 程的属性设置窗口 如下图所示 把 通用 和 生成 两个属性页中的 AlmAddIn改为MyDLL 修改工程名称 在 部件 属性页中 把 版本兼容 中的选项设置成 不兼容 修改完成后 MCGS 高级开发指南 24 按 确认 按钮返回 注意 注意 对工程属性页中的其它属性不要做任何修改 在VB的 文件 菜单中 单击 AlmAddIn vbp另存为 菜单 把工程另存为 MyLL vbp 在VB的 文件 菜单中 单击 生成AlmAddIn dll 菜单 弹出 生成工程 窗口 对工程继续编译 把要生成的文件名改为 MyDLL dll 按 确定 按钮开始编译 编译完成后 打开工程MyDLL的属性窗口 如下图所示 在 部件 属性页中 把 版本兼容 中的选项设置成 二进制兼容 同时把其下面的输入框中 的内容由AlmAddIn dll改为MyDLL dll 按 确认 按钮返回 打开类模块AddInObj的编程窗口 对接口SvrStgySetOperator进行如下修改 strName 我的功能构件 strNotes 我的功能构件 选中工程TestDLL 在VB 工程 菜单中 单击 引用 菜单项 把工程 TestDLL对于AlmAddIn的引用取消 改为对工程MyDLL的引用 上述步骤完成后 把整个工程组存盘 就完成了开始移植前所有必须的准备工作 接下来 你就可以在源程序的基础上进行修改 实现你自己特定功能的设备构件 对通讯子设备 如欧姆龙 PLC 对应的设备驱动程序进行移植时 基本方法和步 骤上面所述相同 MCGS 高级开发指南 25 2 5 测试和挂接功能构件测试和挂接功能构件 MCGS 为功能构件提供了一套在 VB 环境下进行在线调试的运行机制 使用户能 随时对所做的修改进行测试调试 检验其正确性 其简单程度和方便性是其它组态软 件系统所无法比拟的 MCGS 的这一机制 使得大多数普通工程用户都能动手编制自 己的功能构件 使用 MCGS 开发向导生成的程序框架或系统提供的样例源代码中 都包含有一 个用于在 VB 下进行测试的工程 TestDLL 通过该工程模拟 MCGS 的工作状态 直 接调用功能构件的接口函数 从而做到对构件的每个接口函数在 VB 源代码一级进行 测试 实际应用中不要对该工程进行任何修改工作 下面详细介绍测试和挂接设备驱动构件的方法和步骤 按照前节所讲述的步骤 用开发向导生成一个设备驱动构件的框架 生成的源程 序所在目录为 D AddIn 构件工程名为 MyDLL 构件的类型名为 我的功 能构件 完成自动生成后 在VB的工程组窗口中会看到二个工程 MyDLL 和TestDLL 启动MCGS的组态环境 并打开或新建一个MCGS工程 注意 注意 进行在线调试时 必须启动MCGS 且要保证MCGS中有一个打开的工程 否则 在VB中无法 进行在线调式 在VB环境下 按F5键运行工程组 出现如下图所示的调试窗口 该窗口中的三 个按钮分别用于调用组态环境接口和运行环境接口和菜单调用接口 中间的 输入框用来显示功能构件的类型名称 按不同的按钮可对功能构件的接口进行测试 根据构件所需的功能 不断进行调 MCGS 高级开发指南 26 试测试 直到完成所有工作和没有错误产生为止 完成所有的编程调试工作以后 把工程MyDLL重新编译一遍 生成最后可以使用 的Active dll文件 MyDLL dll 把这个文件拷贝到目录D MCGS Program AddIns下 假定MCGS系统安装时的目录为D Mcgs 注意 编译和拷贝功能 构件的文件时 一定要先退出MCGS系统 同时要修改AddIns目录下的 AddIns ini文件 在该文件中增加一行 MyDLL dll 完成上述步骤后 就完 成了用户功能构件的编制 调试和挂接工作 下面介绍如何在MCGS系统下 使用定制的功能构件 启动MCGS组态环境 在 工具 菜单下 将会显示出 我的菜单项 一项 选 取该菜单项 MCGS将调用功能构件的菜单接口 显示对应的窗口 如不需 要菜单项 则应把功能构件的SvrMenuCommand接口中的所有代码去掉 打开一个运行策略的组态窗口 在运行策略功能构件箱内 将回显示出 我的功 能构件 一项 把该构件选入到策略行中 用鼠标双击该构件 MCGS调用 构件的组态环境接口 以便用户在组态环境中对构件的属性进行设置 进入运行环境后 当组态环境组态的对应策略行被执行时 MCGS调用构件的运 行接口 执行构件所实现的功能 MCGS 高级开发指南 27 第三章第三章 开发开发 MCGS 设备驱动设备驱动 虽然 MCGS 提供了大多数常用设备的驱动程序 但在实际应用中 或因为所用 设备的特殊性 或因为实际工程的需要 MCGS 所提供的设备驱动程序总会有些不尽 人意 为解决这些问题 MCGS 提供了一套规范的设备驱动程序接口 允许用户根据 自己的需要来定制设备驱动程序 在学习完本章之前 你可能会觉得开发设备驱动程序是件难事 而编制能在 Win95 和 WinNT 下能同时运行的设备驱动程序更是不可思议 MCGS 设备驱动的开 发既不需用复杂的汇编语言 也不需用难懂的 C 语言 而只须使用简单易用 大多数 工程人员都会使用的 Visual Basic MCGS 把和操作系统底层打交道的内容全部包装 起来 以函数调用的方式提供给你 同时 MCGS 的高级开发向导能为你自动生成设 备驱动程序的框架 MCGS 大多数设备驱动程序的源程序代码也都随系统提供给你 只要你会 VB 熟悉你所使用的硬件设备 你就完全可以按照你自己的需要来开发定 制你自己的设备驱动程序 本章下面各节将详细介绍开发设备驱动程序的方法和步骤 请在开始之前 先安 装 Visual Basic6 0 中文专业版或企业版 然后安装 MCGS 高级开发工具包 建议你 按下面各节介绍的方法和步骤来一步一步地学习开发设备驱动程序 3 1 设备驱动构件的实现方法设备驱动构件的实现方法 MCGS 用 Active DLL 构件的方式来实现设备驱动程序 通过规范的 OLE 接口挂 接到 MCGS 中 使其构成一个整体 所以 MCGS 把设备驱动程序叫做设备驱动构件 由于设备驱动构件和 MCGS 运行在同一个进程内 故设备构件的运行速度快 可靠 性高 不存在传统 DDE 方式连接设备驱动时的数据流通不畅和数据传输速度慢等问 题 同时 OLE 是一个可扩充的开放标准 用于实现不同软件之间的相互操作 而不 管软件本身是使用什么编程语言 因此 只要遵守 MCGS 的接口规范 可以使用 MCGS 高级开发指南 28 VB VC Delphi 等语言来编制 MCGS 的设备驱动程序 鉴于 Visual Basic 通用性和 简单性 建议使用 VB 来开发 MCGS 的设备驱动程序 本书也只讲解使用 VB 进行开 发的技术问题 由于 VB6 0 以上版本是以二进制码来编译执行程序 其运行速度已接 近或超过 VC 完全能满足设备驱动构件所需的速度要求 MCGS 把实际外部设备分为独立的设备 父设备和子设备三类 独立的设备是可 独立工作 完成特定数据输入输出功能的设备 如用于模拟量输入输出 数字量输入 输出的 PC 接口卡等 父设备是本身不直接处理数据输入输出 但起到管理其它设备 工作的设备 如串行口设备 IDCN 893 的通讯卡等 子设备是本身具有处理数据输 入输出的功能 但只有和对应的父设备一起才构成完整工作系统的设备 如 PLC 设 备 带智能通讯功能的仪器仪表等 不同类型的设备的工作方式有所不同 其对应的 设备驱动程序的处理方法也有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论