using Aurora.Api; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using VisionCommon; namespace VisionInspector { /// /// 부착검사 /// public class AttachInspector { private Logger _Logger; private SubSysInfo _SubSysInfo; private InspRecipe _InspRecipe; /// /// 생성자 /// /// 서브시스템 정보 public AttachInspector(SubSysInfo subSysInfo) { _SubSysInfo = subSysInfo; _InspRecipe = VisionRecipeManager.GetInspRecipe(_SubSysInfo); _Logger = new Logger(string.Format($"{typeof(AttachInspector).Name}[{_SubSysInfo.SubSysName}]")); } /// /// 캘리퍼 측정 결과로 부착검사 수행 /// /// FOV 정보 /// 디스플레이 타입 /// 수직(Height) 캘리퍼 측정 결과 /// 수평(Width) 캘리퍼 측정 결과 /// 부착검사 결과 public AttachInspResult InspectDistances( FovInfo fovInfo, eDisplayType displayType, CaliperResult caliperResult_H, CaliperResult caliperResult_W) { var attachInspParam = _InspRecipe.AttachInspRecipe.AttachInspParams[(int)fovInfo.FovId]; var inspStatus = InspStatus.NONE; var results = new List(); if (caliperResult_H != null) { if (IsSpecOverDistance(caliperResult_H.WidthMm, attachInspParam.SpecH, attachInspParam.ErrRangeH)) { results.Add(InspStatus.OK); } else { results.Add(InspStatus.NG); } } else { caliperResult_H = new CaliperResult(); results.Add(InspStatus.NG); } if (caliperResult_W != null) { if (IsSpecOverDistance(caliperResult_W.WidthMm, attachInspParam.SpecW, attachInspParam.ErrRangeW)) { results.Add(InspStatus.OK); } else { results.Add(InspStatus.NG); } } else { caliperResult_W = new CaliperResult(); results.Add(InspStatus.NG); } bool ngFlag = false; foreach (InspStatus status in results) { if (status == InspStatus.NG) { inspStatus = InspStatus.NG; ngFlag = true; break; } } if (!ngFlag) { inspStatus = InspStatus.OK; } var attachInspResult = GetAttachInspResult( fovInfo, displayType, attachInspParam, caliperResult_W.WidthMm, caliperResult_H.WidthMm, inspStatus); return attachInspResult; } private bool IsSpecOverDistance(double distance, double spec, double errRange) { if (Math.Abs(Math.Abs(distance) - Math.Abs(spec)) < errRange) { return true; } else { _Logger.FuncE($"Spec Over NG!! [distance : {distance:F3} / specY : {spec} / errRange : {errRange}]"); return false; } } private AttachInspResult GetAttachInspResult( FovInfo fovInfo, eDisplayType displayType, AttachInspParam attachInspParam, double MeasureW, double MeasureH, InspStatus inspStatus) { return new AttachInspResult( displayType, fovInfo.FovId, MeasureW, attachInspParam.SpecW, MeasureH, attachInspParam.SpecH, inspStatus ); } } }