|  | @@ -16,12 +16,17 @@ using System.Windows;
 | 
	
		
			
				|  |  |  using System.Windows.Controls;
 | 
	
		
			
				|  |  |  using FurnaceUI.Models;
 | 
	
		
			
				|  |  |  using FurnaceUI.Views.Editors;
 | 
	
		
			
				|  |  | +using Aitex.Core.RT.Device;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace FurnaceUI.Views.Operations
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      public class GasDetailViewModel : FurnaceUIViewModelBase
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          private GasDetailView _view;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        #region DeviceModelPM
 | 
	
		
			
				|  |  | +        private Dictionary<string, List<string>> _ioNameKeyDict;
 | 
	
		
			
				|  |  | +        #endregion
 | 
	
		
			
				|  |  |          #region MFC
 | 
	
		
			
				|  |  |          [Subscription("PM1.MFC1.DeviceData")]
 | 
	
		
			
				|  |  |          public AITMfcData MFC1Data { get; set; }
 | 
	
	
		
			
				|  | @@ -252,76 +257,76 @@ namespace FurnaceUI.Views.Operations
 | 
	
		
			
				|  |  |          #endregion
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          #region Analog
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTCurrent1.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTCurrent1 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTCurrent2.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTCurrent2 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTCurrent3.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTCurrent3 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTCurrent4.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTCurrent4 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTCurrent5.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTCurrent5 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTVoltage1.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTVoltage1 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTVoltage2.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTVoltage2 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTVoltage3.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTVoltage3 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTVoltage4.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTVoltage4 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HTVoltage5.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HTVoltage5 { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HeaterWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HeaterWaterFlow { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.MFWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData MFWaterFlow { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.CAPWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData CAPWaterFlow { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.A_SWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData A_SWaterFlow { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.HeaterEXH.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData HeaterEXH { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.SCVEXH.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData SCVEXH { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.G_UEXH.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData G_UEXH { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT1Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT1Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT2Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT2Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT3Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT3Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT4Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT4Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT5Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT5Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.PT6Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData PT6Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.P_SW1Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData P_SW1Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.P_SW2Value.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData P_SW2Value { get; set; }
 | 
	
		
			
				|  |  | -        [Subscription("PM1.VG2Pressure.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData VG2Pressure { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.Tank1Pressure.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData Tank1Pressure { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.Tank2Pressure.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData Tank2Pressure { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.VG21.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData VG21Data { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.VG22.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData VG22Data { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.VG32Pressure.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData VG32Pressure { get; set; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        [Subscription("PM1.VG33Pressure.DeviceData")]
 | 
	
		
			
				|  |  | -        public AITWaterFlowMeterData VG33Pressure { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTCurrent1.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTCurrent1 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTCurrent2.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTCurrent2 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTCurrent3.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTCurrent3 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTCurrent4.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTCurrent4 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTCurrent5.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTCurrent5 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTVoltage1.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTVoltage1 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTVoltage2.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTVoltage2 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTVoltage3.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTVoltage3 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTVoltage4.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTVoltage4 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HTVoltage5.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HTVoltage5 { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HeaterWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HeaterWaterFlow { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.MFWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData MFWaterFlow { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.CAPWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData CAPWaterFlow { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.A_SWaterFlow.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData A_SWaterFlow { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.HeaterEXH.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData HeaterEXH { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.SCVEXH.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData SCVEXH { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.G_UEXH.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData G_UEXH { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT1Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT1Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT2Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT2Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT3Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT3Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT4Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT4Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT5Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT5Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.PT6Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData PT6Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.P_SW1Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData P_SW1Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.P_SW2Value.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData P_SW2Value { get; set; }
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.VG2Pressure.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData VG2Pressure { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.Tank1Pressure.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData Tank1Pressure { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.Tank2Pressure.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData Tank2Pressure { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.VG21.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData VG21Data { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.VG22.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData VG22Data { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.VG32Pressure.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData VG32Pressure { get; set; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //[Subscription("PM1.VG33Pressure.DeviceData")]
 | 
	
		
			
				|  |  | +        //public AITWaterFlowMeterData VG33Pressure { get; set; }
 | 
	
		
			
				|  |  |          #endregion
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          #region PM
 | 
	
	
		
			
				|  | @@ -538,7 +543,7 @@ namespace FurnaceUI.Views.Operations
 | 
	
		
			
				|  |  |              ValveIsChecked = false;
 | 
	
		
			
				|  |  |              AuxIsChecked = false;
 | 
	
		
			
				|  |  |              GASSettingSelectCmd("MFC", null);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +            _ioNameKeyDict = QueryDataClient.Instance.Service.GetData("System.NameKeyDict") as Dictionary<string,List<string>>;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -793,35 +798,7 @@ namespace FurnaceUI.Views.Operations
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      valveData.Add(item);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            List<AITWaterFlowMeterData> tempPresure = new List<AITWaterFlowMeterData>();
 | 
	
		
			
				|  |  | -            if (Tank1Pressure != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(Tank1Pressure);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (Tank2Pressure != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(Tank2Pressure);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (VG21Data != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(VG21Data);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (VG22Data != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(VG22Data);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (VG32Pressure != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(VG32Pressure);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (VG33Pressure != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                tempPresure.Add(VG33Pressure);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +            }          
 | 
	
		
			
				|  |  |              if (MFCDetailDatas.Count == 0)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  for (int i = 0; i < tempMFC.Count; i++)
 | 
	
	
		
			
				|  | @@ -925,32 +902,30 @@ namespace FurnaceUI.Views.Operations
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (AnalogDetailDatas.Count == 0)
 | 
	
		
			
				|  |  | +            var pressures = QueryDataClient.Instance.Service.PollData(_ioNameKeyDict[DeviceName.IoPressureMeterNameKey]).Values;
 | 
	
		
			
				|  |  | +            foreach (var p in pressures)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                for (int i = 0; i < tempPresure.Count; i++)
 | 
	
		
			
				|  |  | +                if (p is AITWaterFlowMeterData pressure)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    if (tempPresure[i] == null) continue;
 | 
	
		
			
				|  |  | -                    AnalogDetailDatas.Add(new AnalogDetailValue()
 | 
	
		
			
				|  |  | +                    var data = AnalogDetailDatas.FirstOrDefault(r => r.Name == pressure.DeviceName);
 | 
	
		
			
				|  |  | +                    if (data == null)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        Name = tempPresure[i].DeviceName,
 | 
	
		
			
				|  |  | -                        DisplayName = tempPresure[i].DisplayName,
 | 
	
		
			
				|  |  | -                        Unit = tempPresure[i].Unit,
 | 
	
		
			
				|  |  | -                        Feedback = tempPresure[i].FeedBack.ToString("F1")
 | 
	
		
			
				|  |  | -                    });
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            else
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                for (int i = 0; i < tempPresure.Count; i++)
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    if (tempPresure[i] == null) continue;
 | 
	
		
			
				|  |  | -                    AnalogDetailDatas[i].Name = tempPresure[i].DeviceName;
 | 
	
		
			
				|  |  | -                    AnalogDetailDatas[i].DisplayName = tempPresure[i].DeviceName;
 | 
	
		
			
				|  |  | -                    AnalogDetailDatas[i].Unit = tempPresure[i].Unit;
 | 
	
		
			
				|  |  | -                    AnalogDetailDatas[i].Feedback = tempPresure[i].FeedBack.ToString("F1");
 | 
	
		
			
				|  |  | +                        AnalogDetailDatas.Add(new AnalogDetailValue()
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            Name = pressure.DeviceName,
 | 
	
		
			
				|  |  | +                            DisplayName = pressure.DisplayName,
 | 
	
		
			
				|  |  | +                            Unit = pressure.Unit,
 | 
	
		
			
				|  |  | +                            Feedback = pressure.FeedBack.ToString("F1")
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    else
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        data.DisplayName = pressure.DeviceName;
 | 
	
		
			
				|  |  | +                        data.Unit = pressure.Unit;
 | 
	
		
			
				|  |  | +                        data.Feedback = pressure.FeedBack.ToString("F1");
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            }      
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void MFCSetCmd(object senderName, object sender, object typeName, double maxValue)
 |