wanghan преди 7 месеца
родител
ревизия
a4eb017ee2

+ 117 - 0
TeamAAS-VM/Core/FileHelper.cs

@@ -863,5 +863,122 @@ namespace TeamAAS_VP.Core
             }
         }
         #endregion
+
+        #region 写CTQ的csv
+        public static void WriteDataToCSV(DataFormCtq cd)
+        {
+            string s1, s2, s3, s4,
+                t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18,
+                r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18;
+            //
+            string path = "D:\\Data\\产品数据\\";
+            if (!Directory.Exists(path))
+            {
+                Directory.CreateDirectory(path);
+            }
+            //
+            t1 = "PPID";
+            t2 = "PROCESS_NAME";
+            t3 = "PROCESS_START_TIME";
+            t4 = "CTQ_NAME";
+            t5 = "CTQ_VALUE";
+            t6 = "CTQ_LSL";
+            t7 = "CTQ_USL";
+            t8 = "PROCESS_END_TIME";
+            t9 = "SUPPLIER_NAME";
+            t10 = "COMMODITY_TYPE";
+            t11 = "REVISION";
+            t12 = "WO#";
+            t13 = "MFG_LOT#";
+            t14 = "MFG_ASSY_LINE";
+            t15 = "PROCESS_OUTCOME";
+            t16 = "PROCESS_MACHINE_ID";
+            t17 = "CTQ_UNIT_OF_MEASURE";
+            t18 = "ERROR_MESSAGE";
+            //
+            r1 = cd.PPID;
+            r2 = cd.PROCESS_NAME;
+            r3 = cd.PROCESS_START_TIME;
+            r4 = cd.CTQ_NAME;
+            r5 = cd.CTQ_VALUE.ToString();
+            r6 = cd.CTQ_LSL.ToString();
+            r7 = cd.CTQ_USL.ToString();
+            r8 = cd.PROCESS_END_TIME;
+            r9 = cd.SUPPLIER_NAME;
+            r10 = cd.COMMODITY_TYPE;
+            r11 = cd.REVISION;
+            r12 = cd.WO;
+            r13 = cd.MFG_LOT;
+            r14 = cd.MFG_ASSY_LINE;
+            r15 = cd.PROCESS_OUTCOME;
+            r16 = cd.PROCESS_MACHINE_ID;
+            r17 = cd.CTQ_UNIT_OF_MEASURE;
+            r18 = cd.ERROR_MESSAGE;
+
+            //=========================
+            s1 = path;
+            s2 = DateTime.Now.ToString("yyyyMMdd"); //表格命名以天记录
+            s3 = t1 + "," + t2 + "," + t3 + "," + t4 + "," + t5 + "," + t6 + "," + t7 + "," + t8 + "," + t9 + "," + t10
+                + "," + t11 + "," + t12 + "," + t13 + "," + t14 + "," + t15 + "," + t16 + "," + t17 + "," + t18;
+            s4 = r1 + "," + r2 + "," + r3 + "," + r4 + "," + r5 + "," + r6 + "," + r7 + "," + r8 + "," + r9 + "," + r10
+                + "," + r11 + "," + r12 + "," + r13 + "," + r14 + "," + r15 + "," + r16 + "," + r17 + "," + r18;
+            //
+            Save(s1, s2, s3, s4);
+        }
+
+
+
+        //写csv
+        public static bool Save(string fullPath, string fileName, string RowName, string Data)
+        {
+            bool result = true;
+            try
+            {
+                if (!Directory.Exists(fullPath))
+                {
+                    Directory.CreateDirectory(fullPath);
+                }
+
+                if (fileName == null)
+                {
+                    fileName = DateTime.Now.ToString("yyyyMMdd");
+                }
+
+                string text = "";
+                string path = fullPath + "\\" + text;
+                string text2 = ".csv";
+                string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);
+                if (!File.Exists(fullPath + "\\" + fileNameWithoutExtension + fileName + text2))
+                {
+                    using (File.Create(fullPath + "\\" + fileNameWithoutExtension + fileName + text2))
+                    {
+                    }
+
+                    FileStream fileStream2 = new FileStream(fullPath + "\\" + fileNameWithoutExtension + fileName + text2, FileMode.Append);
+                    StreamWriter streamWriter = new StreamWriter(fileStream2, Encoding.UTF8);
+                    streamWriter.WriteLine(RowName);
+                    streamWriter.WriteLine(Data);
+                    streamWriter.Flush();
+                    streamWriter.Close();
+                    fileStream2.Close();
+                }
+                else
+                {
+                    FileStream fileStream2 = new FileStream(fullPath + "\\" + fileNameWithoutExtension + fileName + text2, FileMode.Append);
+                    StreamWriter streamWriter = new StreamWriter(fileStream2, Encoding.UTF8);
+                    streamWriter.WriteLine(Data);
+                    streamWriter.Flush();
+                    streamWriter.Close();
+                    fileStream2.Close();
+                }
+            }
+            catch
+            {
+                result = false;
+            }
+
+            return result;
+        }
+        #endregion
     }
 }

