using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using AR; namespace Project { public partial class FMain { public Boolean QR_VALIDATION(eWorkPort target, eSMStep cmdIndex) { UInt16 idx = 1; var mv = PUB.Result.vModel; var mc = PUB.Result.mModel; var funcName = System.Reflection.MethodBase.GetCurrentMethod().Name; var seqTime = PUB.sm.seq.GetTime(cmdIndex); var msgType = (Class.eStatusMesage)target; var item = target == eWorkPort.Left ? PUB.Result.ItemDataL : PUB.Result.ItemDataR; var WS = target == eWorkPort.Left ? PUB.wsL : PUB.wsR; //#################################################### //### 작업시작 //#################################################### var CIDX = PUB.sm.seq.Get(cmdIndex); if (PUB.sm.seq.Get(cmdIndex) == idx++) { //작업 플래그 설정 if (target == eWorkPort.Left) { VAR.BOOL[eVarBool.VisionL_Retry] = false; PUB.flag.set(eVarBool.FG_END_VISIONL, false, funcName); PUB.flag.set(eVarBool.FG_PRC_VISIONL, true, funcName); //PUB.iLockCVL.set((int)eILockCV.VISION, true, funcName); } else { VAR.BOOL[eVarBool.VisionR_Retry] = false; PUB.flag.set(eVarBool.FG_END_VISIONR, false, funcName); PUB.flag.set(eVarBool.FG_PRC_VISIONR, true, funcName); //PUB.iLockCVR.set((int)eILockCV.VISION, true, funcName); } PUB.sm.seq.Update(cmdIndex); return false; } if (PUB.sm.seq.Get(cmdIndex) == idx++) { //카메라 트리거 전송 var sendok = WS_Send(target, WS, item.guid, "TRIG", item.VisionData.PrintQRData); PUB.log.Add($"바코드트리거전송({target}) = {sendok}"); if(sendok==false) //230512 전송실패시 오류로 한다 { PUB.Result.SetResultMessage(eResult.HARDWARE, eECode.VISION_TRIGERROR, eNextStep.PAUSE); return false; } PUB.sm.seq.Update(cmdIndex); return false; } //#################################################### //### 수신된 바코드 값을 기다린다. //#################################################### if (PUB.sm.seq.Get(cmdIndex) == idx++) { //타임아웃시간을 넘어서면 오류처리한다 if (seqTime.TotalMilliseconds >= AR.SETTING.Data.Timeout_VisionProcessU) { // if (target == eWorkPort.Left) { if (VAR.BOOL[eVarBool.VisionL_Retry] == false) { PUB.log.AddAT("비젼(L) 1회 실패로 재 시도 합니다"); VAR.BOOL[eVarBool.VisionL_Retry] = true; PUB.sm.seq.Update(cmdIndex, -1); return false; } if (item.VisionData.RID2.isEmpty() == false && item.VisionData.MatchValidation == false) { PUB.Result.SetResultMessage(eResult.OPERATION, eECode.QRDATAMISSMATCHL, eNextStep.PAUSE, target, item.VisionData.RID, item.VisionData.RID2); } else { PUB.Result.SetResultMessage(eResult.OPERATION, eECode.VISION_NORECV, eNextStep.PAUSE, target); } } else { if (VAR.BOOL[eVarBool.VisionR_Retry] == false) { PUB.log.AddAT("비젼(R) 1회 실패로 재 시도 합니다"); VAR.BOOL[eVarBool.VisionR_Retry] = true; PUB.sm.seq.Update(cmdIndex, -1); return false; } if (item.VisionData.RID2.isEmpty() == false && item.VisionData.MatchValidation == false) { PUB.Result.SetResultMessage(eResult.OPERATION, eECode.QRDATAMISSMATCHR, eNextStep.PAUSE, target, item.VisionData.RID, item.VisionData.RID2); } else { PUB.Result.SetResultMessage(eResult.OPERATION, eECode.VISION_NORECV, eNextStep.PAUSE, target); } } PUB.sm.seq.Update(cmdIndex, -1); // 재시작시 트리거 전송할 수 있게 위로 옮김 return false; } else { //타임아웃되지 않은 조건 if (target == eWorkPort.Left) { if (PUB.flag.get(eVarBool.FG_END_VISIONL)) //종료신호가 설정되어있다면 완료된 경우다 { PUB.log.AddI($"{target} 비젼 종료 신호로 인해 완료 처리 합니다"); item.PrintQRValid = true; } else if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) == false) //사용자가 취소했다면 넘어간다 { PUB.log.AddAT($"{target} 사용자 취소로 QR검증을 넘김"); item.PrintQRValid = false; } else return false; //아직 완료전이므로 리턴한다 } else { if (PUB.flag.get(eVarBool.FG_END_VISIONR)) { PUB.log.AddI($"{target} 비젼 종료 신호로 인해 완료 처리 합니다"); item.PrintQRValid = true; } else if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) == false) //사용자가 취소했다면 넘어간다 { PUB.log.AddAT($"{target} 사용자 취소로 QR검증을 넘김"); item.PrintQRValid = false; } else return false; //아직 완료전이므로 리턴한다 } } PUB.sm.seq.Update(cmdIndex); return false; } //#################################################### //### //#################################################### if (PUB.sm.seq.Get(cmdIndex) == idx++) { PUB.log.Add($"{target} 비젼 검증 완료(결과:{item.PrintQRValid})"); if (target == eWorkPort.Left) PUB.flag.set(eVarBool.FG_PRC_VISIONL, false, funcName); else PUB.flag.set(eVarBool.FG_PRC_VISIONR, false, funcName); PUB.sm.seq.Update(cmdIndex); return false; } return true; } } }