Browse Source

1.修改chamber wafer样式
2.漏气检测与MFCCalibration添加数据库插入及查询功能,相应的ui显示

lixiang 1 year ago
parent
commit
a5813eb09d
32 changed files with 1012 additions and 249 deletions
  1. 38 8
      Venus/Framework/Common/DBCore/LeakCheckDataRecorder.cs
  2. 55 0
      Venus/Framework/Common/DBCore/MFCVerificationDataRecorder.cs
  3. 10 1
      Venus/Framework/Common/DataCenter/IQueryDataService.cs
  4. 10 0
      Venus/Framework/Common/DataCenter/QueryDataService.cs
  5. 20 0
      Venus/Framework/Common/DataCenter/QueryDataServiceClient.cs
  6. 153 0
      Venus/Venus_Core/Kepler2300Device.cs
  7. 3 0
      Venus/Venus_Core/PMLeakCheckResult.cs
  8. 4 6
      Venus/Venus_Core/ValveType.cs
  9. 6 0
      Venus/Venus_Core/VenusDevice.cs
  10. 1 0
      Venus/Venus_Core/Venus_Core.csproj
  11. 51 26
      Venus/Venus_MainPages/ViewModels/GasLeakCheckViewModel.cs
  12. 34 1
      Venus/Venus_MainPages/ViewModels/MFCVerificationViewModel.cs
  13. 14 3
      Venus/Venus_MainPages/ViewModels/OverVenusViewModel.cs
  14. 97 84
      Venus/Venus_MainPages/Views/GasLeakCheckView.xaml
  15. 123 81
      Venus/Venus_MainPages/Views/MFCVerificationView.xaml
  16. 3 5
      Venus/Venus_MainPages/Views/OperationOverView.xaml
  17. 8 8
      Venus/Venus_MainPages/Views/OverKepler2300View.xaml
  18. 26 11
      Venus/Venus_MainPages/Views/OverVenusView.xaml
  19. 1 0
      Venus/Venus_RT/Config/DBModel.sql
  20. 1 1
      Venus/Venus_RT/Config/System.sccfg
  21. BIN
      Venus/Venus_RT/Config/Venus/DeviceModelVenus.xml
  22. 16 0
      Venus/Venus_RT/Devices/JetVenusPM.cs
  23. 9 4
      Venus/Venus_RT/Modules/PMs/GasBoxLeakCheckRoutine.cs
  24. 4 0
      Venus/Venus_RT/Modules/PMs/PMEntity.cs
  25. 3 2
      Venus/Venus_RT/Modules/PMs/PMLeakCheckRoutine.cs
  26. 8 2
      Venus/Venus_RT/Modules/PMs/PumpDownRoutine.cs
  27. BIN
      Venus/Venus_Themes/Resources/foup2.png
  28. 15 5
      Venus/Venus_Themes/UserControls/Chamber.xaml
  29. 260 0
      Venus/Venus_Themes/UserControls/Foup.xaml
  30. 28 0
      Venus/Venus_Themes/UserControls/Foup.xaml.cs
  31. 1 1
      Venus/Venus_Themes/UserControls/Pipe2.xaml
  32. 10 0
      Venus/Venus_Themes/Venus_Themes.csproj

+ 38 - 8
Venus/Framework/Common/DBCore/LeakCheckDataRecorder.cs

@@ -2,19 +2,16 @@
 using System.Collections.Generic;
 using System.Data;
 using Aitex.Core.RT.DBCore;
-using Aitex.Core.RT.Log;
-using Aitex.Core.UI.ControlDataContext;
-using Aitex.Sorter.Common;
-using MECF.Framework.Common.Equipment;
+using Venus_Core;
 
 namespace MECF.Framework.Common.DBCore
 {
     public class LeakCheckDataRecorder
     {
-        public static void Add(int leakCheckTime, int beginPressure, int endPressure, double leakRate, string status, string mode)
+        public static void Add(int leakCheckTime, int beginPressure, int endPressure, double leakRate, string status, string mode,string moduleName,string gaslines="")
         {
             string sql = string.Format(
-                "INSERT INTO \"leak_check_data\"(\"guid\", \"operate_time\", \"status\" , \"leak_rate\", \"start_pressure\", \"stop_pressure\", \"mode\", \"leak_check_time\" )VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}' );",
+                "INSERT INTO \"leak_check_data\"(\"guid\", \"operate_time\", \"status\" , \"leak_rate\", \"start_pressure\", \"stop_pressure\", \"mode\", \"leak_check_time\" , \"module_name\", \"gasline_selection\")VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}','{8}','{9}' );",
                 Guid.NewGuid(),
                 DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"),
                 status,
@@ -22,10 +19,43 @@ namespace MECF.Framework.Common.DBCore
                 beginPressure,
                 endPressure,
                 mode,
-                leakCheckTime);
+                leakCheckTime, 
+                moduleName,
+                gaslines);
  
             DB.Insert(sql);
         }
- 
+        public static List<PMLeakCheckResult> GetAllLeakCheckData(string moduleName)
+        {
+            List<PMLeakCheckResult> result = new List<PMLeakCheckResult>();
+
+            string sql = $"SELECT * FROM \"leak_check_data\" where \"module_name\"='{moduleName}' order by operate_time desc LIMIT 15";
+
+            DataSet ds = DB.ExecuteDataset(sql);
+            if (ds == null)
+                return result;
+            if (ds.Tables.Count==0)
+                return result;
+
+            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
+            {
+                PMLeakCheckResult checkresult = new PMLeakCheckResult();
+
+                checkresult.CheckDate= ds.Tables[0].Rows[i]["operate_time"].ToString();
+                checkresult.StartPressure =Convert.ToDouble( ds.Tables[0].Rows[i]["start_pressure"].ToString());
+                checkresult.EndPressure = Convert.ToDouble(ds.Tables[0].Rows[i]["stop_pressure"].ToString());
+                checkresult.LeakCheckTime = Convert.ToInt32(ds.Tables[0].Rows[i]["leak_check_time"].ToString());
+                checkresult.LeakRate = Convert.ToDouble(ds.Tables[0].Rows[i]["leak_rate"].ToString());
+                checkresult.CheckMode = ds.Tables[0].Rows[i]["mode"].ToString();
+                checkresult.GasLines = ds.Tables[0].Rows[i]["gasline_selection"].ToString();
+                checkresult.Result = ds.Tables[0].Rows[i]["status"].ToString();
+                result.Add(checkresult);
+            }
+
+            ds.Clear();
+
+            return result;
+        }
+
     }
 }

+ 55 - 0
Venus/Framework/Common/DBCore/MFCVerificationDataRecorder.cs

@@ -1,7 +1,9 @@
 using Aitex.Core.RT.DBCore;
 using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -48,12 +50,65 @@ namespace MECF.Framework.Common.DBCore
 
             DB.Insert(sql);
         }
+        public static List<MFCVerificationData> GetMFCVerificationData(DateTime begin, DateTime end)
+        {
+            List<MFCVerificationData> result = new List<MFCVerificationData>();
+
+            string sql = string.Format("SELECT * FROM \"mfc_verification_data\" where \"operate_time\" >= '{0}' and \"operate_time\" <= '{1}' order by \"operate_time\" DESC;",
+                begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
+
+            DataSet ds = DB.ExecuteDataset(sql);
+            if (ds == null)
+                return result;
+            if (ds.Tables.Count == 0)
+                return result;
+
+            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
+            {
+                result.Add(new MFCVerificationData()
+                {
+                    
+                    Module=ds.Tables[0].Rows[i]["module"].ToString(),
+                    Name = ds.Tables[0].Rows[i]["name"].ToString(),
+                    OperateTime=  ds.Tables[0].Rows[i]["operate_time"].ToString(),
+
+                    Percent10Setpoint = (float)ds.Tables[0].Rows[i]["percent10_setpoint"],
+                    Percent10Calculate = (float)ds.Tables[0].Rows[i]["percent10_calculate"],
+                    Percent20Setpoint = (float)ds.Tables[0].Rows[i]["percent20_setpoint"],
+                    Percent20Calculate = (float)ds.Tables[0].Rows[i]["percent20_calculate"],
+                    Percent30Setpoint = (float)ds.Tables[0].Rows[i]["percent30_setpoint"],
+                    Percent30Calculate = (float)ds.Tables[0].Rows[i]["percent30_calculate"],
+                    Percent40Setpoint = (float)ds.Tables[0].Rows[i]["percent40_setpoint"],
+                    Percent40Calculate = (float)ds.Tables[0].Rows[i]["percent40_calculate"],
+                    Percent50Setpoint = (float)ds.Tables[0].Rows[i]["percent50_setpoint"],
+                    Percent50Calculate = (float)ds.Tables[0].Rows[i]["percent50_calculate"],
+                    Percent60Setpoint = (float)ds.Tables[0].Rows[i]["percent60_setpoint"],
+                    Percent60Calculate = (float)ds.Tables[0].Rows[i]["percent60_calculate"],
+                    Percent70Setpoint = (float)ds.Tables[0].Rows[i]["percent70_setpoint"],
+                    Percent70Calculate = (float)ds.Tables[0].Rows[i]["percent70_calculate"],
+                    Percent80Setpoint = (float)ds.Tables[0].Rows[i]["percent80_setpoint"],
+                    Percent80Calculate = (float)ds.Tables[0].Rows[i]["percent80_calculate"],
+                    Percent90Setpoint = (float)ds.Tables[0].Rows[i]["percent90_setpoint"],
+                    Percent90Calculate = (float)ds.Tables[0].Rows[i]["percent90_calculate"],
+                    Percent100Setpoint = (float)ds.Tables[0].Rows[i]["percent100_setpoint"],
+                    Percent100Calculate = (float)ds.Tables[0].Rows[i]["percent100_calculate"],
+
+
+                });
+            }
+
+            ds.Clear();
+
+            return result;
+        }
     }
 
     public class MFCVerificationData
     {
         public string Module { get; set; }
         public string Name { get; set; }
+        public string OperateTime { get; set; }
+
         public float Percent10Setpoint { get; set; }
         public float Percent10Calculate { get; set; }
         public float Percent20Setpoint { get; set; }

+ 10 - 1
Venus/Framework/Common/DataCenter/IQueryDataService.cs

@@ -12,6 +12,7 @@ using Aitex.Core.Util;
 using Aitex.Sorter.Common;
 using MECF.Framework.Common.CommonData;
 using MECF.Framework.Common.CommonData.DeviceData;
+using MECF.Framework.Common.DBCore;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.IOCore;
 using MECF.Framework.Common.Schedulers;
@@ -108,8 +109,9 @@ namespace MECF.Framework.Common.DataCenter
     [ServiceKnownType(typeof(AITPendulumValveData))]
     [ServiceKnownType(typeof(PMState))]
     [ServiceKnownType(typeof(ObservableCollection<MFCCalibrationData>))]
+    [ServiceKnownType(typeof(List<PMLeakCheckResult>))]
+
 
-    
 
     public interface IQueryDataService
 	{
@@ -172,5 +174,12 @@ namespace MECF.Framework.Common.DataCenter
 
         [OperationContract]
         List<LeakCheckResultItem> GetHistoryLeakCheck(string Module);
+		[OperationContract]
+
+		List<PMLeakCheckResult> GetPMLeakCheckResult(string moduleName);
+
+        [OperationContract]
+
+        List<MFCVerificationData> GetMFCVerificationData(DateTime begin, DateTime end);
     }
 }

