Files
ATV_STDLabelAttach/Handler/Project/RunCode/StateMachine/_SPS_BarcodeProcess.cs
atvstdla 5a2eeed3c4 ..
2025-09-29 17:38:12 +09:00

255 lines
9.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using AR;
namespace Project
{
public partial class FMain
{
Tuple<int, List<string>> BarcodeRegExProcess(
List<Class.RegexPattern> patterns,
List<Class.RegexPattern> patternsEx,
Class.VisionData vdata, string barcodeSymbol,
string bcd, out bool IgnoreBarcode, out bool findregex)
{
//var patterns = PUB.Result.BCDPattern;
IgnoreBarcode = false;
findregex = false;
//get : same symbol data
List<Class.RegexPattern> pats;
if (patterns != null)
{
if (barcodeSymbol.isEmpty() == false) pats = patterns.Where(t => t.IsEnable == true && (string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol)).OrderBy(t => t.Seq).ToList();
else pats = patterns.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList();
}
else pats = new List<Class.RegexPattern>();
List<Class.RegexPattern> patsEx;
if (patternsEx == null) patsEx = new List<Class.RegexPattern>();
else
{
if (barcodeSymbol.isEmpty() == false) patsEx = patternsEx.Where(t => string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol).OrderBy(t => t.Seq).ToList();
else patsEx = patternsEx.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList();
}
//모델정보의 허용 심볼인지 확인한다 221017
var vm = PUB.Result.vModel;
if (vm != null)
{
if (vm.BCD_DM == false && barcodeSymbol == "2")
{
PUB.log.AddAT($"Inactive in model(DM):{bcd}");
IgnoreBarcode = true;
return new Tuple<int, List<string>>(0, new List<string>());
}
else if (vm.BCD_1D == false && (barcodeSymbol == "6" || barcodeSymbol == "11"))
{
PUB.log.AddAT($"Inactive in model(1D):{bcd}");
IgnoreBarcode = true;
return new Tuple<int, List<string>>(0, new List<string>());
}
else if (vm.BCD_QR == false && (barcodeSymbol == "1"))
{
PUB.log.AddAT($"Inactive in model(QR):{bcd}");
IgnoreBarcode = true;
return new Tuple<int, List<string>>(0, new List<string>());
}
}
//check barcode pattern
if (pats.Any() == false)
{
PUB.log.AddAT($"No registered pattern(SYM={barcodeSymbol}) Model:{vm.Title}");
return new Tuple<int, List<string>>(0, new List<string>());
}
//이 바코드가 무시바코드에 있는지 먼저 검사한다 220718
foreach (var pt in patsEx)
{
//skip disable item
if (pt.IsEnable == false) continue;
//check regex
var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10));
if (regx.IsMatch(bcd))
{
PUB.log.AddAT($"Ignore barcode:{bcd},PAT:{pt.Pattern},SYM:{pt.Symbol}");
IgnoreBarcode = true;
break;
}
}
if (IgnoreBarcode)
{
return new Tuple<int, List<string>>(0, new List<string>());
}
//동작중에 들어오는 바코드의 자동처리코드 추가 250926
if (PUB.sm.Step == eSMStep.RUN || PUB.sm.Step == eSMStep.PAUSE || PUB.sm.Step == eSMStep.WAITSTART)
{
var OPT_PrinterOff = VAR.BOOL[eVarBool.Opt_DisablePrinter];
var OPT_CameraOff = PUB.OPT_CAMERA();
var OPT_BYPASS = PUB.OPT_BYPASS();
if (OPT_BYPASS == false)
{
//기본 벤더이름
if (PUB.Result.vModel.Def_Vname.isEmpty() == false)
{
if (vdata.VNAME.Equals(PUB.Result.vModel.Def_Vname) == false)
{
vdata.VNAME = PUB.Result.vModel.Def_Vname;
vdata.VNAME_Trust = true;
PUB.log.Add($"Defaul V.Name Set to {PUB.Result.vModel.Def_Vname}");
}
}
//기본 MFG
if (PUB.Result.vModel.Def_MFG.isEmpty() == false)
{
if (vdata.MFGDATE.Equals(PUB.Result.vModel.Def_MFG) == false)
{
vdata.MFGDATE = PUB.Result.vModel.Def_MFG;
vdata.MFGDATE_Trust = true;
PUB.log.Add($"Defaul MFGDATE Set to {PUB.Result.vModel.Def_MFG}");
}
}
//파트넘버무시
if (PUB.Result.vModel.IgnorePartNo)
{
vdata.PARTNO_Trust = true;
}
//배치무시
if (PUB.Result.vModel.IgnoreBatch)
{
}
//프린트를 하지 않는 경우에는 프린트 위치를 자동으로 처리한다.
if (OPT_PrinterOff == true)
{
vdata.PrintPositionData = "0";
vdata.PrintPositionCheck = true;
}
}
else
{
if (vdata.VNAME_Trust == false)
{
vdata.VNAME = "BYPASS";
vdata.VNAME_Trust = true;
}
}
}
var ValueApplyCount = 0;
ValueApplyCount = 0;
List<string> list = new List<string>();
findregex = false;
foreach (var pt in pats)
{
//skip disable item
if (pt.IsEnable == false) continue;
var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10));
if (regx.IsMatch(bcd))
{
findregex = true;
//find data
var matchs = regx.Matches(bcd);
foreach (System.Text.RegularExpressions.Match mat in matchs)
{
if (vdata == null) ValueApplyCount += 1;
else
{
foreach (var matchdata in pt.Groups)
{
if (matchdata.GroupNo <= mat.Groups.Count)
{
var data = mat.Groups[matchdata.GroupNo];
if (PUB.SetBCDValue(vdata, matchdata.TargetPos, data.Value, pt.IsTrust))
ValueApplyCount += 1;
}
}
}
}
if (vdata != null && pt.IsAmkStd)// && bcdObj.barcodeSymbol == "1")
{
vdata.QRInputRaw = bcd;
}
if (vdata != null)
PUB.log.AddI($"[{pt.Description}]=>{bcd}");
list.Add(pt.Customer + "|" + pt.Description);
}
else
{
//PUB.log.AddAT($"(X)Match ({pt.Pattern}) Data={bcd}");
}
}
return new Tuple<int, List<string>>(ValueApplyCount, list);
}
/// <summary>
/// barcod eprocess
/// </summary>
void BarcodeProcess()
{
//coffee
//get regexpress patterns
var patterns = PUB.Result.BCDPattern;
var itemC = PUB.Result.ItemDataC;
var vdata = itemC.VisionData;
bool vQtyOK = false;
//No Run - Confirm Data
if (vdata.Confirm) return;
var vm = PUB.Result.vModel;
lock (vdata.barcodelist)
{
foreach (var item in vdata.barcodelist)
{
//var src = item.Value.barcodeSource;
var bcd = item.Value.Data;
var bcdObj = item.Value;
//already checked
if (bcdObj.RegExConfirm) continue;
var ValueApplyCount = BarcodeRegExProcess(PUB.Result.BCDPattern, PUB.Result.BCDIgnorePattern, vdata, bcdObj.barcodeSymbol, bcd, out bool IgnoreBcd, out bool findregex);
bcdObj.Ignore = IgnoreBcd;
//기타바코드 무시기능 적용 221018
if (vm != null && vm.IgnoreOtherBarcode == true && findregex == false)
bcdObj.Ignore = true;
bcdObj.RefExApply = (ValueApplyCount?.Item1 ?? 0) > 0;
bcdObj.RegExConfirm = true;
}
}
//all process sequence
if (BCDProcess_ALL(itemC, "SPS", PUB.sm.Step == eSMStep.RUN) != EResultKeyence.Nothing)
{
//nothing : multisid condition
}
}
}
}