格西测控大师学习 第5篇 变量

变量

用户可以创建变量、变量数组、变量容器,还可以创建扩展的应用型变量,如表达式变量、引用变量、报警变量、文本文件变量、数据库变量、BIN 文件变量等应用型变量,满足各种测控数据传递、呈现和存储需求。

关于变量的应用例子,请参考:<软件安装目录>\Examples\Basics\Variants

一、变量

1.变量和变量容器

变量容器可以储存多个变量和多个变量容器,可以构建结构化的变量存储。下面分别介绍变量容器和变量。

1.变量容器

变量容器是变量存在的父结构,在工程中,变量部分本身就是一个变量容器。所以,我们可以直接在变量选项处添加变量。

image-20230214204345836

一般,我们需要分类不同的变量,构建多种变量和变量容器,以适应项目的多个功能单元。如下图所示结构,详情请参考:<软件安装目录>\Examples\Solutions\AutomaticTestSystem

image-20230214204735034

2.变量

在变量容器中创建的变量,可以分为两类,一类是通用型,另一类是应用型。通用型有:变量变量数组变量容器;应用型有:表达式变量引用变量报警变量文本文件变量数据库变量BIN文件变量TDM文件变量

image-20230214203646925

变量的类型中将详细介绍变量的各个类型及其属性。

2.变量的类型

变量

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
Description 描述
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Unit 变量单位
Value 变量值
ValueType 变量值的类型,软件支持的类型有 Boolean、Sbyte、Byte、Int16、Uint16、Int32、Uint32、Int64、Uint64、Float、Double、Decimal、DateTime、String、BitString。

变量数组

变量数组中的元素都是同一个类型的变量。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Capacity 变量缓存容量,指能够缓存多少个数据记录。数据记录产生的规则是数组中的所有子变量的值都改变后,生成一行记录。
Description 描述
Format 数组变量的格式,字符串格式支持 Json 和 Xml,设置格式影响 Value 属性和 ToString 函数。
ItemType 数组元素的类型,软件支持的类型同上 ValueType。
Rank 数组维数和大小,格式:m,n,…,多维数组将展开为一维数组。

变量容器

变量容器可以容纳任何类型的变量。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Capacity 变量缓存容量,指能够缓存多少个数据记录。数据记录产生的规则是容器中的所有子变量的值都改变后,生成一行记录。
Description 描述
Format 容器变量的格式,字符串格式支持 Json 和 Xml,设置格式影响 Value 属性和 ToString 函数。

💔通道型变量是没有的,为何不删除?

表达式变量

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
Category 通道类别,通道类别相同的变量在相同的线程中执行。
Description 描述
Expression 表达式,运行时动态计算和产生变量的值,可供使用的表达式变量由 N、T和 Value,N(整数类型)表示自项目运行或上次变量复位以来经过的采样次数,T(浮点类型)根据 Frequency 和采样次数 N 计算得到的秒数,只有Frequency 大于 0 才有值,Value 表示当前变量值。例如:50Sin(T)、(Value-100)/100、50Sin(3.1416*N/180)等。详情请参考 3.5 节表达式。
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType SampleClock 类型时依据 Frequency 属性的值自动定时计算表达式的值更新本变量值;Demand 类型时调用 Variant 的 Read 函数或者使用变量传输步骤(Transmission 步骤)更新本变量值。
Unit 变量单位
Value 变量值
ValueType 变量值的类型,软件支持的类型有 Boolean、Sbyte、Byte、Int16、Uint16、Int32、Uint32、Int64、Uint64、Float、Double、Decimal、DateTime、String、BitString。

引用变量

 

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
Category 通道类别,通道类别相同的变量在相同的线程中执行。
Description 描述
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
Reference 引用的变量全名,格式如: 变量集 1/变量 1
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType SampleClock 类型时依据 Frequency 属性的值自动定时采样引用的变量的值更新本变量值;Demand 类型时引用的变量值变化更新本变量值。
Unit 变量单位
Value 变量值
ValueType 变量值的类型,软件支持的类型有 Boolean、Sbyte、Byte、Int16、Uint16、Int32、Uint32、Int64、Uint64、Float、Double、Decimal、DateTime、String、BitString。

报警变量

报警变量可以提供报警功能,提供报警触发报警恢复事件,只能通过脚本的方式注册和响应事件;可以跟随所引用的变量的值,可以配合 Frequency 属性用作重采样等场景。

