844184169 7 months ago
parent
commit
996e0ca11d

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

@@ -863,5 +863,122 @@ namespace TeamAAS_VP.Core
             }
             }
         }
         }
         #endregion
         #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
     }
     }
 }
 }

+ 101 - 14
TeamAAS-VM/Core/Management.cs

@@ -106,6 +106,12 @@ namespace TeamAAS_VP.Core
         /// 超时自动停止秒数
         /// 超时自动停止秒数
         /// </summary>
         /// </summary>
         private int _pressureMaxDurationSeconds = 30; //超时自动停止秒数
         private int _pressureMaxDurationSeconds = 30; //超时自动停止秒数
+        /// <summary>
+        /// 产品主sn
+        /// </summary>
+        string ProductMainSN = "";
+        string wo = "";
+        DateTime StartCtqTime = DateTime.Now;//开始采集Ctq数据的时间
         #endregion
         #endregion
 
 
         #region 属性
         #region 属性
@@ -192,6 +198,16 @@ namespace TeamAAS_VP.Core
             get { return _CTtime; }
             get { return _CTtime; }
             set { SetProperty(ref _CTtime, value); }
             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
         #endregion
 
 
         #region 命令
         #region 命令
@@ -1123,7 +1139,7 @@ namespace TeamAAS_VP.Core
             {
             {
                 foreach (var item in current.PickPoints)
                 foreach (var item in current.PickPoints)
                 {
                 {
-                    await item.WriteToPlcAddress(addressConfig.Out_Pick, plc);
+                    var res = await item.WriteToPlcAddress(addressConfig.Out_Pick, plc);
                 }
                 }
             }
             }
             if (current.SecPosCameraPoints != null && current.SecPosCameraPoints.Count > 0)
             if (current.SecPosCameraPoints != null && current.SecPosCameraPoints.Count > 0)
@@ -1846,22 +1862,38 @@ namespace TeamAAS_VP.Core
                                 return;
                                 return;
                             }
                             }
 
 
+                            // 获取机器人当前坐标
+                            var robot = _robotService.GetAllRobots().FirstOrDefault();
+                            if (robot == null)
+                            {
+                                SendTaskMessage($"未找到机器人,无法执行上相机锁附/组装拍照视觉任务", MessageLevel.Alarm);
+                                await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)2);
+                                return;
+
+                            }
+                            var currentPosition = robot.GetRobotPos();
+
                             // 执行视觉任务
                             // 执行视觉任务
                             var _cts = new CancellationTokenSource();
                             var _cts = new CancellationTokenSource();
-                            var visionResult = await _remoteCommandService.ExecutePhotoGetDistance(process, null, null, _cts.Token, cameraIndex, null);
+                            var visionResult = await _remoteCommandService.ExecutePhotoGetDistance(process, null, new double[] { currentPosition.X, currentPosition.Y, currentPosition.U }, _cts.Token, cameraIndex, null);
+                            if (visionResult.distance.Split(',')[0] == "1")
+                            {
+                                mes_cc.Clear();
+                            }
+                            if (visionResult.distance.Split(',')[0] == "2" && mes_cc.ContainsKey("2"))
+                            {
+                                mes_cc.Remove("2");
+                            }
+
                             if (visionResult.IsSucceed)
                             if (visionResult.IsSucceed)
                             {
                             {
-                                if (visionResult.distance.Split(',')[0] == "1")
-                                {
-                                    mes_cc.Clear();
-                                }
                                 mes_cc.Add(visionResult.distance.Split(',')[0], visionResult.distance.Split(',')[1]);
                                 mes_cc.Add(visionResult.distance.Split(',')[0], visionResult.distance.Split(',')[1]);
                                 await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
                                 await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
                                 SendTaskMessage($"点位{cameraIndex}检测OK", MessageLevel.Debug);
                                 SendTaskMessage($"点位{cameraIndex}检测OK", MessageLevel.Debug);
                             }
                             }
                             else
                             else
                             {
                             {
-                                mes_cc.Add($"{cameraIndex}","0");
+                                mes_cc.Add($"{cameraIndex}", "0");
                                 await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
                                 await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
                                 SendTaskMessage($"点位{cameraIndex}检测NG", MessageLevel.Error);
                                 SendTaskMessage($"点位{cameraIndex}检测NG", MessageLevel.Error);
                             }
                             }
@@ -2191,6 +2223,8 @@ namespace TeamAAS_VP.Core
 
 
                                     LogHelper.WriteLogMes($"【mes开始QUERY】");
                                     LogHelper.WriteLogMes($"【mes开始QUERY】");
                                     SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
                                     SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
