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