using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; namespace Project { public partial class FMain { bool RecvQRProcess(List qrdatas, eWorkPort vIdx) { //데이터가없으면 처리하지 않는다. if (qrdatas == null || qrdatas.Count < 1) return false; bool FindData = false; var idata = vIdx == eWorkPort.Left ? PUB.Result.ItemDataL : PUB.Result.ItemDataR; //표준바코드라면 그 값을 표시해준다 var patterns = PUB.Result.BCDPattern; foreach (var datas in qrdatas) { //원본자료를 체크한다 if (datas.Equals(idata.VisionData.PrintQRData)) { //인쇄한 자료와 동일한 자료이다 FindData = true; } //표준 바코드 형태만 취한다 var pats = patterns.Where(t => t.IsAmkStd && t.IsEnable).OrderBy(t => t.Seq).ToList(); if (pats.Any()) { //패턴을 확인하여 값을 표시해준다 //var ValueApplyCount = 0; foreach (var pt in pats) { var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10)); if (regx.IsMatch(datas)) //패턴이 일치하다면 이것만 사용한다 { //find data var matchs = regx.Matches(datas); foreach (System.Text.RegularExpressions.Match mat in matchs) { foreach (var matchdata in pt.Groups) { if (matchdata.GroupNo <= mat.Groups.Count) { var data = mat.Groups[matchdata.GroupNo]; switch (matchdata.TargetPos.ToUpper()) { case "SID": idata.VisionData.SID2 = data.Value; break; case "RID": idata.VisionData.RID2 = data.Value; break; case "VLOT": idata.VisionData.VLOT2 = data.Value; break; case "VNAME": idata.VisionData.VNAME2 = data.Value; break; case "MFG": idata.VisionData.MFGDATE2 = data.Value; break; case "QTY": idata.VisionData.QTY2 = data.Value; break; case "PART": idata.VisionData.PARTNO2 = data.Value; break; } } } } break; } } } //var bcdData = new StdLabelPrint.CAmkorSTDBarcode(datas); //PUB.Result.ItemData[vIdx].VisionData.QTY2 = bcdData.QTY.ToString(); //PUB.Result.ItemData[vIdx].VisionData.RID2 = bcdData.RID; //PUB.Result.ItemData[vIdx].VisionData.SID2 = bcdData.SID; //PUB.Result.ItemData[vIdx].VisionData.VLOT2 = bcdData.VLOT; //PUB.Result.ItemData[vIdx].VisionData.VNAME2 = bcdData.VENDERNAME; //PUB.Result.ItemData[vIdx].VisionData.MFGDATE2 = bcdData.MFGDate;//.ToString("yyyyMMdd"); //PUB.Result.ItemData[vIdx].VisionData.PARTNO2 = bcdData.PARTNO; //PUB.Result.ItemData[vIdx].VisionData.Ready = true; ////Pub.Result.ItemData[vIdx].VisionData.ETime = DateTime.Now; ////Pub.Result.ItemData[vIdx].VisionData.Angle = 5; //PUB.Result.ItemData[vIdx].VisionData.Complete = true; //PUB.log.Add("BARCODE", $"{vIdx}바코드 읽기 성공 ID:{bcdData.RID},QTY:{bcdData.QTY}"); ////데이터를 읽었으며, 검증기능이 켜져있다면 검증을한다 //if (FindData) break; } //자료는 있었지만 바코드검증이 실패된 경우이다 //타임아웃까지 기다리지 않고 바로 오류처리를 한다. if (FindData == true) { //데이터를 찾았다면 완료처리를 해준다 idata.VisionData.Complete = true; //PUB.Result.ItemData[vIdx].VisionData.Complete = true; return true; } return false; //else //{ // var item = Pub.Result.ItemData[vIdx]; // var tsGrab = DateTime.Now - Pub.GetVarTime(VAR_LIVEVIEW); // var timeoutVision = vIdx == 1 ? COMM.SETTING.Data.Timeout_VisionProcessL : COMM.SETTING.Data.Timeout_VisionProcessU; // if (tsGrab.TotalMilliseconds >= timeoutVision) // { // //다음 바코드가 있다면 추가 진행을 위해서 남겨준다 // _SM_SAVEIMAGE(vIdx, DateTime.Now, "Images(QRValid)"); // WS_Send((idx == 0 ? 0 : 1), Pub.wsL, Pub.Result.ItemData[idx].guid, "OFF"); // var barcodepos = vIdx == 0 ? "LEFT" : "RIGHT"; // Pub.log.AddE("(" + barcodepos + ")바코드를 검증했지만 일치하지 않습니다"); // Pub.Result.SetResultMessage(eResult.OPERATION, eECode.BARCODEVALIDERR, eNextStep.pause, // vIdx, Pub.Result.ItemData[vIdx].VisionData.RID, Pub.Result.ItemData[vIdx].VisionData.RID2, // Pub.Result.ItemData[vIdx].VisionData.QTY, Pub.Result.ItemData[vIdx].VisionData.QTY2, // Pub.Result.ItemData[vIdx].VisionData.SID, Pub.Result.ItemData[vIdx].VisionData.SID2, // Pub.Result.ItemData[vIdx].VisionData.MFGDATE, Pub.Result.ItemData[vIdx].VisionData.MFGDATE2, // barcodepos); // return; // } //} } } }