报警变量的属性如下:

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
AlarmConfiguration 报警配置 🔰限值报警:当前变量值超过定义的限制值,发生报警。 🔰偏差报警:当前变量减去目标值的差值,差值和定义的限制值比较,超过阀值则发生报警。 🔰速率报警:(当前变量值-上一时间点变量值)/(当前时间-上一时间),比率与定义的限制值比较,超过阀值则发生报警。 🔰状态报警:当前变量值等于状态设置值,则发生报警。 🔰死区:死区是为了防止变量值在报警限上下频繁波动时,产生不真实的报警,在原报警限上下增加一个报警限的阀值,使原报警界限由一条线变为一条报警界限带,当变量的值在报警界限带范围内变化时,不会发生和恢复报警,而只有超出该报警界限带范围时,才发生报警信息,对消除波动信号的无效报警有积极作用。
AlarmDelay 报警延时,单位 ms。当变量值达到报警条件时,延时一段时间再触发报警,如果在延时时间内变量值恢复到正常值,则不触发报警。通常设置一个大于 0 的值,可以消除一些瞬时剧烈波动或者传感器有时返回错误的数据,但通常很快恢复正常的设备。
AlarmRelations 报警关联表,可以是变量全名或者一个字符串。当报警发生时可以跟踪额外的变量值,或者跟踪固定的字符串,帮助诊断问题。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
Category 通道类别,通道类别相同的变量在相同的线程中执行。
Description 描述
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
Reference 引用的变量全名,格式如: 变量集 1/变量 1
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType SampleClock 类型时依据 Frequency 属性的值自动定时采样引用的变量的值更新本变量值;Demand 类型时引用的变量值变化更新本变量值。
Unit 变量单位
Value 变量值
ValueType 变量值的类型,软件支持的类型有 Boolean、Sbyte、Byte、Int16、Uint16、Int32、Uint32、Int64、Uint64、Float、Double、Decimal、DateTime、String、BitString。

使用脚本注册和响应事件,要点如下:

报警触发事件 (AlarmTriggered)

利用脚本注册事件,在事件函数中获取报警信息,涉及到的类:AlarmChannelVariantAlarmAlarmEventArgs

实现方面一般通过一个全局脚本类来承载事件函数,在画面或者步骤的脚本中注册事件。例如:

public static class Global
 ​
 {
 ​
     private static string AlarmFormat = "触发时间:{0:HH:mm:ss} 恢复时间:{1:HH:mm:ss} 消息:{2} 类型:{3} 优先级:{4} 名称:{5} 变量:{6}";
 ​
     public static void Alarm_AlarmTriggered(object sender, AlarmEventArgs e)
     {
 ​
         SystemContext.LogMessage("触发: "+string.Format(AlarmFormat, 
 ​
         e.Alarm.TriggerTime,e.Alarm.RecoverTime, e.Alarm.Text,
 ​
         e.Alarm.AlarmType.ToString(), e.Alarm.Priority, e.Alarm.Name, 
 ​
         e.Alarm.Variant));
 ​
     }
 ​
     public static void Alarm_AlarmRecovered(object sender, AlarmEventArgs e)
 ​
     {
 ​
     }
 ​
 }
 ​
 public class Schema_CE25DA4A835B4B0D9E6F50E5685F7270
 ​
 {
 ​
     public ProjectContext Context { get; set; }
 ​
 //
 ​
     public void BtnRegAlarm_Click(Object sender, System.Windows.RoutedEventArgs e)
 ​
     {   
 ​
         AlarmChannelVariant v = Context.Variants["Vars/ValueAlarm"] as AlarmChannelVariant;
 ​
         v.AlarmTriggered += Global.Alarm_AlarmTriggered;
 ​
         v.AlarmRecovered += Global.Alarm_AlarmRecovered;
 ​
     }
 ​
 }
 ​
 ​

报警恢复事件 (AlarmRecovered)

使用方式同上。

文本文件变量

