MCGS高级教程
第一章MCGS的可扩充性
1.1 概述
MCGS组态软件是一套功能丰富、简单易用的组态软件,大部分工程师都可以很容易的使用这套组态软件来完成一个完整的工程项目。但是,当用户熟练的掌握了这套组态软件以后,用户必然会寻求在这套组态软件上进一步开发的能力。以实现有自己风格的界面、自己设计的控制算法和与自己硬件相匹配的驱动程序。其他一些长期使用Visual Basic、C++、Delphi的高级工程开发人员,为了充分利用自己的编程特长和已有的程序积累,也希望能够把自己编写的程序装配到MCGS组态软件中。
大部分面向工程应用的工程人员,虽然没有时间和精力开发自己的专有模块,但是,却希望能够从MCGS开发组或第三方的专业、业余开发者那里获得为自己定制的特殊模块,并且能够很方便的装配到现有的MCGS组态软件上。而对硬件开发商和一些高级的开发人员,都希望能够开发出自己的设备驱动模块和专业化、行业化的模块以充分利用MCGS软件的组态功能,当然,对于这些专业化的高品质模块,位于工程一线的工程人员也是具有非同一般的兴趣的。
为了满足用户的这些要求,MCGS提供一套可扩充的接口规范和配套的高级开发工具包。使用接口规范和工具包开发出来的扩充构件,具有很优越的特点:
z安全保密。扩充构件是编译成二进制代码的,可以很好的保护您的工作。非法用户不可能通过反编译你的扩充构件来获得你独有的设备驱动构件、特殊的运算构件和
特殊的窗口界面。你更可以使用扩充构件来进行自己的加密,以防止你制作的工程
被任意拷贝,保护你自己的利益。
z简单快速。MCGS组态软件高级开发包中提供了常用的数据后处理构件源代码。初级用户可以直接使用这些数据后处理构件,但高级用户则可以修改这些构件的源代
码,以满足自己特殊的要求。众所周知,工控工程的数据后处理部分具有各自不同
的要求,因此一般的组态软件,都要求用户自己使用例如Excel、Access等软件来完
成自己的特殊的后处理。但是MCGS组态软件除了可以用类似的方法处理外,还提
供了另外一种不同的处理方法。那就是高级用户可以修改MCGS组态软件高级开发
工具包中所提供的后处理构件源代码,然后生成自己的扩充构件,装配到MCGS组
态软件上,就可以组成自己独有的后处理系统。
z性能优异。使用这种方法开发出来的MCGS组态软件的扩充构件具有很高的速度和性能。据微软公司测试,使用Visual C++软件开发出来的程序,只比使用Visual Basic
开发出来的速度高百分之十,有时甚至还低于Visual Basic。而使用Visual Basic开
发的方便性和易用性又是Visual C++所远远不能比拟的。在编写MCGS组态软件的
扩充构件时,Visual Basic确实是一种最佳选择。
z任务明确。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组态软件高级开发工具包,你应该具有如下条件:
z硬件方面:必须具有Pentium以上的CPU,以及十六兆以上的内存。
z软件方面:应使用微软的Windows’95或Window’NT 4.0操作系统,安装了微软的Visual Basic 6.0专业版或企业版。还应安装了MCGS光盘上的MCGS组态软件和
MCGS组态软件高级开发工具包。
使用MCGS组态软件高级开发工具包和微软Visual Basic软件来开发MCGS组态软件扩充构件,要求你应该大致了解Visual Basic软件的功能和使用方法。如果你对Visual Basic 软件不太了解,那麽就应该首先学习和了解一下Visual Basic软件。我们建议采用如下的方法进行学习:首先,你应该仔细阅读《Visual Basic联机手册》这本书中的“程序员指南”这一章。其次,你应该仔细读懂Visual Basic安装后附带的三到四个例子,这些例子安装在Visual Basic目录下的\Samples目录中。在这期间你可参考和阅读“程序员指南”这一章中的“VB基础”这一节中的有关菜单、窗体、构件等的描述。通过大约经过一个星期的学习,你就可以在MCGS组态软件高级开发包中的高级开发向导的帮助下,制作一些你自己的简单的扩充构件。也可以从高级开发包中的样例程序出发,通过修改相应的部分,来生成自己的扩充构件。
MCGS组态软件的可扩充性主要有以下几个方面组成:
z挂接定制的设备驱动构件。
z挂接定制的功能构件。
z在其它应用程序中通过OLE直接操作MCGS所提供的对象。
z通过DDE连接,建立MCGS和其它应用程序间的数据传递。
MCGS可扩充构件的提出和设计都经过了长期的工程实践的检验和考虑,能够确保实现工程进一步开发中的所有任务,而且具有结构简单、功能齐备的特点。
1.2 可扩充的设备驱动构件
可扩充的设备驱动构件能实现多种设备驱动的方式。你可以使用独立的设备驱动构件形式,如:A/D、D/A板采集驱动构件。也可以使用父子设备驱动结构形式,如:使用串口为父设备,使用挂接在串口上的各个PLC为子设备。这已经涵盖工控工程中常用的板卡采集、现场总线等等设备硬件连接模式。
在设备驱动构件中,你可以使用查询的工作方式,查询的周期从十毫秒到任意长的时间。也可以使用中断的方式,来高效完成设备驱动的任务。尤其在使用串口等低速率传送的设备时,使用中断方式来采集数据,可以充分利用等待串口通讯的时间来完成诸如图形动画等其它工作,以保证动画的平滑运动和界面反应的灵敏性。在使用板卡采集的时候,由于板卡采集速度较快,而且设备驱动运行都处在各自独立的线程内,一般都采用查询采集的方式来处理设备驱动的工作。
在设备驱动构件中,你还可以实现设备热更换的功能。MCGS组态软件可以从设备驱动构件的返回值中得到设备运行状态的,对于有错误的设备,MCGS组态软件将自动停止其采集,但是,每隔十个采集周期,MCGS组态软件将自动重新驱动设备驱动构件一次,再重新确定设备驱动构件的工作状态。因此设备驱动构件可以利用这个功能。在被驱动采集时,如果当前设备的上一次工作状态测试为设备失效,这时就可以重新测试工作状态,如果工作状态已经正常,就可以向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分为组态环境和运行环境两个部分,每个部分作为一个独立的整体都有一个对应的实时数据库对象,两个对象的方法和属性都相同,只是有些方法在不同的对象内的表现不同,如CreateNewData方法在组态环境的实时数据库对象中是创建一个新的数据对象,而在运行环境的实时数据库对象中该方法不进行任何操作。因此,在实际应用中,用户要根据需要选择是对哪个实时数据库对象进行操作。
注意:MCGS的实时数据库对象及其对应的属性和方法仅供扩充构件和外部应用程序在编程时使用,在MCGS内(脚本程序和表达式中)不能直接使用。实际上,实时数据库的大多数方法在MCGS内都提供了对应的内部函数,脚本程序和表达式中应使用内部函数完成有关操作。
下面列出MCGS实时数据库对象所提供的属性和方法,关于它们的详细含义和用法请参阅《MCGS参考手册》中的说明。
MCGS实时数据库对象的属性
WinVer:当前操作系统的版本标志
McgsVer:MCGS的版本号
McgsDataNum:当前工程的实时数据库中数据对象的个数
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号写入数据对象的当前值
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
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连接管理”菜单项,弹出如下窗口:
在DDE连接管理窗口中,把Dat01到Dat10设置为DDE输出(选中各数据对象对应的DDE输出选项框);把Dat11到Dat20设置为DDE输入,同时对服务节点进行如下配置:z按“服务节点配置”按钮,弹出如下配置窗口
z按“增加”按钮,弹出如下配置窗口,把服务节点名设为“Excel表单”,把服务名设为“Excel”,主题名设为“Sheet1”(当把Excel应用软件作为DDE服务器时,
服务名永远为“Excel”,主题名为对应表单--Sheet的名称)
配置好服务器节点后,把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功能构件
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功能更完善的功能构件。
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 号以及组态时设置构件的属性时调用。
语法形式: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功能构件
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开发向导只是生成构件的源程序框架,没有任何具体的功能,要完成特定的功能,还需要在此基础上,针对具体要求进行进一步的编程和调试工作。
第二章开发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
(修改工程名称)。
在“部件”属性页中,把“版本兼容”中的选项设置成“不兼容”。修改完成后,按“确认”按钮返回。注意:对工程属性页中的其它属性不要做任何修改。
在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功能构件
2.5 测试和挂接功能构件
MCGS为功能构件提供了一套在VB环境下进行在线调试的运行机制,使用户能随时对所做的修改进行测试调试、检验其正确性,其简单程度和方便性是其它组态软件系统所无法比拟的。MCGS的这一机制,使得大多数普通工程用户都能动手编制自己的功能构件。
使用MCGS开发向导生成的程序框架或系统提供的样例源代码中,都包含有一个用于在VB下进行测试的工程--TestDLL,通过该工程模拟MCGS的工作状态,直接调用功能构件的接口函数,从而做到对构件的每个接口函数在VB源代码一级进行测试,实际应用中不要对该工程进行任何修改工作。
下面详细介绍测试和挂接设备驱动构件的方法和步骤:
按照前节所讲述的步骤,用开发向导生成一个设备驱动构件的框架,生成的源程序所在目录为--D:\AddIn,构件工程名为--MyDLL,构件的类型名为--我的功能构件。完成
自动生成后,在VB的工程组窗口中会看到二个工程:MyDLL和TestDLL。
启动MCGS的组态环境,并打开或新建一个MCGS工程。注意:进行在线调试时,必须启动MCGS,且要保证MCGS中有一个打开的工程,否则,在VB中无法进行在线调
式。
在VB环境下,按F5键运行工程组,出现如下图所示的调试窗口,该窗口中的三个按钮分别用于调用组态环境接口和运行环境接口和菜单调用接口;中间的输入框用来显
示功能构件的类型名称。
按不同的按钮可对功能构件的接口进行测试,根据构件所需的功能,不断进行调试测试,直到完成所有工作和没有错误产生为止。
完成所有的编程调试工作以后,把工程MyDLL重新编译一遍,生成最后可以使用的Active dll文件:MyDLL.dll,把这个文件拷贝到目录D:\MCGS\Program\ AddIns下(假
定MCGS系统安装时的目录为D:\Mcgs。注意:编译和拷贝功能构件的文件时,一
定要先退出MCGS系统),同时要修改AddIns目录下的AddIns.ini文件,在该文件中
增加一行:MyDLL.dll。完成上述步骤后,就完成了用户功能构件的编制、调试和
挂接工作,下面介绍如何在MCGS系统下使用定制的功能构件。
启动MCGS组态环境,在“工具”菜单下,将会显示出“我的菜单项”一项,选取该菜单项,MCGS将调用功能构件的菜单接口,显示对应的窗口(如不需要菜单项,则应把功能构件的SvrMenuCommand接口中的所有代码去掉)。
打开一个运行策略的组态窗口,在运行策略功能构件箱内,将回显示出“我的功能构件”
一项。把该构件选入到策略行中,用鼠标双击该构件,MCGS调用构件的组态环境接口,以便用户在组态环境中对构件的属性进行设置。
进入运行环境后,当组态环境组态的对应策略行被执行时,MCGS调用构件的运行接口,执行构件所实现的功能。