프로젝트 구조 개선 및 README.md 추가

- UIControl 프로젝트 구조 변경 (CapCleaningControl → Sub/UIControl)
- arAjinextek 라이브러리 통합 및 구조 개선
- 새로운 arAjinextek_Union 프로젝트 추가
- 솔루션 파일에 README.md 추가
- QR 모드에서 WMS RCV 태그 인식 기능 강화
- 데이터베이스 스키마 업데이트 및 관련 클래스 수정
- 프린터 및 바코드 장치 연동 로직 개선

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ChiKyun Kim
2025-08-07 08:35:56 +09:00
parent c17296101a
commit 9a7d1d27c7
140 changed files with 4203 additions and 6791 deletions

View File

@@ -110,7 +110,13 @@ namespace Project
private string KeyenceBarcodeDataF = string.Empty;
private string KeyenceBarcodeDataR = string.Empty;
//List<Class.KeyenceBarcodeData> barcodelist = new List<Class.KeyenceBarcodeData>();
/// <summary>
/// 키엔스로부터 받은 데이터를 분석한다.
/// </summary>
/// <param name="response"></param>
/// <param name="Source"></param>
void ParseBarcode(string response, string Source)
{
@@ -155,26 +161,15 @@ namespace Project
continue;
}
var MatchList = RegX.Matches(resp.Trim());
var buf = MatchList[0].Groups;
//var buf = resp.Split(':'); //데이터는 :로 분리되어있음
//if (buf.Length != 7) //데이터는 총 6개의 데이터로 구성됨
//{
// PUB.log.AddE("***바코드 응답데이터 오류 값(키엔스 전송포맷을 확인하세요) " + resp);
// gridView2.setTitle(8, 1, "ERR");
// continue;
//}
var angle = 0;
Boolean STDData = false; //들어온 자료가 amkor std 바코드여부
var sym = buf[1].Value;
var vData = buf[2].Value.Trim();
var sym = buf[1].Value; //symbol
var vData = buf[2].Value.Trim(); //data
if (Source == "R") KeyenceBarcodeDataR = vData;
else KeyenceBarcodeDataF = vData;
if (Source == "R") KeyenceBarcodeDataR = vData; //rear
else KeyenceBarcodeDataF = vData; //front
//바코드 무시조건 확인
//if (PUB.Result.BCDIgnorePattern != null)
@@ -234,13 +229,11 @@ namespace Project
{
theta = angbcd.Angle;
}
var theta_rad = -theta * Math.PI / 180.0;
var PX = (int)(Math.Cos(theta_rad) * (vertextCP.X - ReelCP.X) - Math.Sin(theta_rad) * (vertextCP.Y - ReelCP.Y)) + ReelCP.X;
var PY = (int)(Math.Sin(theta_rad) * (vertextCP.X - ReelCP.X) + Math.Cos(theta_rad) * (vertextCP.Y - ReelCP.Y)) + ReelCP.Y;
float LabelAngRad = (float)(Math.Atan2(PY - ReelCP.Y, PX - ReelCP.X));// 2; //라벨의 위치값을 찾아서 입력해야한다.
var labelpos = (float)(LabelAngRad * 180.0 / Math.PI);
if (labelpos < 0) labelpos = 360 + labelpos;
@@ -269,9 +262,8 @@ namespace Project
var bcdin = itemC.VisionData.barcodelist.ContainsKey(valuekey);//.Where(t => t.Value.CheckIntersect(vertextCP, vData) == true).FirstOrDefault();
if (bcdin == false)
{
//신규바코드데이터이므로 추가한다.
PUB.logKeyence.Add($"{resp.Replace("\n", "").Replace("\r", "")}");
//없다면 추가한다.
var newitem = new Class.KeyenceBarcodeData()
{
AmkorData = new StdLabelPrint.CAmkorSTDBarcode(vData),
@@ -285,11 +277,11 @@ namespace Project
};
var addok = itemC.VisionData.barcodelist.TryAdd(valuekey, newitem);
if (addok) PUB.log.Add($"[NEW:{sym}] " + Source + " " + vData);
else PUB.log.AddE($"X-[NEW:{sym}] " + Source + " " + vData);
if (addok) PUB.log.Add($"[O]BCD RESERV[NEW:{sym}] " + Source + " " + vData);
else PUB.log.AddE($"[X]BCD RESERV[NEW:{sym}] " + Source + " " + vData);
itemC.VisionData.UpdateBarcodePositionData();
itemC.VisionData.BarcodeTouched = true;
itemC.VisionData.BarcodeDirty = true;
}
else
{
@@ -310,10 +302,10 @@ namespace Project
};
//기존정보를 지우고
PUB.log.Add($"[UPD:{sym}] " + Source + " " + vData);
PUB.log.Add($"[UPD]BCD RESERV:{sym}] " + Source + " " + vData);
itemC.VisionData.barcodelist[valuekey] = newitem;
itemC.VisionData.UpdateBarcodePositionData();
itemC.VisionData.BarcodeTouched = true;
itemC.VisionData.BarcodeDirty = true;
}
}
}