文档库 最新最全的文档下载
当前位置:文档库 › mcgs高级开发指南

mcgs高级开发指南

4.2 $Month (44)

4.3 $Day (44)

4.4 $Hour (44)

4.5 $Minute (45)

4.6 $Second (45)

4.7 $Week (45)

4.8 $Date (45)

4.9 $Time (45)

4.10 $Timer (46)

4.11 $RunTime (46)

4.12 $PageNum (46)

4.13 $UserName (46)

第五章MCGS系统内部函数 (46)

5.1 数学函数 (47)

5.2 字符操作函数 (48)

5.3 窗口操作函数 (50)

5.4 设备操作函数 (51)

5.5 策略操作函数 (52)

5.6 事件操作函数 (53)

5.7 报警操作函数 (53)

5.8 存盘操作函数 (56)

5.9 用户权限操作函数 (58)

5.10 系统操作函数 (59)

第六章MCGS中提供的对象 (61)

6.1 实时数据库对象 (61)

6.2 存盘服务对象 (77)

第一章MCGS的可扩充性

1.1 概述

MCGS组态软件是一套功能丰富、简单易用的组态软件,大部分工程师都可以很容易的使用这套组态软件来完成一个完整的工程项目。但是,当用户熟练的掌握了这套组态软件以后,用户必然会寻求在这套组态软件上进一步开发的能力。以实现有自己风格的界面、自己设计的控制算法和与自己硬件相匹配的驱动程序。其他一些长期使用Visual Basic、C++、Delphi的高级工程开发人员,为了充分利用自己的编程特长和已有的程序积累,也希望能够把自己编写的程序装配到MCGS组态软件中。

大部分面向工程应用的工程人员,虽然没有时间和精力开发自己的专有模块,但是,却希望能够从MCGS开发组或第三方的专业、业余开发者那里获得为自己定制的特殊模块,并且能够很方便的装配到现有的MCGS组态软件上。而对硬件开发商和一些高级的开发人员,都希望能够开发出自己的设备驱动模块和专业化、行业化的模块以充分利用MCGS软件的组态功能,当然,对于这些专业化的高品质模块,位于工程一线的工程人员也是具有非同一般的兴趣的。

为了满足用户的这些要求,MCGS提供一套可扩充的接口规范和配套的高级开发工具包。使用接口规范和工具包开发出来的扩充构件,具有很优越的特点:l安全保密。扩充构件是编译成二进制代码的,可以很好的保护您的工作。非法用户不可能通过反编译你的扩充构件来获得你独有的设备驱动构件、特殊

的运算构件和特殊的窗口界面。你更可以使用扩充构件来进行自己的加密,

以防止你制作的工程被任意拷贝,保护你自己的利益。

l简单快速。MCGS组态软件高级开发包中提供了常用的数据后处理构件源代码。初级用户可以直接使用这些数据后处理构件,但高级用户则可以修改这

些构件的源代码,以满足自己特殊的要求。众所周知,工控工程的数据后处

理部分具有各自不同的要求,因此一般的组态软件,都要求用户自己使用例

如Excel、Access等软件来完成自己的特殊的后处理。但是MCGS组态软件除

了可以用类似的方法处理外,还提供了另外一种不同的处理方法。那就是高

级用户可以修改MCGS组态软件高级开发工具包中所提供的后处理构件源代

码,然后生成自己的扩充构件,装配到MCGS组态软件上,就可以组成自己独

令等任务方面。在MCGS组态软件中,就实现了一个使用网络在两台计算机之间共享数据对象的设备驱动构件。实际上,像网络数据库、多台计算机、各个程序间的通讯等等类似的任务,都可以使用设备驱动构件的方法来完成。本手册的第十九章专门讲述开发MCGS设备驱动构件的具体方法和步骤,请参阅。

1.3 可扩充的功能构件

可扩充的功能构件主要用于实现用户定制的和用户特殊的功能模式。如参数出入窗口、特殊的操作画面、特殊的数据处理等等。功能构件提供了一个使用户可以实现自己独有的人机界面的手段,可以完成特殊的用户交互的工作。并且,可以完成一些MCGS组态软件所不适宜完成的工作。如体现事务性操作的任务,象填写输入表单,填写发票等任务需要填好后一次提交,要么所有修改全部完成,要么所有修改被全部退回,这种任务就与MCGS组态软件所运行的实时监控模式不一致,这种任务就适宜于使用功能构件来完成。

还有一些任务,诸如从存盘文件中恢复各个变量的设定值,或选定一组设定值,也可以在功能构件中通过读取存盘文件中的数据,并用MCGS组态软件的自动化功能写入MCGS组态软件中的各个变量来完成。

