|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using Mesnac.Equips;
|
|
|
|
|
|
namespace Mesnac.Action.ChemicalWeighing.Entity
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// PLC数据键值类
|
|
|
/// </summary>
|
|
|
public class DataKeyValue
|
|
|
{
|
|
|
#region 字段定义
|
|
|
|
|
|
private Value setLastValue = null;
|
|
|
private Value setNowValue = null;
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 构造方法
|
|
|
|
|
|
public DataKeyValue(string name)
|
|
|
{
|
|
|
this.Name = name;
|
|
|
this.FieldKey = name;
|
|
|
this.Init();
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 属性定义
|
|
|
|
|
|
/// <summary>
|
|
|
/// 配置名称 = 配置key值
|
|
|
/// </summary>
|
|
|
public string Name { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 配置key值
|
|
|
/// </summary>
|
|
|
public string FieldKey { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备设置值
|
|
|
/// </summary>
|
|
|
public string EquipKey { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备设置值
|
|
|
/// </summary>
|
|
|
public string EquipRunName { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备设置值
|
|
|
/// </summary>
|
|
|
public Mesnac.Equips.BaseInfo.Data EquipData { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 说明
|
|
|
/// </summary>
|
|
|
public string Remark { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 上一次读取的值
|
|
|
/// </summary>
|
|
|
public Value LastValue
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
Value value = this.getLastValue();
|
|
|
if (value == null || value.ToObject() == null)
|
|
|
{
|
|
|
value = this.getNowValue();
|
|
|
}
|
|
|
if (value == null || value.ToObject() == null)
|
|
|
{
|
|
|
value = setLastValue;
|
|
|
}
|
|
|
if (value == null)
|
|
|
{
|
|
|
value = new Value(null);
|
|
|
}
|
|
|
setLastValue = value;
|
|
|
return setLastValue;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.setLastValue = value;
|
|
|
this.EquipData.Value = value.ToObject();
|
|
|
this.EquipData.Group.Equip.RefreshEventArgsValue(this.EquipData);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 读取当前值
|
|
|
/// </summary>
|
|
|
public Value NowValue
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
Value value = this.getNowValue();
|
|
|
if (value == null)
|
|
|
{
|
|
|
value = setNowValue;
|
|
|
}
|
|
|
if (value == null)
|
|
|
{
|
|
|
value = setLastValue;
|
|
|
}
|
|
|
if (value == null)
|
|
|
{
|
|
|
value = new Value(null);
|
|
|
}
|
|
|
setNowValue = value;
|
|
|
return setNowValue;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.setNowValue = value;
|
|
|
//this.EquipData.Value = value.ToObject();
|
|
|
//this.EquipData.Group.Equip.RefreshEventArgsValue(this.EquipData);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 方法定义
|
|
|
|
|
|
/// <summary>
|
|
|
/// 初始化方法
|
|
|
/// </summary>
|
|
|
private void Init()
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseEquip equip in Factory.Instance.AllEquips.Values)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Group group in equip.Group.Values)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Data data in group.Data.Values)
|
|
|
{
|
|
|
if (data.RunName.Equals(this.FieldKey, StringComparison.CurrentCultureIgnoreCase))
|
|
|
{
|
|
|
this.EquipKey = data.KeyName;
|
|
|
this.EquipRunName = data.RunName;
|
|
|
this.EquipData = data;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 遍历设备、设备块、设备变量,获取设备变量最后一次读取PLC后的值
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
private Value getLastValue()
|
|
|
{
|
|
|
Value Result = null;
|
|
|
foreach (Mesnac.Equips.BaseEquip equip in Factory.Instance.AllEquips.Values)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Group group in equip.Group.Values)
|
|
|
{
|
|
|
if (group.Access == System.IO.FileAccess.Read ||
|
|
|
group.Access == System.IO.FileAccess.ReadWrite)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Data data in group.Data.Values)
|
|
|
{
|
|
|
if (data.KeyName == this.EquipKey)
|
|
|
{
|
|
|
return new Value(data.Value);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return Result;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 遍历设备、设备块、设备变量、获取设备变量当前的值
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
private Value getNowValue()
|
|
|
{
|
|
|
Value Result = null;
|
|
|
foreach (Mesnac.Equips.BaseEquip equip in Factory.Instance.AllEquips.Values)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Group group in equip.Group.Values)
|
|
|
{
|
|
|
if (group.Access == System.IO.FileAccess.Read ||
|
|
|
group.Access == System.IO.FileAccess.ReadWrite)
|
|
|
{
|
|
|
foreach (Mesnac.Equips.BaseInfo.Data data in group.Data.Values)
|
|
|
{
|
|
|
if (data.KeyName == this.EquipKey)
|
|
|
{
|
|
|
return new Value(equip.ReadData(data));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return Result;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}
|