+ 98 - 0
TeamAAS-VM/Core/Management.cs

@@ -107,6 +107,7 @@ namespace TeamAAS_VP.Core
         /// 超时自动停止秒数
         /// </summary>
         private int _pressureMaxDurationSeconds = 30; //超时自动停止秒数
+        DateTime[] StartCtqTime = new DateTime[3];//开始采集Ctq数据的时间
         #endregion
 
         #region 属性
@@ -185,6 +186,17 @@ namespace TeamAAS_VP.Core
             get { return _CTtime; }
             set { SetProperty(ref _CTtime, value); }
         }
+
+
+        private ObservableCollection<DataFormCtq> _dfc = new ObservableCollection<DataFormCtq>();
+        /// <summary>
+        /// CTQ数据集合
+        /// </summary>
+        public ObservableCollection<DataFormCtq> DFC
+        {
+            get { return _dfc; }
+            set { SetProperty(ref _dfc, value); }
+        }
         #endregion
 
         #region 命令
@@ -2391,6 +2403,48 @@ namespace TeamAAS_VP.Core
                                             resultIndex = 2;
                                         }
                                         SendTaskMessage($"gap:{gap},组装压力:{assypress}", MessageLevel.Info);
+                                        try
+                                        {
+                                            #region 数据
+                                            var cdata = _configService.GetCTQDataInfo();//获取ctq数据参数
+                                            bool assyPresRes;
+                                            if (currentPressure[0] >= p1.PressureDownLimit && currentPressure[0] <= p1.PressureUpLimit)
+                                            {
+                                                assyPresRes = true;
+                                            }
+                                            else assyPresRes = false;
+                                            DFC.Clear();
+                                            DFC.Add(new DataFormCtq
+                                            {
+                                                PPID = code,
+                                                PROCESS_NAME = cdata.PROCESS_NAME,
+                                                PROCESS_START_TIME = StartCtqTime[i].ToString(),
+                                                CTQ_NAME = "Assy_Pressure",
+                                                CTQ_VALUE = double.Parse(assypress),
+                                                CTQ_LSL = p1.PressureDownLimit,
+                                                CTQ_USL = p1.PressureUpLimit,
+                                                PROCESS_END_TIME = DateTime.Now.ToString(),
+                                                SUPPLIER_NAME = cdata.SUPPLIER_NAME,
+                                                COMMODITY_TYPE = cdata.COMMODITY_TYPE,
+                                                REVISION = cdata.REVISION,
+                                                WO = cdata.WO,
+                                                MFG_LOT = cdata.MFG_LOT,
+                                                MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
+                                                PROCESS_OUTCOME = assyPresRes ? "PASS" : "FAIL",
+                                                PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
+                                                CTQ_UNIT_OF_MEASURE = "kg",
+                                                ERROR_MESSAGE = assyPresRes ? "" : "Assy_Pressure OOS"
+                                            });
+                                            foreach (var item in DFC)
+                                            {
+                                                FileHelper.WriteDataToCSV(item);
+                                            }
+                                            #endregion
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            SendTaskMessage("CTQ数据存储时出错" + ex.Message, MessageLevel.Error);
+                                        }
                                     }
                                     else if (i == 1)
                                     {
@@ -2413,6 +2467,48 @@ namespace TeamAAS_VP.Core
                                         }
                                         presstime = p2.PressureTime.ToString();
                                         SendTaskMessage($"保压压力:{press},保压时间:{presstime}", MessageLevel.Info);
