|
|
@@ -1,4 +1,5 @@
|
|
|
using Cognex.VisionPro;
|
|
|
+using Cognex.VisionPro.ToolBlock;
|
|
|
using CSScripting;
|
|
|
using NPOI.OpenXmlFormats.Dml.Diagram;
|
|
|
using NPOI.SS.Formula.Eval;
|
|
|
@@ -1503,6 +1504,7 @@ namespace TeamAAS_VP.Core
|
|
|
bool _LastFixedCameracheckExe = false;
|
|
|
public bool _LastAutoRunning = false;
|
|
|
public bool _LastManualMode = false;
|
|
|
+ bool _LastFzCameracheckExe = false;
|
|
|
bool _LastClearMode = false;
|
|
|
Int16 _LastWorkStart = 0;
|
|
|
Int16 _LastWorkDone = 0;
|
|
|
@@ -2477,7 +2479,118 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //翻转相机检测拍照
|
|
|
+ // 翻转相机检测拍照
|
|
|
+ else if (addressConfig.In_FzCameraPixExe.Address.Contains(tuple.nodeId))
|
|
|
+ {
|
|
|
+ if (tuple.value is bool state)
|
|
|
+ {
|
|
|
+ if (_LastFzCameracheckExe != state)
|
|
|
+ {
|
|
|
+ _LastFzCameracheckExe = state;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (state)
|
|
|
+ {
|
|
|
+ SendTaskMessage("触发翻转相机拍照", MessageLevel.Debug);
|
|
|
+ var code = plc.ReadNode<string>(string.Format(addressConfig.In_Code.Address, 1));
|
|
|
+
|
|
|
+ //这里缺少从MES获取产品配方的内容,需要补充
|
|
|
+ _LastMesCheckTime[5] = (await _mesService.GetServerTimeAsync(code, 2)).Now;
|
|
|
+ var stationConfig2 = _configService.GetDeviceInfo(0);
|
|
|
+ LogHelper.WriteLogMes($"【mes开始QUERY】");
|
|
|
+ SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
|
|
|
+ (bool isSuccess, string response) = await _mesService.StationGetExAsync(code, "", 2);
|
|
|
+ if (isSuccess)
|
|
|
+ {
|
|
|
+ string ProductMainSN_Temp = "";
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
+ string[] item = response.Split('\n');
|
|
|
+ //获取过度件sn
|
|
|
+ string snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem != null)
|
|
|
+ {
|
|
|
+ ProductMainSN_Temp = snItem.Replace("sn=", "").Trim();
|
|
|
+ SendTaskMessage($"过度件sn:{ProductMainSN_Temp}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ //20260214,螺丝机特别版
|
|
|
+ (bool isSuccess2, string response2) = await _mesService.StationGetAsync(ProductMainSN_Temp, "", 2);//询问mes
|
|
|
+ if (isSuccess2)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response2}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ string[] items = response2.Split('\n');
|
|
|
+ //获取产品主sn和wo用于后续上传数据使用
|
|
|
+ string snItem2 = items.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem2 != null)
|
|
|
+ {
|
|
|
+ var codesn = snItem2.Replace("sn=", "").Trim();
|
|
|
+
|
|
|
+ SendTaskMessage($"产品主sn:{codesn}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"第二次询问mes成功");
|
|
|
+ SendTaskMessage($"第二次询问mes成功:{response2}", MessageLevel.Debug);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"第二次询问mes失败");
|
|
|
+ SendTaskMessage($"第二次询问mes失败:{response2}", MessageLevel.Error);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)2);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"询问mes失败");
|
|
|
+ SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)2);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Guid FzCameraProcedureId = currentProduct.FzCameraProcedureId;
|
|
|
+
|
|
|
+ var FzCameraProcess = _productService.GetCurrentProductProcedureModelById(FzCameraProcedureId);
|
|
|
+ if (FzCameraProcess == null)
|
|
|
+ {
|
|
|
+ SendTaskMessage($"未找到翻转相机视觉流程,流程ID: {FzCameraProcedureId}", MessageLevel.Alarm);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)2);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ SendTaskMessage($"开始执行翻转相机视觉流程", MessageLevel.Debug);
|
|
|
+ var _cts = new CancellationTokenSource();
|
|
|
+
|
|
|
+ await _remoteCommandService.SetLightBeforePhoto(FzCameraProcess);
|
|
|
+ var FzCameraResult = _remoteCommandService.ExecutePhoto(FzCameraProcess, out CogToolBlockTerminalCollection outputCollection);
|
|
|
+
|
|
|
+ if (FzCameraResult)
|
|
|
+ {
|
|
|
+ SendTaskMessage("翻转相机拍照成功", MessageLevel.Debug);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)1);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SendTaskMessage("翻转相机拍照失败", MessageLevel.Alarm);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SendTaskMessage($"触发翻转相机检测拍照信号已关闭", MessageLevel.Alarm);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FzCameraPickStatus.Address, (Int16)0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
//切换成自动运行模式
|
|
|
else if (addressConfig.AutoRunning.Address.Contains(tuple.nodeId))
|
|
|
@@ -2576,7 +2689,14 @@ namespace TeamAAS_VP.Core
|
|
|
code = plc.ReadNode<string>(string.Format(addressConfig.In_Code.Address, i));
|
|
|
}
|
|
|
var homeview = _container.Resolve<HomeViewModel>();
|
|
|
-
|
|
|
+ if (i == 0)
|
|
|
+ {
|
|
|
+ SendTaskMessage($"收到当前过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SendTaskMessage($"收到{i}过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
+ }
|
|
|
//过站检查
|
|
|
if (state == 1)
|
|
|
{
|
|
|
@@ -2591,121 +2711,122 @@ namespace TeamAAS_VP.Core
|
|
|
LogHelper.WriteLogMes($"【mes开始QUERY】");
|
|
|
SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
|
|
|
ShowMes_Query = false;
|
|
|
- (bool isSuccess, string response) = await _mesService.StationGetAsync(code, "", 2);//询问mes
|
|
|
-
|
|
|
-
|
|
|
- if (i == 0)
|
|
|
- {
|
|
|
- SendTaskMessage($"收到当前过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- SendTaskMessage($"收到{i}过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
- }
|
|
|
+ (bool isSuccess, string response) = await _mesService.StationGetExAsync(code, "", 2);
|
|
|
if (isSuccess)
|
|
|
{
|
|
|
-
|
|
|
- string[] item = response.Split('\n');
|
|
|
- //获取产品主sn和wo用于后续上传数据使用
|
|
|
- string snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
- if (snItem != null)
|
|
|
- {
|
|
|
- ProductMainSN = snItem.Replace("sn=", "").Trim();
|
|
|
- if (i == 0)
|
|
|
- {
|
|
|
- _productService.CurrentProductCode = ProductMainSN;
|
|
|
- }
|
|
|
- SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string woItem = item.FirstOrDefault(f => f.Contains("wo="));
|
|
|
- if (woItem != null)
|
|
|
- {
|
|
|
- wo = woItem.Replace("wo=", "").Trim();
|
|
|
- SendTaskMessage($"工单信息:{wo}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
|
|
|
- if (modelItem != null)
|
|
|
- {
|
|
|
- model_num = modelItem.Replace("model_num=", "").Trim();
|
|
|
- SendTaskMessage($"model_num:{model_num}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string colorItem = item.FirstOrDefault(f => f.Contains("color="));
|
|
|
- if (colorItem != null)
|
|
|
- {
|
|
|
- color = colorItem.Replace("color=", "").Trim();
|
|
|
- SendTaskMessage($"color:{color}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
|
|
|
- if (ppidItem != null)
|
|
|
- {
|
|
|
- ppid = ppidItem.Replace("ppid=", "").Trim();
|
|
|
- SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string stageItem = item.FirstOrDefault(f => f.Contains("stage="));
|
|
|
- if (stageItem != null)
|
|
|
- {
|
|
|
- stage = stageItem.Replace("stage=", "").Trim();
|
|
|
- SendTaskMessage($"stage:{stage}", MessageLevel.Info);
|
|
|
- }
|
|
|
- string kbsnitem = item.FirstOrDefault(f => f.Contains("KB="));
|
|
|
- if (kbsnitem != null)
|
|
|
+ string ProductMainSN_Temp = "";
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
+ string[] item2 = response.Split('\n');
|
|
|
+ //获取过度件sn
|
|
|
+ string snItem2 = item2.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem2 != null)
|
|
|
{
|
|
|
- kb_sn = kbsnitem.Replace("KB=", "").Trim();
|
|
|
- SendTaskMessage($"KB:{kb_sn}", MessageLevel.Info);
|
|
|
+ ProductMainSN_Temp = snItem2.Replace("sn=", "").Trim();
|
|
|
+ SendTaskMessage($"过度件sn:{ProductMainSN_Temp}", MessageLevel.Info);
|
|
|
}
|
|
|
- ShowMes_Query = true;
|
|
|
- //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
|
|
|
+ LogHelper.WriteLogMes($"询问mes成功");
|
|
|
+ SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
|
|
|
|
|
|
- if (stationConfig2.EnableMES)
|
|
|
+ (bool isSuccess2, string response2) = await _mesService.StationGetAsync(ProductMainSN_Temp, "", 2);//询问mes
|
|
|
+ if (isSuccess)
|
|
|
{
|
|
|
- //切换产品
|
|
|
- if (i == 0)//i=0时才会切换产品
|
|
|
+
|
|
|
+ string[] item = response.Split('\n');
|
|
|
+ //获取产品主sn和wo用于后续上传数据使用
|
|
|
+ string snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem != null)
|
|
|
+ {
|
|
|
+ ProductMainSN = snItem.Replace("sn=", "").Trim();
|
|
|
+ if (i == 0)
|
|
|
+ {
|
|
|
+ _productService.CurrentProductCode = ProductMainSN;
|
|
|
+ }
|
|
|
+ SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string woItem = item.FirstOrDefault(f => f.Contains("wo="));
|
|
|
+ if (woItem != null)
|
|
|
+ {
|
|
|
+ wo = woItem.Replace("wo=", "").Trim();
|
|
|
+ SendTaskMessage($"工单信息:{wo}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
|
|
|
+ if (modelItem != null)
|
|
|
+ {
|
|
|
+ model_num = modelItem.Replace("model_num=", "").Trim();
|
|
|
+ SendTaskMessage($"model_num:{model_num}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string colorItem = item.FirstOrDefault(f => f.Contains("color="));
|
|
|
+ if (colorItem != null)
|
|
|
+ {
|
|
|
+ color = colorItem.Replace("color=", "").Trim();
|
|
|
+ SendTaskMessage($"color:{color}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
|
|
|
+ if (ppidItem != null)
|
|
|
+ {
|
|
|
+ ppid = ppidItem.Replace("ppid=", "").Trim();
|
|
|
+ SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string stageItem = item.FirstOrDefault(f => f.Contains("stage="));
|
|
|
+ if (stageItem != null)
|
|
|
{
|
|
|
- var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num, color);
|
|
|
- if (!string.IsNullOrEmpty(q))
|
|
|
+ stage = stageItem.Replace("stage=", "").Trim();
|
|
|
+ SendTaskMessage($"stage:{stage}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ string kbsnitem = item.FirstOrDefault(f => f.Contains("KB="));
|
|
|
+ if (kbsnitem != null)
|
|
|
+ {
|
|
|
+ kb_sn = kbsnitem.Replace("KB=", "").Trim();
|
|
|
+ SendTaskMessage($"KB:{kb_sn}", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ ShowMes_Query = true;
|
|
|
+
|
|
|
+ if (stationConfig2.EnableMES)
|
|
|
+ {
|
|
|
+ //切换产品
|
|
|
+ if (i == 0)//i=0时才会切换产品
|
|
|
{
|
|
|
- ProductWithMes productWithMes = new ProductWithMes();
|
|
|
- ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
|
- Guid productId = Guid.Empty;
|
|
|
- foreach (var itt in ProductList)
|
|
|
+ var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num, color);
|
|
|
+ if (!string.IsNullOrEmpty(q))
|
|
|
{
|
|
|
- if (itt.Name == q)
|
|
|
+ ProductWithMes productWithMes = new ProductWithMes();
|
|
|
+ ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
|
|
|
+ Guid productId = Guid.Empty;
|
|
|
+ foreach (var itt in ProductList)
|
|
|
+ {
|
|
|
+ if (itt.Name == q)
|
|
|
+ {
|
|
|
+ productId = itt.ID;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //if(kb_sn==)
|
|
|
+ if (currentProduct.ID != productId || productWithMes.ProductKBSN != kb_sn)
|
|
|
{
|
|
|
- productId = itt.ID;
|
|
|
- break;
|
|
|
+ //切换产品
|
|
|
+ _productService.LoadProduct(productId);
|
|
|
+ _productService.SetCurrentProduct(productId);
|
|
|
+ await WritePositionToPlcAsync();
|
|
|
+ SendTaskMessage($"切换产品成功", MessageLevel.Debug);
|
|
|
}
|
|
|
}
|
|
|
- //if(kb_sn==)
|
|
|
- if (currentProduct.ID != productId || productWithMes.ProductKBSN != kb_sn)
|
|
|
- {
|
|
|
- //切换产品
|
|
|
- _productService.LoadProduct(productId);
|
|
|
- _productService.SetCurrentProduct(productId);
|
|
|
- await WritePositionToPlcAsync();
|
|
|
- SendTaskMessage($"切换产品成功", MessageLevel.Debug);
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
+ LogHelper.WriteLogMes($"【mes结束QUERY】");
|
|
|
+ SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
|
|
|
+ // return;
|
|
|
}
|
|
|
-
|
|
|
- await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
-
|
|
|
- LogHelper.WriteLogMes($"【mes结束QUERY】");
|
|
|
- SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
|
|
|
- return;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
-
|
|
|
- await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
|
|
|
- LogHelper.WriteLogMes($"询问mes失败");
|
|
|
- SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
|
|
|
- }
|
|
|
- LogHelper.WriteLogMes($"【mes结束QUERY】");
|
|
|
- SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
|
|
|
+ LogHelper.WriteLogMes($"询问mes失败");
|
|
|
+ SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
// 上传本站数据
|
|
|
else if (state == 2)
|