KWD hace 3 meses
padre
commit
805aea3db8
Se han modificado 2 ficheros con 321 adiciones y 1 borrados
  1. 276 0
      TeamAAS-VM/Core/Management.cs
  2. 45 1
      TeamAAS-VM/ViewModels/MainWindowViewModel.cs

+ 276 - 0
TeamAAS-VM/Core/Management.cs

@@ -1675,6 +1675,282 @@ namespace TeamAAS_VP.Core
                             catch { }
                             var sysConfig = _configService.GetSystemConfiguration();
 
+                            if (sysConfig.ScannerUse == true && cameraIndex == 1 && sysConfig.CodeUse2 == true)
+                            {
+                                ScanValue = "";
+                                _scanDoneEvent.Reset(); // 重要:先关门
+
+                                await Scan_Client.SendAsync("T\r\n");
+
+                                // 等待扫码结果,最多 3 秒
+                                bool scanOk = await Task.Run(() => _scanDoneEvent.Wait(3000));
+
+                                if (!scanOk || ScanValue.IsNullOrWhiteSpace())
+                                {
+                                    SendTaskMessage("二维码拍照失败或超时", MessageLevel.Alarm);
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (short)3);
+                                    return;
+                                }
+
+                                code = ScanValue;
+                                SendTaskMessage($"扫码成功,SN:{code}", MessageLevel.Info);
+                                //这里缺少从MES获取产品配方的内容,需要补充
+                                _LastMesCheckTime[0] = (await _mesService.GetServerTimeAsync(code, 2)).Now;
+                                //_LastMesCheckTime[1] = DateTime.Now;
+                                LogHelper.WriteLogMes($"【mes开始QUERY】");
+                                SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
+                                (bool isSuccess, string response) = await _mesService.StationGetAsync(code, "", 2);//询问mes
+
+                                if (isSuccess)
+                                {
+                                    //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
+
+                                    LogHelper.WriteLogMes($"询问mes成功");
+                                    SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
+                                    if (response != "MES功能未启用!")
+                                    {
+                                        string[] items = response.Split('\n');
+                                        string snItem = items.FirstOrDefault(f => f.Contains("sn="));
+                                        if (snItem != null)
+                                        {
+                                            ProductMainSN = snItem.Replace("sn=", "").Trim();
+                                            _productService.CurrentProductCode = ProductMainSN;
+                                            SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
+                                        }
+                                        string woItem = items.FirstOrDefault(f => f.Contains("wo="));
+                                        if (woItem != null)
+                                        {
+                                            wo = woItem.Replace("wo=", "").Trim();
+                                            SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
+                                        }
+                                        string modelItem = items.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 = items.FirstOrDefault(f => f.Contains("color="));
+                                        if (colorItem != null)
+                                        {
+                                            color = colorItem.Replace("color=", "").Trim();
+                                            SendTaskMessage($"color:{color}", MessageLevel.Info);
+                                        }
+                                        string ppidItem = items.FirstOrDefault(f => f.Contains("ppid="));
+                                        if (ppidItem != null)
+                                        {
+                                            ppid = ppidItem.Replace("ppid=", "").Trim();
+                                            SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
+                                        }
+                                        string stageItem = items.FirstOrDefault(f => f.Contains("stage="));
+                                        if (stageItem != null)
+                                        {
+                                            stage = stageItem.Replace("stage=", "").Trim();
+                                            SendTaskMessage($"stage:{stage}", MessageLevel.Info);
+                                        }
+                                        string kbsnitem = items.FirstOrDefault(f => f.Contains("KB="));
+                                        if (kbsnitem != null)
+                                        {
+                                            kb_sn = kbsnitem.Replace("KB=", "").Trim();
+                                            SendTaskMessage($"KB:{kb_sn}", MessageLevel.Info);
+                                        }
+
+                                    }
+                                    LogHelper.WriteLogMes($"【mes结束QUERY】");
+                                    SendTaskMessage($"mes结束QUERY", MessageLevel.Info);
+                                    var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num, color);
+                                    if (!string.IsNullOrEmpty(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 (currentProduct.ID != productId || productWithMes.ProductKBSN != kb_sn)
+                                        {
+
+                                            _productService.Clear();
+                                            //切换产品
+                                            _productService.LoadProduct(productId);
+                                            _productService.SetCurrentProduct(productId);
+                                            await WritePositionToPlcAsync();
+                                            SendTaskMessage($"切换产品成功", MessageLevel.Debug);
+                                        }
+                                    }
+
+
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)1);
+                                    return;
+                                }
+                                else
+                                {
+                                    //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
+
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)3);
+
+                                    LogHelper.WriteLogMes($"询问mes失败");
+                                    SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
+                                    return;
+                                }
+                            }
+
+                            if (sysConfig.ScannerUse == true && cameraIndex == 1 && sysConfig.CodeUse == true)
+                            {
+                                ScanValue = "";
+                                _scanDoneEvent.Reset(); // 重要:先关门
+
+                                await Scan_Client.SendAsync("T\r\n");
+
+                                // 等待扫码结果,最多 3 秒
+                                bool scanOk = await Task.Run(() => _scanDoneEvent.Wait(3000));
+
+                                if (!scanOk || ScanValue.IsNullOrWhiteSpace())
+                                {
+                                    SendTaskMessage("二维码拍照失败或超时", MessageLevel.Alarm);
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (short)3);
+                                    return;
+                                }
+
+                                code = ScanValue;
+                                SendTaskMessage($"扫码成功,SN:{code}", MessageLevel.Info);
+                                //这里缺少从MES获取产品配方的内容,需要补充
+                                _LastMesCheckTime[0] = (await _mesService.GetServerTimeAsync(code, 2)).Now;
+                                LogHelper.WriteLogMes($"【mes开始QUERY】");
+                                SendTaskMessage($"mes开始QUERY", MessageLevel.Info);
+                                //(bool isSuccess, string response) = await _mesService.StationGetAsync(code, "", 2);//询问mes
+                                (bool isSuccess, string response) = await _mesService.StationGetExAsync(code, "", 2);//基于电池的SN获取产品SN,询问mes
+                                if (isSuccess)
+                                {
+                                    //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
+
+
+                                    string ProductMainSN_Temp = "";
+                                    LogHelper.WriteLogMes($"询问mes成功");
+                                    SendTaskMessage($"询问mes成功:{response}", MessageLevel.Debug);
+
+                                    if (response != "MES功能未启用!")
+                                    {
+                                        string[] item = response.Split('\n');
+                                        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);
+
+                                        if (response2 != "MES功能未启用!")
+                                        {
+                                            string[] item = response2.Split('\n');
+
+                                            string snItem = item.FirstOrDefault(f => f.Contains("sn="));
+                                            if (snItem != null)
+                                            {
+                                                ProductMainSN = snItem.Replace("sn=", "").Trim();
+                                                _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:{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)
+                                            {
+                                                kb_sn = kbsnitem.Replace("KB=", "").Trim();
+                                                SendTaskMessage($"KB:{kb_sn}", MessageLevel.Info);
+                                            }
+                                        }
+                                        LogHelper.WriteLogMes($"第二次询问mes成功");
+                                        SendTaskMessage($"第二次询问mes成功:{response2}", MessageLevel.Debug);
+
+                                        var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num, color);
+                                        if (!string.IsNullOrEmpty(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 (currentProduct.ID != productId || productWithMes.ProductKBSN != kb_sn)
+                                            {
+                                                //切换产品
+                                                _productService.LoadProduct(productId);
+                                                _productService.SetCurrentProduct(productId);
+                                                await WritePositionToPlcAsync();
+                                                SendTaskMessage($"切换产品成功", MessageLevel.Debug);
+                                            }
+                                        }
+
+
+                                        await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)1);
+                                    }
+                                    else
+                                    {
+                                        LogHelper.WriteLogMes($"第二次询问mes失败");
+                                        SendTaskMessage($"第二次询问mes失败:{response2}", MessageLevel.Error);
+
+                                        await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)3);
+                                    }
+                                }
+                                else
+                                {
+                                    //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
+
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)3);
+
+                                    LogHelper.WriteLogMes($"询问mes失败");
+                                    SendTaskMessage($"询问mes失败:{response}", MessageLevel.Error);
+                                }
+                                return;
+                            }
+
                             if (procIds.Count == 0 && cameraIndex != currentProduct.PhotoCountStop)
                             {
                                 SendTaskMessage($"Point#{cameraIndex} 未配置任何视觉流程 (CameraProcedureId1/2/3)", MessageLevel.Alarm);

+ 45 - 1
TeamAAS-VM/ViewModels/MainWindowViewModel.cs

@@ -546,6 +546,7 @@ namespace TeamAAS_VP.ViewModels
             if (!_isTrackingUserInput)
             {
                 InputManager.Current.PostProcessInput += OnUserInput;
+                ComponentDispatcher.ThreadFilterMessage += OnThreadFilterMessage;
                 _isTrackingUserInput = true;
             }
 
@@ -571,10 +572,16 @@ namespace TeamAAS_VP.ViewModels
             if (_isTrackingUserInput)
             {
                 InputManager.Current.PostProcessInput -= OnUserInput;
+                ComponentDispatcher.ThreadFilterMessage -= OnThreadFilterMessage;
                 _isTrackingUserInput = false;
             }
         }
 