+ 10 - 0
Venus/Framework/Common/DataCenter/QueryDataService.cs

@@ -13,6 +13,7 @@ using Aitex.Sorter.RT.Module.DBRecorder;
 using MECF.Framework.Common.CommonData;
 using MECF.Framework.Common.DBCore;
 using MECF.Framework.Common.IOCore;
+using Venus_Core;
 using VenusCommon;
 
 namespace MECF.Framework.Common.DataCenter
@@ -181,5 +182,14 @@ namespace MECF.Framework.Common.DataCenter
         {
             return LeakCheckResultManager.Instance.GetHistoryLeakCheck(Module);
         }
+
+        public List<PMLeakCheckResult> GetPMLeakCheckResult(string moduleName)
+        {
+            return LeakCheckDataRecorder.GetAllLeakCheckData(moduleName);
+        }
+        public List<MFCVerificationData> GetMFCVerificationData(DateTime begin, DateTime end)
+        {
+            return MFCVerificationDataRecorder.GetMFCVerificationData(begin, end);
+        }
     }
 }

+ 20 - 0
Venus/Framework/Common/DataCenter/QueryDataServiceClient.cs

@@ -8,7 +8,9 @@ using Aitex.Core.Util;
 using Aitex.Core.WCF;
 using Aitex.Sorter.Common;
 using MECF.Framework.Common.CommonData;
+using MECF.Framework.Common.DBCore;
 using MECF.Framework.Common.IOCore;
+using Venus_Core;
 using VenusCommon;
 
 namespace MECF.Framework.Common.DataCenter
@@ -190,5 +192,23 @@ namespace MECF.Framework.Common.DataCenter
             });
             return result;
         }
+        public List<PMLeakCheckResult> GetPMLeakCheckResult(string Module)
+        {
+            List<PMLeakCheckResult> result = null;
+            Invoke(svc =>
+            {
+                result = svc.GetPMLeakCheckResult(Module);
+            });
+            return result;
+        }
+        public List<MFCVerificationData> GetMFCVerificationData(DateTime begin, DateTime end)
+        {
+            List<MFCVerificationData> result = null;
+            Invoke(svc =>
+            {
+                result = svc.GetMFCVerificationData(begin,end);
+            });
+            return result;
+        }
     }
 }

+ 153 - 0
Venus/Venus_Core/Kepler2300Device.cs

@@ -0,0 +1,153 @@
+namespace Venus_Core
+{
+    public enum Kepler2300Device
+    {
+        ValveMfc1,
+        ValveMfc2,
+        ValveMfc3,
+        ValveMfc4,
+        ValveMfc5,
+        ValveMfc6,
+        ValveMfc7,
+        ValveMfc8,
+
+        ValvePVN21,
+        ValvePVN22,
+        ValvePV11,
+        ValvePV12,
+        ValvePV21,
+        ValvePV22,
+        ValvePV31,
+        ValvePV32,
+        ValvePV41,
+        ValvePV42,
+
+        ValveN2,
+        ValvePVHe1,
+        ValvePVHe2,
+
+        ValveGasFinal,
+        ValveSoftPump,
+        ValveFastPump,
+        ValveCHBPurge,
+        ValveTurboPumpPumping,
+        ValveTurboPumpPurge,
+        ValveGuage,
+        ValveLoadlockVent,
+        ValveLoadlockPumping,
+
+        MfcGas1,
+        MfcGas2,
+        MfcGas3,
+        MfcGas4,
+        MfcGas5,
+
+        GasStick1,
+        GasStick2,
+        GasStick3,
+
+        TemperatureControl,
+        ChamberLid,
+        ATM_SW,
+        VAC_SW,
+        WaterFlow_SW,
+        N2_Pressure,
+
+        ProcessGauge,
+        PressureGauge,
+        ForelineGauge,
+
+        MainPump,
+        Chiller,
+
+        Rf,
+        BiasRf,
+        Match,
+        BiasMatch,
+
+        PressureControl,
+        ThrottleValve,
+        HeaterChamber,
+        ForelineHeater,
+
+        Heartbeat,
+        ResetPlcSignal,
+
+        LiftPin,
+        SlitDoor,
+        SmallPin,
+        MediumPin,
+
+        LoadLockArm,
+
+        StatisticsRfOnTime,
+        StatisticsPumpOnTime,
+
+        PlcDateTime,
+        Lid,
+        LidLoadlock,
+        LidLocker,
+        ESCHV,
+        PendulumValve,
+        TurboPump,
+        EndPoint,
+
+        TMLid,
+        LLALid,
+        LLBLid,
+        LLATSlitDoor,
+        LLBTSlitDoor,
+        LLAESlitDoor,
+        LLBESlitDoor,
+        TMValveN2,
+        TMSoftPumpValve,
+        TMFastPumpValve,
+        TMPurgeValve,
+        //TMVentValve,
+        TMSoftVentValve,
+        TMFastVentValve,
+        LLASoftPumpValve,
+        LLAFastPumpValve,
+        LLAPurgeValve,
+        LLAVentValve,
+        LLBSoftPumpValve,
+        LLBFastPumpValve,
+        LLBPurgeValve,
+        LLBVentValve,
+        ValveWaterRelay,
+        TMPowerOn,
+        TMInSafty,
+        WaferLeakSensor,
+        EFEMSideDoorClosed,
+        TMPCWFlowSwitch,
+        LLAPCWFlowSwitch,
+        LLBPCWFlowSwitch,
+        TMLidClosed,
+        CDAPressureSwitch,
+        VaccumPressureSwitch,
+        N2PressureSwitch,
+        TMPressureCtrl,
+        TMRobotNotExtendPMA,
+        TMRobotNotExtendPMB,
+        TMRobotNotExtendPMC,
+        TMRobotNotExtendPMD,
+        TMRobotNotExtendLLA,
+        TMRobotNotExtendLLB,
+        EfemRobotNotExtendLLA,
+        EfemRobotNotExtendLLB,
+        TMVacSwitch,
+        LLAVacSwitch,
+        LLBVacSwitch,
+        TMATMSwitch,
+        LLAATMSwitch,
+        LLBATMSwitch,
+
+        LLAWaferSizeCheckSwitch,
+        LLBWaferSizeCheckSwitch,
+        PMAWaferSizeCheckSwitch,
+        PMBWaferSizeCheckSwitch,
+        PMCWaferSizeCheckSwitch,
+        PMDWaferSizeCheckSwitch,
+
+    }
+}

+ 3 - 0
Venus/Venus_Core/PMLeakCheckResult.cs

@@ -29,6 +29,9 @@ namespace Venus_Core
         public string CheckMode { get; set; }
 
         [DataMember]
+        public string GasLines { get; set; }
+
+        [DataMember]
         public string Result { get; set; }
     }
 }

+ 4 - 6
Venus/Venus_Core/ValveType.cs

@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+
 
 namespace Venus_Core
 {
@@ -37,6 +33,8 @@ namespace Venus_Core
         TurboPumpPurge,
         Guage,
         LoadlockVent,
-        LoadlockPumping
+        LoadlockPumping,
+        PVHe3,
+        HeISO
     }
 }

+ 6 - 0
Venus/Venus_Core/VenusDevice.cs

@@ -25,6 +25,12 @@
         ValveN2,
         ValvePVHe1,
         ValvePVHe2,
+        ValvePVHe3,
+        ValveHeISO,
+
+
+
+
         ValveGasFinal,
         ValveSoftPump,
         ValveFastPump,

+ 1 - 0
Venus/Venus_Core/Venus_Core.csproj

@@ -73,6 +73,7 @@
     <Compile Include="SerializeHelper.cs" />
     <Compile Include="ValveType.cs" />
     <Compile Include="VATPerformanceResult.cs" />
+    <Compile Include="Kepler2300Device.cs" />
     <Compile Include="VenusDevice.cs" />
     <Compile Include="VenusMenu.cs" />
   </ItemGroup>

+ 51 - 26
Venus/Venus_MainPages/ViewModels/GasLeakCheckViewModel.cs

@@ -1,5 +1,6 @@
 using Aitex.Core.Common.DeviceData;
 using MECF.Framework.Common.DataCenter;
+using MECF.Framework.Common.DBCore;
 using MECF.Framework.Common.OperationCenter;
 using Microsoft.Win32;
 using Prism.Commands;
@@ -41,6 +42,7 @@ namespace Venus_MainPages.ViewModels
         private AITMfcData m_MFC7Data;
         private AITMfcData m_MFC8Data;
         private AITMfcData m_MFCN2Data;
