Initial commit
This commit is contained in:
218
Handler/Project_form2/StateMachine/_Keyence_Rule.cs
Normal file
218
Handler/Project_form2/StateMachine/_Keyence_Rule.cs
Normal file
@@ -0,0 +1,218 @@
|
||||
using Keyence.AutoID.SDK;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class fMain
|
||||
{
|
||||
Regex regex = null;
|
||||
|
||||
/// <summary>
|
||||
/// 적용가능한 룰이 없으면 처리하지 않는다.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private Boolean Process_CustomerRule(string vdata)
|
||||
{
|
||||
bool retval = false;
|
||||
if (string.IsNullOrWhiteSpace(vdata)) return retval;
|
||||
var dt = Pub.Result.CustomerRule;
|
||||
if (dt.Count < 1) return retval;
|
||||
|
||||
//이 데이터가 정규식에 match 가되는지 확인하.ㄴㄷ
|
||||
var ucnt = 0;
|
||||
foreach (DataSet1.Component_Reel_CustRuleRow dr in dt.Rows)
|
||||
{
|
||||
|
||||
if (dr.MatchEx.isEmpty()) continue; //매칭키는 반드시 있어야 한다.
|
||||
if (dr.varName.isEmpty()) continue; //찾더라도 대상이 없으니 안한다
|
||||
var vData = Pub.Result.ItemData[1].VisionData;
|
||||
if (vData.Confirm) break; //완료처리된건 하지않는다
|
||||
|
||||
regex = new Regex(dr.MatchEx); //한글 3글자
|
||||
if (regex.IsMatch(vdata))
|
||||
{
|
||||
var matchlist = regex.Matches(vdata);
|
||||
var match0 = matchlist[dr.MatchIndex];
|
||||
var grpval = match0.Groups[dr.GroupIndex].Value;
|
||||
var result = grpval.Trim();
|
||||
if (dr.ReplaceEx.isEmpty() == false && dr.ReplaceStr.isEmpty() == false)
|
||||
{
|
||||
regex = new Regex(dr.ReplaceEx);
|
||||
if (regex.IsMatch(result)) result = regex.Replace(result, dr.ReplaceStr);
|
||||
}
|
||||
ucnt += 1;
|
||||
switch (dr.varName)
|
||||
{
|
||||
case "QTY0":
|
||||
vData.QTY0 = result;
|
||||
vData.QTYRQ = vdata.StartsWith("RQ");
|
||||
break;
|
||||
case "SID":
|
||||
vData.SID = result;
|
||||
break;
|
||||
case "LOT":
|
||||
vData.VLOT = result;
|
||||
break;
|
||||
case "PART":
|
||||
vData.PARTNO = result;
|
||||
break;
|
||||
case "MFGDATE":
|
||||
vData.MFGDATE = result;
|
||||
break;
|
||||
case "QTY":
|
||||
vData.QTY = result;
|
||||
break;
|
||||
default:
|
||||
ucnt -= 1;
|
||||
Pub.log.AddAT($"RegEx 대상 VarName을 찾을 수 없습니다. 값:{dr.varName}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
retval = ucnt > 0; //적용데이터가 1건이라도 있으면 확인
|
||||
return retval; //적용ㄱ
|
||||
}
|
||||
private Boolean Process_BasicRule(string vData)
|
||||
{
|
||||
|
||||
//amkor 포맷도 아닌 데이터가 오는 경우에는 추측해서 데이터를 입력해준다.
|
||||
int qty;
|
||||
string datestr = string.Empty;
|
||||
bool retval = true;
|
||||
|
||||
//수동입력의 경우에만 RQ값을 사용한다.
|
||||
if (Pub.Result.Option_QtyUpdateM) Process_ReturnReel(vData);
|
||||
|
||||
if (vData.StartsWith("PSK")) //murate 의 reel id 형식
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.SetRID(vData, "PARSEBARCODE_PSK");//.Substring(3);
|
||||
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
|
||||
}
|
||||
if (vData.StartsWith("1V") && vData.Length == 8) //무라타의 서플라이어코드
|
||||
{
|
||||
//Pub.Result.ItemData[1].VisionData.SCODE = vData.Substring(2);
|
||||
}
|
||||
if (vData.StartsWith("1T")) //무라타의 LOT
|
||||
{
|
||||
//Pub.Result.ItemData[1].VisionData.VLOT = vData.Substring(2);
|
||||
//Pub.Result.ItemData[1].VisionData.HASHEADER = true;
|
||||
}
|
||||
if (vData.StartsWith("1P")) //무라타의 파트넘버
|
||||
{
|
||||
//Pub.Result.ItemData[1].VisionData.PARTNO = vData.Substring(2);
|
||||
//Pub.Result.ItemData[1].VisionData.HASHEADER = true;
|
||||
}
|
||||
|
||||
if (vData.StartsWith("Q"))
|
||||
{
|
||||
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
|
||||
{
|
||||
int qty0;
|
||||
if (int.TryParse(vData.Substring(1), out qty0))
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.QTY = vData.Substring(1);
|
||||
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Pub.log.Add("RQ값이 적용되어 프리픽스 Q값=" + vData + "을 적용하지 않습니다");
|
||||
}
|
||||
}
|
||||
if (vData.StartsWith("17D") && vData.Length == 11) //생산일
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.MFGDATE = vData.Substring(3);// + "-"+ vData.Substring(3,2) + "-" + vData.Substring(5,2);
|
||||
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
|
||||
}
|
||||
if (vData.Split(',').Length == 6 && vData.StartsWith("P")) //특수포맷 추가 코드
|
||||
{
|
||||
var CommaBuf = vData.Split(',');
|
||||
foreach (var item in CommaBuf)
|
||||
{
|
||||
if (item.StartsWith("P"))
|
||||
Pub.Result.ItemData[1].VisionData.PARTNO = item.Substring(1);
|
||||
else if (item.StartsWith("Q"))
|
||||
{
|
||||
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.QTY = item.Substring(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Pub.log.Add("RQ값이 적용되어있어 특수 문자 수량값=" + vData + "을 적용하지 않음");
|
||||
}
|
||||
}
|
||||
|
||||
else if (item.StartsWith("L"))
|
||||
Pub.Result.ItemData[1].VisionData.VLOT = item.Substring(1);
|
||||
else if (item.StartsWith("D") && item.IndexOf('/') != -1)
|
||||
{
|
||||
var datestrbuf = item.Substring(1).Split('/');
|
||||
if (datestrbuf.Length == 3)
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.MFGDATE =
|
||||
datestrbuf[0].PadLeft(4, '0') +
|
||||
datestrbuf[1].PadLeft(2, '0') +
|
||||
datestrbuf[2].PadLeft(2, '0');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (IsDateValue(vData, out datestr))
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.MFGDATE = datestr;
|
||||
}
|
||||
else if (IsSIDValue(vData))
|
||||
{
|
||||
if (vData.StartsWith("101"))
|
||||
{
|
||||
if (Pub.Result.ItemData[1].VisionData.SID0.isEmpty() == true)
|
||||
{
|
||||
Pub.log.Add("SID값 변경함 #3 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
|
||||
Pub.Result.ItemData[1].VisionData.SID = vData;
|
||||
}
|
||||
}
|
||||
else if (vData.StartsWith("103"))
|
||||
{
|
||||
//103을 ㅗ시작하면 기존데이터가 101인경우에는 처리하지 않는다
|
||||
if (Pub.Result.ItemData[1].VisionData.SID.StartsWith("101") == false)
|
||||
{
|
||||
Pub.log.Add("SID값 변경함 #4 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
|
||||
Pub.Result.ItemData[1].VisionData.SID = vData;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Pub.Result.ItemData[1].VisionData.SID0.isEmpty() == true)
|
||||
{
|
||||
Pub.log.Add("SID값 변경함 #5 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
|
||||
Pub.Result.ItemData[1].VisionData.SID = vData;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (int.TryParse(vData, out qty) && qty < 200000 && qty >= 3000)
|
||||
{
|
||||
//수량으로 변환이 된다.
|
||||
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
|
||||
{
|
||||
Pub.Result.ItemData[1].VisionData.QTY = qty.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
Pub.log.Add("RQ값이 적용되어있어, 수량으로 추측한 문자=" + vData + "를 적용하지 않습니다");
|
||||
}
|
||||
}
|
||||
else retval = false;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user