文本文件变量是一个容器类变量,可以容纳任意类型子变量,可以对文本型文件进行读写。读写以行为单位,以 Delimiter 属性指定的列分隔符分隔数据。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
ChannelType 通道类型,支持 Input 和 Output 两种,分别表示输入通道和输出通道。
Delimiter 数据分隔符。
Description 描述
Directory 文件保存的目录,可以是绝对路径或者相对路径,相对路径相对于项目文件所在目录,如果为空,则默认为项目文件所在目录。
FileHeaderEnabled 文件列头使能,表示文件列头是否有效。当为 True 时,表示第一行为列表头,表头的列名称和子变量名称对应;当为 False 时,表示无列表头,第一行即为数据行,数据列按顺序和子变量对应。
FileName 文件名。
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
StorageDuration 存储时长,0 表示不分文件存储,大于 0 表示按时长分隔文件。
StorageDurationUnit 存储时长单位,支持 Second、Minute、Hour、Day,其中 Hour 和 Day 在生成文件时除第一个文件外,其他文件对齐整点单位,例如单位是 Day 则按天对齐,在 0 点整切分文件。
StorageQuantity 存储数量,0 表示无限个,大于 0 表示数量超过设定值后,循环删除最早的文件。该属性在 StorageDuration 大于 0 时有效。
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType 🛑SampleClock 类型:ChannelTypeInput 时自动定时每次读取 1 行记录,ChannelTypeOutput 时自动定时将最新的数据记录写入数据库; 🛑Demand 类型:ChannelTypeInput 时调用 Variant 的 Read 函数或者使用变量传输步骤(Transmission 步骤)读取行数据。ChannelTypeOutput时调用 Variant 的 Write 函数或者使用变量传输步骤写入文件。

数据库变量

数据库变量是一个容器类变量,可以容纳任意类型子变量,可以通过数据库变量进行数据库读写。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
ChannelType 通道类型。Input 表示从数据库读数据,Output 表示对数据库写数据。提示:如果对同一个数据库即有读操作又有写操作,可以通过分别建立ChannelType 为 Input 和 Output 的数据库变量来实现。
ConnectionString 数据库连接串。 例如: SQLite 数据库连接串(Data Source 可以是绝对路径或者相对路径,相对路径相对于项目文件所在目录):Data Source=D:\VariantsSQLite.db MySQL 数据库连接串:Data Source=localhost;port=3306;Initial Catalog=VariantsMySQL;User ID=root;Password=12345678 SqlServer 数据库连接串:Data Source=.\SQLEXPRESS;Initial Catalog=VariantsSQLServer;User ID=sa;Password=12345678;Connection Timeout=2 注意:当 ChannelType 为 Output 时,SQLite 数据库类型在运行启动时自动检查和创建数据库,但是 MySQL 和 SqlServer 数据库类型必须手工创建数据库。
DatabaseType 数据库类型,软件支持 MySQL,SqlServer 和 SQLite。
DataTable 数据表名称。ChannelType 为 Output 时,数据表按需自动生成,表字段名称采用容器中变量名;ChannelType 为 Input 时,指需要读取数据的表名,读回来的数据赋值给子变量名称和表列名一致的子变量。
DataTableIndices 数据表索引。索引由列名称组成,用分号分隔不同索引,用逗号分隔组合索引。例如:列 1;列 2,列 3。
Description 描述
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
StorageDuration 存储时长,0 表示不分数据库存储,大于 0 表示按时长分隔数据库。注:只支持 SQLite 数据库
StorageDurationUnit 存储时长单位,支持 Second、Minute、Hour、Day,其中 Hour 和 Day 在生成文件时除第一个文件外,其他文件对齐整点单位,例如单位是 Day 则按天对齐,在 0 点整切分文件。
StorageQuantity 存储数量,0 表示无限个,大于 0 表示数量超过设定值后,循环删除最早的文件。该属性在 StorageDuration 大于 0 时有效。
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType 🛑SampleClock 类型:ChannelTypeInput 时自动定时每次读取 1 行记录,ChannelTypeOutput 时自动定时将最新的数据记录写入数据库; 🛑Demand 类型:ChannelTypeInput 时调用 Variant 的 Read 函数或者使用变量传输步骤(Transmission 步骤)读取行数据。ChannelTypeOutput时调用 Variant 的 Write 函数或者使用变量传输步骤写入文件。

BIN文件变量