+        private PMState m_PMCurrentState;
 
         private ObservableCollection<PMLeakCheckResult> m_LeakCheckResultList=new ObservableCollection<PMLeakCheckResult>();    
 
@@ -218,6 +220,23 @@ namespace Venus_MainPages.ViewModels
             get { return m_MFC8SetPoint; }
             set { SetProperty(ref m_MFC8SetPoint, value); }
         }
+        public PMState PMCurrentState
+        {
+            get { return m_PMCurrentState; }
+            set 
+            {
+                if ((m_PMCurrentState == PMState.GasBoxLeakCheck || m_PMCurrentState==PMState.LeakCheck) && value == PMState.Idle)
+                {
+                    var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult(ModuleName);
+                    if (AllLeakCheckDa != null)
+                    {
+                        LeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
+
+                    }
+                }
+                SetProperty(ref m_PMCurrentState, value);
+            }
+        }
         #region
         public bool GasFinalValveIsOpen
         {
@@ -377,10 +396,12 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand AbortCommand =>
             _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort));
 
-        private DelegateCommand _ExportCommand;
-        public DelegateCommand ExportCommand =>
-            _ExportCommand ?? (_ExportCommand = new DelegateCommand(OnExport));
-
+        //private DelegateCommand _ExportCommand;
+        //public DelegateCommand ExportCommand =>
+        //    _ExportCommand ?? (_ExportCommand = new DelegateCommand(OnExport));
+        private DelegateCommand _LoadedCommand;
+        public DelegateCommand LoadedCommand =>
+            _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(OnLoaded));
 
         private DelegateCommand<object> _ControlValveCommand;
         public DelegateCommand<object> ControlValveCommand =>
@@ -406,7 +427,7 @@ namespace Venus_MainPages.ViewModels
             BasePressure = 100;
 
             addDataKeys();
-
+         
             DispatcherTimer timer = new DispatcherTimer();
             timer.Interval = TimeSpan.FromSeconds(1);
             timer.Tick += timer_Tick;
@@ -416,11 +437,10 @@ namespace Venus_MainPages.ViewModels
 
         #region 命令方法
         private void OnCheck()
-        {
+        {          
             if (LeakCheckModeSelectedIndex == 0)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.LeakCheck", VentTime, CheckTime, LeakRateUpperLimit);
-
             }
             else if (LeakCheckModeSelectedIndex == 1 || LeakCheckModeSelectedIndex == 2)
             {
@@ -445,17 +465,17 @@ namespace Venus_MainPages.ViewModels
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
         }
-        private void OnExport()
-        {
-            OpenFileDialog dialog = new OpenFileDialog();
-            dialog.Filter = ".json|*.json";
-            dialog.InitialDirectory = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "LeakCheck");
-            if (dialog.ShowDialog() == true)
-            {
-                string SelectedPath = dialog.FileName;
-                LeakCheckResultList.Add (SerializeHelper.Instance.ReadFromJsonFile<PMLeakCheckResult>(SelectedPath));
-            }
-        }
+        //private void OnExport()
+        //{
+        //    OpenFileDialog dialog = new OpenFileDialog();
+        //    dialog.Filter = ".json|*.json";
+        //    dialog.InitialDirectory = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "LeakCheck");
+        //    if (dialog.ShowDialog() == true)
+        //    {
+        //        string SelectedPath = dialog.FileName;
+        //        LeakCheckResultList.Add (SerializeHelper.Instance.ReadFromJsonFile<PMLeakCheckResult>(SelectedPath));
+        //    }
+        //}
         
         private void OnControlValve(object obj)
         {
@@ -471,9 +491,7 @@ namespace Venus_MainPages.ViewModels
         }
 
         private async void OnGas()
-        {
-           
-         
+        {                  
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas1.SetPoint", MFC1SetPoint);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas2.SetPoint", MFC2SetPoint);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas3.SetPoint", MFC3SetPoint);
@@ -483,9 +501,9 @@ namespace Venus_MainPages.ViewModels
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas7.SetPoint", MFC7SetPoint);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas8.SetPoint", MFC8SetPoint);
 
-                await Task.Delay(1000);
-                object[] mfc = new object[8];
+                await Task.Delay(500);
 
+                object[] mfc = new object[8];
                 mfc[0] = MFC1Data.SetPoint;
                 mfc[1] = MFC2Data.SetPoint;
                 mfc[2] = MFC3Data.SetPoint;
@@ -496,15 +514,21 @@ namespace Venus_MainPages.ViewModels
                 mfc[7] = MFC8Data.SetPoint;
 
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
+        }
+        private void OnLoaded()
+        {
+            var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult(ModuleName);
+            if (AllLeakCheckDa != null)
+            {
+                LeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
 
-
+            }
         }
         #endregion
 
         #region 私有方法
         void timer_Tick(object sender, EventArgs e)
-        {
-            
+        {          
             RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
             N2ValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveN2.IsOpen"];
             GasFinalValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveGasFinal.IsOpen"];
@@ -535,6 +559,7 @@ namespace Venus_MainPages.ViewModels
             MFC7Data = (AITMfcData)RtDataValues[$"{ModuleName}.MfcGas7"];
             MFC8Data = (AITMfcData)RtDataValues[$"{ModuleName}.MfcGas8"];
             MFCN2Data = (AITMfcData)RtDataValues[$"{ModuleName}.MfcN2"];
+            PMCurrentState = (PMState)Enum.Parse(typeof(PMState), RtDataValues[$"{ModuleName}.FsmState"].ToString());
 
             GasIsFlowing = (PMState)RtDataValues[$"{ModuleName}.FsmState"] == PMState.GasFlowing;
         }

+ 34 - 1
Venus/Venus_MainPages/ViewModels/MFCVerificationViewModel.cs

@@ -7,10 +7,12 @@ using System.Threading.Tasks;
 using System.Windows.Threading;
 using Aitex.Core.Common.DeviceData;
 using MECF.Framework.Common.DataCenter;
+using MECF.Framework.Common.DBCore;
 using MECF.Framework.Common.OperationCenter;
 using Prism.Commands;
 using Prism.Mvvm;
 using Venus_Core;
+using Venus_MainPages.Views;
 
 namespace Venus_MainPages.ViewModels
 {
@@ -46,6 +48,8 @@ namespace Venus_MainPages.ViewModels
         private int m_PointsSelectedIndex;
         DispatcherTimer timer = new DispatcherTimer();
         private ObservableCollection<MFCCalibrationData> m_MFCVerificationData=new ObservableCollection<MFCCalibrationData>();
+        private ObservableCollection<MFCVerificationData> m_VerificationDataRecords = new ObservableCollection<MFCVerificationData>();
+        private MFCVerificationView view;
         #endregion
 
 
@@ -200,6 +204,12 @@ namespace Venus_MainPages.ViewModels
             get { return m_MFCVerificationData; }
             set { SetProperty(ref m_MFCVerificationData, value); }
         }
+        public ObservableCollection<MFCVerificationData> VerificationDataRecords
+        {
+            get { return m_VerificationDataRecords; }
+            set { SetProperty(ref m_VerificationDataRecords, value); }
+        }
+        
         #endregion
 
         #region 命令
@@ -220,6 +230,13 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand SelectGasCommand =>
             _SelectGasCommand ?? (_SelectGasCommand = new DelegateCommand(OnSelectGas));
 
+        private DelegateCommand _QueryCommand;
+        public DelegateCommand QueryCommand =>
+            _QueryCommand ?? (_QueryCommand = new DelegateCommand(OnQuery));
+        private DelegateCommand<object> _LoadCommand;
+        public DelegateCommand<object> LoadCommand =>
+            _LoadCommand ?? (_LoadCommand = new DelegateCommand<object>(OnLoad));
+
 
         #endregion
         public MFCVerificationViewModel()
@@ -228,7 +245,7 @@ namespace Venus_MainPages.ViewModels
             timer.Tick += Timer_Tick;
             timer.Start();
         }
-      
+
         #region 命令方法
         private void OnStartOnePointVerification(object obj)
         {
@@ -264,6 +281,22 @@ namespace Venus_MainPages.ViewModels
                 PointsSelectedIndex = 0;
             }         
         }
+        private void OnQuery()
+        {
+            var AllLeakCheckDa = QueryDataClient.Instance.Service.GetMFCVerificationData(this.view.wfTimeFrom.Value, this.view.wfTimeTo.Value);
+            if (AllLeakCheckDa != null)
+            {
+                VerificationDataRecords = new ObservableCollection<MFCVerificationData>(AllLeakCheckDa);
+            }
+        }
+        private void OnLoad(Object mFfcVerificationView)
+        {
+            this.view = (MFCVerificationView)mFfcVerificationView;
+            var now = DateTime.Today;
+            this.view.wfTimeFrom.Value = now;
+            this.view.wfTimeTo.Value = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59, 999);
+
+        }
         #endregion
 
         #region 私有方法

+ 14 - 3
Venus/Venus_MainPages/ViewModels/OverVenusViewModel.cs

@@ -1069,23 +1069,30 @@ namespace Venus_MainPages.ViewModels
            
            
         }
-        private void OnHe()
+        private  void OnHe()
         {
             if (PVHe1ValveIsOpen == true)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", 0.0d);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", 0);
+                
+                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ControlValve", (int)ValveType.PVHe3, false);
+                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ControlValve", (int)ValveType.HeISO, false);
             }
             else
             {
+
+
                 if (HeIsPressureMode)
                 {
-                    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", HeGasSetpoint);
+                    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", HeGasSetpoint);             
                 }
                 else
                 { 
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", HeGasSetpoint);
                 }
+                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ControlValve", (int)ValveType.PVHe3, true);
+                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ControlValve", (int)ValveType.HeISO, true);
             }
         }
         private void OnRf()
