150 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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<string> 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;
 | |
| 			//	}
 | |
| 			//}
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| }
 | 