+
+                                    StartCtqTime = DateTime.Now;
                                     (bool isSuccess, string response) = await _mesService.StationGetAsync(code, comp, 2);
                                     (bool isSuccess, string response) = await _mesService.StationGetAsync(code, comp, 2);
                                     if (i == 0)
                                     if (i == 0)
                                     {
                                     {
@@ -2208,7 +2242,20 @@ namespace TeamAAS_VP.Core
 
 
                                         LogHelper.WriteLogMes($"询问mes成功");
                                         LogHelper.WriteLogMes($"询问mes成功");
                                         SendTaskMessage($"询问mes成功", MessageLevel.Debug);
                                         SendTaskMessage($"询问mes成功", MessageLevel.Debug);
-
+                                        if (response != "MES功能未启用!")
+                                        {
+                                            string[] items = response.Split('\n');
+                                            if (items[3].Contains("sn="))
+                                            {
+                                                ProductMainSN = items[3].Replace("sn=", "");
+                                            }
+                                            SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
+                                            if (items[5].Contains("wo="))
+                                            {
+                                                wo = items[5].Replace("wo=", "");
+                                            }
+                                            SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
+                                        }
                                         LogHelper.WriteLogMes($"【mes结束QUERY】");
                                         LogHelper.WriteLogMes($"【mes结束QUERY】");
                                         SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
                                         SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
                                         return;
                                         return;
@@ -2244,7 +2291,7 @@ namespace TeamAAS_VP.Core
                                     //读取压力值
                                     //读取压力值
                                     float pressure = plc.ReadNode<float>(string.Format(addressConfig.In_PressureValue.Address, i));
                                     float pressure = plc.ReadNode<float>(string.Format(addressConfig.In_PressureValue.Address, i));
                                     AssemblyRecord assemblyRecord = new AssemblyRecord();
                                     AssemblyRecord assemblyRecord = new AssemblyRecord();
-                                    assemblyRecord.ProductSN = code;
+                                    assemblyRecord.ProductSN = ProductMainSN;
                                     assemblyRecord.RecipeName = currentProduct.Name;
                                     assemblyRecord.RecipeName = currentProduct.Name;
                                     assemblyRecord.PartSN = PartSN;
                                     assemblyRecord.PartSN = PartSN;
                                     assemblyRecord.AssemblyDurationSeconds = ct;
                                     assemblyRecord.AssemblyDurationSeconds = ct;
@@ -2270,7 +2317,7 @@ namespace TeamAAS_VP.Core
                                         await _systemDatabaseService.RecordProductionAsync(new ProductionRecord()
                                         await _systemDatabaseService.RecordProductionAsync(new ProductionRecord()
                                         {
                                         {
                                             ProductName = currentProduct.Name,
                                             ProductName = currentProduct.Name,
-                                            ProductCode = code,
+                                            ProductCode = ProductMainSN,
                                             DeviceId = i,
                                             DeviceId = i,
                                             DeviceName = "",
                                             DeviceName = "",
                                             Category = resultIndex == 1 ? "OK" : "NG",
                                             Category = resultIndex == 1 ? "OK" : "NG",
@@ -2291,16 +2338,16 @@ namespace TeamAAS_VP.Core
                                     await _systemDatabaseService.RecordAssemblyAsync(assemblyRecord);
                                     await _systemDatabaseService.RecordAssemblyAsync(assemblyRecord);
                                     LogHelper.WriteLogMes($"【mes开始ADD】");
                                     LogHelper.WriteLogMes($"【mes开始ADD】");
                                     SendTaskMessage($"mes开始ADD", MessageLevel.Info);
                                     SendTaskMessage($"mes开始ADD", MessageLevel.Info);
-                                    string assypress= "";string cc = "";
+                                    string assypress = ""; string cc = "";
                                     cc = string.Join(",", mes_cc.OrderBy(kv => kv.Key, StringComparer.Ordinal).Select(kv => kv.Value));
                                     cc = string.Join(",", mes_cc.OrderBy(kv => kv.Key, StringComparer.Ordinal).Select(kv => kv.Value));
                                     assypress = currentPressure.ToString("F2");
                                     assypress = currentPressure.ToString("F2");
                                     var res = FileHelper.ReadJsonFile<PressureModel>(FilePath.PressureParamterConfigPath);
                                     var res = FileHelper.ReadJsonFile<PressureModel>(FilePath.PressureParamterConfigPath);
-                                    if (res.PressureUpLimit>0)
+                                    if (res.PressureUpLimit > 0)
                                     {
                                     {
 
 
                                     }
                                     }
                                     //cc-复检cc,assypress-组装站压力
                                     //cc-复检cc,assypress-组装站压力
-                                    (bool isSuccess, string response) = await _mesService.SubmitGetAsync(code, comp, cc,assypress, resultIndex == 1 ? true : false, _LastMesCheckTime[i], DateTime.UtcNow);
+                                    (bool isSuccess, string response) = await _mesService.SubmitGetAsync(ProductMainSN, comp, cc, assypress, resultIndex == 1 ? true : false, _LastMesCheckTime[i], DateTime.UtcNow);
                                     if (isSuccess)
                                     if (isSuccess)
                                     {
                                     {
                                         LogHelper.WriteLogMes($"上传mes成功");
                                         LogHelper.WriteLogMes($"上传mes成功");
@@ -2315,6 +2362,46 @@ namespace TeamAAS_VP.Core
                                     await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)3);
                                     await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)3);
                                     LogHelper.WriteLogMes($"【mes结束ADD】");
                                     LogHelper.WriteLogMes($"【mes结束ADD】");
                                     SendTaskMessage($"mes结束ADD", MessageLevel.Info);
                                     SendTaskMessage($"mes结束ADD", MessageLevel.Info);
+                                    mes_cc.Clear();
+                                    try
+                                    {
+                                        #region 数据
+                                        var cdata = _configService.GetCTQDataInfo();//获取ctq数据参数
+                                        bool assyPress = true;
+                                        DFC.Clear();
+                                        DFC.Add(new DataFormCtq
+                                        {
+                                            PPID = ProductMainSN,
+                                            PROCESS_NAME = cdata.PROCESS_NAME,
+                                            PROCESS_START_TIME = StartCtqTime.ToString(),
+                                            CTQ_NAME = "CC",
+                                            CTQ_VALUE = cc.Replace(",", ";"),
+                                            //CTQ_VALUE = 0,
+                                            CTQ_LSL = 0,
+                                            CTQ_USL = 10,
+                                            PROCESS_END_TIME = DateTime.Now.ToString(),
+                                            SUPPLIER_NAME = cdata.SUPPLIER_NAME,
+                                            COMMODITY_TYPE = cdata.COMMODITY_TYPE,
+                                            REVISION = cdata.REVISION,
+                                            WO = wo,
+                                            MFG_LOT = cdata.MFG_LOT,
+                                            MFG_ASSY_LINE = cdata.MFG_ASSY_LINE,
+                                            PROCESS_OUTCOME = assyPress ? "PASS" : "FAIL",
+                                            PROCESS_MACHINE_ID = cdata.PROCESS_MACHINE_ID,
+                                            CTQ_UNIT_OF_MEASURE = "mm",
+                                            ERROR_MESSAGE = assyPress ? "" : "CC OOS"
+                                        });
+                                        foreach (var item in DFC)
+                                        {
+                                            FileHelper.WriteDataToCSV(item);
+                                        }
+                                        SendTaskMessage("CTQ数据存储完成", MessageLevel.Info);
+                                        #endregion
+                                    }
+                                    catch (Exception ex)
+                                    {
+                                        SendTaskMessage("CTQ数据存储时出错" + ex.Message, MessageLevel.Error);
+                                    }
                                     return;
                                     return;
                                 }
                                 }
                                 else
                                 else
@@ -2343,7 +2430,7 @@ namespace TeamAAS_VP.Core
                                     return;
                                     return;
                                 }
                                 }
                                 var code = plc.ReadNode<string>(string.Format(addressConfig.In_Code.Address, i));
                                 var code = plc.ReadNode<string>(string.Format(addressConfig.In_Code.Address, i));