@@ -1454,8 +1461,10 @@ namespace Venus_MainPages.ViewModels
             PVN22ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVN22.IsOpen");        
             TurboPumpPumpingValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPumping.IsOpen");
             TurboPumpPurgeValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPurge.IsOpen");
+            PVHe3ValveIsOpen= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVHe3.IsOpen");
+            HeISOValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveHeISO.IsOpen");
+
 
-            
 
             PumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.PumpIsRunning");
             TurboIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.TurboPumpIsRunning");
@@ -1613,6 +1622,8 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"{ModuleName}.ValvePVN21.IsOpen");
             m_RtDataKeys.Add($"{ModuleName}.ValvePVN22.IsOpen");
             m_RtDataKeys.Add($"{ModuleName}.ValveGuage.IsOpen");
+            m_RtDataKeys.Add($"{ModuleName}.ValvePVHe3.IsOpen");
+            m_RtDataKeys.Add($"{ModuleName}.ValveHeISO.IsOpen");
 
 
             m_RtDataKeys.Add($"{ModuleName}.TurboPumpIsRunning");

+ 97 - 84
Venus/Venus_MainPages/Views/GasLeakCheckView.xaml

@@ -12,7 +12,14 @@
              xmlns:converters="clr-namespace:Venus_Themes.Converters;assembly=Venus_Themes"
              xmlns:converters2="clr-namespace:Venus_MainPages.Converters"
              xmlns:customControls="clr-namespace:Venus_Themes.CustomControls;assembly=Venus_Themes"
+             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
              d:DesignHeight="450" d:DesignWidth="2000">
+    <i:Interaction.Triggers>
+        <i:EventTrigger EventName="Loaded">
+            <i:InvokeCommandAction Command="{Binding LoadedCommand}"/>
+        </i:EventTrigger>
+    </i:Interaction.Triggers>
+
     <UserControl.Resources>
         <LinearGradientBrush x:Key="buttonBrush" StartPoint="0.5,0" EndPoint="0.5,1">
             <GradientStop Color="White" Offset="0.0" />
@@ -34,15 +41,12 @@
         <converters:IntToBoolConverter2 x:Key="converters:IntToBoolConverter2"/>
         <converters2:AllNoneCheckboxConverter x:Key="AllNoneCheckboxConverter"/>
     </UserControl.Resources>
-    <Grid>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="2*"/>
-            <ColumnDefinition Width="4*"/>
-        </Grid.ColumnDefinitions>
+    <Canvas>
+
 
 
 
-        <Canvas Margin="20,0,0,0">
+        <Canvas Canvas.Top="-80">
             <Image  Canvas.Top="111" Canvas.Left="610"  Width="40" Height="25"  Source="Pack://application:,,,/Venus_Themes;Component/Resources/Arrow.png" Stretch="Uniform" />
             <ctrls:Pipe2    Canvas.Left="490"  Canvas.Top="615" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="90" />
             <!--N2-->
@@ -225,10 +229,10 @@
                 </ctrls:FlowPipe.IsFlowing>
             </ctrls:FlowPipe>
 
-            <TextBlock Text="Gas Final" Canvas.Left="900" Canvas.Top="90" FontSize="15"/>
+            <!--<TextBlock Text="Gas Final" Canvas.Left="900" Canvas.Top="90" FontSize="15"/>
             <customControls:CommonValveControl Status="{Binding GasFinalValveIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20" Canvas.Left="922" Canvas.Top="114" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="21" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
 
-            <ctrls:Pipe2    Canvas.Left="1000" Canvas.Top="120" HorizontalAlignment="Left" VerticalAlignment="Top"  />
+            <ctrls:Pipe2    Canvas.Left="1000" Canvas.Top="120" HorizontalAlignment="Left" VerticalAlignment="Top"  />-->
 
 
             <ctrls:FlowPipe Name="l8" Height="8"  Width="56" Canvas.Left="490" Canvas.Top="126"  RotateTransformValue="90" IsReverse="True">
@@ -329,7 +333,7 @@
                     </MultiBinding>
                 </ctrls:FlowPipe.IsFlowing>
             </ctrls:FlowPipe>
-            <ctrls:FlowPipe  Height="8"  Width="120" Canvas.Left="1013" Canvas.Top="129" RotateTransformValue="90">
+            <!--<ctrls:FlowPipe  Height="8"  Width="120" Canvas.Left="1013" Canvas.Top="129" RotateTransformValue="90">
                 <ctrls:FlowPipe.IsFlowing>
                     <MultiBinding Converter="{StaticResource toBoolMultiValueConverter4}">
                         <Binding Path="GasFinalValveIsOpen"/>
@@ -344,7 +348,7 @@
                         <Binding Path="MFC8ValveIsOpen"/>
                     </MultiBinding>
                 </ctrls:FlowPipe.IsFlowing>
-            </ctrls:FlowPipe>
+            </ctrls:FlowPipe>-->
 
 
 
@@ -411,8 +415,8 @@
 
 
 
-            <Ellipse Width="20" Height="20" Fill="{Binding GasIsFlowing,Converter={StaticResource boolToColor}}"  Canvas.Left="360" Canvas.Top="650" Stroke="Silver" StrokeThickness="2"/>
-            <Button Width="100" Content="Gas ON/OFF" Canvas.Left="390" Canvas.Top="650" Style="{StaticResource SysBtnStyle}"  Command="{Binding GasCommand}" IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>
+            <Ellipse Width="20" Height="20" Fill="{Binding GasIsFlowing,Converter={StaticResource boolToColor}}"  Canvas.Left="510" Canvas.Top="150" Stroke="Silver" StrokeThickness="2"/>
+            <Button Width="100" Content="Gas ON/OFF" Canvas.Left="540" Canvas.Top="150" Style="{StaticResource SysBtnStyle}"  Command="{Binding GasCommand}" IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>
             <TextBlock FontSize="13" Text="Vent N2" Canvas.Left="10" Canvas.Top="117" Foreground="Black"  Block.TextAlignment="Right" Width="50"/>
             <TextBlock FontSize="13" Canvas.Left="-5" Canvas.Top="227" Block.TextAlignment="Right" MaxWidth="65">
                 <TextBlock.Text>
@@ -482,8 +486,8 @@
 
         </Canvas >
 
-        <Canvas Grid.Column="1">
-            <Grid Width="350" Height="440" Canvas.Left="80" Canvas.Top="20" Background="White"  unity:GridOptions.ShowBorder="True"  unity:GridOptions.LineBrush="#afb4db">
+        <Canvas Canvas.Left="700" Canvas.Top="80">
+            <Grid Width="380" Height="440" Background="White"  unity:GridOptions.ShowBorder="True"  unity:GridOptions.LineBrush="#afb4db">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="40"/>
                     <RowDefinition/>
@@ -505,15 +509,15 @@
                     <RowDefinition/>
                 </Grid.RowDefinitions>
                 <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="2*"/>
                     <ColumnDefinition Width="3*"/>
+                    <ColumnDefinition Width="2*"/>
                 </Grid.ColumnDefinitions>
-                <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="检漏设置" FontSize="22"   VerticalAlignment="Center" HorizontalAlignment="Center" />
-                <TextBlock Grid.Row="1"  Text="抽气时间(s)" FontSize="15"   VerticalAlignment="Center" Padding="10" />
-                <TextBlock Grid.Row="2"  Text="检漏时间(s)" FontSize="15"   VerticalAlignment="Center" Padding="10" />
+                <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="Leak Check Setting" FontSize="22"   VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                <TextBlock Grid.Row="1"  Text="Pumping Time(s)" FontSize="15"   VerticalAlignment="Center" Padding="10" />
+                <TextBlock Grid.Row="2"  Text="Leak Check Time(s)" FontSize="15"   VerticalAlignment="Center" Padding="10" />
                 <TextBlock Grid.Row="3"  Text="漏率上限(mt/min)" FontSize="15"   VerticalAlignment="Center" Padding="10" />
-                <TextBlock Grid.Row="4"  Text="检漏模式" FontSize="15"   VerticalAlignment="Center" Padding="10" />
-                <TextBlock Grid.Row="5"  Text="全选" FontSize="15"   VerticalAlignment="Center" Padding="10" />
+                <TextBlock Grid.Row="4"  Text="Leak Check Mode" FontSize="15"   VerticalAlignment="Center" Padding="10" />
+                <TextBlock Grid.Row="5"  Text="Select  All" FontSize="15"   VerticalAlignment="Center" Padding="10" />
                 <TextBlock Grid.Row="6"  Text="Vent N2" FontSize="15"   VerticalAlignment="Center" Padding="10" />
                 <TextBlock Grid.Row="7"  Text="MfcGas1" FontSize="15"   VerticalAlignment="Center" Padding="10" />
                 <TextBlock Grid.Row="8"  Text="MfcGas2" FontSize="15"   VerticalAlignment="Center" Padding="10" />
@@ -563,74 +567,83 @@
                 <TextBlock Grid.Row="17" Grid.Column="1"/>
                 
             </Grid>
-            <Button    Foreground="White"  FontWeight="Bold"   Content="Leak Check"       Width="120" Height="25" Canvas.Left="480" Canvas.Top="40"   Command="{Binding CheckCommand}"/>
-            <Button    Foreground="White"  FontWeight="Bold"   Content="Gas Pump Purge"   Width="120" Height="25" Canvas.Left="480" Canvas.Top="90"   Command="{Binding GasPurgeCommand}"/>
-            <Button    Foreground="White"  FontWeight="Bold"    Content="Abort"            Width="120" Height="25" Canvas.Left="480" Canvas.Top="140" Command="{Binding AbortCommand}"/>
+            <customControls:PathButton    Foreground="White"      Content="Leak Check"   Width="130"  Height="30" Canvas.Left="400"   Canvas.Top="20"   Command="{Binding CheckCommand}"/>
+            <customControls:PathButton    Foreground="White"      Content="Gas Purge"    Width="130"  Height="30" Canvas.Left="400"   Canvas.Top="70"   Command="{Binding GasPurgeCommand}"/>
+            <customControls:PathButton    Foreground="White"      Content="Abort"        Width="130"  Height="30" Canvas.Left="400"   Canvas.Top="120"  Command="{Binding AbortCommand}"/>
+
+            <!--<TextBlock Canvas.Left="80" Canvas.Top="460" Text="Leak Check Result" FontSize="15" FontWeight="Bold"/>-->
 