+        private void RecordPermissionActivity()
+        {
+            _lastPermissionActivityTime = DateTime.Now;
+        }
+
         /// <summary>
         /// 记录用户输入时间。
         /// 键盘、鼠标、滚轮、触摸和手写笔输入都会刷新空闲计时。
@@ -591,7 +598,44 @@ namespace TeamAAS_VP.ViewModels
                 input is TouchEventArgs ||
                 input is StylusEventArgs)
             {
-                _lastPermissionActivityTime = DateTime.Now;
+                RecordPermissionActivity();
+            }
+        }
+
+        private void OnThreadFilterMessage(ref MSG msg, ref bool handled)
+        {
+            if (IsUserInputMessage(msg.message))
+            {
+                RecordPermissionActivity();
+            }
+        }
+
+        private static bool IsUserInputMessage(int message)
+        {
+            switch (message)
+            {
+                case 0x0100: // WM_KEYDOWN
+                case 0x0101: // WM_KEYUP
+                case 0x0104: // WM_SYSKEYDOWN
+                case 0x0105: // WM_SYSKEYUP
+                case 0x0200: // WM_MOUSEMOVE
+                case 0x0201: // WM_LBUTTONDOWN
+                case 0x0202: // WM_LBUTTONUP
+                case 0x0203: // WM_LBUTTONDBLCLK
+                case 0x0204: // WM_RBUTTONDOWN
+                case 0x0205: // WM_RBUTTONUP
+                case 0x0206: // WM_RBUTTONDBLCLK
+                case 0x0207: // WM_MBUTTONDOWN
+                case 0x0208: // WM_MBUTTONUP
+                case 0x0209: // WM_MBUTTONDBLCLK
+                case 0x020A: // WM_MOUSEWHEEL
+                case 0x020B: // WM_XBUTTONDOWN
+                case 0x020C: // WM_XBUTTONUP
+                case 0x020D: // WM_XBUTTONDBLCLK
+                case 0x020E: // WM_MOUSEHWHEEL
+                    return true;
+                default:
+                    return false;
             }
         }