|
|
@@ -1394,7 +1394,7 @@ namespace TeamAAS_VP.Core
|
|
|
string[] revision { get; set; } = new string[10];//产品revision
|
|
|
|
|
|
Dictionary<string, string> dataToMes = new Dictionary<string, string>();//上传mes的数据
|
|
|
- List<string> resultToMes = new List<string>();//上传mes的数据
|
|
|
+ List<string> resultToMes { get; set; } = new List<string>();//上传mes的数据
|
|
|
/// <summary>
|
|
|
/// PLC命令触发时
|
|
|
/// </summary>
|
|
|
@@ -1672,11 +1672,21 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
UpCameraPutResults[cameraIndex] = new PointF((float)visionResult.X, (float)visionResult.Y);
|
|
|
}
|
|
|
-
|
|
|
+ if (resultToMes.Contains($"Screw{cameraIndex}_Fail"))
|
|
|
+ {
|
|
|
+ resultToMes.Remove($"Screw{cameraIndex}_Fail");
|
|
|
+ SendTaskMessage($"Screw{cameraIndex}:重复拍照成功", MessageLevel.Debug);
|
|
|
+ }
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)1);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ if (!resultToMes.Contains($"Screw{cameraIndex}_Fail"))
|
|
|
+ {
|
|
|
+ resultToMes.Add($"Screw{cameraIndex}_Fail");
|
|
|
+ SendTaskMessage($"Screw{cameraIndex}:拍照失败", MessageLevel.Error);
|
|
|
+ }
|
|
|
+
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)2);
|
|
|
}
|
|
|
}
|
|
|
@@ -2015,7 +2025,11 @@ namespace TeamAAS_VP.Core
|
|
|
//dataToMes.Add($"LastResult{lockResult.Number}", $"{lastRes}");
|
|
|
if (!lastRes)//如果不合格,则在MES结果中添加"Screw{lockResult.Number}_Fail"
|
|
|
{
|
|
|
- resultToMes.Add($"Screw{lockResult.Number}_Fail");
|
|
|
+ if (!resultToMes.Contains($"Screw{lockResult.Number}_Fail"))
|
|
|
+ {
|
|
|
+ resultToMes.Add($"Screw{lockResult.Number}_Fail");
|
|
|
+ SendTaskMessage($"Screw{lockResult.Number}:锁附不合格", MessageLevel.Error);
|
|
|
+ }
|
|
|
}
|
|
|
SendTaskMessage($"螺丝序号:{lockResult.Number},扭力:{lockResult.LockTorque},压力:{lockResult.Pressure},圈数:{lockResult.LockTurns}", MessageLevel.Info);
|
|
|
_maxPressure = 0;
|
|
|
@@ -2564,82 +2578,113 @@ namespace TeamAAS_VP.Core
|
|
|
else //直接基于RFID询问是否过站
|
|
|
{
|
|
|
SendTaskMessage($"基于RFID询问是否过站", MessageLevel.Debug);
|
|
|
- (bool isSuccess, string response) = await _mesService.StationGetAsync(code, "", 2);//询问mes
|
|
|
+ (bool isSuccess, string response) = await _mesService.StationGetExAsync(code, "", 2);
|
|
|
if (isSuccess)
|
|
|
{
|
|
|
+ string ProductMainSN_Temp = "";
|
|
|
LogHelper.WriteLogMes($"询问mes成功");
|
|
|
SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
-
|
|
|
- var item = response.Split('\n');
|
|
|
+ string[] item = response.Split('\n');
|
|
|
+ //获取过度件sn
|
|
|
string snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
if (snItem != null)
|
|
|
{
|
|
|
- ProductMainSN[i] = snItem.Replace("sn=", "").Trim();
|
|
|
- _productService.CurrentProductCode = ProductMainSN[i];
|
|
|
- //_eventAggregator.GetEvent<DelaySaveImageNotification>().Publish(true);//通知界面延迟保存图片,等待MES查询结果返回,避免图片和数据不同步
|
|
|
- SendTaskMessage($"产品主sn:{ProductMainSN[i]}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string woItem = item.FirstOrDefault(f => f.Contains("wo="));
|
|
|
- if (woItem != null)
|
|
|
- {
|
|
|
- wo[i] = woItem.Replace("wo=", "").Trim();
|
|
|
- SendTaskMessage($"工单信息:{wo[i]}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
|
|
|
- if (modelItem != null)
|
|
|
- {
|
|
|
- model_num[i] = modelItem.Replace("model_num=", "").Trim();
|
|
|
- SendTaskMessage($"model_num:{model_num[i]}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string colorItem = item.FirstOrDefault(f => f.Contains("color="));
|
|
|
- if (colorItem != null)
|
|
|
- {
|
|
|
- color[i] = colorItem.Replace("color=", "").Trim();
|
|
|
- SendTaskMessage($"color:{color[i]}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
|
|
|
- if (ppidItem != null)
|
|
|
- {
|
|
|
- ppid[i] = ppidItem.Replace("ppid=", "").Trim();
|
|
|
- SendTaskMessage($"ppid:{ppid[i]}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string revisionItem = item.FirstOrDefault(f => f.Contains("stage="));
|
|
|
- if (revisionItem != null)
|
|
|
- {
|
|
|
- revision[i] = revisionItem.Replace("stage=", "").Trim();
|
|
|
- SendTaskMessage($"stage:{revision[i]}", MessageLevel.Info);
|
|
|
+ ProductMainSN_Temp = snItem.Replace("sn=", "").Trim();
|
|
|
+ SendTaskMessage($"过度件sn:{ProductMainSN_Temp}", MessageLevel.Info);
|
|
|
}
|
|
|
|
|
|
- //切换产品
|
|
|
- if (i == 0)//i=0时才会切换产品
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ (bool isSuccess2, string response2) = await _mesService.StationGetAsync(ProductMainSN_Temp, "", 2);//询问mes
|
|
|
+ if (isSuccess2)
|
|
|
{
|
|
|
- var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num[i], color[i]);
|
|
|
- if (q != null && !string.IsNullOrEmpty(q.ProductName))
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response2}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ item = response2.Split('\n');
|
|
|
+ snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem != null)
|
|
|
+ {
|
|
|
+ ProductMainSN[i] = snItem.Replace("sn=", "").Trim();
|
|
|
+ _productService.CurrentProductCode = ProductMainSN[i];
|
|
|
+ SendTaskMessage($"产品主sn:{ProductMainSN[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string woItem = item.FirstOrDefault(f => f.Contains("wo="));
|
|
|
+ if (woItem != null)
|
|
|
{
|
|
|
- ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
|
- Guid productId = Guid.Empty;
|
|
|
- foreach (var itt in ProductList)
|
|
|
+ wo[i] = woItem.Replace("wo=", "").Trim();
|
|
|
+ SendTaskMessage($"工单信息:{wo[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
|
|
|
+ if (modelItem != null)
|
|
|
+ {
|
|
|
+ model_num[i] = modelItem.Replace("model_num=", "").Trim();
|
|
|
+ SendTaskMessage($"model_num:{model_num[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string colorItem = item.FirstOrDefault(f => f.Contains("color="));
|
|
|
+ if (colorItem != null)
|
|
|
+ {
|
|
|
+ color[i] = colorItem.Replace("color=", "").Trim();
|
|
|
+ SendTaskMessage($"color:{color[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
|
|
|
+ if (ppidItem != null)
|
|
|
+ {
|
|
|
+ ppid[i] = ppidItem.Replace("ppid=", "").Trim();
|
|
|
+ SendTaskMessage($"ppid:{ppid[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string revisionItem = item.FirstOrDefault(f => f.Contains("stage="));
|
|
|
+ if (revisionItem != null)
|
|
|
+ {
|
|
|
+ revision[i] = revisionItem.Replace("stage=", "").Trim();
|
|
|
+ SendTaskMessage($"stage:{revision[i]}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"第二次询问mes成功");
|
|
|
+ SendTaskMessage($"第二次询问mes成功:{response2}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ //切换产品
|
|
|
+ if (i == 0)//i=0时才会切换产品
|
|
|
+ {
|
|
|
+ var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num[i], color[i]);
|
|
|
+ if (q != null && !string.IsNullOrEmpty(q.ProductName))
|
|
|
{
|
|
|
- if (itt.Name == q.ProductName)
|
|
|
+ ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
|
+ Guid productId = Guid.Empty;
|
|
|
+ foreach (var itt in ProductList)
|
|
|
+ {
|
|
|
+ if (itt.Name == q.ProductName)
|
|
|
+ {
|
|
|
+ productId = itt.ID;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentProduct.ID != productId)
|
|
|
{
|
|
|
- productId = itt.ID;
|
|
|
- break;
|
|
|
+ //切换产品
|
|
|
+ await _productService.LoadProductAsync(productId);
|
|
|
+ _productService.SetCurrentProduct(productId);
|
|
|
+ await WriteParameterToPlcExAsync();
|
|
|
+ SendTaskMessage($"切换产品成功", MessageLevel.Debug);
|
|
|
}
|
|
|
}
|
|
|
- if (currentProduct.ID != productId)
|
|
|
- {
|
|
|
- //切换产品
|
|
|
- await _productService.LoadProductAsync(productId);
|
|
|
- _productService.SetCurrentProduct(productId);
|
|
|
- await WriteParameterToPlcExAsync();
|
|
|
- SendTaskMessage($"切换产品成功", MessageLevel.Debug);
|
|
|
- }
|
|
|
}
|
|
|
+
|
|
|
+ //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
+
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"第二次询问mes失败");
|
|
|
+ SendTaskMessage($"第二次询问mes失败:{response2}", MessageLevel.Error);
|
|
|
|
|
|
- //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
- await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
- await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
+ //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -2660,7 +2705,6 @@ namespace TeamAAS_VP.Core
|
|
|
if (i == 0)
|
|
|
{
|
|
|
_productService.CurrentProductCode = ProductMainSN[i];
|
|
|
- //_eventAggregator.GetEvent<DelaySaveImageNotification>().Publish(true);//通知界面延迟保存图片,等待MES查询结果返回,避免图片和数据不同步
|
|
|
}
|
|
|
|
|
|
LogHelper.WriteLogMes($"【未启用mes】");
|