MCGS系统的报警信息浏览、存盘数据浏览、存盘数据提取等部分的功能就是用Visual Basic6.0来编程实现的功能构件,并且随系统提供了部分源代码,目的是因为这几个部分的灵活性比较大,用户的需求也各不一样,这样可方便用户在这些源代码的基础上,快速修改完成自己需要的功能。本手册的第二十章专门讲述开发MCGS功能构件的具体方法和步骤,请参阅。

1.4 MCGS实时数据库对象

实时数据库是MCGS的核心,MCGS把整个实时数据库作为一个对象封装起来,提供一系列的方法和属性,使外部程序通过这些方法和属性能对MCGS进行各种操作。MCGS运行起来后,实时数据库对象被暴露出来,在其它应用程序中,通过OLE自动化操作,就可取到实时数据库对象,从而做到在外部应用程序直接操作MCGS的目的。

注意:MCGS分为组态环境和运行环境两个部分,每个部分作为一个独立的整体

SetDataDlg:调用显示组态环境中的对象浏览对话框

GetDbIDFromID:通过数据对象ID号读取数据对象在数据库中的存储位置号GetIDFromDbID:通过数据对象在数据库中的存储位置号读取数据对象的ID号GetAlmDatName:读取定义有报警信息自动存盘属性的所有数据对象名称GetSaveDatName:读取定义有数据存盘属性的所有数据对象名称的集合GetGroupObj:读组对象的所有成员的ID号

GetValueArray:根据数据对象ID号成组读取多个类型相同的数据对象的当前值SetValueArray:根据数据对象ID号成组写入多个类型相同的数据对象的当前值GetValueFromID:根据数据对象的ID号读取数据对象的当前值GetValueFromName:根据数据对象的名称读取数据对象的当前值SetValueFromID:根据数据对象的ID号写入数据对象的当前值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来管理(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存盘服务对象使得在设备驱动构件和功能构件中,能使用“流化”的方式来编程实现保存和读取存盘数据,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提供的属性和方法。

在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

For i = 1 To 10

msg = "Dat" + Format$(i, "00")

DatObj.GetValueFormName msg, tt

Txt(i) = Format$(tt)

Next i

题。由于VB6.0以上版本是以二进制码来编译执行程序,其运行速度已接近或超过VC,完全能满足功能构件所需的速度要求。MCGS提供的大多数功能构件就是使用VB来编程的,开发工具包中提供了部分功能构件的源代码,可在其基础上修改,实现比MCGS功能更完善的功能构件。

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实时数据库数据对象。

2.3 利用开发向导生成框架

MCGS提供了一个高级开发工具包,能快速为用户生成功能构件的源程序框架,在此基础上编程既快速,可减少出错的可能性。请按如下步骤来生成功能构件的框架:确保MCGS的高级开发工具包已安装正确;

启动Visual Basic6.0(中文专业版或企业版);

选择“外接程序”菜单,单击该菜单下的MCGS开发向导菜单项;弹出开发向导窗口后,按“下一步”按钮,弹出如下图所示窗口:

选择扩展构件的类型为运行策略功能构件,按“下一步”按钮,弹出如下图所示的窗口:

设置构件工程名为“MyDLL”,构件类型名为“我的构件”。构件工程名为功能构件在VB下源程序的工程名,编译生成的Active DLL构件的名称为

MyDLL.DLL。构件类型名用于标识对应的构件,最后可显示在MCGS的设备

工具箱中。

按“下一步”按钮,出现如下图所示的窗口,设置生成目录和输出目录都为“D:\AddIn”,使开发向导自动生成的源程序和编译生成的构件都位于同一目

录下。在一此按“下一步”按钮,然后按“完成”按钮,MCGS即开始自动生

成功能构件的源程序框架。

开发向导完成工作后,自动生成一个名位“MyDLL”的工程组,如下图所示,在VB的工程组窗口中可以看到该工程组包含如下二个VB工程:MyDLL工程对应于设备驱动构件,该工程包含一个类模块和一个程序模块。类模块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 目录下。新功能构件的源程序将位于本目录下。

每个功能构件源代码中都一个后缀为“.vbg”的工程组文件,本例中为TestDLL.vbg。

启动Visual Basic6.0,打开该文件。如下图所示,在VB工程组窗口中,包含有

二个工程:AlmAddIn、TestDLL。

先在工程组窗口中选中工程AlmAddIn(被选中的工程下面显示为蓝条),用鼠标右键弹出下拉菜单或从“工程”菜单中,单击“AlmAddIn属性”,打开该工

程的属性设置窗口。如下图所示,把“通用”和“生成”两个属性页中的AlmAddIn

改为MyDLL(修改工程名称)。

相关文档