129 lines
4.2 KiB
C#
129 lines
4.2 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
using Aurora.Api;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using VisionCommon;
|
|
|
|
namespace VisionInspector {
|
|
/// <summary>
|
|
/// 부착검사
|
|
/// </summary>
|
|
public class AttachInspector {
|
|
private Logger _Logger;
|
|
private SubSysInfo _SubSysInfo;
|
|
private InspRecipe _InspRecipe;
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="subSysInfo">서브시스템 정보</param>
|
|
public AttachInspector(SubSysInfo subSysInfo) {
|
|
_SubSysInfo = subSysInfo;
|
|
_InspRecipe = VisionRecipeManager.GetInspRecipe(_SubSysInfo);
|
|
_Logger = new Logger(string.Format($"{typeof(AttachInspector).Name}[{_SubSysInfo.SubSysName}]"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 캘리퍼 측정 결과로 부착검사 수행
|
|
/// </summary>
|
|
/// <param name="fovInfo">FOV 정보</param>
|
|
/// <param name="displayType">디스플레이 타입</param>
|
|
/// <param name="caliperResult_H">수직(Height) 캘리퍼 측정 결과</param>
|
|
/// <param name="caliperResult_W">수평(Width) 캘리퍼 측정 결과</param>
|
|
/// <returns>부착검사 결과</returns>
|
|
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<InspStatus>();
|
|
|
|
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
|
|
);
|
|
}
|
|
}
|
|
}
|