using System; using System.Reflection; using System.Text; using Mesnac.Action.Base; using Mesnac.Codd.Session; using Mesnac.Equips; using System.Data; namespace Mesnac.Action.Intake.Qingquan.BasicInfo { public class PlcData { #region 基本设置 /// /// PLC数据键值类 /// public class DataKeyValue { public class Value { private object value = null; public Value(object obj) { this.value = obj; } public object ToObject() { return this.value; } public int ToInt(int defaultValue) { int iResult = defaultValue; if (this.value != null && this.value != DBNull.Value && int.TryParse(this.value.ToString(), out iResult) ) { return iResult; } return defaultValue; } public int ToInt() { return ToInt(0); } public DateTime ToDateTime(DateTime defaultValue) { DateTime iResult = defaultValue; if (this.value != null && this.value != DBNull.Value && DateTime.TryParse(this.value.ToString(), out iResult) ) { return iResult; } return defaultValue; } public DateTime ToDateTime() { return ToDateTime(DateTime.Now); } public double ToDouble(double defaultValue) { double iResult = defaultValue; if (this.value != null && this.value != DBNull.Value && double.TryParse(this.value.ToString(), out iResult) ) { return iResult; } return defaultValue; } public double ToDouble() { return ToDouble(0.0); } public string ToString(string defaultValue) { string iResult = defaultValue; if (this.value != null && this.value != DBNull.Value ) { return this.value.ToString(); } return defaultValue; } public override string ToString() { return ToString(string.Empty); } } private void Ini() { 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; } } } } } 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; } 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; } public DataKeyValue(string name) { this.Name = name; this.FieldKey = name; this.Ini(); } /// /// 配置名称 = 配置key值 /// public string Name { get; private set; } /// /// 配置key值 /// public string FieldKey { get; private set; } /// /// 设备设置值 /// public string EquipKey { get; private set; } /// /// 设备设置值 /// public string EquipRunName { get; private set; } /// /// 设备设置值 /// public Mesnac.Equips.BaseInfo.Data EquipData { get; private set; } /// /// 说明 /// public string Remark { get; private set; } private Value setLastValue = null; /// /// 上一次读取的值 /// public Value LastValue { get { Value value = this.getLastValue(); if (value == null) { value = this.getNowValue(); } if (value == null) { value = setLastValue; } if (value == null) { value = new Value(null); } setLastValue = value; return setLastValue; } set { this.setLastValue = value; } } private Value setNowValue = null; /// /// 读取当前值 /// 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; } } } #endregion #region 单例模式 private static PlcData _this; public static PlcData Instance { get { if (null == _this) _this = new PlcData(); return _this; } } private PlcData() { foreach (PropertyInfo pi in this.GetType().GetProperties()) { if (pi.PropertyType == typeof(DataKeyValue)) { DataKeyValue data = new DataKeyValue(pi.Name); pi.SetValue(this, data, null); } } } #endregion #region GetDataKeyValue public DataKeyValue GetDataKeyValue(string key) { foreach (PropertyInfo pi in this.GetType().GetProperties()) { if (pi.PropertyType == typeof(DataKeyValue)) { DataKeyValue data = (DataKeyValue)pi.GetValue(this, null); if (data.FieldKey.ToLower() == key.ToLower()) { return data; } } } return null; } #endregion #region PlcWrite private bool PlcWrite(string equipKey, string runName, int shifting, object[] dataValue) { BaseAction action = new BaseAction(); StringBuilder log = new StringBuilder(); try { log.Append("equipKey=[").Append(equipKey).Append("]runName=[").Append(runName); 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.Write || group.Access == System.IO.FileAccess.ReadWrite) { foreach (Mesnac.Equips.BaseInfo.Data data in group.Data.Values) { //if (data.KeyName == equipKey || data.RunName == runName) //if (data.KeyName == equipKey) if (data.KeyName == equipKey || (!String.IsNullOrEmpty(data.RunName) && data.RunName == runName)) { int block = 0; if (int.TryParse(group.Block.ToString(), out block)) { log.Append("]shifting=[").Append((group.Start + data.Start + shifting).ToString()); log.Append("]dataLen=[").Append(dataValue.Length); log.Append("]Find Result="); foreach (object v in dataValue) { log.Append(v + ","); } if (equip.Write(block, group.Start + data.Start + shifting, dataValue)) { log.Append("[true]"); return true; } else { log.Append("[false]"); return false; } } } } } } } log.Append("]No Find"); return false; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("下传PLC失败:" + ex.Message, ex); return false; } finally { if (log.Length > "equipKey=[]runName=[]No Find".Length) { action.LogDebug(log.AppendLine("...").ToString()); } } } public bool PlcWriteByRunName(string runName, int shifting, object[] dataValue) { return PlcWrite(string.Empty, runName, shifting, dataValue); } public bool PlcWriteByRunName(string runName, object[] dataValue) { return PlcWriteByRunName(runName, 0, dataValue); } public bool PlcWriteByEquipKey(string equipKey, int shifting, object[] dataValue) { return PlcWrite(equipKey, string.Empty, shifting, dataValue); } public bool PlcWriteByEquipKey(string equipKey, object[] dataValue) { return PlcWriteByEquipKey(equipKey, 0, dataValue); } public bool PlcWriteByDataKey(DataKeyValue dataKey, int shifting, object[] dataValue) { return PlcWriteByEquipKey(dataKey.EquipKey, shifting, dataValue); } public bool PlcWriteByDataKey(DataKeyValue dataKey, object[] dataValue) { return PlcWriteByDataKey(dataKey, 0, dataValue); } #endregion #region 从PLC中读取原始数据的方法 /// /// 从PLC中读取原始数据 /// /// 要读取的设备名称 /// 从PLC读取的值 /// 成功返回true,失败返回false public bool PlcRead(string equipKey, out int[] dataValue) { dataValue = new int[0]; int onelen = 100; int shifting = 0; bool result = false; 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 == equipKey) { dataValue = new int[data.Len]; while (true) { #region 本次读取长度 readlen int readlen = 0; if (data.Len - shifting > onelen) { readlen = onelen; } else { readlen = data.Len - shifting; } if (readlen <= 0) { break; } #endregion #region 读取数据 object[] buff; if (equip.Read(group.Block, group.Start + data.Start + shifting, readlen, out buff)) { for (int i = 0; i < buff.Length; i++) { int ivalue = 0; if (buff[i] != null && buff[i] != DBNull.Value && int.TryParse(buff[i].ToString(), out ivalue)) { dataValue[shifting + i] = ivalue; } else { dataValue[shifting + i] = 0; } } shifting += readlen; result = true; } else { break; } if (buff.Length == 0) { break; } #endregion } } } } } } return result; } /// /// 从PLC中读取原始数据 /// /// /// /// public bool PlcRead(DataKeyValue dataKey, out int[] dataValue) { return PlcRead(dataKey.EquipKey, out dataValue); } public object PlcLastValueRead(string equipKey) { 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.Name == equipKey) { return data.Value; } } } } } return null; } /// /// 读取设备数据 /// /// 设备名称 /// 读取的设备值 /// 读取成功返回true,失败返回false public bool PlcLastValueRead(string equipKey, out int[] dataValue) { dataValue = new int[0]; 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.Name == equipKey) { object ovalue = data.Value; try { if (ovalue is object[]) { object[] ovalues = ovalue as object[]; dataValue = new int[ovalues.Length]; for (int i = 0; i < ovalues.Length; i++) { object obj = ovalues[i]; int ivalue = 0; if (obj != null && obj != DBNull.Value && int.TryParse(obj.ToString(), out ivalue)) { dataValue[i] = ivalue; } } return true; } else if (ovalue != null && ovalue != DBNull.Value) { dataValue = new int[1]; int ivalue = 0; if (int.TryParse(ovalue.ToString(), out ivalue)) { dataValue[0] = ivalue; } return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("获取PLC设备[" + equipKey + "]数据失败:" + ex.Message, ex); } return false; } } } } } return false; } #endregion #region DataWrite #region 基本函数 /// /// 获取本地连接 /// /// private DbHelper getLocalHelper() { return new DatabaseAction().NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); } #endregion #region 基本类型 public class DataInfo { public string PlcSchemaField { get; set; } public string EquipRunName { get; set; } public object PlcDataValue { get; set; } } #endregion #region PLCData表写入操作 public bool DataWrite(string dataKey, string equipKey, int shifting, object[] dataValue) { if (string.IsNullOrWhiteSpace(dataKey)) { dataKey = equipKey; } if (string.IsNullOrWhiteSpace(equipKey)) { equipKey = dataKey; } DbHelper dbHelper = getLocalHelper(); dbHelper.CommandType = System.Data.CommandType.Text; dbHelper.ClearParameter(); #region 基于SQL2008语法,不适合SQL2000 //StringBuilder sqlstr = new StringBuilder("INSERT INTO dbo.PlcData (PlcSchemaField ,EquipRunName ,PlcDataValue ,PlcDataIndex,PlcDownState) VALUES "); //for (int i = 0; i < dataValue.Length; i++) //{ // object obj = dataValue[i]; // if (obj == null || obj == DBNull.Value) // { // obj = string.Empty; // } // string key1 = "@PlcSchemaField" + i.ToString(); // string key2 = "@EquipRunName" + i.ToString(); // string key3 = "@PlcDataValue" + i.ToString(); // string key4 = "@PlcDataIndex" + i.ToString(); // sqlstr.Append(" (").Append(key1).Append(",").Append(key2).Append(",").Append(key3).Append(",").Append(key4).Append(",0)"); // if (i < dataValue.Length - 1) // { // sqlstr.AppendLine(","); // } // if (obj is DataInfo) // { // DataInfo data = obj as DataInfo; // dbHelper.AddParameter(key1, string.IsNullOrWhiteSpace(data.PlcSchemaField) ? dataKey : data.PlcSchemaField); // dbHelper.AddParameter(key2, string.IsNullOrWhiteSpace(data.EquipRunName) ? equipKey : data.EquipRunName); // dbHelper.AddParameter(key3, data.PlcDataValue == null ? 0 : data.PlcDataValue); // dbHelper.AddParameter(key4, (shifting + i).ToString()); // } // else // { // dbHelper.AddParameter(key1, dataKey); // dbHelper.AddParameter(key2, equipKey); // dbHelper.AddParameter(key3, obj); // dbHelper.AddParameter(key4, (shifting + i).ToString()); // } //} //插入语句 #endregion #region 支持SQL2000 StringBuilder sqlstr = new StringBuilder("INSERT INTO dbo.PlcData (PlcSchemaField ,EquipRunName ,PlcDataValue ,PlcDataIndex,PlcDownState) "); for (int i = 0; i < dataValue.Length; i++) { object obj = dataValue[i]; if (obj == null || obj == DBNull.Value) { obj = string.Empty; } string key1 = "@PlcSchemaField" + i.ToString(); string key2 = "@EquipRunName" + i.ToString(); string key3 = "@PlcDataValue" + i.ToString(); string key4 = "@PlcDataIndex" + i.ToString(); sqlstr.Append(" (select ").Append(key1).Append(" as PlcSchemaField").Append(",").Append(key2).Append(" as EquipRunName").Append(",").Append(key3).Append(" as PlcDataValue").Append(",").Append(key4).Append(" as PlcDataIndex").Append(",0 as PlcDownState)"); if (i < dataValue.Length - 1) { sqlstr.AppendLine("union all"); } if (obj is DataInfo) { DataInfo data = obj as DataInfo; dbHelper.AddParameter(key1, string.IsNullOrWhiteSpace(data.PlcSchemaField) ? dataKey : data.PlcSchemaField); dbHelper.AddParameter(key2, string.IsNullOrWhiteSpace(data.EquipRunName) ? equipKey : data.EquipRunName); dbHelper.AddParameter(key3, data.PlcDataValue == null ? 0 : data.PlcDataValue); dbHelper.AddParameter(key4, (shifting + i).ToString()); } else { dbHelper.AddParameter(key1, dataKey); dbHelper.AddParameter(key2, equipKey); dbHelper.AddParameter(key3, obj); dbHelper.AddParameter(key4, (shifting + i).ToString()); } } //插入语句 #endregion dbHelper.CommandText = sqlstr.ToString(); dbHelper.ExecuteNonQuery(); return true; } public bool DataWrite(string dataKey, string equipKey, object[] dataValue) { return DataWrite(dataKey, equipKey, 0, dataValue); } public bool DataWrite(string equipKey, object[] dataValue) { return DataWrite(equipKey, equipKey, 0, dataValue); } public bool DataWrite(DataKeyValue dataKey, int shifting, object[] dataValue) { return DataWrite(dataKey.Name, dataKey.EquipRunName, shifting, dataValue); } public bool DataWrite(DataKeyValue dataKey, object[] dataValue) { return DataWrite(dataKey, 0, dataValue); } #endregion #endregion #region 1#罐组实时属性 /// /// 自动 /// public DataKeyValue G1_Automatic { get; private set; } /// /// 手动 /// public DataKeyValue G1_Manual { get; private set; } /// /// 输送 /// public DataKeyValue G1_Conveying { get; private set; } /// /// 清扫 /// public DataKeyValue G1_Purging { get; private set; } /// /// 故障 /// public DataKeyValue G1_Fault { get; private set; } /// /// 等待确认 /// public DataKeyValue G1_Acknoledge { get; private set; } /// /// 罐开始标志 /// public DataKeyValue G1_StartFlag { get; private set; } /// /// 存盘准备好 /// public DataKeyValue G1_SaveFlag { get; private set; } /// /// 压送罐压力 /// public DataKeyValue G1_TopAir { get; private set; } /// /// 压送罐出口压力 /// public DataKeyValue G1_ConveyAir { get; private set; } /// /// 管路压力1 /// public DataKeyValue G1_Bypass1 { get; private set; } /// /// 管路压力2 /// public DataKeyValue G1_Bypass2 { get; private set; } /// /// 管路压力3 /// public DataKeyValue G1_Bypass3 { get; private set; } /// /// 管路压力4 /// public DataKeyValue G1_Bypass4 { get; private set; } /// /// 管路压力5 /// public DataKeyValue G1_Bypass5 { get; private set; } /// /// 管路压力6 /// public DataKeyValue G1_Bypass6 { get; private set; } /// /// 管路压力7 /// public DataKeyValue G1_Bypass7 { get; private set; } /// /// 管路压力8 /// public DataKeyValue G1_Bypass8 { get; private set; } /// /// 管路压力9 /// public DataKeyValue G1_Bypass9 { get; private set; } /// /// 管路压力10 /// public DataKeyValue G1_Bypass10 { get; private set; } #endregion #region 2#罐组实时属性 /// /// 自动 /// public DataKeyValue G2_Automatic { get; private set; } /// /// 手动 /// public DataKeyValue G2_Manual { get; private set; } /// /// 输送 /// public DataKeyValue G2_Conveying { get; private set; } /// /// 清扫 /// public DataKeyValue G2_Purging { get; private set; } /// /// 故障 /// public DataKeyValue G2_Fault { get; private set; } /// /// 等待确认 /// public DataKeyValue G2_Acknoledge { get; private set; } /// /// 罐开始标志 /// public DataKeyValue G2_StartFlag { get; private set; } /// /// 存盘准备好 /// public DataKeyValue G2_SaveFlag { get; private set; } /// /// 压送罐压力 /// public DataKeyValue G2_TopAir { get; private set; } /// /// 压送罐出口压力 /// public DataKeyValue G2_ConveyAir { get; private set; } /// /// 管路压力1 /// public DataKeyValue G2_Bypass1 { get; private set; } /// /// 管路压力2 /// public DataKeyValue G2_Bypass2 { get; private set; } /// /// 管路压力3 /// public DataKeyValue G2_Bypass3 { get; private set; } /// /// 管路压力4 /// public DataKeyValue G2_Bypass4 { get; private set; } /// /// 管路压力5 /// public DataKeyValue G2_Bypass5 { get; private set; } /// /// 管路压力6 /// public DataKeyValue G2_Bypass6 { get; private set; } /// /// 管路压力7 /// public DataKeyValue G2_Bypass7 { get; private set; } /// /// 管路压力8 /// public DataKeyValue G2_Bypass8 { get; private set; } /// /// 管路压力9 /// public DataKeyValue G2_Bypass9 { get; private set; } /// /// 管路压力10 /// public DataKeyValue G2_Bypass10 { get; private set; } #endregion #region 3#罐组实时属性 /// /// 自动 /// public DataKeyValue G3_Automatic { get; private set; } /// /// 手动 /// public DataKeyValue G3_Manual { get; private set; } /// /// 输送 /// public DataKeyValue G3_Conveying { get; private set; } /// /// 清扫 /// public DataKeyValue G3_Purging { get; private set; } /// /// 故障 /// public DataKeyValue G3_Fault { get; private set; } /// /// 等待确认 /// public DataKeyValue G3_Acknoledge { get; private set; } /// /// 罐开始标志 /// public DataKeyValue G3_StartFlag { get; private set; } /// /// 存盘准备好 /// public DataKeyValue G3_SaveFlag { get; private set; } /// /// 压送罐压力 /// public DataKeyValue G3_TopAir { get; private set; } /// /// 压送罐出口压力 /// public DataKeyValue G3_ConveyAir { get; private set; } /// /// 管路压力1 /// public DataKeyValue G3_Bypass1 { get; private set; } /// /// 管路压力2 /// public DataKeyValue G3_Bypass2 { get; private set; } /// /// 管路压力3 /// public DataKeyValue G3_Bypass3 { get; private set; } /// /// 管路压力4 /// public DataKeyValue G3_Bypass4 { get; private set; } /// /// 管路压力5 /// public DataKeyValue G3_Bypass5 { get; private set; } /// /// 管路压力6 /// public DataKeyValue G3_Bypass6 { get; private set; } /// /// 管路压力7 /// public DataKeyValue G3_Bypass7 { get; private set; } /// /// 管路压力8 /// public DataKeyValue G3_Bypass8 { get; private set; } /// /// 管路压力9 /// public DataKeyValue G3_Bypass9 { get; private set; } /// /// 管路压力10 /// public DataKeyValue G3_Bypass10 { get; private set; } #endregion #region 4#罐组实时属性 /// /// 自动 /// public DataKeyValue G4_Automatic { get; private set; } /// /// 手动 /// public DataKeyValue G4_Manual { get; private set; } /// /// 输送 /// public DataKeyValue G4_Conveying { get; private set; } /// /// 清扫 /// public DataKeyValue G4_Purging { get; private set; } /// /// 故障 /// public DataKeyValue G4_Fault { get; private set; } /// /// 等待确认 /// public DataKeyValue G4_Acknoledge { get; private set; } /// /// 罐开始标志 /// public DataKeyValue G4_StartFlag { get; private set; } /// /// 存盘准备好 /// public DataKeyValue G4_SaveFlag { get; private set; } /// /// 压送罐压力 /// public DataKeyValue G4_TopAir { get; private set; } /// /// 压送罐出口压力 /// public DataKeyValue G4_ConveyAir { get; private set; } /// /// 管路压力1 /// public DataKeyValue G4_Bypass1 { get; private set; } /// /// 管路压力2 /// public DataKeyValue G4_Bypass2 { get; private set; } /// /// 管路压力3 /// public DataKeyValue G4_Bypass3 { get; private set; } /// /// 管路压力4 /// public DataKeyValue G4_Bypass4 { get; private set; } /// /// 管路压力5 /// public DataKeyValue G4_Bypass5 { get; private set; } /// /// 管路压力6 /// public DataKeyValue G4_Bypass6 { get; private set; } /// /// 管路压力7 /// public DataKeyValue G4_Bypass7 { get; private set; } /// /// 管路压力8 /// public DataKeyValue G4_Bypass8 { get; private set; } /// /// 管路压力9 /// public DataKeyValue G4_Bypass9 { get; private set; } /// /// 管路压力10 /// public DataKeyValue G4_Bypass10 { get; private set; } #endregion #region 1#罐组存盘报表属性 /// /// G1_总时间 /// public DataKeyValue G1_TotalTime { get; private set; } /// /// G1_加料时间 /// public DataKeyValue G1_ChargeTime { get; private set; } /// /// G1_憋压时间 /// public DataKeyValue G1_AirationTime { get; private set; } /// /// G1_压送时间 /// public DataKeyValue G1_DischargeTime { get; private set; } /// /// G1_清扫时间 /// public DataKeyValue G1_PurgeTime { get; private set; } /// /// G1_目标罐号 /// public DataKeyValue G1_DestNo { get; private set; } /// /// G1_目标罐类型 /// public DataKeyValue G1_DestBinType { get; private set; } /// /// G1_源罐号 /// public DataKeyValue G1_SourceBinNo { get; private set; } /// /// G1_源罐类型 /// public DataKeyValue G1_SourceBinType { get; private set; } /// /// G1_目标机台 /// public DataKeyValue G1_DestMixer { get; private set; } /// /// G1_预留1 /// public DataKeyValue G1_Spare1 { get; private set; } /// /// G1_预留2 /// public DataKeyValue G1_Spare2 { get; private set; } #endregion #region 2#罐组存盘报表属性 /// /// G2_总时间 /// public DataKeyValue G2_TotalTime { get; private set; } /// /// G2_加料时间 /// public DataKeyValue G2_ChargeTime { get; private set; } /// /// G2_憋压时间 /// public DataKeyValue G2_AirationTime { get; private set; } /// /// G2_压送时间 /// public DataKeyValue G2_DischargeTime { get; private set; } /// /// G2_清扫时间 /// public DataKeyValue G2_PurgeTime { get; private set; } /// /// G2_目标罐号 /// public DataKeyValue G2_DestNo { get; private set; } /// /// G2_目标罐类型 /// public DataKeyValue G2_DestBinType { get; private set; } /// /// G2_源罐号 /// public DataKeyValue G2_SourceBinNo { get; private set; } /// /// G2_源罐类型 /// public DataKeyValue G2_SourceBinType { get; private set; } /// /// G2_目标机台 /// public DataKeyValue G2_DestMixer { get; private set; } /// /// G2_预留1 /// public DataKeyValue G2_Spare1 { get; private set; } /// /// G2_预留2 /// public DataKeyValue G2_Spare2 { get; private set; } #endregion #region 3#罐组存盘报表属性 /// /// G3_总时间 /// public DataKeyValue G3_TotalTime { get; private set; } /// /// G3_加料时间 /// public DataKeyValue G3_ChargeTime { get; private set; } /// /// G3_憋压时间 /// public DataKeyValue G3_AirationTime { get; private set; } /// /// G3_压送时间 /// public DataKeyValue G3_DischargeTime { get; private set; } /// /// G3_清扫时间 /// public DataKeyValue G3_PurgeTime { get; private set; } /// /// G3_目标罐号 /// public DataKeyValue G3_DestNo { get; private set; } /// /// G3_目标罐类型 /// public DataKeyValue G3_DestBinType { get; private set; } /// /// G3_源罐号 /// public DataKeyValue G3_SourceBinNo { get; private set; } /// /// G3_源罐类型 /// public DataKeyValue G3_SourceBinType { get; private set; } /// /// G3_目标机台 /// public DataKeyValue G3_DestMixer { get; private set; } /// /// G3_预留1 /// public DataKeyValue G3_Spare1 { get; private set; } /// /// G3_预留2 /// public DataKeyValue G3_Spare2 { get; private set; } #endregion #region 4#罐组存盘报表属性 /// /// G4_总时间 /// public DataKeyValue G4_TotalTime { get; private set; } /// /// G4_加料时间 /// public DataKeyValue G4_ChargeTime { get; private set; } /// /// G4_憋压时间 /// public DataKeyValue G4_AirationTime { get; private set; } /// /// G4_压送时间 /// public DataKeyValue G4_DischargeTime { get; private set; } /// /// G4_清扫时间 /// public DataKeyValue G4_PurgeTime { get; private set; } /// /// G4_目标罐号 /// public DataKeyValue G4_DestNo { get; private set; } /// /// G4_目标罐类型 /// public DataKeyValue G4_DestBinType { get; private set; } /// /// G4_源罐号 /// public DataKeyValue G4_SourceBinNo { get; private set; } /// /// G4_源罐类型 /// public DataKeyValue G4_SourceBinType { get; private set; } /// /// G4_目标机台 /// public DataKeyValue G4_DestMixer { get; private set; } /// /// G4_预留1 /// public DataKeyValue G4_Spare1 { get; private set; } /// /// G4_预留2 /// public DataKeyValue G4_Spare2 { get; private set; } #endregion } }