<< 点击显示目录 >> 主页 PVI通信 > PVI帮助信息 > PVI Services > Communication classes > Variable class > 读取过程数据 |
基本上有两种方法可以从控制器中读取过程变量值:
1. Connect with Active = true
Variable variable = new Variable(cpu,"count");
// 激活和连接变量对象
variable.Active = true;
variable.Connect();
// 为价值变化添加事件处理程序
variable.ValueChanged += new VariableEventHandler(variable_ValueChanged);
///<summary>
/// 状态栏中的输出值变化
/// </summary>
private void variable_ValueChanged(object sender, VariableEventArgs e)
{
Variable tmpVariable = (Variable)sender;
this.lbStatus.Text = tmpVariable.Name + ": " + tmpVariable.Value.ToString();
}
如果使用 Active = true 来建立连接,则会使用预设的刷新率(RefreshTime 属性)自动从控制器读取值并存储在 Value 属性中。轮询属性可用于指定是否应持续轮询值,或是否应仅在控制器上修改了值时才刷新值。在大多数情况下,此属性的值为真。为了限制控制器和PC之间的流量,这个属性应该被设置为False。PropertyChanged事件确认了Polling属性已经被改变。
DataValid属性和DataValidated事件告诉用户Value属性中是否已经有有效数据。
注意:变量对象可以在任何时候被启用或禁用。激活和停用事件报告现有连接的活动状态已被改变。
设置刷新时间属性
RefreshTime 属性设置了更新变量对象的值的时间间隔。因此,这决定了多长时间检查一次流程变量以了解其值的任何变化。
Variable variable = new Variable(cpu,"count");
// 激活和连接变量对象
variable.Active = true;
variable.RefreshTime = 10;
variable.Connect();
连接建立后RefreshTime属性的任何变化都会通过 PropertyChanged 事件报告。
设置事件迟滞
事件滞后可用于减少 ValueChanged类型的事件的数量 。 滞后 属性使得只报告那些其值变化大于或等于指定的滞后值的过程值成为可能。变量对象的滞后值 必须 在建立连接(Connect)之前被设置。当连接建立后,系统需要知道是否应该使用事件滞后。
Variable variable = new Variable(cpu,"count");
// 激活和连接变量对象
variable.Active = true;
variable.Hysteresis = 10;
variable.Connect();
连接建立后,滞后值的任何变化都会通过 PropertyChanged 事件报告。
因此, PropertyChanged 事件报告了对 RefreshTime 和 Hysteresis 属性 所作的成功更改 。
Variable variable = new Variable(cpu,"count");
variable.PropertyChanged+=new PviEventHandler(variablePropertyChanged);
private void variablePropertyChanged(object sender, PviEventArgs e)
{
switch ( e.Action )
{
case Action.VariableSetHysteresis:
this.lbStatus.Text = "Hysteresis changed"; break;
case Action.VariableSetRefreshTime:
this.lbStatus.Text = "Refresh time changed"; break;
}
}
设置数据函数
在变量对象中定义数据函数的目的是为了使系统特定的值可以转换为一个标准化的单位。例如,变量的非线性温度传感器的温度值应被缩放为 "摄氏度",但为了在应用程序或变量对象中显示,应转换为 "华氏度"。
这个数据功能是通过变量对象的ScalingPoints属性确定的。这个属性或这个列表管理着数据函数图像的缩放点。各个缩放点由x值和y值组成。x值描述了控制器上的变量的原始值。y值定义了PviServices中变量对象的值。数据函数的定义必须在调用连接函数之前进行,即在断开连接的状态下进行。
var = new Variable(cpu,"intVar");
var.Active = true;
// 确定缩放数据点
var.ScalingPoints.Add(new ScalingPoint(40,30));
var.ScalingPoints.Add(new ScalingPoint(100,50));
var.ScalingPoints.Add(new ScalingPoint(140,80));
var.ScalingPoints.Add(new ScalingPoint(160,110));
// 或通过指定一个比例对象,等等。
ScalingPointCollection myScaling = new ScalingPointCollection();
myScaling.Add(new ScalingPoint(40,30));
myScaling.Add(new ScalingPoint(100,50));
myScaling.Add(new ScalingPoint(140,80));
myScaling.Add(new ScalingPoint(160,110));
// 指派比例对象
var1.ScalingPoints = myScaling;
var1.Connect();
调用WriteScalingPoints方法可以修改一个变量对象当前配置的缩放比例。一个成功的修改会被 PropertyChanged 事件所确认 .
ScalingPointCollection myNewScaling = new ScalingPointCollection();
myNewScaling.Add(new ScalingPoint(50,10));
myNewScaling.Add(new ScalingPoint(100,30));
// 指定 "新 "缩放对象
var1.ScalingPoints = myNewScaling;
// 设置当前配置的缩放比例
var1.WriteScalingPoints();
注意:对于 连接状态下的ConnectionType.Link类型的变量对象,不可能改变比例或滞后 。
2. Explicit reading with ReadValue
当你不希望过程变量的值的变化不断触发更新时,使用 ReadValue 来读取一个值是有利的。
ValueRead事件确认一个变量的值已经被成功读取。
Variable variable = new Variable(cpu,"count");
variable.Connect();
...
// 在接收到 "连接 "事件后读取变量的值
variable.ReadValue();
// 为成功读取数据添加事件处理程序
variable.ValueRead += new VariableEventHandler(variable_ValueRead);
/// <summary>
/// Output read value in status field
/// </summary>
private void variable_ValueRead(object sender, VariableEventArgs e)
{
Variable tmpVariable = (Variable)sender;
this.lbStatus.Text = tmpVariable.Name+": " + tmpVariable.Value.ToString();
}
访问结构或数组元素中的值在Value类中描述。