-            <TextBlock Canvas.Left="80" Canvas.Top="460" Text="Leak Check Result" FontSize="15" FontWeight="Bold"/>
 
+            <!--<Button  FontSize="15"  Foreground="White"  FontWeight="Bold"   Content="Export"    Width="100" Height="30" Canvas.Left="900" Canvas.Top="440" Command="{Binding ExportCommand}"/>
+            <Button  FontSize="15"  Foreground="White"  FontWeight="Bold"    Content="Delete"   Width="100" Height="30" Canvas.Left="1020" Canvas.Top="440" />-->
+        </Canvas>
 
-            <Button  FontSize="15"  Foreground="White"  FontWeight="Bold"   Content="Export"    Width="100" Height="30" Canvas.Left="900" Canvas.Top="440" Command="{Binding ExportCommand}"/>
-            <Button  FontSize="15"  Foreground="White"  FontWeight="Bold"    Content="Delete"   Width="100" Height="30" Canvas.Left="1020" Canvas.Top="440" />
-            <DataGrid Canvas.Left="80" Height="300" Canvas.Top="480" AutoGenerateColumns="False" BorderThickness="0.1"  FontSize="12" MinRowHeight="20" VerticalAlignment="Stretch"
+        <DataGrid Canvas.Top="580" Height="248" AutoGenerateColumns="False" BorderThickness="0.1"  FontSize="12" MinRowHeight="20" VerticalAlignment="Stretch"
                         CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="False" 
-                        SelectionMode="Single" SelectionUnit="FullRow" Background="#05000000" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
+                        SelectionMode="Single" SelectionUnit="FullRow" Background="#05000000" HorizontalScrollBarVisibility="Disabled"
                         ItemsSource="{Binding LeakCheckResultList}" SelectedItem="{Binding CurrentLeakCheckResultItem}" FontFamily="Arial,SimSun" Margin="0,0,8,45">
-                <DataGrid.Columns>
-                    <DataGridTextColumn Width="160" Binding="{Binding CheckDate}"  CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="CheckDate" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="120" Binding="{Binding StartPressure}" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="StartPressure" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="120" Binding="{Binding EndPressure}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="StopPressure" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="120" Binding="{Binding LeakCheckTime}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="Leak Check Time(s)" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="120" Binding="{Binding LeakRate}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="LeakRate" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="200" Binding="{Binding CheckMode}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text="CheckMode" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-                    <DataGridTextColumn Width="200" Binding="{Binding Result}"  CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
-                        <DataGridTextColumn.HeaderTemplate >
-                            <DataTemplate>
-                                <TextBlock Text=" GlobalLableLeakCheckStatus" />
-                            </DataTemplate>
-                        </DataGridTextColumn.HeaderTemplate>
-                    </DataGridTextColumn>
-
-                </DataGrid.Columns>
-
-            </DataGrid>
-        </Canvas>
-    </Grid>
+            <DataGrid.Columns>
+                <DataGridTextColumn Width="160" Binding="{Binding CheckDate}"  CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="CheckDate" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="120" Binding="{Binding StartPressure}" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="StartPressure" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="120" Binding="{Binding EndPressure}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="StopPressure" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="120" Binding="{Binding LeakCheckTime}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="Leak Check Time(s)" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="120" Binding="{Binding LeakRate}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="LeakRate" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="200" Binding="{Binding CheckMode}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="CheckMode" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="400" Binding="{Binding GasLines}"  CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="Gas Lines" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+                <DataGridTextColumn Width="200" Binding="{Binding Result}"  CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                    <DataGridTextColumn.HeaderTemplate >
+                        <DataTemplate>
+                            <TextBlock Text="Result" />
+                        </DataTemplate>
+                    </DataGridTextColumn.HeaderTemplate>
+                </DataGridTextColumn>
+
+            </DataGrid.Columns>
+
+        </DataGrid>
+
+    </Canvas>
   
 </UserControl>

+ 123 - 81
Venus/Venus_MainPages/Views/MFCVerificationView.xaml

@@ -11,7 +11,12 @@
              xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
              mc:Ignorable="d" 
              xmlns:converters="clr-namespace:Venus_MainPages.Converters"
-             d:DesignHeight="1450" d:DesignWidth="1400">
+             d:DesignHeight="1450" d:DesignWidth="1400" x:Name="MFCVerificationView1">
+    <i:Interaction.Triggers>
+        <i:EventTrigger EventName="Loaded">
+            <i:InvokeCommandAction Command="{Binding LoadCommand}" CommandParameter="{Binding ElementName=MFCVerificationView1}"/>
+        </i:EventTrigger>
+    </i:Interaction.Triggers>
     <UserControl.Resources>
         <converters:MultiBindingConverter x:Key="MultiBindingConverter"/>
     </UserControl.Resources>
@@ -137,7 +142,7 @@
                     </Border>
                     <Border BorderBrush="{DynamicResource Table_BD}" Background="{DynamicResource Table_BG_Content}" Padding="5,1">
                         <StackPanel Orientation="Horizontal" IsEnabled="{Binding IsPermission}">
-                            <Button Content="Query" Width="120" Height="25" FontSize="14" Margin="5,0,0,0">
+                            <Button Content="Query" Width="120" Height="25" FontSize="14" Margin="5,0,0,0" Command="{Binding QueryCommand}">
                                 <!--<i:Interaction.Triggers>
                                     <i:EventTrigger EventName="Click">
                                         <cal:ActionMessage MethodName="Query"/>
@@ -160,334 +165,371 @@
             </Border>
 
             <Label Content="Verification History:" Grid.Row="2" Height="25"/>
-            <ScrollViewer Grid.Row="3" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
-                <DataGrid AutoGenerateColumns="False" Name="dataGrid_VerificationHistory" CanUserAddRows="False" IsEnabled="{Binding IsPermission}"
-                  ItemsSource="{Binding VerificationDataRecords}" SelectedItem="{Binding SelectedCalibrationData,Mode=TwoWay}" HorizontalScrollBarVisibility="Auto"
-                  FontFamily="Arial" FontSize="14" Height="305" >
+            <ScrollViewer Grid.Row="3" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Visible" Height="400" Width="800" VerticalScrollBarVisibility="Auto" Margin="-700,0,0,0">
+                <DataGrid AutoGenerateColumns="False" Name="dataGrid_VerificationHistory"  CanUserAddRows="False"
+                  ItemsSource="{Binding VerificationDataRecords}" 
+                  FontFamily="Arial" FontSize="14" >
+                    <DataGrid.Resources>
+                        <!--<Style TargetType="DataGridRow" >
+                            <Setter Property="Height" Value="45" />
+                        </Style>-->
+    
+                        <Style TargetType="DataGridCell">
+                            <!--<Setter Property="Height" Value="20"/>-->
+                            <!--<Setter Property="IsEnabled" Value="False"/>-->
+                            <Setter Property="LayoutTransform">
+                                <Setter.Value>
+                                    <TransformGroup>
+                                        <ScaleTransform ScaleX="1" ScaleY="-1"/>
+                                        <RotateTransform Angle="90"/>
+                                    </TransformGroup>
+                                </Setter.Value>
+                            </Setter>
+                        </Style>
+                        <Style TargetType="DataGridColumnHeader">
+                            <!--<Setter Property="Height" Value="20"/>-->
+                            <!--<Setter Property="IsEnabled" Value="False"/>-->
+                            <!--<Setter Property="Background" Value="#6A82AD"/>-->
+                            <Setter Property="LayoutTransform">
+                                <Setter.Value>
+                                    <TransformGroup>
+                                        <RotateTransform Angle="-90"/>
+                                        <ScaleTransform ScaleX="1" ScaleY="-1"/>
+                                    </TransformGroup>
+                                </Setter.Value>
+                            </Setter>
+                        </Style>
+                    </DataGrid.Resources>
+                    <DataGrid.LayoutTransform>
+                        <TransformGroup>
+                            <RotateTransform Angle="-90"/>
+                            <ScaleTransform ScaleX="1" ScaleY="-1"/>
+                        </TransformGroup>
+                    </DataGrid.LayoutTransform>
                     <DataGrid.Columns>