+                                        try
+                                        {
+                                            #region 数据
+                                            var cdata = _configService.GetCTQDataInfo();//获取ctq数据参数
+                                            bool presRes;
+                                            if (currentPressure[1] >= p2.PressureDownLimit && currentPressure[1] <= p2.PressureUpLimit)
+                                            {
+                                                presRes = true;
+                                            }
+                                            else presRes = false;
+                                            DFC.Clear();
+                                            DFC.Add(new DataFormCtq
+                                            {
+                                                PPID = code,
+                                                PROCESS_NAME = cdata.PROCESS_NAME,
+                                                PROCESS_START_TIME = StartCtqTime[i].ToString(),
+                                                CTQ_NAME = "Pressure",
+                                                CTQ_VALUE = double.Parse(press),
+                                                CTQ_LSL = p2.PressureDownLimit,
+                                                CTQ_USL = p2.PressureUpLimit,
+                                                PROCESS_END_TIME = DateTime.Now.ToString(),
+                                                SUPPLIER_NAME = cdata.SUPPLIER_NAME,
+                                                COMMODITY_TYPE = cdata.COMMODITY_TYPE,
+                                                REVISION = cdata.REVISION,
+                                                WO = cdata.WO,
+                                                MFG_LOT = cdata.MFG_LOT,
+                                                MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
+                                                PROCESS_OUTCOME = presRes ? "PASS" : "FAIL",
+                                                PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
+                                                CTQ_UNIT_OF_MEASURE = "kg",
+                                                ERROR_MESSAGE = presRes ? "" : "Assy_Pressure OOS"
+                                            });
+                                            foreach (var item in DFC)
+                                            {
+                                                FileHelper.WriteDataToCSV(item);
+                                            }
+                                            #endregion
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            SendTaskMessage("CTQ数据存储时出错" + ex.Message, MessageLevel.Error);
+                                        }
                                     }
                                     //gap-复检gap参数, press-保压站实际压力值, presstime-保压站保压时间, assypress-组装站实际压力值
                                     (bool isSuccess, string response) = await _mesService.SubmitGetAsync(i,code, comp, gap, press, presstime, assypress, resultIndex == 1 ? true : false, _LastMesCheckTime[i], DateTime.UtcNow);
@@ -2429,6 +2525,7 @@ namespace TeamAAS_VP.Core
                                     await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)3);
                                     LogHelper.WriteLogMes($"【mes结束ADD】");
                                     SendTaskMessage($"mes结束ADD", MessageLevel.Info);
+                                    
                                     return;
                                 }
                                 else
@@ -2463,6 +2560,7 @@ namespace TeamAAS_VP.Core
                                     SendTaskMessage($"收到开始保压信号[{i}]...", MessageLevel.Debug);
                                     // 开始采集压力值
                                     StartPressureCollection(currentProduct.Name, code, i);
+                                    StartCtqTime[i]= DateTime.Now;
                                 }
                                 else
                                 {

+ 3 - 0
TeamAAS-VM/Interfaces/IConfigService.cs

@@ -502,5 +502,8 @@ namespace TeamAAS_VP.Interfaces
         /// </summary>
         /// <param name="config"></param>
         void SaveCardReaderConfig(SerialPortConfig config);
+
+        CTQ_Data GetCTQDataInfo();
+        void SaveCTQDataInfo(CTQ_Data cd);
     }
 }

+ 133 - 0
TeamAAS-VM/Models/CTQ_Data.cs