BIN 文件变量是一个容器类变量,可以容纳任意类型子变量,可以以二进制的方式对文件进行读写,以容器中的子变量的字节长度为单位进行读写。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
ChannelType 通道类型。Input 表示从数据库读数据,Output 表示对数据库写数据。提示:如果对同一个数据库即有读操作又有写操作,可以通过分别建立ChannelType 为 Input 和 Output 的数据库变量来实现。
Description 描述
Directory 文件保存的目录,可以是绝对路径或者相对路径,相对路径相对于项目文件所在目录,如果为空,则默认为项目文件所在目录。
Endian 文件存储的字节序,BigEndian 为大端次序,LittleEndian 为小端次序;例如,选择 BigEndian 表示文件存储一个数据是以大端方式存储的,即高字节在前,低字节在后。
FileName 文件名。
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
StorageDuration 存储时长,0 表示不分文件存储,大于 0 表示按时长分隔文件。
StorageDurationUnit 存储时长单位,支持 Second、Minute、Hour、Day,其中 Hour 和 Day 在生成文件时除第一个文件外,其他文件对齐整点单位,例如单位是 Day 则按天对齐,在 0 点整切分文件。
StorageQuantity 存储数量,0 表示无限个,大于 0 表示数量超过设定值后,循环删除最早的文件。该属性在 StorageDuration 大于 0 时有效。
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType 🛑SampleClock 类型:ChannelTypeInput 时自动定时每次读取 1 行记录,ChannelTypeOutput 时自动定时将最新的数据记录写入数据库; 🛑Demand 类型:ChannelTypeInput 时调用 Variant 的 Read 函数或者使用变量传输步骤(Transmission 步骤)读取行数据。ChannelTypeOutput时调用 Variant 的 Write 函数或者使用变量传输步骤写入文件。

TDM文件变量

TDM 文件变量是一个容器类变量,可以容纳任意类型子变量,可以对 NI 公司的 TDM/TDMS 格式文件进行读写。

属性 描述
(Name) 变量名,同一父节点下的子变量名称不能重复。
Active 是否激活,激活的变量才能执行周期更新。
Capacity 变量缓存容量,指能够缓存多少次变化值,一般用于采集转存或显示应用,采集速度越高,缓存要越大。
ChannelType 通道类型。Input 表示从数据库读数据,Output 表示对数据库写数据。提示:如果对同一个数据库即有读操作又有写操作,可以通过分别建立ChannelType 为 Input 和 Output 的数据库变量来实现。
Description 描述
Directory 文件保存的目录,可以是绝对路径或者相对路径,相对路径相对于项目文件所在目录,如果为空,则默认为项目文件所在目录。
FileName 文件名。
FileType 文件类型,支持 TDM 和 TDMS 两种格式。
Format 变量的格式,字符串格式的定义和微软.Net 系统的字符串格式定义一样,例如日期类型变量,格式可以定义为 yyyy/MM/dd HH:mm:ss。
Frequency 通道采样频率,单位 Hz。
StorageDuration 存储时长,0 表示不分文件存储,大于 0 表示按时长分隔文件。
StorageDurationUnit 存储时长单位,支持 Second、Minute、Hour、Day,其中 Hour 和 Day 在生成文件时除第一个文件外,其他文件对齐整点单位,例如单位是 Day 则按天对齐,在 0 点整切分文件。
StorageQuantity 存储数量,0 表示无限个,大于 0 表示数量超过设定值后,循环删除最早的文件。该属性在 StorageDuration 大于 0 时有效。
Timeout 数据采样失败的超时时间,单位是毫秒。
TimingType 🛑SampleClock 类型:ChannelTypeInput 时自动定时每次读取 1 行记录,ChannelTypeOutput 时自动定时将最新的数据记录写入数据库; 🛑Demand 类型:ChannelTypeInput 时调用 Variant 的 Read 函数或者使用变量传输步骤(Transmission 步骤)读取行数据。ChannelTypeOutput时调用 Variant 的 Write 函数或者使用变量传输步骤写入文件。

3.变量的模板

软件支持变量模版功能,用户可以把常用的变量保存为模版,使用的时候直接从模板库拖放到变量编辑器即可创建。

如何创建?

二、变量基础功能

1.变量数据的采集与分析

 

2.变量数据的快照和回放

1.变量的快照

 

2.变量的回放

 

 

3.自定义变量数据类型

三、变量的应用

 

posted @ 2023-02-14 22:24  夜寐天明  阅读(122)  评论(0)    收藏  举报