-                        <DataGridTextColumn Width="60" Binding="{Binding Module,Mode=OneWay}"   CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
+                        <DataGridTextColumn  Binding="{Binding Module,Mode=OneWay}"   CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="Module" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Module}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="80" Binding="{Binding Name,Mode=OneWay}"   CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
+                        <DataGridTextColumn  Binding="{Binding Name,Mode=OneWay}"   CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="Name" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Name}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="155" Binding="{Binding Time,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
+                        <DataGridTextColumn  Binding="{Binding Time,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True" CanUserResize="False" >
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="StartTime" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Time}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent10Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent10Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="10%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent10Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent10Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent10Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="10%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent10Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent20Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent20Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="20%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent20Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent20Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent20Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="20%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent20Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent30Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent30Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="30%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent30Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent30Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent30Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="30%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent30Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent40Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent40Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="40%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent40Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent40Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent40Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="40%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent40Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent50Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent50Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="50%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent50Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent50Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent50Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="50%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent50Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent60Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent60Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="60%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent60Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent60Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent60Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="60%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent60Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent70Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent70Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="70%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent70Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent70Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent70Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="70%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent70Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent80Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent80Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="80%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent80Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent80Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent80Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="80%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent80Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent90Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent90Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="90%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent90Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent90Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent90Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="90%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent90Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent100Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent100Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="100%Setpoint" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent100Setpoint}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
-                        <DataGridTextColumn Width="100" Binding="{Binding Percent100Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                        <DataGridTextColumn  Binding="{Binding Percent100Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                             <DataGridTextColumn.HeaderTemplate >
                                 <DataTemplate>
                                     <TextBlock Text="100%Calculate" />
                                 </DataTemplate>
                             </DataGridTextColumn.HeaderTemplate>
-                            <DataGridTextColumn.CellStyle>
+                            <!--<DataGridTextColumn.CellStyle>
                                 <Style TargetType="DataGridCell">
                                     <Setter Property="ToolTip" Value="{Binding Percent100Calculate, StringFormat={}{0:F1}}" />
                                 </Style>
-                            </DataGridTextColumn.CellStyle>
+                            </DataGridTextColumn.CellStyle>-->
                         </DataGridTextColumn>
 
                     </DataGrid.Columns>

+ 3 - 5
Venus/Venus_MainPages/Views/OperationOverView.xaml

@@ -246,11 +246,9 @@
                 </StackPanel>
             </Border>
         </Grid>
+      
+        <ctrls:Foup Canvas.Top="638" Canvas.Left="200" Width="85" Height="145"/>
+        <ctrls:Foup Canvas.Top="638" Canvas.Left="400" Width="85" Height="145"/>
 
-        <!--<Image Width="90" Height="90" Source="Pack://application:,,,/Venus_Themes;Component/Resources/carrier.png" Canvas.Top="640" Canvas.Left="200"/>-->
-        <Image Width="71" Height="65" Source="Pack://application:,,,/Venus_Themes;Component/Resources/foup.png"    Canvas.Top="640" Canvas.Left="200"/>
-
-        <!--<Image Width="90" Height="90" Source="Pack://application:,,,/Venus_Themes;Component/Resources/carrier.png" Canvas.Top="640" Canvas.Left="400"/>-->
-        <Image Width="71" Height="65" Source="Pack://application:,,,/Venus_Themes;Component/Resources/foup.png"    Canvas.Top="640" Canvas.Left="400"/>
     </Canvas>
 </UserControl>

+ 8 - 8
Venus/Venus_MainPages/Views/OverKepler2300View.xaml

@@ -1103,11 +1103,11 @@
         <Ellipse Width="20" Height="20" Fill="{Binding BRFData.IsRfOn,Converter={StaticResource boolToColor}}"  Canvas.Left="650" Canvas.Top="375" Stroke="Silver" StrokeThickness="2"/>
         <Button Height="20" Width="100" Content="BRF ON/OFF" Canvas.Left="680" Canvas.Top="375" Command="{Binding SetBRfCommand}"  Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>
 
-        <Ellipse Width="20" Height="20" Fill="{Binding ESCHVData.IsOn,Converter={StaticResource boolToColor}}" Canvas.Left="500" Canvas.Top="205" Stroke="Silver" StrokeThickness="2"/>
-        <Button Height="20" Width="100" Content="HV ON/OFF" Canvas.Left="530" Canvas.Top="205" Command="{Binding HVCommand}" CommandParameter="True" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>
+        <!--<Ellipse Width="20" Height="20" Fill="{Binding ESCHVData.IsOn,Converter={StaticResource boolToColor}}" Canvas.Left="500" Canvas.Top="205" Stroke="Silver" StrokeThickness="2"/>
+        <Button Height="20" Width="100" Content="HV ON/OFF" Canvas.Left="530" Canvas.Top="205" Command="{Binding HVCommand}" CommandParameter="True" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>-->
 
 
-        <Grid Width="320" Height="80"  Background="#E8E8E8" unity:GridOptions.LineBrush="#afb4db" unity:GridOptions.ShowBorder="True" Canvas.Left="500" Canvas.Top="230">
+        <!--<Grid Width="320" Height="80"  Background="#E8E8E8" unity:GridOptions.LineBrush="#afb4db" unity:GridOptions.ShowBorder="True" Canvas.Left="500" Canvas.Top="230">
             <Grid.RowDefinitions>
                 <RowDefinition/>
                 <RowDefinition/>
@@ -1121,8 +1121,8 @@
             <TextBlock Grid.Row="0" Text="ESC Voltage(V)"     FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>
             <TextBlock Grid.Row="1" Text="ESC Current Leak(uA)"      FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>
             <TextBlock Grid.Row="2" Text="ESC Temp.(°C)" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>
-            <!--<TextBlock Grid.Row="3" Text="Chiller Temp.(°C)" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>
-            <TextBlock Grid.Row="4" Text="Wall Temp.(°C)" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>-->
+            --><!--<TextBlock Grid.Row="3" Text="Chiller Temp.(°C)" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>
+            <TextBlock Grid.Row="4" Text="Wall Temp.(°C)" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Left" Padding="1,0,0,0"/>--><!--
 
 
             <TextBox Grid.Row="0" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding ESCVoltage}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="White"  BorderThickness="0"/>
@@ -1136,13 +1136,13 @@
                 </TextBlock.Text>
             </TextBlock>
             <TextBlock Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding HVTemperature,StringFormat='F1'}" TextBlock.TextAlignment="Center" VerticalAlignment="Center" Block.TextAlignment="Center"/>
-            <!--<TextBox Grid.Row="3" Grid.Column="1" Width="Auto" Height="Auto" Text="0.0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="White"  BorderThickness="0" />
-            <TextBox Grid.Row="4" Grid.Column="1" Width="Auto" Height="Auto" Text="0.0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="White"  BorderThickness="0" />-->
+            --><!--<TextBox Grid.Row="3" Grid.Column="1" Width="Auto" Height="Auto" Text="0.0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="White"  BorderThickness="0" />
+            <TextBox Grid.Row="4" Grid.Column="1" Width="Auto" Height="Auto" Text="0.0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="White"  BorderThickness="0" />--><!--
 
             <TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding ESCHVData.OutputVoltage}" FontSize="15" TextBlock.TextAlignment="Center" VerticalAlignment="Center" Block.TextAlignment="Center"/>
 
 
-        </Grid>
+        </Grid>-->
 
         <Grid Width="400" Height="25"  Background="#E8E8E8" unity:GridOptions.LineBrush="#afb4db" unity:GridOptions.ShowBorder="True" Canvas.Left="500" Canvas.Top="318">
             <Grid.RowDefinitions>

+ 26 - 11
Venus/Venus_MainPages/Views/OverVenusView.xaml

@@ -592,15 +592,28 @@
                     </MultiBinding>
                 </ctrls:FlowPipe.IsFlowing>
             </ctrls:FlowPipe>
-            
-            <ctrls:FlowPipe   Height="8"  Width="70" Canvas.Left="1050"  Canvas.Top="610"/>
+
+            <ctrls:FlowPipe   Height="8"  Width="70" Canvas.Left="1050"  Canvas.Top="610" IsFlowing="{Binding PVHe3ValveIsOpen}"/>
             <ctrls:FlowPipe   Height="8"  Width="65" Canvas.Left="1126"  Canvas.Top="615" RotateTransformValue="90" IsFlowing="{Binding PVHe3ValveIsOpen}"/>
-            <ctrls:FlowPipe   Height="8"  Width="56" Canvas.Left="1055"  Canvas.Top="610" RotateTransformValue="90" IsFlowing="{Binding PVHe1ValveIsOpen}"/>
+            <ctrls:FlowPipe   Height="8"  Width="56" Canvas.Left="1055"  Canvas.Top="610" RotateTransformValue="90" IsReverse="{Binding PVHe1ValveIsOpen}">
+                <ctrls:FlowPipe.IsFlowing>
+                    <MultiBinding Converter="{StaticResource toBoolMultiValueConverter2}">
+                        <Binding Path="PVHe1ValveIsOpen"/>
+                        <Binding Path="PVHe2ValveIsOpen"/>
+                    </MultiBinding>
+                </ctrls:FlowPipe.IsFlowing>
+            </ctrls:FlowPipe>
             <ctrls:Pipe2    Canvas.Left="1113"  Canvas.Top="610" HorizontalAlignment="Left" VerticalAlignment="Top"  />
-            <customControls:CommonValveControl   ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Top="604" Canvas.Left="1074" Status="{Binding PVHe3ValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="20" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
-            <TextBlock Text="VHe3" Canvas.Top="588" Canvas.Left="1068"/>
-
+            <customControls:CommonValveControl   ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Top="604" Canvas.Left="1066" Status="{Binding PVHe3ValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="30" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
+            <TextBlock Text="VHe3" Canvas.Top="588" Canvas.Left="1060"/>
 
+            <Viewbox Stretch="Uniform" Width="60" Height="50"  Canvas.Top="578" Canvas.Left="1078">
+                <Canvas  LayoutTransform="Identity" Width="999" Height="997">
+                    <Polyline Points="640,272 327,272" Stroke="#FF000000" StrokeThickness="15" />
+                    <Polygon Points="358,451 642,970 359,970 640,451 358,451" Fill="#FF00FFFF" Stroke="#FF000000" StrokeThickness="3" />
+                    <Polyline Points="499,272 499,451" Stroke="#FF000000" StrokeThickness="15" />
+                </Canvas>
+            </Viewbox>
 
             <ctrls:FlowPipe   Height="8"  Width="17"  Canvas.Left="1055"  Canvas.Top="659" RotateTransformValue="90" IsFlowing="{Binding PVHe2ValveIsOpen}"/>
             <ctrls:FlowPipe   Height="8"  Width="66" Canvas.Left="1057"  Canvas.Top="680" IsFlowing="{Binding PVHe2ValveIsOpen}"/>
@@ -620,6 +633,8 @@
                         <Binding Path="FastPumpValveIsOpen"/>
                         <Binding Path="TurboPumpPumpingValveIsOpen"/>
                         <Binding Path="PVHe2ValveIsOpen"/>
+                        <Binding Path="PVHe3ValveIsOpen"/>
+
                     </MultiBinding>
                 </ctrls:FlowPipe.IsFlowing>
             </ctrls:FlowPipe>
