Просмотр исходного кода

fix: 修复CountdownEvent死锁导致PLC信号阻塞的问题

- PhotoCountStop处countdown.Wait()增加5秒超时保护
- 超时后按NG处理,写入Out_FixedCameraPickStatus=2通知PLC
- 超时时输出SendTaskMessage告警和LogHelper错误日志
- 超时后调用ClearCountdown()避免后续状态残留
zly 2 месяцев назад
Родитель
Сommit
e79018906f
1 измененных файлов с 14 добавлено и 1 удалено
  1. 14 1
      TeamAAS-VM/Core/Management.cs

+ 14 - 1
TeamAAS-VM/Core/Management.cs

@@ -2631,7 +2631,20 @@ namespace TeamAAS_VP.Core
                                 bool resultFlog = true;
                                 //等待所有的图像处理流程处理完成
                                 //之前版本使用的是lock机制无法进行并发操作,目前能完美进行并发且能等待所有任务完成
-                                countdown.Wait();
+                                bool countdownCompleted = countdown.Wait(TimeSpan.FromSeconds(5));
+                                if (!countdownCompleted)
+                                {
+                                    SendTaskMessage($"检测流程超时!预期{countdown.InitialCount}个模板完成,实际仅完成{countdown.InitialCount - countdown.CurrentCount}个,按NG处理", MessageLevel.Alarm);
+                                    LogHelper.WriteLogError($"Countdown超时:预期{countdown.InitialCount}个信号,当前剩余{countdown.CurrentCount}个");
+                                    ClearCountdown();
+                                    resultFlog = false;
+                                    // 跳过后续结果判断,直接按NG写入PLC
+                                    SendTaskMessage($"检测执行失败(超时)", MessageLevel.Alarm);
+                                    await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                    FinalResultStatus = "NG";
+                                    FinalResultText = "NG(超时)";
+                                    return;
+                                }
 
                                 if (sysConfig.PhotosUse == true)
                                 {