|
|
@@ -8,6 +8,7 @@ using Prism.Events;
|
|
|
using Prism.Ioc;
|
|
|
using Prism.Mvvm;
|
|
|
using Prism.Regions;
|
|
|
+using SqlSugar;
|
|
|
using SqlSugar.SplitTableExtensions;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
@@ -100,6 +101,8 @@ namespace TeamAAS_VP.Core
|
|
|
private readonly ManualResetEventSlim _scanDoneEvent = new ManualResetEventSlim(false);
|
|
|
//键盘数据
|
|
|
public Dictionary<string, double> keyData = new Dictionary<string, double>{};
|
|
|
+ //键盘单独数据
|
|
|
+ public Dictionary<string, double> keyData1 = new Dictionary<string, double> { };
|
|
|
//键盘差值
|
|
|
public bool isValueOk;
|
|
|
|
|
|
@@ -2309,7 +2312,7 @@ namespace TeamAAS_VP.Core
|
|
|
await _remoteCommandService.SetLightBeforePhoto(selectedProcedure);
|
|
|
}
|
|
|
|
|
|
- if(sysConfig.PhotosUse==true)
|
|
|
+ if(sysConfig.PhotosUse==true)
|
|
|
{
|
|
|
bool Is3dPhoto = Is3D(prcId);
|
|
|
var tt=await GrabImageEx(cameraIndex, prcId, Is3dPhoto);
|
|
|
@@ -2320,7 +2323,7 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
|
await ExecuteProcedureAsync(cameraIndex, prcId, tt.imges, Is3dPhoto);
|
|
|
}
|
|
|
- else
|
|
|
+ else
|
|
|
{
|
|
|
bool Is3dPhoto = Is3D(prcId);
|
|
|
_ImageTaskList.Add(GrabImageEx(cameraIndex, prcId, Is3dPhoto));
|
|
|
@@ -2658,6 +2661,8 @@ namespace TeamAAS_VP.Core
|
|
|
//读取产品结果
|
|
|
|
|
|
Int16 resultIndex = plc.ReadNode<Int16>(string.Format(addressConfig.In_Result.Address, i));
|
|
|
+ SendTaskMessage($"读取plc结果{resultIndex}", MessageLevel.Debug);
|
|
|
+ ShowMes_Result = resultIndex == 1 ? true : false;
|
|
|
if (homeview.IsResultTrue == false)
|
|
|
{
|
|
|
resultIndex = 1;
|
|
|
@@ -2726,27 +2731,39 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
}
|
|
|
bool allSuccess = true;
|
|
|
- bool ok=false;
|
|
|
- if (keyData != null)
|
|
|
+ bool ok = false;
|
|
|
+ if (stationConfig.SaveCsvkeyData)
|
|
|
{
|
|
|
- ok = CheckKeyBoardValue(keyData, out string msg);
|
|
|
+
|
|
|
+ if (keyData != null)
|
|
|
+ {
|
|
|
+ ok = CheckKeyBoardValue(keyData, out string msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ok && resultIndex == 1 ? true : false && isValueOk)
|
|
|
+ {
|
|
|
+ ShowMes_Result = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ShowMes_Result = false;
|
|
|
+ }
|
|
|
+ if (homeview.IsResultTrue == false)
|
|
|
+ {
|
|
|
+ ShowMes_Result = true;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- if (ok && resultIndex == 1 ? true : false && isValueOk)
|
|
|
- {
|
|
|
- ShowMes_Result = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ShowMes_Result = false;
|
|
|
- }
|
|
|
- if (homeview.IsResultTrue == false)
|
|
|
- {
|
|
|
- ShowMes_Result = true;
|
|
|
- }
|
|
|
- keyData.Clear();
|
|
|
+ //StringBuilder submitDataError2 = new StringBuilder();
|
|
|
+ //foreach (var item in keyData)
|
|
|
+ //{
|
|
|
+
|
|
|
+ // submitData.Append($"{item.Key}={item.Value}");
|
|
|
+
|
|
|
+ //}
|
|
|
+ //keyData.Clear();
|
|
|
// ShowMes_Result = resultIndex == 1 ? true : false;
|
|
|
-
|
|
|
+
|
|
|
//(bool isSuccess, string response) = await _mesService.SubmitGetAsync(ProductMainSN, "", submitData.ToString(), resultIndex == 1 ? true : false, _LastMesCheckTime[i], serverTimeResult.Now);
|
|
|
if (submitData.Length > 0)
|
|
|
{
|
|
|
@@ -2793,7 +2810,7 @@ namespace TeamAAS_VP.Core
|
|
|
string saveppid = "NA";
|
|
|
if (stationConfig.SaveCsvPPID) saveppid = ppid;
|
|
|
Dictionary<string, double> adjacentDiffDict = GetAdjacentDiffDict(keyData);
|
|
|
-
|
|
|
+ // Dictionary<string, double> adjacentDiffDict1 = GetAdjacentDiffDict(keyData1);
|
|
|
//判断锁付路径字符串是否为空,如果不为空则保存,否则不保存
|
|
|
if (!string.IsNullOrEmpty(stationConfig.SaveCsvPath))
|
|
|
{
|
|
|
@@ -2809,6 +2826,10 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
item.PhotoName = "'=" + "_" + k.ToString();
|
|
|
}
|
|
|
+ //if (item.PhotoName=="-"+k.ToString())
|
|
|
+ //{
|
|
|
+ // item.PhotoName = "_" + k.ToString();
|
|
|
+ //}
|
|
|
}
|
|
|
DFC.Add(new DataFormCtq
|
|
|
{
|
|
|
@@ -2817,6 +2838,7 @@ namespace TeamAAS_VP.Core
|
|
|
PROCESS_START_TIME = _LastMesCheckTime[i].ToString("o"),
|
|
|
CTQ_NAME = item.PhotoName,
|
|
|
CTQ_VALUE = item.ResultData.Replace(",", ";"),
|
|
|
+ //CTQ_VALUEE=item.ResultData1,
|
|
|
CTQ_LSL = item.DownLimit,
|
|
|
CTQ_USL = item.UpLimit,
|
|
|
PROCESS_END_TIME = serverTimeResult.Now.ToString("o"),
|
|
|
@@ -2837,39 +2859,74 @@ namespace TeamAAS_VP.Core
|
|
|
PD_ATTR_05 = "",
|
|
|
});
|
|
|
}
|
|
|
- foreach (var items in adjacentDiffDict)
|
|
|
+ if (stationConfig.SaveCsvkeyData)
|
|
|
{
|
|
|
- string pairkey = items.Key;
|
|
|
- string diffvalue = items.Value.ToString("F3");
|
|
|
-
|
|
|
- DFC.Add(new DataFormCtq
|
|
|
+ foreach (var items in adjacentDiffDict)
|
|
|
{
|
|
|
- PPID = saveppid,
|
|
|
- PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
|
|
|
- PROCESS_START_TIME = _LastMesCheckTime[i].ToString("o"),
|
|
|
- CTQ_NAME = pairkey,
|
|
|
- CTQ_VALUE = diffvalue,
|
|
|
- CTQ_LSL = "0",
|
|
|
- CTQ_USL = "0.3",
|
|
|
- PROCESS_END_TIME = serverTimeResult.Now.ToString("o"),
|
|
|
- SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
|
|
|
- COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
|
|
|
- REVISION = stage,//
|
|
|
- WO = wo,//
|
|
|
- MFG_LOT = stationConfig.DataInfo.MFG_LOT,//
|
|
|
- MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
|
|
|
- PROCESS_OUTCOME = ok ? "Pass":"FAIL",
|
|
|
- PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
|
|
|
- CTQ_UNIT_OF_MEASURE = "mm",
|
|
|
- ERROR_MESSAGE = ok ? "":$"{diffvalue}",
|
|
|
- PD_ATTR_01 = ProductMainSN,//
|
|
|
- PD_ATTR_02 = "",
|
|
|
- PD_ATTR_03 = "",
|
|
|
- PD_ATTR_04 = code,
|
|
|
- PD_ATTR_05 = "",
|
|
|
- });
|
|
|
+ string pairkey = items.Key;
|
|
|
+ string diffvalue = items.Value.ToString("F3");
|
|
|
+ DFC.Add(new DataFormCtq
|
|
|
+ {
|
|
|
+ PPID = saveppid,
|
|
|
+ PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
|
|
|
+ PROCESS_START_TIME = _LastMesCheckTime[i].ToString("o"),
|
|
|
+ CTQ_NAME = pairkey,
|
|
|
+ CTQ_VALUE = diffvalue,
|
|
|
+ CTQ_LSL = "-0.3",
|
|
|
+ CTQ_USL = "0.3",
|
|
|
+ PROCESS_END_TIME = serverTimeResult.Now.ToString("o"),
|
|
|
+ SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
|
|
|
+ COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
|
|
|
+ REVISION = stage,//
|
|
|
+ WO = wo,//
|
|
|
+ MFG_LOT = stationConfig.DataInfo.MFG_LOT,//
|
|
|
+ MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
|
|
|
+ PROCESS_OUTCOME = ok ? "Pass" : "FAIL",
|
|
|
+ PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
|
|
|
+ CTQ_UNIT_OF_MEASURE = "mm",
|
|
|
+ ERROR_MESSAGE = ok ? "" : $"{diffvalue}",
|
|
|
+ PD_ATTR_01 = ProductMainSN,//
|
|
|
+ PD_ATTR_02 = "",
|
|
|
+ PD_ATTR_03 = "",
|
|
|
+ PD_ATTR_04 = code,
|
|
|
+ PD_ATTR_05 = "",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ foreach (var items in keyData1)
|
|
|
+ {
|
|
|
+ string pairkey1 = items.Key;
|
|
|
+ string diffvalue1 = items.Value.ToString("F3");
|
|
|
+ DFC.Add(new DataFormCtq
|
|
|
+ {
|
|
|
+ PPID = saveppid,
|
|
|
+ PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
|
|
|
+ PROCESS_START_TIME = _LastMesCheckTime[i].ToString("o"),
|
|
|
+ CTQ_NAME = pairkey1,
|
|
|
+ CTQ_VALUE = diffvalue1,
|
|
|
+ CTQ_LSL = "0",
|
|
|
+ CTQ_USL = "0.3",
|
|
|
+ PROCESS_END_TIME = serverTimeResult.Now.ToString("o"),
|
|
|
+ SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
|
|
|
+ COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
|
|
|
+ REVISION = stage,//
|
|
|
+ WO = wo,//
|
|
|
+ MFG_LOT = stationConfig.DataInfo.MFG_LOT,//
|
|
|
+ MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
|
|
|
+ PROCESS_OUTCOME = ok ? "Pass" : "FAIL",
|
|
|
+ PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
|
|
|
+ CTQ_UNIT_OF_MEASURE = "mm",
|
|
|
+ ERROR_MESSAGE = ok ? "" : $"{diffvalue1}",
|
|
|
+ PD_ATTR_01 = ProductMainSN,//
|
|
|
+ PD_ATTR_02 = "0.15",
|
|
|
+ PD_ATTR_03 = "",
|
|
|
+ PD_ATTR_04 = code,
|
|
|
+ PD_ATTR_05 = "",
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
bool recordResult = RecordStationResult(i, DFC, ProductMainSN, serverTimeResult.Now.Subtract(_LastMesCheckTime[i]).TotalSeconds, _LastMesCheckTime[i], stationConfig.SaveCsvPath);
|
|
|
+ //keyData.Clear();
|
|
|
if (recordResult)
|
|
|
{
|
|
|
SendTaskMessage($"{i}:{stationConfig.DeviceName}产品记录保存成功", MessageLevel.Debug);
|
|
|
@@ -2963,8 +3020,10 @@ namespace TeamAAS_VP.Core
|
|
|
lock (_stateLock)
|
|
|
{
|
|
|
lockResultsAll.Clear();
|
|
|
+ keyData.Clear();
|
|
|
+ keyData1.Clear();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
ProductMainSN = "";
|
|
|
LogHelper.WriteLogMes($"【mes结束ADD】");
|
|
|
SendTaskMessage($"mes结束ADD", MessageLevel.Info);
|
|
|
@@ -3222,6 +3281,7 @@ namespace TeamAAS_VP.Core
|
|
|
//2. 结果分析
|
|
|
lock (_stateLock)
|
|
|
{
|
|
|
+ var stationConfig = _configService.GetDeviceInfo(0);
|
|
|
for (int i = 1; i <= visionResult.Count; i++)
|
|
|
{
|
|
|
|
|
|
@@ -3237,56 +3297,65 @@ namespace TeamAAS_VP.Core
|
|
|
//}
|
|
|
try
|
|
|
{
|
|
|
+
|
|
|
string[] strpoints1 = visionResult.Items[i].Split(',');
|
|
|
string[] body1 = strpoints1[1].Split(";");
|
|
|
|
|
|
- if (body1.Length >= 5)
|
|
|
- {
|
|
|
- string keyName = strpoints1[0].Split('-').Last().Trim();
|
|
|
- List<double> list = new List<double>();
|
|
|
-
|
|
|
- foreach (string v in body1)
|
|
|
+ if (stationConfig.SaveCsvkeyData)
|
|
|
+ {
|
|
|
+ if (body1.Length >= 5)
|
|
|
{
|
|
|
- if (double.TryParse(v.Trim(), out double num))
|
|
|
+ string keyName = strpoints1[0].Split('-').Last().Trim();
|
|
|
+ List<double> list = new List<double>();
|
|
|
+
|
|
|
+ foreach (string v in body1)
|
|
|
{
|
|
|
- if (num == 999)
|
|
|
+ if (double.TryParse(v.Trim(), out double num))
|
|
|
{
|
|
|
- continue;
|
|
|
+ if (num == 999)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ list.Add(num);
|
|
|
}
|
|
|
- list.Add(num);
|
|
|
}
|
|
|
- }
|
|
|
- if (list.Count == 0)
|
|
|
- {
|
|
|
- continue;
|
|
|
- }
|
|
|
+ if (list.Count == 0)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- double max = list.Max();
|
|
|
- double min = list.Min();
|
|
|
+ double max = list.Max();
|
|
|
+ double min = list.Min();
|
|
|
+ double chazhi = max - min;
|
|
|
+ double average = list.Average();
|
|
|
+ if (max - min <= 0.3)
|
|
|
+ {
|
|
|
+ isValueOk = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SendTaskMessage($"键盘格{keyName}最大值{max}与最小值{min}相差大于0.3!", MessageLevel.Error);
|
|
|
+ }
|
|
|
+ if (keyData != null)
|
|
|
+ {
|
|
|
+ if (!keyData.ContainsKey(keyName))
|
|
|
+ {
|
|
|
+ keyData.Add(keyName, average);
|
|
|
|
|
|
- if (max - min <= 0.3)
|
|
|
- {
|
|
|
- isValueOk = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- SendTaskMessage($"键盘格{keyName}最大值{max}与最小值{min}相差大于0.3!", MessageLevel.Error);
|
|
|
- }
|
|
|
- double average = list.Average();
|
|
|
- if (keyData != null)
|
|
|
- {
|
|
|
- if (!keyData.ContainsKey(keyName))
|
|
|
+ }
|
|
|
+ if (!keyData1.ContainsKey(keyName))
|
|
|
+ {
|
|
|
+ keyData1.Add(keyName, chazhi);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
keyData.Add(keyName, average);
|
|
|
+ keyData1.Add(keyName, chazhi);
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- keyData.Add(keyName, average);
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if (body1.Length > 1)
|
|
|
{
|
|
|
for (int j = 1; j <= body1.Length; j++)
|
|
|
@@ -3861,7 +3930,7 @@ namespace TeamAAS_VP.Core
|
|
|
if (!keyData.TryGetValue(key2, out double val2)) continue;
|
|
|
|
|
|
// 去重核心:保证 A-S 和 S-A 只存一次
|
|
|
- string pairKey = string.Compare(key1, key2) < 0 ? $"{key1}-{key2}" : $"{key2}-{key1}";
|
|
|
+ string pairKey = string.Compare(key1, key2) < 0 ? $"_{key1}_{key2}" : $"_{key2}_{key1}";
|
|
|
|
|
|
if (diffDict.ContainsKey(pairKey)) continue; // 跳过已存的
|
|
|
|