@@ -682,15 +697,15 @@
             <customControls:CommonValveControl   ValveOrientation="Horizontal" Height="20" Width="20"   Canvas.Top="652" Canvas.Left="990" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Status="{Binding PVHe1ValveIsOpen,Mode=TwoWay}" Tag="19" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
 
 
-            <TextBlock Text="VHe2" Canvas.Top="658" Canvas.Left="1068"/>
+            <TextBlock Text="VHe2" Canvas.Top="658" Canvas.Left="1060"/>
 
-            <customControls:CommonValveControl   ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Top="674" Canvas.Left="1074" Status="{Binding PVHe2ValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="20" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
+            <customControls:CommonValveControl   ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Top="674" Canvas.Left="1066" Status="{Binding PVHe2ValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="20" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
             <customControls:CommonValveControl Status="{Binding SoftPumpValveIsOpen,Mode=TwoWay}"  ValveOrientation="Vertical"  Height="20" Width="20"  Canvas.Top="555" Canvas.Left="1154" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="22" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
             <customControls:CommonValveControl Status="{Binding FastPumpValveIsOpen,Mode=TwoWay}"  ValveOrientation="Vertical"  Height="20" Width="20" Canvas.Top="555" Canvas.Left="1205"  IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="23" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
             <customControls:CommonValveControl  ValveOrientation="Vertical"  Height="20" Width="20"  Canvas.Top="596" Canvas.Left="1252" Status="{Binding TurboPumpPumpingValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="25" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
 
 
-            <customControls:CommonValveControl  ValveOrientation="Vertical"  Height="20" Width="20"  Canvas.Top="490" Canvas.Left="1041" Status="{Binding TurboPumpPumpingValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="25" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
+            <customControls:CommonValveControl  ValveOrientation="Vertical"  Height="20" Width="20"  Canvas.Top="490" Canvas.Left="1041" Status="{Binding HeISOValveIsOpen,Mode=TwoWay}" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="31" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
             <TextBlock Text=" He&#10;ISO" Canvas.Top="482" Canvas.Left="1068"/>
 
             <!--turbo-->
@@ -950,8 +965,8 @@
                 <TextBlock Grid.Row="2"  Grid.Column="1" Text="{Binding SRFData.ReflectPower}"           Background="#E9EDF4"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
                 <TextBlock Grid.Row="3"  Grid.Column="1" Text="{Binding BRFData.ForwardPower}"           Background="#D0D8E8"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
                 <TextBlock Grid.Row="4"  Grid.Column="1" Text="{Binding BRFData.ReflectPower}"           Background="#E9EDF4"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
-                <TextBlock Grid.Row="5"  Grid.Column="1" Text="{Binding BiasMatchC1}"           Background="#D0D8E8"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
-                <TextBlock Grid.Row="6"  Grid.Column="1" Text="{Binding BiasMatchC2}"           Background="#E9EDF4"  TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
+                <TextBlock Grid.Row="5"  Grid.Column="1" Text="{Binding BiasMatchC1,StringFormat='F1'}"           Background="#D0D8E8"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
+                <TextBlock Grid.Row="6"  Grid.Column="1" Text="{Binding BiasMatchC2,StringFormat='F1'}"           Background="#E9EDF4"  TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
                 <TextBlock Grid.Row="7"  Grid.Column="1" Text="N/A"           Background="#D0D8E8"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
                 <TextBlock Grid.Row="8"  Grid.Column="1" Text="{Binding ChamberPressureFeedBack,StringFormat='F1'}"       Background="#E9EDF4"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>
                 <TextBlock Grid.Row="9"  Grid.Column="1" Text="{Binding PendulumValvePosition}"       Background="#D0D8E8"   TextBlock.TextAlignment="Center" Padding="0,5,0,0" Block.TextAlignment="Center"/>

+ 1 - 0
Venus/Venus_RT/Config/DBModel.sql

@@ -201,6 +201,7 @@ begin
 					);
 					ALTER TABLE "leak_check_data"
 					OWNER TO postgres;
+					GRANT ALL ON TABLE "leak_check_data" TO postgres;
 					GRANT SELECT ON TABLE "leak_check_data" TO postgres;
  
     end if; 

+ 1 - 1
Venus/Venus_RT/Config/System.sccfg

@@ -651,7 +651,7 @@
 
 	<!--PMB-->
 	<configs name="PMB" nameView="PMB" >
-		<config default="0" name="ChamberType"  nameView="Chamber Type" description="0=>Venus,1=>Kepler2300,2=>Kepler2200A,3=>Kepler2200B" max="3" min="0" paramter="" tag=""  unit="" type="Integer" visible="false"/>
+		<config default="1" name="ChamberType"  nameView="Chamber Type" description="0=>Venus,1=>Kepler2300,2=>Kepler2200A,3=>Kepler2200B" max="3" min="0" paramter="" tag=""  unit="" type="Integer" visible="false"/>
 		<config default="120" name="PrepareTransferTimeout" nameView="Prepare Transfer Timeout" description="prepare transfer time out" max="99999" min="1" paramter="" tag="" unit="s" type="Integer" />
 		<config default="120" name="TransferWaferTimeout" nameView="Transfer Wafer Timeout" description="Transfer Wafer Timeout" max="99999" min="1" paramter="" tag="" unit="s" type="Integer" />
 		<config default="1" name="OpenGasValveTimeout" nameView="Open Gas Valve Timeout" description="开阀超时" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />

BIN
Venus/Venus_RT/Config/Venus/DeviceModelVenus.xml


+ 16 - 0
Venus/Venus_RT/Devices/JetVenusPM.cs

@@ -54,6 +54,10 @@ namespace Venus_RT.Devices
         private readonly IoValve _GuageValve;
         private readonly IoValve _LoadlockVentValve;
         private readonly IoValve _LoadlockPumpingValve;
+        private readonly IoValve _PVHe3Valve;
+        private readonly IoValve _HeISOValve;
+
+
 
         private readonly IoSensor _ATM_sw;
         private readonly IoSensor _CDAPressure;
@@ -299,6 +303,9 @@ namespace Venus_RT.Devices
             _GuageValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveGuage}");
             _LoadlockVentValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockVent}");
             _LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
+            _PVHe3Valve= DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePVHe3}");
+            _HeISOValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveHeISO}");
+
             _heMfc = DEVICE.GetDevice<IoMfc>($"{Module}.MfcHe");
             _ATM_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
             _ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
@@ -445,6 +452,8 @@ namespace Venus_RT.Devices
             _Mfc6Valve.TurnValve(false, out _);
             _Mfc7Valve.TurnValve(false, out _);
             _Mfc8Valve.TurnValve(false, out _);
+            _PVHe3Valve.TurnValve(false, out _);
+            _HeISOValve.TurnValve(false, out _);
 
             foreach (var stick in _gasLines)
             {
@@ -556,6 +565,13 @@ namespace Venus_RT.Devices
                 case ValveType.Mfc8:
                     _Mfc8Valve.TurnValve(on, out _);
                     break;
+                case ValveType.PVHe3:
+                    _PVHe3Valve.TurnValve(on, out _); 
+                    break;
+                case ValveType.HeISO:
+                    _HeISOValve.TurnValve(on, out _); 
+                    break;
+
                 default:
                     throw new ArgumentOutOfRangeException($"Argument error {vlvType}-{on}");
 

+ 9 - 4
Venus/Venus_RT/Modules/PMs/GasBoxLeakCheckRoutine.cs

@@ -7,6 +7,8 @@ using System.Collections.Generic;
 using Venus_Core;
 using System;
 using Venus_Unity;
+using MECF.Framework.Common.DBCore;
+using System.Text;
 
 namespace Venus_RT.Modules.PMs
 {
@@ -36,6 +38,7 @@ namespace Venus_RT.Modules.PMs
         bool isCheckVentLine;
         PMLeakCheckResult pMLeakCheckResult;
         Stopwatch _routineTimer = new Stopwatch();
+        StringBuilder  gasLines=new StringBuilder();
         public GasBoxLeakCheckRoutine(JetPMBase chamber) : base(chamber)
         {
             Name = "GasBox Leakcheck";
@@ -76,7 +79,7 @@ namespace Venus_RT.Modules.PMs
                 isCheckVentLine = (bool)objs[4];
                 pMLeakCheckResult = new PMLeakCheckResult();
 
-                pMLeakCheckResult.CheckMode = $"{objs[5].ToString()}({objs[3].ToString()})";
+                pMLeakCheckResult.CheckMode = objs[5].ToString();
 
                 if (_gasLineNums.Count == 0 && isCheckVentLine==false)
                 {
@@ -84,7 +87,7 @@ namespace Venus_RT.Modules.PMs
                     return RState.Failed;
                 }
 
-
+                gasLines.Clear();
                 PreSetValves();
                 pMLeakCheckResult.CheckDate = DateTime.Now.ToString("yyyyMMddHHmm");
                 _routineTimer.Restart();
@@ -117,6 +120,7 @@ namespace Venus_RT.Modules.PMs
                 var _MfcScaleFactor = SC.GetValue<Double>($"{Module}.MfcGas{num}.MfcScaleFactor");
                 var _GasFlow = _MfcN2Scale * _MfcScaleFactor;
                 _chamber.FlowGas(num-1, _GasFlow);
+                gasLines.Append($"Gas{num},");
             }
             _chamber.OpenValve(ValveType.PV11, true);
             _chamber.OpenValve(ValveType.PV21, true);
@@ -129,7 +133,7 @@ namespace Venus_RT.Modules.PMs
                 _chamber.OpenValve(ValveType.PVN21, true);
                 _chamber.OpenValve(ValveType.PVN22, true);
                 _chamber.OpenValve(ValveType.N2, true);
-
+                gasLines.Append("VentLine");
             }
             _leakCheckTimer.Restart();
             return true;
@@ -176,6 +180,7 @@ namespace Venus_RT.Modules.PMs
                 Stop($"GasBox Leakcheck失败, 腔体漏率 [{LeakRate}] mt/min, 高于 [{_leakRate}] mt/min");
                 pMLeakCheckResult.Result = "Fail";
             }
