initial commit
This commit is contained in:
266
Handler/Project/RunCode/StateMachine/_SPS_BarcodeProcess.cs
Normal file
266
Handler/Project/RunCode/StateMachine/_SPS_BarcodeProcess.cs
Normal file
@@ -0,0 +1,266 @@
|
||||
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;
|
||||
if (barcodeSymbol == "6") barcodeSymbol = "11"; //250930
|
||||
|
||||
//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 Symbol Setting(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 Symbol Setting(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 Symbol Setting(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, 5));
|
||||
try
|
||||
{
|
||||
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}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE($"BarcodeRegEx Error : {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
return new Tuple<int, List<string>>(ValueApplyCount, list);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// barcod eprocess
|
||||
/// </summary>
|
||||
void BarcodeProcess()
|
||||
{
|
||||
var itemC = PUB.Result.ItemDataC;
|
||||
var vdata = itemC.VisionData;
|
||||
|
||||
//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;
|
||||
|
||||
lock (PUB.Result.BCDPatternLock)
|
||||
{
|
||||
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);
|
||||
bcdObj.RegExConfirm = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//all process sequence
|
||||
if (BCDProcess_ALL(itemC, "SPS", PUB.sm.Step == eSMStep.RUN) != EResultKeyence.Nothing)
|
||||
{
|
||||
//nothing : multisid condition
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user