本节介绍MCGS中数据对象和实时数据库的基本概念,从构成实时数据库的基本单元—数据对象着手,详细说明在组态过程中构造实时数据库的操作方法。
定义数据对象的过程就是构造实时数据库的过程。
定义数据对象时,在组态环境工作台窗口中,选择“实时数据库”标签,进入实时数据库窗口页,显示已定义的数据对象,如图2-2所示。
图2-2 实时数据库窗口页
对于新建工程,窗口中显示系统内建的4个字符型数据对象,分别是InputETime、InputSTime、InputUser1和InputUser2。当在对象列表的某一位置增加一个新对象时,可在该处选定数据对象,鼠标单击“新增对象”按钮,则在选中的对象之后增加一个新的数据对象;如不指定位置,则在对象表的最后增加一个新的数据对象。新增对象的名称以选中的对象名称为基准,按字符递增的顺序由系统默认确定。对于新建工程,首次定义的数据对象,默认名称为Data1。需要注意的是,数据对象的名称中不能带有空格,否则会影响对此数据对象存盘数据的读取。
在“实时数据库”窗口页中,可以像在Windows95的文件操作窗口中一样,能够以大图标、小图标、列表、详细资料4种方式显示实时数据库中已定义的数据对象,可以选择按名称顺序或按类型顺序来显示数据对象,也可以剪切、拷贝、粘贴指定的数据对象,还可以直接修改数据对象的名称。
为了快速生成多个相同类型的数据对象,可以选择“成组增加”按钮,弹出“成组增加数据对象”对话框,一次定义多个数据对象,如图2-3所示。成组增加的数据对象,名称由主体名称和索引代码两部分组成。其中,“对象名称”一栏代表该组对象名称的主体部分,而“起始索引值”则代表第一个成员的索引代码,其他数据对象的主体名称相同,索引代码依次递增。成组增加的数据对象,其他特性如数据类型、工程单位、最大/最小值等都是一致的。
图2-3 “成组增加数据对象”对话框
在MCGS中,数据对象有开关型、数值型、字符型、事件型和数据组对象等5种类型。不同类型的数据对象,其属性不同,用途也不同。
记录开关信号(0或非0)的数据对象称为开关型数据对象,通常与外部设备的数字量输入/输出通道连接,用来表示某一设备当前所处的状态。开关型数据对象也用于表示MCGS中某一对象的状态,如对应于一个图形对象的可见度状态。
开关型数据对象没有工程单位和最大/最小值属性,没有限值报警属性,只有状态报警属性。
在MCGS中,数值型数据对象的数值范围是:负数是从-3.402823E38到-1.401298E-45;正数是从1.401298E-45到3.402823E38。数值型数据对象除了存放数值及参与数值运算外,还提供报警信息,并能够与外部设备的模拟量输入/输出通道相连接。
数值型数据对象有最大和最小值属性,其值不会超过设定的数值范围。当对象的值小于最小值或大于最大值时,对象的值分别取为最小值或最大值。
数值型数据对象有限值报警属性,可同时设置下下限、下限、上限、上上限、上偏差、下偏差等6种报警限值,当对象的值超过设定的限值时,产生报警;当对象的值回到所有的限值之内时,报警结束。
字符型数据对象是存放文字信息的单元,用于描述外部对象的状态特征,其值为多个字符组成的字符串,字符串长度最长可达64KB。字符型数据对象没有工程单位和最大/最小值属性,也没有报警属性。
事件型数据对象用来记录和标识某种事件产生或状态改变的时间信息。例如,开关量的状态发生变化,用户有按键动作,有报警信息产生等,都可以看作一种事件发生。事件发生的信息可以直接从某种类型的外部设备获得,也可以由内部对应的策略构件提供。
事件型数据对象的值是由19个字符组成的定长字符串,用来保留当前最近一次事件所产生的时刻:“年,月,日,时,分,秒”。年用四位数字表示,月、日、时、分、秒分别用两位数字表示,之间用逗号分隔,如“1997,02,03,23,45,56”,即表示该事件产生于1997年2月3日23时45分56秒。当相应的事件没有发生时,该对象的值固定设置为“1970,01,01,08,00,00”。
事件型数据对象没有工程单位和最大/最小值属性,没有限值报警,只有状态报警,不同于开关型数据对象,事件型数据对象对应的事件产生一次,其报警也产生一次,且报警的产生和结束是同时完成的。
数据组对象是MCGS引入的一种特殊类型的数据对象,类似于一般编程语言中的数组和结构体,用于把相关的多个数据对象集合在一起,作为一个整体来定义和处理。例如,在实际工程中,描述一个锅炉的工作状态有温度、压力、流量、液面高度等多个物理量,为便于处理,定义“锅炉”为一个组对象,用来表示“锅炉”这个实际的物理对象,其内部成员则由上述物理量对应的数据对象组成,从而在对“锅炉”对象进行处理(如进行组态存盘、曲线显示、报警显示)时,只需指定组对象的名称“锅炉”,就包括了对其所有成员的处理。
数据组对象只是在组态时对某一类对象的整体表示方法,实际的操作则是针对每一个成员进行的,如在报警显示动画构件中,指定要显示报警的数据对象为组对象“锅炉”,则该构件显示组对象包含的各个数据对象在运行时产生的所有报警信息。
把一个对象的类型定义成组对象后,还必须定义组对象所包含的成员。在“组对象属性设置”对话框内,专门有“组对象成员”窗口页,用来定义组对象的成员,如图2-4所示。图中左边为所有数据对象的列表,右边为组对象成员列表。利用属性页中的“增加”按钮,可以把左边指定的数据对象增加到组对象成员中;“删除”按钮则把右边指定的组对象成员删除。组对象没有工程单位、最大值/最小值属性,组对象本身没有报警属性。
图2-4 “组对象属性设置”对话框
数据对象定义之后,应根据实际需要设置数据对象的属性。在组态环境工作台窗口中,选择“实时数据库”标签,从数据对象列表中选中某一数据对象,用鼠标单击“对象属性”按钮,或者用鼠标双击数据对象,即可弹出如图2-5所示的“数据对象属性设置”对话框。对话框设有三个窗口页:基本属性、存盘属性和报警属性。
数据对象的基本属性中包含数据对象的名称、单位、初值、取值范围和类型等基本特征信息,如图2-5所示。
在基本属性设置页的“对象名称”一栏内输入代表对象名称的字符串,字符个数不得超过32个(汉字16个),对象名称的第一个字符不能为“!”、“$”符号或0~9的数字,字符串中间不能有空格。用户不指定对象的名称时,系统默认为“DATAX”,其中X为顺序索引代码(第一个定义的数据对象为DATA0)。
图2-5 “数据对象属性设置”对话框
数据对象的类型必须正确设置。不同类型的数据对象,属性内容不同,按所列栏目设定对象的初始值、最大值、最小值及工程单位等。在内容注释一栏中输入说明对象情况的注释性文字。
MCGS把数据的存盘处理作为数据对象的一个属性封装在数据对象的内部,由实时数据库根据预先设定的要求自动完成数据的存盘操作,现场操作人员不必过问数据如何存盘及存在什么地方等具体问题。MCGS把数据对象的存盘属性分为三部分:数据对象值的存盘、存盘时间设置和报警数值的存盘。
对基本类型(包括数值型、开关型、字符型及事件型)的数据对象,可以设置为按数值的变化量方式存盘,如图2-6所示。变化量是指对象的当前值与前一次存盘值的差值。当对象值的变化量超过设定值时,实时数据库自动记录下该对象的当前值及其对应的时刻。如果变化量设为0,则表示只要数据对象的值发生了变化就进行存盘操作。对开关型、字符型、事件型数据对象,系统内部自动定义变化量为0。如果选择了“退出时,自动保存数据对象的当前值为初始值”一项,则MCGS运行环境退出时,把数据对象的初始值设为退出时的当前值,以便下次进入运行时恢复该数据对象退出时的值。
图2-6 数据对象存盘属性设置
对数据组对象只能设置为定时方式存盘,如图2-7所示。实时数据库按设定的时间间隔,定时存储数据组对象的所有成员在同一时刻的值。如果定时间隔设为0,则实时数据库不进行自动存盘处理,只能用其他方式处理数据的存盘。例如,可通过MCGS中称为“数据对象操作”的策略构件来控制数据对象值的带有一定条件的存盘,也可以在脚本程序内用系统函数!SaveData来控制数据对象值的存盘。
对组对象的存盘,MCGS还增加了加速存盘和自动改变存盘时间间隔的功能,加速存盘一般用于当报警产生时,加快数据记录的频率,以便事后进行分析。改变存盘时间间隔是为了在有限的存盘空间内,尽可能多地保留当前最新的存盘数据,而对于过去的历史数据,通过改变存盘数据的时间间隔,减少历史数据的存储量。
在数据对象和数据组对象的存盘属性中都有“存盘时间设置”一项,选择“永久存储”,则保存系统自运行时开始的整个过程中的所有数据,选择后者,则保存从当前开始指定时间长度内的数据。后者较前者相比,减少了历史数据的存储量。
对于数据对象发出的报警信息,实时数据库进行自动存盘处理,但也可以选择不存盘。存盘的报警信息有产生报警的对象名称、报警产生时间、报警结束时间、报警应答时间、报警类型、报警限值、报警时数据对象的值、用户定义的报警内容注释等。如需要实时打印报警信息,则应选取对应的选项。
图2-7 设置定时存盘
MCGS把报警处理作为数据对象的一个属性,封装在数据对象内部,由实时数据库判断是否有报警产生,并自动进行各种报警处理。用户应首先设置“允许进行报警处理”选项,才能对报警参数进行设置,如图2-8所示。
不同类型的数据对象,报警属性的设置各不相同。数值型数据对象最多可同时设置6种限值报警;开关型数据对象只有状态报警,按下的状态(“开”或“关”)为报警状态,另一种状态即为正常状态,当对象的值变为相应的值(0或1)时将触发报警;事件型数据对象不用设置报警状态,对应的事件产生一次就有一次报警,且报警的产生和结束是同时的;字符型数据对象和数据组对象没有报警属性。
图2-8 设置“允许进行报警处理”
执行“查看”菜单中的“数据对象”命令,弹出如图2-9所示的数据对象浏览窗口。
利用该窗口可以方便地浏览实时数据库中不同类型的数据对象。窗口分为两页:系统内建窗口页和用户定义窗口页,系统内建窗口页显示系统内部数据对象及系统函数;用户定义窗口页显示用户定义的数据对象。选定窗口上端的对象类型复选框,可以只显示指定类型的数据对象。
图2-9 查看数据对象
在MCGS的组态过程中,为了能够准确地输入数据对象的名称,经常需要从已定义的数据对象列表中查询或确认。
在数据对象的许多属性设置窗口中,对象名称或表达式输入框的右端都带有一个“?”号按钮(
),当单击该按钮时,会弹出如图2-10所示的窗口,该窗口中显示所有可供选择的数据对象列表。双击列表中的指定数据对象后,该窗口消失,对应的数据对象的名称会自动输入到“?”号按钮左边的输入框内。这样的查询方式可快速建立数据对象名称,避免人工输入可能产生的错误。
图2-10 可供选择的数据对象列表