-                                
+
                                 if (state == 1)
                                 if (state == 1)
                                 {
                                 {
                                     SendTaskMessage($"收到开始保压信号[{i}]...", MessageLevel.Debug);
                                     SendTaskMessage($"收到开始保压信号[{i}]...", MessageLevel.Debug);

+ 4 - 1
TeamAAS-VM/Interfaces/IConfigService.cs

@@ -215,7 +215,7 @@ namespace TeamAAS_VP.Interfaces
         /// <returns></returns>
         /// <returns></returns>
         PlcAddressConfig GetPlcAddresses();
         PlcAddressConfig GetPlcAddresses();
 
 
-        
+
         // Background TCP
         // Background TCP
 
 
         /// <summary>
         /// <summary>
@@ -502,5 +502,8 @@ namespace TeamAAS_VP.Interfaces
         /// </summary>
         /// </summary>
         /// <param name="config"></param>
         /// <param name="config"></param>
         void SaveCardReaderConfig(SerialPortConfig config);
         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 string _CTQ_VALUE;
+        /// <summary>
+        /// 检测值
+        /// </summary>
+        public string 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 - 0
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 ScrewFeedersConfigurationPath = "..//Config//ScrewFeedersConfiguration.cfg";
             // 刷卡器配置路径
             // 刷卡器配置路径
             public static readonly string CardReaderConfigurationPath = "..//Config//CardReaderConfiguration.cfg";
             public static readonly string CardReaderConfigurationPath = "..//Config//CardReaderConfiguration.cfg";
+            // 生产数据配置路径
+            public static readonly string DataConfigurationPath = "..//Config//DataConfiguration.cfg";
         }
         }
 
 
         private readonly object _sync = new object();
         private readonly object _sync = new object();
