2.3 定义变量
数据库是组态王最核心的部分。在组态王运行时,工业现场的生产状况要以动画的形式反映在屏幕上,同时工程人员在计算机前发布的指令也要迅速送达生产现场,所有这一切都是以实时数据库为中介环节,所以说数据库是联系上位机和下位机的桥梁。
在数据库中存放的是变量的当前值,变量包括系统变量和用户定义的变量。变量的集合形象地称为“数据词典”,数据词典记录了所有用户可使用的数据变量的详细信息,如图2-20所示。
图2-20 数据词典
“组态王”系统中定义的变量与一般程序设计语言(如BASIC、PASCAL、C语言)定义的变量有很大的不同,既能满足程序设计的一般需要,又能考虑到工控软件的特殊需要。
2.3.1 变量的类型
变量可以分为基本类型和特殊类型两大类。
1.基本变量类型
基本类型的变量又分为“内存变量”和“I/O”变量两类,如图2-21所示。
图2-21 基本变量类型
“内存变量”是指那些不需要和其他应用程序交换数据、也不需要从下位机得到数据、只在组态王内需要使用的变量,如计算过程的中间变量,就可以设置成内存变量。
“I/O变量”是指组态王与外部数据采集程序直接进行数据交换的变量,如下位机数据采集设备(如PLC、仪表等)或其他应用程序(如DDE、OPC服务器等)。这种数据交换是双向的、动态的,就是说,在组态王系统运行过程中,每当I/O变量的值改变时,该值就会自动写入下位机或其他应用程序;每当下位机或应用程序中的值改变时,组态王系统中的变量值也会自动更新。所以,那些从下位机采集来的数据、发送给下位机的指令,比如“反应罐液位”、“电源开关”等变量,都需要设置成“I/O变量”。
基本类型的变量也可以按照数据类型分为离散型、整数型、实数型、字符串型。
内存实数变量、I/O实数变量:类似一般程序设计语言中的浮点型变量,用于表示浮点数据,取值范围10E-38~10E+38,有效值7位。
内存离散变量、I/O离散变量:类似一般程序设计语言中的布尔(BOOL)变量,只有0,1两种取值,用于表示一些开关量。
内存整数变量、I/O整数变量:类似一般程序设计语言中的有符号长整数型变量,用于表示带符号的整型数据,取值范围-2147 483648~2147 483647。
内存字符串型变量、I/O字符串型变量:类似一般程序设计语言中的字符串变量,可用于记录一些有特定含义的字符串,如名称,密码等,该类型变量可以进行比较运算和赋值运算。字符串长度最大值为128个字符。
2.特殊变量类型
特殊变量类型有报警窗口变量、报警组变量、历史趋势曲线变量及系统预设变量4种。这几种特殊类型变量体现了组态王系统面向工控软件、自动生成人机接口的特点。
(1)“报警窗口变量”:是设计者在制作画面时通过定义报警窗口生成的,用户可用命令语言编制程序来设置或改变报警窗口的一些特性,如改变报警组名或优先级,在窗口内上下翻页等。
(2)“历史趋势曲线变量”:是设计者在制作画面时通过定义历史趋势曲线生成的,用户可用命令语言编制程序来设置或改变历史趋势曲线的一些特性,如改变历史趋势曲线的起始时间或显示的时间长度等。
(3)“系统预设变量”:有8个时间变量是系统已经在数据库中定义的,用户可以直接使用:$年、$月、$日、$时、$分、$秒、$日期、$时间,表示系统当前的时间和日期,由系统自动更新,设计者只能读取时间变量,而不能改变它们的值。预设变量还有:$用户名、$访问权限、$启动历史记录、$启动报警记录、$新报警、$启动后台命令、$双机热备状态、$毫秒、$网络状态。
(4)“结构变量”:一个结构变量作为一种变量类型,结构变量下可包含多个成员,每一个成员就是一个基本变量。成员类型可以为:内存离散、内存整数、内存实数、内存字符串、I/O离散、I/O整数、I/O实数、I/O字符串。当组态王工程中定义了结构变量时,在变量类型的下拉列表框中会自动列出已定义的结构变量。结构变量成员的变量类型必须在定义结构变量的成员时先定义,包括离散型、整数型、实数型、字符串型或已定义的结构变量。在变量定义的界面上只能选择该变量是内存型还是I/O型。
2.3.2 变量的基本属性配置
定义变量在工程浏览器“数据词典”中进行。
在工程浏览器的左侧树形菜单中选择“数据库/数据词典”,在右侧双击“新建”,弹出“定义变量”对话框,如图2-22所示。
图2-22 “定义变量”的“基本属性”对话框
“定义变量”对话框基本属性卡片中的各项用来定义变量的基本特征,各项意义解释如下:
(1)变量名:唯一标识一个应用程序中数据变量的名字,同一应用程序中的数据变量不能重名,不能与组态王中现有的变量名、函数名、关键字、构件名称等相重复,数据变量名区分大小写,第一个字符不能是数字,只能为字符,名称中间不允许有空格、算术符号等非法字符存在,最长不能超过31个字符。
(2)变量类型:在对话框中只能定义8种基本类型中的一种,用鼠标单击变量类型下拉列表框列出可供选择的数据类型,当定义有结构模板时,一个结构就是一种变量类型。
(3)描述:用于编辑和显示数据变量的注释信息。
(4)结构成员、成员类型和成员描述在变量类型为结构变量时有效。
(5)变化灵敏度:数据类型为模拟量或长整型时此项有效。只有当该数据变量的值变化幅度超过“变化灵敏度”时,“组态王”才更新与之相连接的图素(默认为0)。
(6)初始值:这项内容与所定义的变量类型有关,定义模拟量时出现编辑框可输入一个数值,定义离散量时出现开或关两种选择,定义字符串变量时出现编辑框可输入字符串,它们规定软件开始运行时变量的初始值。
(7)最小值:指该变量值在数据库中的下限。
(8)最大值:指该变量值在数据库中的上限。
(9)最小原始值:变量为I/O模拟型时,与最小值所对应的输入寄存器的值的下限。
(10)最大原始值:变量为I/O模拟型时,与最大值所对应的输入寄存器的值的上限。
以上4项是对I/O模拟量进行工程值自动转换所需要的。组态王将采集到的数据按照这4项的对应关系自动转为工程值。
(11)保存参数:在系统运行时,修改变量的域的值(可读可写型),系统自动保存这些参数值,系统退出后,其参数值不会发生变化。当系统再启动时,变量的域的参数值为上次系统运行时最后一次的设置值,无须用户再去重新定义。
(12)保存数值:系统运行时,当变量的值发生变化后,系统自动保存该值。当系统退出后再次运行时,变量的初始值为上次系统运行过程中变量值最后一次变化的值。
(13)连接设备:只对I/O类型的变量起作用,工程人员只需从下拉式“连接设备”列表框中选择相应的设备即可。所列的连接设备名是已安装的逻辑设备名。
注意:如果连接设备选为Windows的DDE服务程序,则“连接设备”选项下的选项名为“项目名”;当连接设备选为PLC等,则“连接设备”选项下的选项名为“寄存器”;如果连接设备选为板卡等,则“连接设备”选项下的选项名为“通道”。
项目名:连接设备为DDE设备时,DDE会话中的项目名,可参考Windows的DDE交换协议资料。
(14)寄存器:指定要与组态王定义的变量进行连接通信的寄存器变量名,该寄存器与工程人员指定的连接设备有关。
(15)数据类型;只对I/O类型的变量起作用,定义变量对应的寄存器的数据类型,共有9种数据类型供用户使用。
(16)读写属性:定义数据变量的读写属性,工程人员可根据需要定义变量为“只读”属性、“只写”属性、“读写”属性。
● 只读:对于进行采集的变量一般定义属性为只读,其采集频率不能为0。
● 只写:对于只需要进行输出而不需要读回的变量一般定义属性为只写。
● 读写:对于需要进行输出控制又需要读回的变量一般定义属性为读写。
(17)允许DDE访问:组态王用COM组件编写的驱动程序与外围设备进行数据交换,为了使工程人员用其他程序对该变量进行访问,可通过选中“允许DDE访问”,即可与DDE服务程序进行数据交换。
(18)采集频率:用于定义数据变量的采样频率。
(19)转换方式:规定I/O模拟量输入原始值到数据库使用值的转换方式。
对于I/O变量中的模拟变量,在现场实际中,可能要根据输入要求的不同要将其按照不同的方式进行转换。比如一般的信号与工程值都是与线性对应的,可以选择线性转换;有些需要进行累计计算,则选择累计转换。组态王为用户提供了线性、开方、非线性表、直接累计、差值累计等多种转换方式。
① 线性转换方式。用原始值和数据库使用值的线性插值进行转换。线性转换是将设备中的值与工程值按照固定的比例系数进行转换。在变量基本属性定义对话框的“最大值”、“最小值”编辑框中输入变量工程值的范围,在“最大原始值”、“最小原始值”编辑框中输入设备中转换后的数字量值的范围(可以参考组态王驱动帮助中的介绍),则系统运行时,按照指定的量程范围进行转换,得到当前实际的工程值。线性转换方式是最直接也是最简单的一种转换方式。
② 开方转换方式。用原始值的平方根进行转换,即转换时将采集到的原始值进行开方运算,得到的值为实际工程值,该值在变量基本属性定义的“最大值”、“最小值”范围内。
③ 非线性表转换与累计转换。非线性表转换:采用非线性表的方式实现非线性物理量的转换;累计转换:累计是在工程中经常用到的一种工作方式,经常用在流量、电量等计算方面。组态王的变量可以定义为自动进行数据的累计。另外,组态王提供两种累计算法:直接累计算法和差值累计算法,详见《组态王用户手册》。
2.3.3 变量的报警属性配置
“定义变量”对话框的“报警定义”页规定了数据变量的报警特性,包括报警条件、报警组名、报警优先级等信息,如图2-23所示。
图2-23 “定义变量”的“报警定义”对话框
1.模拟量报警类型
模拟量报警分如下3种类型:
(1)越限报警:模拟量的值在跨越报警限时产生的报警。越限报警的报警限(类型)有4个:低低限、低限、高限、高高限。
(2)变化率报警:模拟量的值在固定时间内的变化超过一定量时产生的报警,即变量变化太快时产生的报警。当模拟量的值发生变化时,就计算变化率以决定是否报警。
(3)偏差报警:模拟量的值相对目标值上下波动的量与变量范围的百分比超过一定量时产生的报警。
2.开关量报警类型
开关量报警分如下3种类型,用户只能定义其中的1种。
(1)关断报警:选中此项表示当离散型变量由开状态变为关(由1变为0)状态时,对此变量进行报警。
(2)开通报警:选中此项表示当离散型变量由关状态变为开状态(由0变为1)时,对此变量进行报警。
(3)改变报警:选中此项表示当离散型变量发生变化时,即由关状态变为开状态或由开状态变为关状态,对此变量进行报警。它多用于电力系统,又称变位报警。
报警文本:报警产生时显示的文本,用户可以根据自己的需要,在“报警文本”文本框中输入。
“定义变量”对话框的“记录和安全区”页用于配置变量的历史数据记录信息,可选择不记录、数据变化记录、定时记录或备份记录,如图2-24所示。
图2-24 “定义变量”的“记录和安全区”对话框
2.3.4 变量的记录和安全属性配置
(1)不记录:此选项有效时,则该变量值不存到硬盘上作历史记录。
(2)数据变化记录:当变量值发生变化时,将此时的变量值存到硬盘上(历史记录)。实型、长整型、离散量可记录,适用于数据变化快的场合。
当选择数据变化记录时,应对“变化灵敏度”进行设置。只有变量值的变化幅度大于“变化灵敏度”设定的值时才被记录到磁盘上。当“数据变化记录”选项有效时,“变化灵敏度”选项才有效,其默认值为1,用户可根据需要修改。
(3)定时记录:按时间间隔记录历史数据,最小时间间隔为1分钟,适用于数据变化慢的场合。
安全区的配置:
生成事件:当该变量的值、域被改变或被操作时,产生事件。
安全区:选择变量的操作安全区权限,只能选择一项。
2.3.5 定义变量举例
在工程浏览器的左侧树形菜单中选择“数据库/数据词典”,在右侧双击“新建”,弹出“定义变量”对话框。
1.定义1个内存整数变量
变量名设为“num”,变量类型选“内存整数”,初始值设为“0”,最小值设为“0”,最大值设为“1000”,如图2-25所示。
图2-25 定义内存整数变量“num”
定义完成后,单击“确定”按钮,则在数据词典中增加1个内存整数变量“num”。
2.定义1个内存离散变量
变量名设为“deng”,变量类型选内存离散,初始值选择“关”,如图2-26所示。
图2-26 定义内存离散变量“deng”
定义完成后,单击“确定”按钮,则在数据词典中增加1个内存离散变量“deng”。
每一个变量都要采取如上方法进行定义,只有经过定义后的变量,才能被系统中动画连接、命令语言编程等引用。