@@ -0,0 +1,133 @@
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TeamAAS_VP.Models
+{
+    public class CTQ_Data : BindableBase
+    {
+        private string _PPID;
+        /// <summary>
+        /// sn
+        /// </summary>
+        public string PPID { get => _PPID; set => SetProperty(ref _PPID, value); }
+
+        private string _PROCESS_NAME;
+        /// <summary>
+        /// 设备名称
+        /// </summary>
+        public string PROCESS_NAME { get => _PROCESS_NAME; set => SetProperty(ref _PROCESS_NAME, value); }
+
+        private string _PROCESS_START_TIME;
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public string PROCESS_START_TIME { get => _PROCESS_START_TIME; set => SetProperty(ref _PROCESS_START_TIME, value); }
+
+        private string _CTQ_NAME;
+        /// <summary>
+        /// 检测项名称
+        /// </summary>
+        public string CTQ_NAME { get => _CTQ_NAME; set => SetProperty(ref _CTQ_NAME, value); }
+
+        private double _CTQ_VALUE;
+        /// <summary>
+        /// 检测值
+        /// </summary>
+        public double CTQ_VALUE { get => _CTQ_VALUE; set => SetProperty(ref _CTQ_VALUE, value); }
+
+        //private double _CTQ_LSL_Torque;
+        ///// <summary>
+        ///// 下限(扭力)
+        ///// </summary>
+        //public double CTQ_LSL_Torque { get => _CTQ_LSL_Torque; set => SetProperty(ref _CTQ_LSL_Torque, value); }
+
+        //private double _CTQ_USL_Torque;
+        ///// <summary>
+        ///// 上限(扭力)
+        ///// </summary>
+        //public double CTQ_USL_Torque { get => _CTQ_USL_Torque; set => SetProperty(ref _CTQ_USL_Torque, value); }
+
+        //private double _CTQ_LSL_Turn;
+        ///// <summary>
+        ///// 下限(圈数)
+        ///// </summary>
+        //public double CTQ_LSL_Turn { get => _CTQ_LSL_Turn; set => SetProperty(ref _CTQ_LSL_Turn, value); }
+
+        //private double _CTQ_USL_Turn;
+        ///// <summary>
+        ///// 上限(圈数)
+        ///// </summary>
+        //public double CTQ_USL_Turn { get => _CTQ_USL_Turn; set => SetProperty(ref _CTQ_USL_Turn, value); }
+
+        //private double _CTQ_LSL_Pressure;
+        ///// <summary>
+        ///// 下限(压力)
+        ///// </summary>
+        //public double CTQ_LSL_Pressure { get => _CTQ_LSL_Pressure; set => SetProperty(ref _CTQ_LSL_Pressure, value); }
+
+        //private double _CTQ_USL_Pressure;
+        ///// <summary>
+        ///// 上限(压力)
+        ///// </summary>
+        //public double CTQ_USL_Pressure { get => _CTQ_USL_Pressure; set => SetProperty(ref _CTQ_USL_Pressure, value); }
+
+        private string _PROCESS_END_TIME;
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public string PROCESS_END_TIME { get => _PROCESS_END_TIME; set => SetProperty(ref _PROCESS_END_TIME, value); }
+
+        private string _SUPPLIER_NAME;
+        public string SUPPLIER_NAME { get => _SUPPLIER_NAME; set => SetProperty(ref _SUPPLIER_NAME, value); }
+
+        private string _COMMODITY_TYPE;
+        public string COMMODITY_TYPE { get => _COMMODITY_TYPE; set => SetProperty(ref _COMMODITY_TYPE, value); }
+
+        private string _REVISION;
+        public string REVISION { get => _REVISION; set => SetProperty(ref _REVISION, value); }
+
+        private string _WO;
+        /// <summary>
+        /// 工单号
+        /// </summary>
+        public string WO { get => _WO; set => SetProperty(ref _WO, value); }
+
+        private string _MFG_LOT;
+        public string MFG_LOT { get => _MFG_LOT; set => SetProperty(ref _MFG_LOT, value); }
+
+        private string _MFG_ASSY_LINE;
+        /// <summary>
+        /// 线体
+        /// </summary>
+        public string MFG_ASSY_LINE { get => _MFG_ASSY_LINE; set => SetProperty(ref _MFG_ASSY_LINE, value); }
+
+        private string _PROCESS_OUTCOME;
+        /// <summary>
+        /// 结果
+        /// </summary>
+        public string PROCESS_OUTCOME { get => _PROCESS_OUTCOME; set => SetProperty(ref _PROCESS_OUTCOME, value); }
+
+        private string _PROCESS_MACHINE_ID;
+        /// <summary>
+        /// 设备ID
+        /// </summary>
+        public string PROCESS_MACHINE_ID { get => _PROCESS_MACHINE_ID; set => SetProperty(ref _PROCESS_MACHINE_ID, value); }
+
+        private string _CTQ_UNIT_OF_MEASURE;
+        /// <summary>
+        /// 单位
+        /// </summary>
+        public string CTQ_UNIT_OF_MEASURE { get => _CTQ_UNIT_OF_MEASURE; set => SetProperty(ref _CTQ_UNIT_OF_MEASURE, value); }
+
+        private string _ERROR_MESSAGE;
+        /// <summary>
+        /// 报错信息
+        /// </summary>
+        public string ERROR_MESSAGE { get => _ERROR_MESSAGE; set => SetProperty(ref _ERROR_MESSAGE, value); }
+
+    }
+}

