ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

当前实现中两个委托不是并行执行,而是“新优先、旧兜底”

当前实现中两个委托不是并行执行,而是“新优先、旧兜底” 当前实现中两个委托不是并行执行而是“新优先、旧兜底”。在 [AutomaticStationPipeline.cs]if(FailureAsync!null)returnFailureAsync(context,result);returnHandleFailureAsync!null?HandleFailureAsync(context.Product,result.Message,context.CancellationToken):Task.CompletedTask;因此现在 [EnsureAutomaticPipelineStarted] 同时赋值后HandleFailureAsyncHandlePipelineHandleFailureAsync,FailureAsyncHandlePipelineFailureAsync,实际只会执行FailureAsync - HandlePipelineFailureAsync(context, result) - HandlePipelineHandleFailureAsync(product, message, token)HandleFailureAsync委托本身不会被直接调用因为FailureAsync非空。它只是为旧工站或旧调用方保留的兼容回调。两个方法的职责差异HandlePipelineHandleFailureAsync参数只有product errorMessage token。无法知道失败类型、是否可重试、是否要求复位、恢复策略。负责旧业务兼容写一条普通失败日志。EAP Host 拒绝后执行上料位退料。当前通过errorMessage.Contains(易损件寿命到期)判断是否不弹窗。其它情况一律调用NotifyTestFailure。HandlePipelineFailureAsync参数是context AutomaticPipelineStageResult。包含完整的结构化信息FailureKindRecoveryActionCanRetryRequiresReset当前只写了结构化日志随后又把信息降级成字符串交给旧方法returnHandlePipelineHandleFailureAsync(context.Product,message,...);这导致前面已有的失败分类没有真正参与弹窗决策。当前问题HandlePipelineHandleFailureAsync命名重复且不清晰建议改为HandleLegacyPipelineFailureAsync。FailureAsync已经是正式入口HandleFailureAsync不应在同一工站同时赋值。不能使用错误文字决定弹窗例如“易损件寿命到期”文本变化后会重复弹窗。FailureAsync已知FailureKind却没有按类型分流。测试失败、停止、EAP 拒绝、可重试通讯失败目前容易走到相同的通用弹窗。建议分类类型是否弹窗处理方式OperatorStopped否记录日志继续吹扫、下料。Cancelled否记录日志不显示故障弹窗。Communication/PlcTimeout且CanRetrytrue否记录重试日志和状态重试耗尽才弹窗。Communication/PlcTimeout且不可重试是提示检查 PLC、电源、网络。SafetyInterlock是立即提示安全光幕、门禁、传感器或互锁未满足。ManualInterventionRequired是立即提示人工检查器件位置或现场状态。Unexpected是立即提示若RequiresResettrue则明确提示需复位。ContinueToPurgeAndUnload延迟先吹扫、下料在Completed中提示测试异常。EAP Host 拒绝否执行退料、记录协议日志不显示设备故障窗。易损件寿命到期否由寿命专用逻辑负责弹窗、红灯和错误码。推荐调整正式使用FailureAsyncHandlePipelineFailureAsync;不要同时赋值旧的HandleFailureAsync。旧委托保留在AutomaticStationPipelineHandlers中只供没有迁移结构化结果的旧流程使用。然后让HandlePipelineFailureAsync分为三部分1. 记录结构化日志 2. 执行必须的业务收尾 - Host 拒绝退料 - 安全复位标记 - 状态更新 3. 根据 FailureKind / RecoveryAction / CanRetry / RequiresReset 决定 - 仅日志 - 专用业务已提示 - 立即弹窗 - 下料完成后弹窗这样NotifyTestFailure只在明确需要人工立即处理时调用不再成为所有失败的默认出口。已完成失败处理优化并保留原有现场业务。修改重点当前工站只注册FailureAsync HandlePipelineFailureAsync。不再同时注册旧HandleFailureAsync避免维护时误以为两个回调都会执行。删除当前 ViewModel 中重复、拼写不清晰的HandlePipelineHandleFailureAsync业务入口。新增AutomaticPipelineFailureNotificationPolicy由流水线结果明确决定提示方式Silent停止、取消只记录日志。StatusOnlyEAP Host 拒绝等协议业务只记录日志和执行退料。AfterSafeUnload测试异常继续吹扫和下料完成后才弹窗。ImmediatePopupPLC 通讯中断、安全互锁、搬运异常、未预期异常、需复位等立即弹窗。AlreadyNotified易损件寿命等专用业务已报警不重复弹窗。保留的业务EAP Host 拒绝后仍执行扫描失败退料。Host 拒绝退料失败仍写辅助控制错误日志。测试 FAIL / ERROR 仍优先执行吹扫和下料。停止测试仍不弹“自动流程失败”窗口。易损件寿命到期仍由专用逻辑处理错误码、红灯和弹窗。立即弹窗不会重复写缺少分类信息的错误日志。修改文件[AutomaticStationPipeline.cs][StationControlViewModel.Workflow.cs]已验证编译通过0 errors。
返回列表