@@ -69,6 +71,7 @@ namespace TeamAAS_VP.Services
         // Device info
         // Device info
         private DeviceInfo _deviceInfo;
         private DeviceInfo _deviceInfo;
 
 
+        public CTQ_Data CtqData { get; set; }
         private PlcAddressConfig PlcAddressConfig { get; set; }
         private PlcAddressConfig PlcAddressConfig { get; set; }
         // 单个电批配置
         // 单个电批配置
         private TeamAAS_VP.Models.ScrewDriver.ScrewDriverConfig _screwDriverConfig;
         private TeamAAS_VP.Models.ScrewDriver.ScrewDriverConfig _screwDriverConfig;
@@ -237,6 +240,14 @@ namespace TeamAAS_VP.Services
                     _cardReaderConfig = new SerialPortConfig();
                     _cardReaderConfig = new SerialPortConfig();
                     FileHelper.WriteJsonFile(_cardReaderConfig, ConfigPaths.CardReaderConfigurationPath);
                     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 +290,8 @@ namespace TeamAAS_VP.Services
                 // save card reader config
                 // save card reader config
                 if (_cardReaderConfig != null)
                 if (_cardReaderConfig != null)
                     FileHelper.WriteJsonFile(_cardReaderConfig, ConfigPaths.CardReaderConfigurationPath);
                     FileHelper.WriteJsonFile(_cardReaderConfig, ConfigPaths.CardReaderConfigurationPath);
+                if (CtqData != null)
+                    FileHelper.WriteJsonFile(CtqData, ConfigPaths.DataConfigurationPath);
             }
             }
         }
         }
 
 
@@ -419,6 +432,42 @@ namespace TeamAAS_VP.Services
         }
         }
         #endregion
         #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
         #region Robots
         /// <summary>
         /// <summary>
         /// 获取所有机器人配置的只读集合。
         /// 获取所有机器人配置的只读集合。

+ 2 - 2
TeamAAS-VM/Services/MesService.cs

@@ -99,11 +99,11 @@ namespace TeamAAS_VP.Services
             string url = "";
             string url = "";
             if (device.F == "PTL")
             if (device.F == "PTL")
             {
             {
-                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&comp={device.comp}:{comp}&p=unit_process_check,message,model";
+                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&comp={device.comp}:{comp}&p=unit_process_check,message,model,sn,wo";
             }
             }
             else
             else
             {
             {
-                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&p=unit_process_check,message,model";
+                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&p=unit_process_check,message,model,sn,wo";
             }
             }
 
 
             LogHelper.WriteLogMes($"¡¾Ñ¯ÎÊURL¡¿{url}");
             LogHelper.WriteLogMes($"¡¾Ñ¯ÎÊURL¡¿{url}");

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

@@ -538,6 +538,8 @@
     <Compile Include="Events\MainTabSwitchNotification.cs" />
     <Compile Include="Events\MainTabSwitchNotification.cs" />
     <Compile Include="Interfaces\IMesService.cs" />
     <Compile Include="Interfaces\IMesService.cs" />
     <Compile Include="Models\AssemblyRecord.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\DeviceInfo.cs" />
     <Compile Include="Models\Feeder\ScrewFeederInfo.cs" />
     <Compile Include="Models\Feeder\ScrewFeederInfo.cs" />
     <Compile Include="Models\PhotoCaptureRecord.cs" />
     <Compile Include="Models\PhotoCaptureRecord.cs" />