+            LeakCheckDataRecorder.Add(_leakcheckHoldTime, (int)_startPressure, (int)_endPressure, LeakRate, pMLeakCheckResult.Result, pMLeakCheckResult.CheckMode, _chamber.Name, gasLines.ToString());
 
             _chamber.StopAllGases();
             _chamber.TurnPendulumValve(true);
@@ -185,7 +190,7 @@ namespace Venus_RT.Modules.PMs
             _chamber.OpenValve(ValveType.PV31, false);
             _chamber.OpenValve(ValveType.PV41, false);
             pMLeakCheckResult.LeakCheckTime = (int)_routineTimer.ElapsedMilliseconds / 1000;
-            SerializeHelper.Instance.WriteToJsonFile<PMLeakCheckResult>(pMLeakCheckResult, $"LeakCheck/PM/{DateTime.Now.ToString("yyyyMMddHHmm")}.json");
+            //SerializeHelper.Instance.WriteToJsonFile<PMLeakCheckResult>(pMLeakCheckResult, $"LeakCheck/PM/{DateTime.Now.ToString("yyyyMMddHHmm")}.json");
 
             return true;
         }

+ 4 - 0
Venus/Venus_RT/Modules/PMs/PMEntity.cs

@@ -23,6 +23,7 @@ using Venus_RT.Modules;
 using Venus_RT.Modules.PMs;
 using MECF.Framework.Common.Routine;
 using Aitex.Core.RT.Log;
+using MECF.Framework.Common.DBCore;
 
 namespace Venus_RT.Modules.PMs
 {
@@ -599,6 +600,9 @@ namespace Venus_RT.Modules.PMs
             DATA.Subscribe($"{Module}.IsBusy", () => IsBusy);
             DATA.Subscribe($"{Module}.IsInit", () => IsInit);
 
+            //DATA.Subscribe($"{Module}.GetLeakCheckDatas", () => LeakCheckDataRecorder.GetAllLeakCheckData(Module.ToString()));
+
+
             DATA.Subscribe($"{Module}.CurrentRecipeResult", () => _processRoutine.currentRecipeResult);
 
 

+ 3 - 2
Venus/Venus_RT/Modules/PMs/PMLeakCheckRoutine.cs

@@ -136,12 +136,13 @@ namespace Venus_RT.Modules.PMs
                 Stop($"PM Leakcheck失败, 腔体漏率 [{LeakRate}] mt/min, 高于 [{_leakRate}] mt/min");
                 pMLeakCheckResult.Result = "Fail";
             }
-            LeakCheckDataRecorder.Add(_leakcheckHoldTime, (int)_startPressure, (int)_endPressure, LeakRate, pMLeakCheckResult.Result, "ChamberOnly");
+            LeakCheckDataRecorder.Add(_leakcheckHoldTime, (int)_startPressure, (int)_endPressure, LeakRate, pMLeakCheckResult.Result, "ChamberOnly",_chamber.Name);
             _chamber.OpenValve(ValveType.GasFinal, true);
             _chamber.TurnPendulumValve(true);
             pMLeakCheckResult.LeakCheckTime = (int)_routineTimer.ElapsedMilliseconds / 1000;
 
-            SerializeHelper.Instance.WriteToJsonFile<PMLeakCheckResult>(pMLeakCheckResult, $"LeakCheck/PM/{DateTime.Now.ToString("yyyyMMddHHmm")}.json");
+            
+            //SerializeHelper.Instance.WriteToJsonFile<PMLeakCheckResult>(pMLeakCheckResult, $"LeakCheck/PM/{DateTime.Now.ToString("yyyyMMddHHmm")}.json");
             return true;
         }
 

+ 8 - 2
Venus/Venus_RT/Modules/PMs/PumpDownRoutine.cs

@@ -28,9 +28,10 @@ namespace Venus_RT.Modules.PMs
         private int _roughPumpPressure = 75000;
         private int _vHe2FlowPressure = 200;
         private int _basePressure = 10;
-
+        private JetChamber jetChamber = JetChamber.None;
         public PumpDownRoutine(JetPMBase chamber) : base(chamber)
         {
+            jetChamber = (JetChamber)SC.GetValue<int>($"{chamber.Name}.ChamberType");
             Name = "PumpDown";
         }
 
@@ -50,7 +51,12 @@ namespace Venus_RT.Modules.PMs
                 _chamber.OpenValve(ValveType.PVN22, true);
                 _chamber.OpenValve(ValveType.TurboPumpPumping, true);
                 _chamber.TurnPendulumValve(false);
-                
+                if (jetChamber == JetChamber.Venus)
+                {
+                    _chamber.OpenValve(ValveType.HeISO, false);
+                    _chamber.OpenValve(ValveType.PVHe3, false);
+
+                }
                 return Runner.Start(Module, Name);
             }
 

BIN
Venus/Venus_Themes/Resources/foup2.png


+ 15 - 5
Venus/Venus_Themes/UserControls/Chamber.xaml

@@ -272,20 +272,30 @@
                         </Style>
                     </Grid.Style>
 
-                    <Border BorderThickness="1" BorderBrush="Black" CornerRadius="4" VerticalAlignment="Top"  Height="6" Margin="0,4,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}">
+                    <!--<Border BorderThickness="1" BorderBrush="Black" CornerRadius="4" VerticalAlignment="Top"  Height="6" Margin="0,4,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}">
                         <Border.Background>
                             <RadialGradientBrush >
-                                <GradientStop Color="White" Offset="0" />
-                                <GradientStop Color="#ffe600" Offset="1" />
+                                <GradientStop Color="DimGray" Offset="0" />
+                                <GradientStop Color="Silver" Offset="0.5" />
+                                <GradientStop Color="DimGray" Offset="1" />
 
                             </RadialGradientBrush>
                         </Border.Background>
-                    </Border>
+                    </Border>-->
+                   
                     <Rectangle HorizontalAlignment="Left" Fill="{DynamicResource Lid_BG3}" Stroke="{DynamicResource Lid_BD}" Width="8" Margin="48,10,0,4"/>
                     <Rectangle HorizontalAlignment="Right" Fill="{DynamicResource Lid_BG3}" Stroke="{DynamicResource Lid_BD}" Width="8" Margin="0,10,48,4"/>
                     <Rectangle Stroke="{DynamicResource Lid_BD}" Fill="{DynamicResource Lid_BG3}" StrokeThickness="1" VerticalAlignment="Bottom" Height="8" Margin="5,0" Width="64" />
                     <Rectangle  HorizontalAlignment="Center" Margin="-100,0"  Width="{Binding WaferLength}" Height="10" VerticalAlignment="Top"/>
-                    
+                    <Ellipse    Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}"  
+                     Width = "70"     Height = "30"    Stroke="DarkGray"   StrokeThickness="1" Margin="0,0,0,20">
+                        <Ellipse.Fill>
+                            <RadialGradientBrush>
+                                <GradientStop Offset = "0" Color = "AliceBlue"/>
+                                <GradientStop Offset = "1" Color = "LightBlue"/>
+                            </RadialGradientBrush>
+                        </Ellipse.Fill>
+                    </Ellipse>
                 </Grid>
 
                 <!--左边slit door-->

File diff suppressed because it is too large
+ 260 - 0
Venus/Venus_Themes/UserControls/Foup.xaml


+ 28 - 0
Venus/Venus_Themes/UserControls/Foup.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Venus_Themes.UserControls
+{
+    /// <summary>
+    /// Foup.xaml 的交互逻辑
+    /// </summary>
+    public partial class Foup : UserControl
+    {
+        public Foup()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 1 - 1
Venus/Venus_Themes/UserControls/Pipe2.xaml

@@ -13,7 +13,7 @@
             </TransformGroup>
         </Viewbox.RenderTransform>
         <Canvas UseLayoutRounding="False" Name="Group_Gas_pipe_90__curve_4"  LayoutTransform="Identity" Width="112.5" Height="112.5" HorizontalAlignment="Left" VerticalAlignment="Top">
-            <Canvas Name="Group_Gas_Pipe_90" Tag="#00000000,#FF008000,Original,0,None" Width="111.077" Height="110.832" Canvas.Left="1" Canvas.Top="0.168">
+            <Canvas Name="Group_Gas_Pipe_90"  Width="111.077" Height="110.832" Canvas.Left="1" Canvas.Top="0.168">
                 <Path Data="F1M34.207,66.6C40.733,67.191,44.508,69.396,45.891,78.534L45.891,78.534 112.047,78.339C112.047,26.395,72.049,0.168000000000006,33.995,0.168000000000006L33.995,0.168000000000006C33.995,0.168000000000006,33.439,49.186,34.207,66.6" Stretch="Fill" Width="78.247" Height="78.366" Canvas.Left="32.8" Canvas.Top="0">
                     <Path.Fill>
                         <RadialGradientBrush Center="0.055,0.941" RadiusX="0.993" RadiusY="0.991" GradientOrigin="0.055,0.941">

+ 10 - 0
Venus/Venus_Themes/Venus_Themes.csproj

@@ -129,6 +129,9 @@
     <Compile Include="UserControls\FlowPipeValve.xaml.cs">
       <DependentUpon>FlowPipeValve.xaml</DependentUpon>
     </Compile>
+    <Compile Include="UserControls\Foup.xaml.cs">
+      <DependentUpon>Foup.xaml</DependentUpon>
+    </Compile>
     <Compile Include="UserControls\FOUPFrontView.xaml.cs">
       <DependentUpon>FOUPFrontView.xaml</DependentUpon>
     </Compile>
@@ -290,6 +293,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="UserControls\Foup.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="UserControls\FOUPFrontView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -390,6 +397,9 @@
     <Resource Include="Resources\foup.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Resource>
+    <Resource Include="Resources\foup2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
     <Content Include="Styles\Folder_Close.png" />
     <Content Include="Styles\Folder_Open.png" />
     <Content Include="Styles\Folder_Unable.png" />