+ 109 - 0
TeamAAS-VM/Models/DataFormCtq.cs

@@ -0,0 +1,109 @@
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TeamAAS_VP.Models
+{
+    public class DataFormCtq : BindableBase
+    {
+        private string _PPID;
+        /// <summary>
+        /// sn
+        /// </summary>
+        public string PPID { get => _PPID; set => SetProperty(ref _PPID, value); }
+
+        private string _PROCESS_NAME;
+        /// <summary>
+        /// 设备名称
+        /// </summary>
+        public string PROCESS_NAME { get => _PROCESS_NAME; set => SetProperty(ref _PROCESS_NAME, value); }
+
+        private string _PROCESS_START_TIME;
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public string PROCESS_START_TIME { get => _PROCESS_START_TIME; set => SetProperty(ref _PROCESS_START_TIME, value); }
+
+        private string _CTQ_NAME;
+        /// <summary>
+        /// 检测项名称
+        /// </summary>
+        public string CTQ_NAME { get => _CTQ_NAME; set => SetProperty(ref _CTQ_NAME, value); }
+
+        private double _CTQ_VALUE;
+        /// <summary>
+        /// 检测值
+        /// </summary>
+        public double CTQ_VALUE { get => _CTQ_VALUE; set => SetProperty(ref _CTQ_VALUE, value); }
+
+        private double _CTQ_LSL;
+        /// <summary>
+        /// 下限
+        /// </summary>
+        public double CTQ_LSL { get => _CTQ_LSL; set => SetProperty(ref _CTQ_LSL, value); }
+
+        private double _CTQ_USL;
+        /// <summary>
+        /// 上限
+        /// </summary>
+        public double CTQ_USL { get => _CTQ_USL; set => SetProperty(ref _CTQ_USL, value); }
+
+        private string _PROCESS_END_TIME;
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public string PROCESS_END_TIME { get => _PROCESS_END_TIME; set => SetProperty(ref _PROCESS_END_TIME, value); }
+
+        private string _SUPPLIER_NAME;
+        public string SUPPLIER_NAME { get => _SUPPLIER_NAME; set => SetProperty(ref _SUPPLIER_NAME, value); }
+
+        private string _COMMODITY_TYPE;
+        public string COMMODITY_TYPE { get => _COMMODITY_TYPE; set => SetProperty(ref _COMMODITY_TYPE, value); }
+
+        private string _REVISION;
+        public string REVISION { get => _REVISION; set => SetProperty(ref _REVISION, value); }
+
+        private string _WO;
+        /// <summary>
+        /// 工单号
+        /// </summary>
+        public string WO { get => _WO; set => SetProperty(ref _WO, value); }
+
+        private string _MFG_LOT;
+        public string MFG_LOT { get => _MFG_LOT; set => SetProperty(ref _MFG_LOT, value); }
+
+        private string _MFG_ASSY_LINE;
+        /// <summary>
+        /// 线体
+        /// </summary>
+        public string MFG_ASSY_LINE { get => _MFG_ASSY_LINE; set => SetProperty(ref _MFG_ASSY_LINE, value); }
+
+        private string _PROCESS_OUTCOME;
+        /// <summary>
+        /// 结果
+        /// </summary>
+        public string PROCESS_OUTCOME { get => _PROCESS_OUTCOME; set => SetProperty(ref _PROCESS_OUTCOME, value); }
+
+        private string _PROCESS_MACHINE_ID;
+        /// <summary>
+        /// 设备ID
+        /// </summary>
+        public string PROCESS_MACHINE_ID { get => _PROCESS_MACHINE_ID; set => SetProperty(ref _PROCESS_MACHINE_ID, value); }
+
+        private string _CTQ_UNIT_OF_MEASURE;
+        /// <summary>
+        /// 单位
+        /// </summary>
+        public string CTQ_UNIT_OF_MEASURE { get => _CTQ_UNIT_OF_MEASURE; set => SetProperty(ref _CTQ_UNIT_OF_MEASURE, value); }
+
+        private string _ERROR_MESSAGE;
+        /// <summary>
+        /// 报错信息
+        /// </summary>
+        public string ERROR_MESSAGE { get => _ERROR_MESSAGE; set => SetProperty(ref _ERROR_MESSAGE, value); }
+
+    }
+}

