mcgs系统内部数据对象.docx
- 文档编号:30744379
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:99
- 大小:152.33KB
mcgs系统内部数据对象.docx
《mcgs系统内部数据对象.docx》由会员分享,可在线阅读,更多相关《mcgs系统内部数据对象.docx(99页珍藏版)》请在冰豆网上搜索。
mcgs系统内部数据对象
第一章MCGS的可扩充性
1.1概述
MCGS组态软件是一套功能丰富、简单易用的组态软件,大部分工程师都可以很容易的使用这套组态软件来完成一个完整的工程项目。
但是,当用户熟练的掌握了这套组态软件以后,用户必然会寻求在这套组态软件上进一步开发的能力。
以实现有自己风格的界面、自己设计的控制算法和与自己硬件相匹配的驱动程序。
其他一些长期使用VisualBasic、C++、Delphi的高级工程开发人员,为了充分利用自己的编程特长和已有的程序积累,也希望能够把自己编写的程序装配到MCGS组态软件中。
大部分面向工程应用的工程人员,虽然没有时间和精力开发自己的专有模块,但是,却希望能够从MCGS开发组或第三方的专业、业余开发者那里获得为自己定制的特殊模块,并且能够很方便的装配到现有的MCGS组态软件上。
而对硬件开发商和一些高级的开发人员,都希望能够开发出自己的设备驱动模块和专业化、行业化的模块以充分利用MCGS软件的组态功能,当然,对于这些专业化的高品质模块,位于工程一线的工程人员也是具有非同一般的兴趣的。
为了满足用户的这些要求,MCGS提供一套可扩充的接口规范和配套的高级开发工具包。
使用接口规范和工具包开发出来的扩充构件,具有很优越的特点:
●安全保密。
扩充构件是编译成二进制代码的,可以很好的保护您的工作。
非法用户不可能通过反编译你的扩充构件来获得你独有的设备驱动构件、特殊的运算构件和特殊的窗口界面。
你更可以使用扩充构件来进行自己的加密,以防止你制作的工程被任意拷贝,保护你自己的利益。
●简单快速。
MCGS组态软件高级开发包中提供了常用的数据后处理构件源代码。
初级用户可以直接使用这些数据后处理构件,但高级用户则可以修改这些构件的源代码,以满足自己特殊的要求。
众所周知,工控工程的数据后处理部分具有各自不同的要求,因此一般的组态软件,都要求用户自己使用例如Excel、Access等软件来完成自己的特殊的后处理。
但是MCGS组态软件除
了可以用类似的方法处理外,还提供了另外一种不同的处理方法。
那就是高级用户可以修改MCGS组态软件高级开发工具包中所提供的后处理构件源代码,然后生成自己的扩充构件,装配到MCGS组态软件上,就可以组成自己独有的后处理系统。
●性能优异。
使用这种方法开发出来的MCGS组态软件的扩充构件具有很高的速度和性能。
据微软公司测试,使用VisualC++软件开发出来的程序,只比使用VisualBasic开发出来的速度高百分之十,有时甚至还低于VisualBasic。
而使用VisualBasic开发的方便性和易用性又是VisualC++所远远不能比拟的。
在编写MCGS组态软件的扩充构件时,VisualBasic确实是一种最佳选择。
●任务明确。
MCGS的这种扩充构件具有清晰的结构,你完全可以向MCGS组态软件的开发组或第三方的开发人员提出要求,为你编写一个定制的扩充构件。
而不会存在功能纠缠不清,任务确定不明的问题。
MCGS组态软件的高级开发,基本上是基于微软公司的OLE标准,利用了最新的ActiveX技术。
这种新技术保证能够方便地使用当前各种先进的开发工具来开发自己的扩充构件。
如:
VisualBasic、VisualC++以及其它公司的各种编程软件也可以方便地开发MCGS组态软件的扩充构件。
但是,MCGS为使用微软公司的VisualBasic准备了丰富的样例程序和功能强大的高级开发向导。
这个高级开发向导可以帮助你很方便的生成各种扩充构件的框架结构,使你能够快速的进入自己的编程工作。
在MCGS组态软件高级开发工具包中,还提供了给开发员使用的一个源代码级调试程序。
因此,MCGS强烈建议使用微软公司的VisualBasic软件来开发MCGS的扩充构件。
在本书中,主要介绍如何使用VisualBasic来开发MCGS组态软件扩充构件。
但由于它是基于OLE技术标准的,所以如果你能够熟练地使用VisualC++、Delphi等软件,你也可以按照本书中给出的OLE界面标准,来制作自己的组态软件扩充构件。
为了能够使用MCGS组态软件高级开发工具包,你应该具有如下条件:
●硬件方面:
必须具有Pentium以上的CPU,以及十六兆以上的内存。
●软件方面:
应使用微软的Windows’95或Window’NT4.0操作系统,安装了微软
的VisualBasic6.0专业版或企业版。
还应安装了MCGS光盘上的MCGS组态软件和MCGS组态软件高级开发工具包。
使用MCGS组态软件高级开发工具包和微软VisualBasic软件来开发MCGS组态软件扩充构件,要求你应该大致了解VisualBasic软件的功能和使用方法。
如果你对VisualBasic软件不太了解,那麽就应该首先学习和了解一下VisualBasic软件。
我们建议采用如下的方法进行学习:
首先,你应该仔细阅读《VisualBasic联机手册》这本书中的“程序员指南”这一章。
其次,你应该仔细读懂VisualBasic安装后附带的三到四个例子,这些例子安装在VisualBasic目录下的\Samples目录中。
在这期间你可参考和阅读“程序员指南”这一章中的“VB基础”这一节中的有关菜单、窗体、构件等的描述。
通过大约经过一个星期的学习,你就可以在MCGS组态软件高级开发包中的高级开发向导的帮助下,制作一些你自己的简单的扩充构件。
也可以从高级开发包中的样例程序出发,通过修改相应的部分,来生成自己的扩充构件。
MCGS组态软件的可扩充性主要有以下几个方面组成:
●挂接定制的设备驱动构件。
●挂接定制的功能构件。
●在其它应用程序中通过OLE直接操作MCGS所提供的对象。
●通过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系统的报警信息浏览、存盘数据浏览、存盘数据提取等部分的功能就是用VisualBasic6.0来编程实现的功能构件,并且随系统提供了部分源代码,目的是因为这几个部分的灵活性比较大,用户的需求也各不一样,这样可方便用户在这些源代码的基础上,快速修改完成自己需要的功能。
本手册的第二十章专门讲述开发MCGS功能构件的具体方法和步骤,请参阅。
1.4MCGS实时数据库对象
实时数据库是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.5MCGS存盘服务对象
MCGS提供有一个存盘服务对象,用于设备驱动构件和功能构件保存构件内部需要保存的数据。
在构件中,通过操作该对象的方法来保存和读取数据,而数据具体放在什么地方由MCGS来管理(MCGS把这些数据和构件的其它属性一起保存在组态结果数据库中)。
注意:
MCGS把存盘服务对象作为一个参数通过构件的接口传送到设备驱动构件和功能构件内,供构件保存数据时使用。
下面详细列出存盘服务对象所提供方法:
方法:
SetStartPos
方法用途:
设置存储数据的操作方式。
使用范围:
可用于组态环境和运行环境。
语法形式:
SetStartPos(ByvalFlagasLong)asLong
返回值:
=0:
调用正常,<>0:
调用不正常。
参数说明:
Flag,长整型,操作标志,具体含义如下:
=0:
设置对数据的操作为读模式,使得GetDat从起始位置开始,顺序读取数据;
=1:
设置对数据的操作为写模式,使得PutDat从起始位置开始,顺序把数据存入。
方法:
GetDat
方法用途:
读取存储在MCGS内的数据。
使用范围:
可用于组态环境和运行环境。
语法形式:
GetDat(ValueasVariant)asLong
返回值:
=0:
调用正常,<>0:
调用不正常。
参数说明:
Value,Variant型,返回读取的值,也可以使用具体的数据类型和数组来返回数据。
方法:
PutDat
方法用途:
把数据存入到MCGS内。
使用范围:
可用于组态环境和运行环境。
语法形式:
PutDat(ValueasVariant)asLong
返回值:
=0:
调用正常,<>0:
调用不正常。
参数说明:
Value,Variant型,要存入的值,也可以使用具体的数据类型和数组来存入数据。
MCGS存盘服务对象使得在设备驱动构件和功能构件中,能使用“流化”的方式来编程实现保存和读取存盘数据,GetDat和PutDat的使用一定要配对。
如在某接口中编写的保存数据代码如下:
dimIaslong,jaslong,msgasstring,Dat(10)assingle
SaveObj.SetStartPos1
SaveObj.PutDatI
SaveObj.PutDatj
SaveObj.PutDatmsg
SaveObj.PutDatDat
则对应的读取数据的代码应如下:
dimIaslong,jaslong,msgasstring,Dat(10)assingle
SaveObj.SetStartPos0
SaveObj.GetDatI
SaveObj.GetDatj
SaveObj.GetDatmsg
SaveObj.GetDatDat
1.6通过OLE自动化和其它应用程序交互
MCGS组态软件本身的自动化功能可以帮助用户在其它应用程序中很方便地操纵MCGS组态软件的运行。
比如说,用户可以在一个程序里指挥MCGS运行环境打开某个窗口、执行某个策略、或者向某个设备发出命令等等。
基本上,在MCGS组态软件中用户脚本程序可以完成的功能也都可以通过MCGS组态软件的自动化功能来完成。
MCGS把其核心作为一个对象包装起来,把MCGS的大多数功能作为对象的属性和方法暴露出来,使其它的应用程序通过OLE自动化来操作MCGS,在VisualBaisc、Excel、Access和、Delphi中都可以通过OLE自动化来取得MCGS实时数据库对象,编程操作MCGS提供的属性和方法。
在VisualBasic中操作MCGS
假定MCGS运行环境正在运行一个工程,且该工程有20个数值型数据对象,其名称为Dat01到Dat20。
要求用VB编制一个应用程序,该程序的界面如下图所示,按“从MCGS读数据”按钮时,能把MCGS中Dat01到Dat10的值读回显示在左列文本框内,按“向MCGS写数据”按钮时,能把右列文本框内输入的数据写到MCGS的Dat11到Dat20数据对象中。
DimDatObjAsObject
PrivateSubForm_Load()
OnErrorResumeNext
SetDatObj=GetObject(,"McgsRun.DataCentre")
IfErrThen
MsgBox("请先启动MCGS运行环境!
")
End
EndIf
EndSub
PrivateSubCmd_Read_Click()
DimmsgAsString,ttAsVariant
Fori=1To10
msg="Dat"+Format$(i,"00")
DatObj.GetValueFormNamemsg,tt
Txt(i)=Format$(tt)
Nexti
EndSub
PrivateSubCmd_Wirte_Click()
DimmsgAsString,ttAsVariant
Fori=1To10
msg="Dat"+Format$(i,"00")
tt=Val(Txt(i+10))
DatObj.SetValueFormNamemsg,tt
Nexti
EndSub
在Assess、Excel中都有对应的VB程序可以编程,实现对MCGS的各种操作,其方法和在VisualBasic中基本相同,可参考上面的代码进行。
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输入,同时对服务节点进行如下配置:
●按“服务节点配置”按钮,弹出如下配置窗口
●按“增加”按钮,弹出如下配置窗口,把服务节点名设为“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功能构件的方法和步骤,请在开始之前,先安装VisualBasic6.0(中文专业版或企业版),然后安装MCGS高级开发工具包,建议你按下面各节介绍的方法和步骤来一步一步地学习开发MCGS功能构件。
2.1功能构件的实现方法
MCGS用ActiveDLL构件的方式来实现功能构件,通过规范的OLE接口挂接到MCGS中,使其构成一个整体。
由于功能构件和MCGS运行在同一个进程内,故功能构件的运行速度快,可靠性高,即使构件本身有问题,也不会影响到MCGS的可靠运行。
同时,OLE是一个可扩充的开放标准,用于实现不同软件之间的相互操作,而不管软件本身是使用什么编程语言。
因此,只要遵守MCGS的接口规范,可以使用VB、VC、Delphi等语言来编制MCGS的功能构件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mcgs 系统 内部 数据 对象