|
|
@@ -3156,6 +3156,178 @@ namespace TeamAAS_VP.Core
|
|
|
LogHelper.WriteLogMes($"【mes结束ADD】");
|
|
|
SendTaskMessage($"mes结束ADD", MessageLevel.Info);
|
|
|
}
|
|
|
+ //kb 螺丝站位询问mes 具体需求跟plc对接
|
|
|
+ if (state == 5)
|
|
|
+ {
|
|
|
+
|
|
|
+ SendTaskMessage($"收到KB Screw站点{i}过站检查请求(当站是否生产)...", MessageLevel.Debug);
|
|
|
+ //获取过站时间
|
|
|
+ _LastMesCheckTime[i] = (await _mesService.GetServerTimeAsync(i, code, 2)).Now;
|
|
|
+ if (_configService.GetDeviceInfo().EnableMES)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"【mes开始QUERY】");
|
|
|
+ SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
|
|
|
+
|
|
|
+ SendTaskMessage($"基于RFID询问是否过站", MessageLevel.Debug);
|
|
|
+ (bool isSuccess, string response) = await _mesService.StationGetExAsync(code, "", 2);
|
|
|
+ //如果成功的话就代表跟正常mes询问一样,当前站需工作
|
|
|
+ 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);
|
|
|
+
|
|
|
+ (bool isSuccess2, string response2) = await _mesService.StationGetAsync(ProductMainSN_Temp, "", 2);//询问mes
|
|
|
+ if (isSuccess2)
|
|
|
+ {
|
|
|
+
|
|
|
+ item = response2.Split('\n');
|
|
|
+ snItem = item.FirstOrDefault(f => f.Contains("sn="));
|
|
|
+ if (snItem != null)
|
|
|
+ {
|
|
|
+ ProductMainSN[i] = snItem.Replace("sn=", "").Trim();
|
|
|
+ if (i == 0)
|
|
|
+ {
|
|
|
+ _productService.CurrentProductCode = ProductMainSN[i];
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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))
|
|
|
+ {
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ //切换产品
|
|
|
+ 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); //不发生改变
|
|
|
+ if (models)
|
|
|
+ {
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)3);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogMes($"询问mes失败");
|
|
|
+ SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
|
|
|
+
|
|
|
+ //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
+
|
|
|
+ //表示前面的kb screw站点已经打完螺丝并且过站成功到3d aoi,根据plc的需求直接放行
|
|
|
+ if (response.Contains("3D AOI"))
|
|
|
+ {
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)2);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //表示kb组装 站点ng 具体写入型号跟plc对接
|
|
|
+ else if (response.Contains("C_KB_Link"))
|
|
|
+ {
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)5);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 后面还有一些判断条件也需跟当前AE对接
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"【mes结束QUERY】");
|
|
|
+ SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ProductMainSN[i] = DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
|
|
+ if (i == 0)
|
|
|
+ {
|
|
|
+ _productService.CurrentProductCode = ProductMainSN[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ LogHelper.WriteLogMes($"【未启用mes】");
|
|
|
+ SendTaskMessage($"未启用mes", MessageLevel.Info);
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_ScrewFeederIsChanged.Address, (Int16)1); //不发生改变
|
|
|
+ await plc.WriteNodeAsync(string.Format(addressConfig.Out_MesStatus.Address, i), (Int16)1);
|
|
|
+ }
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
SendTaskMessage($"{i}过站检查信号:state={state},处理为默认状态", MessageLevel.Alarm);
|