+ 49 - 1
TeamAAS-VM/Services/ConfigService.cs

@@ -52,6 +52,8 @@ namespace TeamAAS_VP.Services
             public static readonly string ScrewFeedersConfigurationPath = "..//Config//ScrewFeedersConfiguration.cfg";
             // 刷卡器配置路径
             public static readonly string CardReaderConfigurationPath = "..//Config//CardReaderConfiguration.cfg";
+            // 生产数据配置路径
+            public static readonly string DataConfigurationPath = "..//Config//DataConfiguration.cfg";
         }
 
         private readonly object _sync = new object();
@@ -68,7 +70,7 @@ namespace TeamAAS_VP.Services
         private ObservableCollection<LightControllerConfig> LightControllers { get; set; }
         // Device info
         private DeviceInfo _deviceInfo;
-
+        public CTQ_Data CtqData { get; set; }
         private PlcAddressConfig PlcAddressConfig { get; set; }
         // 单个电批配置
         private TeamAAS_VP.Models.ScrewDriver.ScrewDriverConfig _screwDriverConfig;
@@ -237,6 +239,14 @@ namespace TeamAAS_VP.Services
                     _cardReaderConfig = new SerialPortConfig();
                     FileHelper.WriteJsonFile(_cardReaderConfig, ConfigPaths.CardReaderConfigurationPath);
                 }
+
+                if (File.Exists(ConfigPaths.DataConfigurationPath))
+                    CtqData = FileHelper.ReadJsonFile<CTQ_Data>(ConfigPaths.DataConfigurationPath);
+                else
+                {
+                    CtqData = new CTQ_Data();
+                    FileHelper.WriteJsonFile(CtqData, ConfigPaths.DataConfigurationPath);
+                }
             }
         }
 
@@ -279,6 +289,8 @@ namespace TeamAAS_VP.Services
                 // save card reader config
                 if (_cardReaderConfig != null)
                     FileHelper.WriteJsonFile(_cardReaderConfig, ConfigPaths.CardReaderConfigurationPath);
+                if (CtqData != null)
+                    FileHelper.WriteJsonFile(CtqData, ConfigPaths.DataConfigurationPath);
             }
         }
 
@@ -419,6 +431,42 @@ namespace TeamAAS_VP.Services
         }
         #endregion
 
+        #region CTQData
+        /// <summary>
+        /// 获取CTQ信息配置
+        /// </summary>
+        public CTQ_Data GetCTQDataInfo()
+        {
+            lock (_sync)
+            {
+                if (CtqData == null)
+                {
+                    if (File.Exists(ConfigPaths.DataConfigurationPath))
+                        CtqData = FileHelper.ReadJsonFile<CTQ_Data>(ConfigPaths.DataConfigurationPath);
+                    else
+                    {
+                        CtqData = new CTQ_Data();
+                        FileHelper.WriteJsonFile(CtqData, ConfigPaths.DataConfigurationPath);
+                    }
+                }
+                return CtqData;
+            }
+        }
+
+        /// <summary>
+        /// 保存CTQ信息
+        /// </summary>
+        public void SaveCTQDataInfo(CTQ_Data cd)
+        {
+            if (cd == null) return;
+            lock (_sync)
+            {
+                CtqData = cd;
+                FileHelper.WriteJsonFile(CtqData, ConfigPaths.DataConfigurationPath);
+            }
+        }
+        #endregion
+
         #region Robots
         /// <summary>
         /// 获取所有机器人配置的只读集合。

+ 2 - 0
TeamAAS-VM/TeamAAS-VP.csproj

@@ -538,6 +538,8 @@
     <Compile Include="Events\MainTabSwitchNotification.cs" />
     <Compile Include="Interfaces\IMesService.cs" />
     <Compile Include="Models\AssemblyRecord.cs" />
