175 lines
7.4 KiB
C#
175 lines
7.4 KiB
C#
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($"Barcode trigger transmission ({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("Vision (L) failed once, retrying");
|
|
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("Vision (R) failed once, retrying");
|
|
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} Completed processing due to vision end signal");
|
|
item.PrintQRValid = true;
|
|
}
|
|
else if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) == false) //사용자가 취소했다면 넘어간다
|
|
{
|
|
PUB.log.AddAT($"{target} Skip QR verification due to user cancellation");
|
|
item.PrintQRValid = false;
|
|
}
|
|
else return false; //아직 완료전이므로 리턴한다
|
|
}
|
|
else
|
|
{
|
|
if (PUB.flag.get(eVarBool.FG_END_VISIONR))
|
|
{
|
|
PUB.log.AddI($"{target} Completed processing due to vision end signal");
|
|
item.PrintQRValid = true;
|
|
}
|
|
else if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) == false) //사용자가 취소했다면 넘어간다
|
|
{
|
|
PUB.log.AddAT($"{target} Skip QR verification due to user cancellation");
|
|
item.PrintQRValid = false;
|
|
}
|
|
else return false; //아직 완료전이므로 리턴한다
|
|
}
|
|
}
|
|
|
|
PUB.sm.seq.Update(cmdIndex);
|
|
return false;
|
|
}
|
|
|
|
|
|
//####################################################
|
|
//###
|
|
//####################################################
|
|
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
|
{
|
|
PUB.log.Add($"{target} Vision verification completed (Result: {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;
|
|
}
|
|
}
|
|
} |