+    <Compile Include="Models\CTQ_Data.cs" />
+    <Compile Include="Models\DataFormCtq.cs" />
     <Compile Include="Models\DeviceInfo.cs" />
     <Compile Include="Models\Feeder\ScrewFeederInfo.cs" />
     <Compile Include="Models\PhotoCaptureRecord.cs" />

+ 31 - 0
TeamAAS-VM/ViewModels/SettingViewModel.cs

@@ -335,6 +335,13 @@ namespace TeamAAS_VP.ViewModels
             set { SetProperty(ref _DeviceInfo, value); }
         }
 
+        private CTQ_Data _dataInfo;
+        public CTQ_Data DataInfo
+        {
+            get { return _dataInfo; }
+            set { SetProperty(ref _dataInfo, value); }
+        }
+
         private SerialPortConfig _CardReaderConfig;
         public SerialPortConfig CardReaderConfig
         {
@@ -461,6 +468,8 @@ namespace TeamAAS_VP.ViewModels
         public DelegateCommand<object> BrowsePressureCurvePathCommand =>
             _BrowsePressureCurvePathCommand ?? (_BrowsePressureCurvePathCommand = new DelegateCommand<object>(ExecuteBrowsePressureCurvePathCommand));
 
+        private DelegateCommand _SaveDataInfoCommand;
+        public DelegateCommand SaveDataInfoCommand => _SaveDataInfoCommand ?? (_SaveDataInfoCommand = new DelegateCommand(ExecuteSaveDataInfoCommand));
         #endregion
 
         #region 事件
@@ -1365,6 +1374,12 @@ namespace TeamAAS_VP.ViewModels
                 DeviceInfo = _configService.GetDeviceInfo();
             }
 
+            if (DataInfo == null)
+            {
+                // load device info
+                DataInfo = _configService.GetCTQDataInfo();
+            }
+
             if (CardReaderConfig == null)
             {
                 // load card reader config
@@ -1657,6 +1672,22 @@ namespace TeamAAS_VP.ViewModels
                 _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 });
             }
         }
+
+        private void ExecuteSaveDataInfoCommand()
+        {
+            try
+            {
+                if (DataInfo != null)
+                {
+                    _configService.SaveCTQDataInfo(DataInfo);
+                    _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
+                }
+            }
+            catch (Exception ex)
+            {
+                _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 });
+            }
+        }
         #endregion
     }
 }

+ 3 - 23
TeamAAS-VM/Views/SettingView.xaml

@@ -330,8 +330,8 @@
                         </StackPanel>
                     </Grid>
 
-                    <!--<Grid Margin="16"
-Grid.Row="1">
+                    <Grid Margin="16"
+                          Grid.Row="1">
               <Grid.RowDefinitions>
                   <RowDefinition Height="Auto" />
                   <RowDefinition Height="Auto" />
@@ -358,26 +358,6 @@ Grid.Row="1">
               <TextBox Grid.Row="0"
        Grid.Column="1"
        Text="{Binding DataInfo.PROCESS_NAME, Mode=TwoWay}"
-       Margin="6" />
-
-              <TextBlock Grid.Row="1"
-         Grid.Column="0"
-         Text="CTQ_LSL(压力下限):"
-         HorizontalAlignment="Right"
-         VerticalAlignment="Center" />
-              <TextBox Grid.Row="1"
-       Grid.Column="1"
-       Text="{Binding DataInfo.CTQ_LSL_Pressure, Mode=TwoWay}"
-       Margin="6" />
-
-              <TextBlock Grid.Row="2"
-         Grid.Column="0"
-         Text="CTQ_USL(压力上限):"
-         HorizontalAlignment="Right"
-         VerticalAlignment="Center" />
-              <TextBox Grid.Row="2"
-       Grid.Column="1"
-       Text="{Binding DataInfo.CTQ_USL_Pressure, Mode=TwoWay}"
        Margin="6" />
 
               <TextBlock Grid.Row="3"
@@ -458,7 +438,7 @@ Grid.Row="1">
                   <Button Style="{StaticResource MaterialDesignRaisedButton}"
           Command="{Binding SaveDataInfoCommand}">保存</Button>
               </StackPanel>
-          </Grid>-->
+          </Grid>
                 </Grid>
             </TabItem>