..
This commit is contained in:
@@ -19,6 +19,16 @@ namespace Project
|
||||
//로그가 너무 많이 쌓이니 해제한다
|
||||
//Pub.log.AddE("Reader RES : " + resp);
|
||||
}
|
||||
else if (e.RawData.StartsWith("OK,BLOAD"))
|
||||
{
|
||||
var str = e.RawData.Replace("\r", "").Replace("\n", "");
|
||||
PUB.log.AddI($"[{dev.Tag}] {str}");
|
||||
}
|
||||
else if (e.RawData.StartsWith("OK,BSAVE"))
|
||||
{
|
||||
var str = e.RawData.Replace("\r", "").Replace("\n", "");
|
||||
PUB.log.AddI($"[{dev.Tag}] {str}");
|
||||
}
|
||||
else if (e.RawData.StartsWith("OK"))
|
||||
{
|
||||
//OK회신
|
||||
@@ -110,8 +120,8 @@ namespace Project
|
||||
|
||||
private string KeyenceBarcodeDataF = string.Empty;
|
||||
private string KeyenceBarcodeDataR = string.Empty;
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 키엔스로부터 받은 데이터를 분석한다.
|
||||
/// </summary>
|
||||
@@ -144,7 +154,37 @@ namespace Project
|
||||
var RegX = new System.Text.RegularExpressions.Regex(Pattern);
|
||||
foreach (var resp in frames)
|
||||
{
|
||||
if (RegX.IsMatch(resp.Trim()) == false)
|
||||
var bcddata = resp.Trim().Split(',');
|
||||
if(resp.Equals("0:ERROR"))
|
||||
{
|
||||
PUB.log.AddE($"[{Source}] {resp}");
|
||||
continue;
|
||||
}
|
||||
else if (bcddata.Length > 2 && bcddata[1] == "BLOAD")
|
||||
{
|
||||
if(bcddata[0] =="ER")
|
||||
{
|
||||
PUB.log.AddE($"[{Source}]Bacode Memory Read Error({resp})");
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.AddI($"[{Source}]Bacode Memory Read Complete({resp})");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if (bcddata.Length > 2 && bcddata[1] == "BSAVE")
|
||||
{
|
||||
if (bcddata[0] == "ER")
|
||||
{
|
||||
PUB.log.AddE($"[{Source}]Bacode Memory Read Error({resp})");
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.AddI($"[{Source}]Bacode Memory Read Complete({resp})");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if (RegX.IsMatch(resp.Trim()) == false)
|
||||
{
|
||||
//에러처리 221018
|
||||
if (resp.StartsWith("0:ERROR")) continue;
|
||||
@@ -163,7 +203,7 @@ namespace Project
|
||||
|
||||
var MatchList = RegX.Matches(resp.Trim());
|
||||
var buf = MatchList[0].Groups;
|
||||
|
||||
|
||||
var angle = 0;
|
||||
var sym = buf[1].Value; //symbol
|
||||
var vData = buf[2].Value.Trim(); //data
|
||||
@@ -229,7 +269,7 @@ 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;
|
||||
@@ -281,7 +321,7 @@ namespace Project
|
||||
else PUB.log.AddE($"[X]BCD RESERV[NEW:{sym}] " + Source + " " + vData);
|
||||
|
||||
itemC.VisionData.UpdateBarcodePositionData();
|
||||
itemC.VisionData.BarcodeDirty = true;
|
||||
itemC.VisionData.BarcodeTouched = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -305,7 +345,7 @@ namespace Project
|
||||
PUB.log.Add($"[UPD]BCD RESERV:{sym}] " + Source + " " + vData);
|
||||
itemC.VisionData.barcodelist[valuekey] = newitem;
|
||||
itemC.VisionData.UpdateBarcodePositionData();
|
||||
itemC.VisionData.BarcodeDirty = true;
|
||||
itemC.VisionData.BarcodeTouched = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ namespace Project
|
||||
groupBox2.Text = "Barcode";
|
||||
}
|
||||
|
||||
btAutoReelOut.BackColor = PUB.Result.AutoReelOut ? Color.Lime : SystemColors.Control;
|
||||
groupBox1.Text = $"Equipment Operation({PUB.sm.Loop_ms:N0}ms)";
|
||||
//릴사이즈가 맞지 않으면 깜박인다.
|
||||
if (DIO.getCartSize(1) != eCartSize.None)
|
||||
@@ -113,9 +114,9 @@ namespace Project
|
||||
|
||||
|
||||
//락정보
|
||||
var l0 = DIO.GetIOOutput(eDOName.CART_MAG0);
|
||||
var l1 = DIO.GetIOOutput(eDOName.CART_MAG1);
|
||||
var l2 = DIO.GetIOOutput(eDOName.CART_MAG2);
|
||||
var l0 = DIO.GetIOOutput(eDOName.PORTL_MAGNET);
|
||||
var l1 = DIO.GetIOOutput(eDOName.PORTC_MAGNET);
|
||||
var l2 = DIO.GetIOOutput(eDOName.PORTR_MAGNET);
|
||||
|
||||
lbLock0.Text = l0 ? "Cart Exchange" : "No Cart";
|
||||
lbLock1.Text = l1 ? "Cart Exchange" : "No Cart";
|
||||
@@ -132,7 +133,7 @@ namespace Project
|
||||
{
|
||||
//데이터수신시간에 따른 색상
|
||||
var tswecv = DateTime.Now - VAR.TIME[eVarTime.lastRecvWSL];
|
||||
if(tswecv.TotalSeconds > 5)
|
||||
if (tswecv.TotalSeconds > 5)
|
||||
{
|
||||
sbVisTitle0.ForeColor = Color.HotPink;
|
||||
}
|
||||
@@ -143,7 +144,7 @@ namespace Project
|
||||
else
|
||||
sbVisTitle0.ForeColor = Color.Magenta;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@@ -165,7 +166,7 @@ namespace Project
|
||||
else
|
||||
sbVisTitle2.ForeColor = Color.Magenta;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//arLabel18.Text = camliveBusy ? "카메라 (라이브뷰)" : "카메라";
|
||||
@@ -237,14 +238,14 @@ namespace Project
|
||||
HWState.setTitle(1, hwcol, (PUB.wsL.Connected ? "ON" : "OFF"));
|
||||
HWState.setValue(1, hwcol++, (ushort)(PUB.wsL.Connected ? 1 : 3));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (PUB.wsR != null)
|
||||
{
|
||||
HWState.setTitle(1, hwcol, (PUB.wsR.Connected ? "ON" : "OFF"));
|
||||
HWState.setValue(1, hwcol++, (ushort)(PUB.wsR.Connected ? 1 : 3));
|
||||
}
|
||||
|
||||
|
||||
|
||||
HWState.setTitle(1, hwcol, (PUB.BarcodeFix.IsOpen() ? AR.SETTING.Data.Barcode_Port : "OFF"));
|
||||
HWState.setValue(1, hwcol++, (ushort)(PUB.BarcodeFix.IsOpen() ? 1 : 3));
|
||||
@@ -321,7 +322,7 @@ namespace Project
|
||||
arLabel1.ForeColor = Color.Red;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//시스템바이패스
|
||||
@@ -354,7 +355,11 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
lbModelName.Text = $"[{VAR.STR[eVarString.JOB_CUSTOMER_CODE]}] {modelName}";
|
||||
var custname = VAR.STR[eVarString.JOB_CUSTOMER_CODE];
|
||||
if (custname.isEmpty() == false)
|
||||
lbModelName.Text = $"[{custname}] {modelName}";
|
||||
else
|
||||
lbModelName.Text = $"{modelName}";
|
||||
lbModelName.ForeColor = Color.Black;
|
||||
lbModelName.BackColor = Color.White;
|
||||
lbModelName.BackColor2 = Color.WhiteSmoke;
|
||||
|
||||
@@ -153,9 +153,9 @@ namespace Project
|
||||
hmi1.arFGPrinter0END = PUB.flag.get(eVarBool.FG_OK_PRINTL);
|
||||
hmi1.arFGPrinter1END = PUB.flag.get(eVarBool.FG_OK_PRINTR);
|
||||
|
||||
hmi1.arMagnet0 = DIO.GetIOOutput(eDOName.CART_MAG0);
|
||||
hmi1.arMagnet1 = DIO.GetIOOutput(eDOName.CART_MAG1);
|
||||
hmi1.arMagnet2 = DIO.GetIOOutput(eDOName.CART_MAG2);
|
||||
hmi1.arMagnet0 = DIO.GetIOOutput(eDOName.PORTL_MAGNET);
|
||||
hmi1.arMagnet1 = DIO.GetIOOutput(eDOName.PORTC_MAGNET);
|
||||
hmi1.arMagnet2 = DIO.GetIOOutput(eDOName.PORTR_MAGNET);
|
||||
|
||||
hmi1.arPickerSafeZone = DIO.GetIOInput(eDIName.PICKER_SAFE);
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@ namespace Project
|
||||
else if (PUB.mot.HasServoOff == true) msg = "Servo OFF occurred";
|
||||
else if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) msg = "AIR output failed (Press the front blue AIR button)";
|
||||
else if (DIO.GetIOInput(eDIName.AIR_DETECT) == false) msg = "AIR not detected";
|
||||
else if (DIO.isSaftyDoorF() == false) msg = "Front Door Safty Error";
|
||||
else if (DIO.isSaftyDoorR() == false) msg = "Rear Door Safty Error";
|
||||
else if (PUB.mot.HasHomeSetOff == true)
|
||||
{
|
||||
if (DIO.GetIOInput(eDIName.PICKER_SAFE) == false)
|
||||
|
||||
@@ -112,6 +112,9 @@ namespace Project
|
||||
PUB.log.AddI("H/W inspection ignore function disabled due to work start");
|
||||
}
|
||||
|
||||
//Auto Reel Out 250926
|
||||
PUB.Result.AutoReelOut = PUB.Result.vModel.AutoOutConveyor>0;
|
||||
|
||||
//공용변수초기화
|
||||
PUB.log.Add("Common variable (count) values initialized");
|
||||
VAR.I32.Clear((int)eVarInt32.LPickOfCount);
|
||||
@@ -122,11 +125,15 @@ namespace Project
|
||||
VAR.I32.Clear((int)eVarInt32.PickOnCount);
|
||||
VAR.I32.Clear((int)eVarInt32.PickOnRetry); //221102
|
||||
|
||||
|
||||
PUB.flag.set(eVarBool.FG_RUN_LEFT, false, "POSREST");
|
||||
PUB.flag.set(eVarBool.FG_RUN_RIGHT, false, "POSREST");
|
||||
|
||||
VAR.BOOL[eVarBool.JOB_Empty_SIDConvertInfo] = false;
|
||||
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] = false;
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] = false;
|
||||
AutoConvOutTimeL = new DateTime(1982, 11, 23);
|
||||
AutoConvOutTimeR = new DateTime(1982, 11, 23);
|
||||
|
||||
PUB.Result.ItemDataL.Clear("START_CHKSW");
|
||||
PUB.Result.ItemDataC.Clear("START_CHKSW");
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
|
||||
//####################################################
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Project
|
||||
|
||||
var CVMode = VAR.BOOL[eVarBool.Use_Conveyor];
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
|
||||
//데이터가 완료되었는지 확인
|
||||
@@ -213,7 +213,7 @@ namespace Project
|
||||
|
||||
//[WMS] SID정보테이블에서 정보 추출(프린트정보는 없음)
|
||||
//[WMS] 에서 중복검색되면 팝업을 해야하므로 이것을 먼저 처리한다.
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeDirty == true)
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
@@ -229,7 +229,7 @@ namespace Project
|
||||
List<string> wheres = new List<string>();
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUST_CODE='{vdata.CUSTCODE}'");
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUST_CODE='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_PartNo])
|
||||
@@ -289,7 +289,7 @@ namespace Project
|
||||
}
|
||||
|
||||
//SID정보테이블에서 정보 추출
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeDirty == true)
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
@@ -309,7 +309,7 @@ namespace Project
|
||||
//wheres.Add($"MC='{COMM.SETTING.Data.McName}");
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE}'");
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_PartNo])
|
||||
@@ -372,7 +372,7 @@ namespace Project
|
||||
}
|
||||
|
||||
//시드변환정보에서 정보 추출
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && vdata.BarcodeDirty == true)
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
@@ -392,7 +392,7 @@ namespace Project
|
||||
//wheres.Add($"MC='{COMM.SETTING.Data.McName}");
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_Conv_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE}'");
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_Conv_Where_PartNo])
|
||||
@@ -449,7 +449,7 @@ namespace Project
|
||||
}
|
||||
|
||||
//기존 작업에서 데이터를 찾아서 쓴다
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplyJobInfo] && vdata.BarcodeDirty == true)
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplyJobInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
@@ -466,7 +466,7 @@ namespace Project
|
||||
List<string> wheres = new List<string>();
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUSTCODE='{vdata.CUSTCODE}'");
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUSTCODE='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_PartNo])
|
||||
@@ -508,9 +508,9 @@ namespace Project
|
||||
}
|
||||
|
||||
//해당 바코드작업이 완료되었는지 확인한다. 신규 바코드값이 업데이트되면 한번더 동작하도록 한다
|
||||
if (itemC.VisionData.BarcodeDirty == true && NewBarcodeUpdated == false)
|
||||
if (itemC.VisionData.BarcodeTouched == true && NewBarcodeUpdated == false)
|
||||
{
|
||||
itemC.VisionData.BarcodeDirty = false;
|
||||
itemC.VisionData.BarcodeTouched = false;
|
||||
}
|
||||
|
||||
//릴Id 신규부여
|
||||
@@ -552,6 +552,15 @@ namespace Project
|
||||
}
|
||||
}
|
||||
|
||||
bool BatchValueOK = false;
|
||||
if (mv.IgnoreBatch) BatchValueOK = true;
|
||||
else BatchValueOK = itemC.VisionData.BATCH.isEmpty() == false;
|
||||
|
||||
bool partnoValueOK = false;
|
||||
if (PUB.Result.vModel.IgnorePartNo) partnoValueOK = true;
|
||||
else partnoValueOK = itemC.VisionData.PARTNO.isEmpty() == false;
|
||||
|
||||
|
||||
//데이터확정 및 완료처리
|
||||
if (itemC.VisionData.Confirm)
|
||||
{
|
||||
@@ -563,7 +572,7 @@ namespace Project
|
||||
else
|
||||
PUB.log.AddI($"Proceeding due to data confirmation completion (BYPASS)");
|
||||
}
|
||||
else if (itemC.VisionData.QRInputRaw.isEmpty() == false && itemC.VisionData.BATCH.isEmpty() == false)
|
||||
else if (itemC.VisionData.QRInputRaw.isEmpty() == false && BatchValueOK)
|
||||
{
|
||||
//ATK STD QR데이터가 입력되었으니 더이상 읽지 않아도 진행하도록 하자
|
||||
//데이터가 부족하다면 바로 채우기 작업을 해야한다
|
||||
@@ -575,8 +584,8 @@ namespace Project
|
||||
itemC.VisionData.VLOT.isEmpty() == false &&
|
||||
itemC.VisionData.SID.Length == 9 &&
|
||||
(OPT_BYPASS || itemC.VisionData.MFGDATE.isEmpty() == false) &&
|
||||
itemC.VisionData.PARTNO.isEmpty() == false &&
|
||||
itemC.VisionData.BATCH.isEmpty() == false &&
|
||||
partnoValueOK &&
|
||||
BatchValueOK &&
|
||||
itemC.VisionData.RID.isEmpty() == false)
|
||||
{
|
||||
//모든값이 입력되어 있다면 조건 체크후 진행할 수 있도록 한다
|
||||
@@ -628,10 +637,6 @@ namespace Project
|
||||
return;
|
||||
}
|
||||
|
||||
//DB정보에서 데이터를 쓸것이 있다면 기록한다
|
||||
|
||||
//이전작업내역에서 데이터를 쓸것이 있다면 기록한다
|
||||
|
||||
//Customer Code
|
||||
if (OPT_BYPASS == false && item.VisionData.CUSTCODE.isEmpty() && CustomerCode.isEmpty() == false)
|
||||
{
|
||||
@@ -782,6 +787,8 @@ namespace Project
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//프린트위치확인
|
||||
if (item.VisionData.PrintPositionData.isEmpty() == true || item.VisionData.PrintPositionCheck == false)
|
||||
{
|
||||
@@ -824,6 +831,19 @@ namespace Project
|
||||
}
|
||||
}
|
||||
|
||||
//ignore partno value
|
||||
if (PUB.Result.vModel.IgnorePartNo == true && item.VisionData.PARTNO_Trust == false)
|
||||
{
|
||||
PUB.log.Add("PartNo Trust by Ignore PartNo Setting(opmodel)");
|
||||
item.VisionData.PARTNO_Trust = true;
|
||||
}
|
||||
|
||||
//ignore batch value
|
||||
if (PUB.Result.vModel.IgnoreBatch == true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//데이터의 신뢰성을 확인하고 모두 입력되었다면 자동 확정을 진행한다
|
||||
if (item.VisionData.MFGDATE_Trust &&
|
||||
item.VisionData.PARTNO_Trust &&
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
|
||||
//####################################################
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
|
||||
var iLockX = PUB.iLock[(int)eAxis.PX_PICK];
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
var OPT_BYPASS = PUB.OPT_BYPASS();
|
||||
//####################################################
|
||||
//### 인터락 확인
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Project
|
||||
|
||||
//option check
|
||||
var OPT_PrinterOff = PUB.OPT_PRINTEROFF(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA(target);
|
||||
var OPT_CameraOff = PUB.OPT_CAMERA();
|
||||
//var OPT_BYPASS = PUB.OPT_BYPASS(target);
|
||||
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ namespace Project
|
||||
|
||||
//process barcode
|
||||
BarcodeProcess();
|
||||
AutoOutConveyor();
|
||||
}
|
||||
string lastridv1 = string.Empty;
|
||||
|
||||
@@ -119,7 +120,7 @@ namespace Project
|
||||
|
||||
void PortMagnet()
|
||||
{
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET0) && DIO.GetIOOutput(eDOName.CART_MAG0) == false)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET0) && DIO.GetIOOutput(eDOName.PORTL_MAGNET) == false)
|
||||
{
|
||||
var ts = DateTime.Now - VAR.TIME[(int)eVarTime.MAGNET0];
|
||||
if (ts.TotalMilliseconds > AR.SETTING.Data.WaitTime_Magnet0)
|
||||
@@ -128,12 +129,12 @@ namespace Project
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET0, false, "SPS-MAGON");
|
||||
}
|
||||
}
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET0) == true && DIO.GetIOOutput(eDOName.CART_MAG0) == true)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET0) == true && DIO.GetIOOutput(eDOName.PORTL_MAGNET) == true)
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET0, false, "SPS-MAGOFF");
|
||||
}
|
||||
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET1) && DIO.GetIOOutput(eDOName.CART_MAG1) == false)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET1) && DIO.GetIOOutput(eDOName.PORTC_MAGNET) == false)
|
||||
{
|
||||
var ts = DateTime.Now - VAR.TIME[(int)eVarTime.MAGNET1];
|
||||
if (ts.TotalMilliseconds > AR.SETTING.Data.WaitTime_Magnet1)
|
||||
@@ -142,13 +143,13 @@ namespace Project
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET1, false, "SPS-MAGON");
|
||||
}
|
||||
}
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET1) == true && DIO.GetIOOutput(eDOName.CART_MAG1) == true)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET1) == true && DIO.GetIOOutput(eDOName.PORTC_MAGNET) == true)
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET1, false, "SPS-MAGOFF");
|
||||
}
|
||||
|
||||
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET2) && DIO.GetIOOutput(eDOName.CART_MAG2) == false)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET2) && DIO.GetIOOutput(eDOName.PORTR_MAGNET) == false)
|
||||
{
|
||||
var ts = DateTime.Now - VAR.TIME[(int)eVarTime.MAGNET2];
|
||||
if (ts.TotalMilliseconds > AR.SETTING.Data.WaitTime_Magnet2)
|
||||
@@ -157,7 +158,7 @@ namespace Project
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET2, false, "SPS-MAGON");
|
||||
}
|
||||
}
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET2) == true && DIO.GetIOOutput(eDOName.CART_MAG2) == true)
|
||||
if (PUB.flag.get(eVarBool.FG_WAT_MAGNET2) == true && DIO.GetIOOutput(eDOName.PORTR_MAGNET) == true)
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_WAT_MAGNET2, false, "SPS-MAGOFF");
|
||||
}
|
||||
|
||||
87
Handler/Project/RunCode/StateMachine/_SPS_AutoOutConveyor.cs
Normal file
87
Handler/Project/RunCode/StateMachine/_SPS_AutoOutConveyor.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using AR;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
//컨베이어 배출신호를 자동 해제한다.(지정시간-초)
|
||||
DateTime AutoConvOutTimeL = new DateTime(1982, 11, 23);
|
||||
DateTime AutoConvOutTimeR = new DateTime(1982, 11, 23);
|
||||
void AutoOutConveyor()
|
||||
{
|
||||
//동작중에만 사용한다
|
||||
if (PUB.sm.Step != eSMStep.RUN) return;
|
||||
|
||||
//컨베이어 사용시에만.
|
||||
if (VAR.BOOL[eVarBool.Use_Conveyor] == false) return;
|
||||
|
||||
//모델정보 필수
|
||||
if (PUB.Result.vModel == null || PUB.Result.isSetvModel == false) return;
|
||||
|
||||
//자동 해제 시간확인 (0=비활성)
|
||||
var AutoReleaseSecond = PUB.Result.vModel.AutoOutConveyor;
|
||||
if (AutoReleaseSecond < 1) return;
|
||||
|
||||
//현재 모델의 사용여부 확인 (UI상단에서 버튼으로 클릭가능하다)
|
||||
if (PUB.Result.AutoReelOut == false) return;
|
||||
|
||||
//외부신호 대기중일때만 사용
|
||||
if (PUB.iLockCVL.get((int)eILockCV.EXTBUSY) && DIO.GetIOInput(eDIName.L_CONV4))
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] == false)
|
||||
{
|
||||
if (AutoConvOutTimeL.Year == 1982) AutoConvOutTimeL = DateTime.Now;
|
||||
var ts = DateTime.Now - AutoConvOutTimeL;
|
||||
if (ts.TotalSeconds > AutoReleaseSecond)
|
||||
{
|
||||
PUB.log.AddI($"Auto Conveyor(L) Output - On");
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] = true;
|
||||
AutoConvOutTimeL = DateTime.Now;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] == true)
|
||||
{
|
||||
var ts = DateTime.Now - AutoConvOutTimeL;
|
||||
if (ts.TotalSeconds > SETTING.Data.Timeout_AutoOutConvSignal)
|
||||
{
|
||||
PUB.log.Add($"Auto Conveyor(L) Output - Off");
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] = false;
|
||||
AutoConvOutTimeL = new DateTime(1982, 11, 23);
|
||||
}
|
||||
}
|
||||
|
||||
//외부신호 대기중일때만 사용
|
||||
if (PUB.iLockCVR.get((int)eILockCV.EXTBUSY) && DIO.GetIOInput(eDIName.R_CONV4))
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] == false)
|
||||
{
|
||||
if (AutoConvOutTimeR.Year == 1982) AutoConvOutTimeR = DateTime.Now;
|
||||
var ts = DateTime.Now - AutoConvOutTimeR;
|
||||
if (ts.TotalSeconds > AutoReleaseSecond)
|
||||
{
|
||||
PUB.log.AddI($"Auto Conveyor(R) Output - On");
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] = true;
|
||||
AutoConvOutTimeR = DateTime.Now;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] == true)
|
||||
{
|
||||
var ts = DateTime.Now - AutoConvOutTimeR;
|
||||
if (ts.TotalSeconds > SETTING.Data.Timeout_AutoOutConvSignal)
|
||||
{
|
||||
PUB.log.Add($"Auto Conveyor(R) Output - Off");
|
||||
VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] = false;
|
||||
AutoConvOutTimeR = new DateTime(1982, 11, 23);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -38,11 +38,7 @@ namespace Project
|
||||
else patsEx = patternsEx.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList();
|
||||
}
|
||||
|
||||
if (pats.Any() == false)
|
||||
{
|
||||
PUB.log.AddAT($"No registered pattern(SYM={barcodeSymbol})");
|
||||
return new Tuple<int, List<string>>(0, new List<string>());
|
||||
}
|
||||
|
||||
|
||||
//모델정보의 허용 심볼인지 확인한다 221017
|
||||
var vm = PUB.Result.vModel;
|
||||
@@ -68,6 +64,13 @@ namespace Project
|
||||
}
|
||||
}
|
||||
|
||||
//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)
|
||||
{
|
||||
@@ -78,7 +81,7 @@ namespace Project
|
||||
var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10));
|
||||
if (regx.IsMatch(bcd))
|
||||
{
|
||||
PUB.log.Add($"Ignore barcode:{bcd},PAT:{pt.Pattern},SYM:{pt.Symbol}");
|
||||
PUB.log.AddAT($"Ignore barcode:{bcd},PAT:{pt.Pattern},SYM:{pt.Symbol}");
|
||||
IgnoreBarcode = true;
|
||||
break;
|
||||
}
|
||||
@@ -89,6 +92,66 @@ namespace Project
|
||||
}
|
||||
|
||||
|
||||
//동작중에 들어오는 바코드의 자동처리코드 추가 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;
|
||||
@@ -156,7 +219,6 @@ namespace Project
|
||||
if (vdata.Confirm) return;
|
||||
var vm = PUB.Result.vModel;
|
||||
|
||||
//바코드목록에서 정규식값으로 각 필드값을 기록한다.
|
||||
lock (vdata.barcodelist)
|
||||
{
|
||||
foreach (var item in vdata.barcodelist)
|
||||
@@ -172,13 +234,453 @@ namespace Project
|
||||
bcdObj.Ignore = IgnoreBcd;
|
||||
|
||||
//기타바코드 무시기능 적용 221018
|
||||
if (bcdObj.Ignore == false && vm != null && vm.IgnoreOtherBarcode == true && findregex == false)
|
||||
if (vm != null && vm.IgnoreOtherBarcode == true && findregex == false)
|
||||
bcdObj.Ignore = true;
|
||||
|
||||
bcdObj.RefExApply = (ValueApplyCount?.Item1 ?? 0) > 0;
|
||||
bcdObj.RegExConfirm = true;
|
||||
}
|
||||
}
|
||||
|
||||
//assign customer code - fixed data
|
||||
if (vdata.CUSTCODE.isEmpty() && VAR.STR[eVarString.JOB_CUSTOMER_CODE].isEmpty() == false)
|
||||
{
|
||||
vdata.CUSTCODE = VAR.STR[eVarString.JOB_CUSTOMER_CODE];
|
||||
PUB.log.Add($"Cutomer Code 고정값 사용 : {vdata.CUSTCODE}");
|
||||
}
|
||||
|
||||
//SiD CONVERT
|
||||
if (VAR.BOOL[eVarBool.Opt_SIDConvert])
|
||||
{
|
||||
if (PUB.flag.get(eVarBool.FG_WAIT_LOADERINFO) == false && VAR.BOOL[eVarBool.JOB_Empty_SIDConvertInfo] == false)
|
||||
{
|
||||
//원본시드(sid0)가 비어있는데 sid과 확정되었다면 변환작업을 진행한다
|
||||
if (vdata.SID0.isEmpty() && vdata.SID.isEmpty() == false && vdata.SID_Trust)
|
||||
{
|
||||
//이 sid가 존재여부확인 후 없는 sid라면 더이상 처리하지 않는다 230510
|
||||
if (PUB.Result.DTSidConvertEmptyList.Contains(vdata.SID))
|
||||
{
|
||||
//존재하지 않는 SID로 이미 확인되었다
|
||||
}
|
||||
else if (PUB.Result.DTSidConvertMultiList.Contains(vdata.SID))
|
||||
{
|
||||
//다중sid로 인해 처리하지 않는다
|
||||
}
|
||||
else
|
||||
{
|
||||
var newsid = PUB.SIDCovert(vdata.SID, "SPS_BarcodeProcess", out bool converr);
|
||||
if (converr)
|
||||
{
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
PUB.log.AddE(newsid);
|
||||
}
|
||||
else
|
||||
{
|
||||
vdata.SID0 = vdata.SID;
|
||||
vdata.SID = newsid;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//정규식혹은 바코드 룰에 의해 데이터가 바뀌었더라도 모델 기준으로 진행한다
|
||||
if (PUB.Result.vModel.Def_Vname.isEmpty() == false)
|
||||
{
|
||||
if (itemC.VisionData.VNAME.Equals(PUB.Result.vModel.Def_Vname) == false)
|
||||
{
|
||||
itemC.VisionData.VNAME = PUB.Result.vModel.Def_Vname.Trim();
|
||||
itemC.VisionData.VNAME_Trust = true;
|
||||
PUB.log.Add($"Defaul V.Name Set to {PUB.Result.vModel.Def_Vname}");
|
||||
}
|
||||
}
|
||||
if (PUB.Result.vModel.Def_MFG.isEmpty() == false)
|
||||
{
|
||||
if (itemC.VisionData.MFGDATE.Equals(PUB.Result.vModel.Def_MFG) == false)
|
||||
{
|
||||
itemC.VisionData.MFGDATE = PUB.Result.vModel.Def_MFG.Trim();
|
||||
itemC.VisionData.MFGDATE_Trust = true;
|
||||
PUB.log.Add($"Defaul MFGDATE Set to {PUB.Result.vModel.Def_MFG}");
|
||||
}
|
||||
}
|
||||
|
||||
//릴ID 신규발행
|
||||
if (PUB.sm.Step == eSMStep.RUN && vdata.CUSTCODE.isEmpty() == false)
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Opt_NewReelID])
|
||||
{
|
||||
if (itemC.VisionData.RIDNew == false)
|
||||
{
|
||||
var newid = PUB.MakeNewREELID(itemC.VisionData.SID);// Amkor.RestfulService.Allocation_Unique_ReelID_AmkorSTD(itemC.VisionData.CUSTCODE, "4", "A", out string errmsg);
|
||||
if (newid.success == true)
|
||||
{
|
||||
//backup origin reel id
|
||||
itemC.VisionData.RID0 = itemC.VisionData.RID;
|
||||
|
||||
//set new reel id
|
||||
PUB.log.Add("new reelid bacodeprecess");
|
||||
itemC.VisionData.SetRID(newid.newid, "SPS:CHKDATACOMPLETE");// = newid;
|
||||
itemC.VisionData.RIDNew = true; //applied new reel id
|
||||
|
||||
//서버의수량업데이트기능이 켜져있다면 해당 값을 제거해준다. (다시 조회되도록 함)
|
||||
if (VAR.BOOL[eVarBool.Opt_ServerQty])
|
||||
{
|
||||
//이미 수량업데이트된 경우이므로 복원시켜준다
|
||||
if (itemC.VisionData.QTY0.isEmpty() == false)
|
||||
{
|
||||
PUB.log.AddAT($"릴아이디 변경으로 인해 수량을 복원합니다({itemC.VisionData.QTY}->{itemC.VisionData.QTY0})");
|
||||
itemC.VisionData.QTY = itemC.VisionData.QTY0;
|
||||
itemC.VisionData.QTY0 = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var logtime = VAR.TIME.RUN((int)eVarTime.LOG_NEWIDERROR);
|
||||
if (logtime.TotalSeconds >= 3000)
|
||||
{
|
||||
PUB.log.AddAT($"Reel_ID 생성실패 : {newid.message}");
|
||||
VAR.TIME.Update(eVarTime.LOG_NEWIDERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//바코드가 변경된 경우이다, 자동채우기 기능이 있다면 사용한다
|
||||
bool NewBarcodeUpdated = false;
|
||||
//[WMS] SID정보테이블에서 정보 추출(프린트정보는 없음)
|
||||
//[WMS] 에서 중복검색되면 팝업을 해야하므로 이것을 먼저 처리한다.
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
//select columns
|
||||
List<string> fields = new List<string>();
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CUST_CODE");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PART_NO");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VENDOR_NM");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_batch] && (vdata.SID_Trust == false || vdata.BATCH.isEmpty())) fields.Add("BATCH_NO"); //220921
|
||||
|
||||
//where coluns
|
||||
List<string> wheres = new List<string>();
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUST_CODE='{vdata.CUSTCODE.PadLeft(10,'0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_PartNo])
|
||||
{
|
||||
if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PART_NO='{vdata.PARTNO}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_SID])
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Opt_SIDConvert]) //if sid convert logic
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID0.isEmpty() == false && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_VLOT]) //221013
|
||||
{
|
||||
if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false) wheres.Add($"VENDER_LOT = '{vdata.VLOT}'");
|
||||
else Apply = false;
|
||||
}
|
||||
|
||||
//if query data . no error
|
||||
if (Apply && fields.Count > 0 && wheres.Count > 0)
|
||||
{
|
||||
var mcname = VAR.BOOL[eVarBool.Use_Conveyor] ? PUB.MCCode : SETTING.Data.McName;
|
||||
|
||||
var TableName = "VW_GET_MAX_QTY_VENDOR_LOT";
|
||||
var whereState = " where " + string.Join(" and ", wheres);
|
||||
var selectFields = string.Join(",", fields);
|
||||
|
||||
var SQL = $"select top 1 {selectFields} from {TableName} WITH(NOLOCK) {whereState}";
|
||||
var SQLC = $"select count(*) from {TableName} WITH(NOLOCK) {whereState}";
|
||||
|
||||
//정보가 여러개 존재하면 선택화면으로 처리해야한다
|
||||
//var cntvalue = (DBHelper.ExecuteScalar(SQLC)?.ToString() ?? "0").toInt();
|
||||
//if (cntvalue > 1)
|
||||
//{
|
||||
// VAR.STR[eVarString.MULTISID_QUERY] = $"select {selectFields} from {TableName} WITH(NOLOCK) {whereState}";
|
||||
// VAR.STR[eVarString.MULTISID_FIELDS] = selectFields;
|
||||
// return EResultKeyence.MultiSID;
|
||||
//}
|
||||
|
||||
//if (PUB.Result.ItemDataC.VisionData.LastQueryStringWMS.Equals(SQL) == false) //같은 쿼리는 처리하지 않는다
|
||||
//{
|
||||
// if (PUB.GetSIDInfo_And_SetData(fields, ref vdata, SQL, SQLC))
|
||||
// NewBarcodeUpdated = true;
|
||||
|
||||
// PUB.Result.ItemDataC.VisionData.LastQueryStringWMS = SQL;
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//SID정보테이블에서 정보 추출
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
//select columns
|
||||
List<string> fields = new List<string>();
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CustCode");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PartNo");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("PrintPosition");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VenderName");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID");
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_batch] && (vdata.SID_Trust == false || vdata.BATCH.isEmpty())) fields.Add("batch"); //220921
|
||||
if (VAR.BOOL[eVarBool.Opt_SID_Apply_qty] && (vdata.SID_Trust == false || vdata.QTYMAX.isEmpty())) fields.Add("qtymax"); //220921
|
||||
fields.Add("attach"); //231026
|
||||
|
||||
//where coluns
|
||||
List<string> wheres = new List<string>();
|
||||
//wheres.Add($"MC='{COMM.SETTING.Data.McName}");
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_PartNo])
|
||||
{
|
||||
if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PartNo='{vdata.PARTNO}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_SID])
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Opt_SIDConvert]) //if sid convert logic
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID0.isEmpty() == false && vdata.SID.isEmpty() == false)
|
||||
wheres.Add($"SID='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_VLOT]) //221013
|
||||
{
|
||||
if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false)
|
||||
wheres.Add($"(VenderLot like '{vdata.VLOT}' or VenderLot like '%,{vdata.VLOT}' or VenderLot like '{vdata.VLOT},%' or VenderLot like '%,{vdata.VLOT},%')");
|
||||
else Apply = false;
|
||||
}
|
||||
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_SID_Where_MC]) //231006
|
||||
{
|
||||
if (AR.SETTING.Data.McName.isEmpty() == false)
|
||||
wheres.Add($"attach='{AR.SETTING.Data.McName}'");
|
||||
else Apply = false;
|
||||
}
|
||||
|
||||
//if query data . no error
|
||||
if (Apply && fields.Count > 0 && wheres.Count > 0)
|
||||
{
|
||||
|
||||
var mcname = SETTING.Data.McName;
|
||||
if (VAR.BOOL[eVarBool.Use_Conveyor]) mcname = PUB.MCCode;
|
||||
|
||||
var SQL = "select top 1 " + string.Join(",", fields) +
|
||||
" from K4EE_Component_Reel_SID_Information WITH(NOLOCK)" +
|
||||
" where mc='" + mcname + "' and " + string.Join(" and ", wheres) +
|
||||
" order by wdate desc";
|
||||
|
||||
var SQLC = "select count(*)" +
|
||||
" from K4EE_Component_Reel_SID_Information WITH(NOLOCK)" +
|
||||
" where mc='" + mcname + "' and " + string.Join(" and ", wheres);
|
||||
|
||||
if (PUB.Result.ItemDataC.VisionData.LastQueryStringSID.Equals(SQL) == false)
|
||||
{
|
||||
if (PUB.GetSIDInfo_And_SetData(fields, ref vdata, SQL, SQLC) == true)
|
||||
NewBarcodeUpdated = true;
|
||||
|
||||
PUB.Result.ItemDataC.VisionData.LastQueryStringSID = SQL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//시드변환정보에서 정보 추출
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
//select columns
|
||||
List<string> fields = new List<string>();
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CustCode");
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PartNo");
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("PrintPosition");
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VenderName");
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID");
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_Batch] && (vdata.SID_Trust == false || vdata.BATCH.isEmpty())) fields.Add("batch"); //220921
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Apply_QtyMax] && (vdata.SID_Trust == false || vdata.QTYMAX.isEmpty())) fields.Add("qtymax"); //220921
|
||||
|
||||
|
||||
//where coluns
|
||||
List<string> wheres = new List<string>();
|
||||
//wheres.Add($"MC='{COMM.SETTING.Data.McName}");
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_Conv_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_Conv_Where_PartNo])
|
||||
{
|
||||
if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PartNo='{vdata.PARTNO}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (Apply && VAR.BOOL[eVarBool.Opt_Conv_Where_SID])
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Opt_SIDConvert]) //if sid convert logic
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID0.isEmpty() == false && vdata.SID.isEmpty() == false)
|
||||
wheres.Add($"SIDTo='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SIDTo='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
}
|
||||
if (VAR.BOOL[eVarBool.Opt_Conv_Where_VLOT]) //221013
|
||||
{
|
||||
if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false)
|
||||
wheres.Add($"(VenderLot like '{vdata.VLOT}' or VenderLot like '%,{vdata.VLOT}' or VenderLot like '{vdata.VLOT},%' or VenderLot like '%,{vdata.VLOT},%')");
|
||||
else Apply = false;
|
||||
}
|
||||
|
||||
|
||||
//if query data . no error
|
||||
if (Apply && fields.Count > 0 && wheres.Count > 0)
|
||||
{
|
||||
|
||||
var mcname = SETTING.Data.McName;
|
||||
if (VAR.BOOL[eVarBool.Use_Conveyor]) mcname = PUB.MCCode;
|
||||
|
||||
var SQL = "select top 1 " + string.Join(",", fields) +
|
||||
" from K4EE_Component_Reel_SID_Convert WITH(NOLOCK)" +
|
||||
" where " + string.Join(" and ", wheres) +
|
||||
" order by wdate desc";
|
||||
|
||||
var SQLC = "select count(*)" +
|
||||
" from K4EE_Component_Reel_SID_Convert WITH(NOLOCK)" +
|
||||
" where " + string.Join(" and ", wheres);
|
||||
|
||||
if (PUB.Result.ItemDataC.VisionData.LastQueryStringCNV.Equals(SQL) == false)
|
||||
{
|
||||
if (PUB.GetSIDInfo_And_SetData(fields, ref vdata, SQL, SQLC) == true)
|
||||
NewBarcodeUpdated = true;
|
||||
|
||||
PUB.Result.ItemDataC.VisionData.LastQueryStringCNV = SQL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//기존 작업에서 데이터를 찾아서 쓴다
|
||||
if (VAR.BOOL[eVarBool.Opt_ApplyJobInfo] && vdata.BarcodeTouched == true)
|
||||
{
|
||||
Boolean Apply = true;
|
||||
|
||||
//select columns
|
||||
List<string> fields = new List<string>();
|
||||
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CUSTCODE");
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PARTNO");
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("POS");
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VNAME");
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID");
|
||||
|
||||
//where coluns
|
||||
List<string> wheres = new List<string>();
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_CustCode])
|
||||
{
|
||||
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUSTCODE='{vdata.CUSTCODE.PadLeft(10, '0')}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_PartNo])
|
||||
{
|
||||
if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PARTNO='{vdata.PARTNO}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_SID])
|
||||
{
|
||||
if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'");
|
||||
else Apply = false;
|
||||
}
|
||||
if (VAR.BOOL[eVarBool.Opt_Job_Where_VLOT])
|
||||
{
|
||||
if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false) wheres.Add($"VenderLot='{vdata.VLOT}'");
|
||||
else Apply = false;
|
||||
}
|
||||
|
||||
//if query data . no error
|
||||
if (Apply && fields.Count > 0 && wheres.Count > 0)
|
||||
{
|
||||
PUB.log.Add($"DATABAES : RESULT QUERY");
|
||||
|
||||
var SQL = "select top 1 " + string.Join(",", fields) +
|
||||
" from K4EE_Component_Reel_Result WITH(NOLOCK) " +
|
||||
$" where mc = '{AR.SETTING.Data.McName}'" +
|
||||
$" and prnattach = 1 and stime >= '{DateTime.Now.AddHours(-3).ToString("yyyy-MM-dd HH:mm:ss")}'" +
|
||||
$" and " + string.Join(" and ", wheres) +
|
||||
$" order by wdate desc";
|
||||
|
||||
if (PUB.Result.ItemDataC.VisionData.LastQueryStringJOB.Equals(SQL) == false)
|
||||
{
|
||||
if (PUB.GetSIDInfo_And_SetData(fields, ref vdata, SQL, ""))
|
||||
NewBarcodeUpdated = true;
|
||||
|
||||
PUB.Result.ItemDataC.VisionData.LastQueryStringJOB = SQL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
{
|
||||
bool BatchValueOK = false;
|
||||
if (PUB.Result.vModel.IgnoreBatch) BatchValueOK = true;
|
||||
else BatchValueOK = itemC.VisionData.BATCH.isEmpty() == false;
|
||||
|
||||
bool partnoValueOK = false;
|
||||
if (PUB.Result.vModel.IgnorePartNo) partnoValueOK = true;
|
||||
else partnoValueOK = itemC.VisionData.PARTNO.isEmpty() == false;
|
||||
|
||||
var CVMode = VAR.BOOL[eVarBool.Use_Conveyor];
|
||||
if (itemC.VisionData.VNAME.isEmpty() == false &&
|
||||
itemC.VisionData.VLOT.isEmpty() == false &&
|
||||
itemC.VisionData.SID.Length == 9 &&
|
||||
itemC.VisionData.MFGDATE.isEmpty() == false &&
|
||||
partnoValueOK &&
|
||||
BatchValueOK &&
|
||||
itemC.VisionData.RID.isEmpty() == false)
|
||||
{
|
||||
//모든값이 입력되어 있다면 조건 체크후 진행할 수 있도록 한다
|
||||
CheckDataComplte(itemC, "SPS-BARCODEPROCESS", false); //2206211400
|
||||
}
|
||||
//CheckDataComplte(PUB.Result.ItemDataC, "SPS-BARCODEPROCESS");
|
||||
}
|
||||
|
||||
//바코드 처리 여부 변경
|
||||
if (vdata.BarcodeTouched == true && NewBarcodeUpdated == false)
|
||||
{
|
||||
vdata.BarcodeTouched = false;
|
||||
var a = PUB.Result.ItemDataC.VisionData.BarcodeTouched;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -223,10 +223,10 @@ namespace Project
|
||||
|
||||
//신규로 추가된 컨베이어 센서이다
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.L_CONV1) == false) &&
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.L_CONV3) == false) &&
|
||||
// (CVMode == false || DIO.GetIOInput(eDIName.L_CONV3) == false) &&
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.L_CONV4) == false) &&
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.R_CONV1) == false) &&
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.R_CONV3) == false) &&
|
||||
// (CVMode == false || DIO.GetIOInput(eDIName.R_CONV3) == false) &&
|
||||
(CVMode == false || DIO.GetIOInput(eDIName.R_CONV4) == false) &&
|
||||
|
||||
//작업진행중 확인
|
||||
|
||||
@@ -427,7 +427,7 @@ namespace Project
|
||||
if (pin == eDIName.PORTL_LIM_DN)
|
||||
{
|
||||
//좌측포트의 하단부리밋센서가 검출될경우 마그넷이 on 되어있다면 off한다.
|
||||
if (DIO.GetIOInput(eDIName.PORTL_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG0) == true)
|
||||
if (DIO.GetIOInput(eDIName.PORTL_LIM_DN) == true && DIO.GetIOOutput(eDOName.PORTL_MAGNET) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(0, false);
|
||||
PUB.log.Add("Left port magnet OFF");
|
||||
@@ -436,7 +436,7 @@ namespace Project
|
||||
else if (pin == eDIName.PORTC_LIM_DN)
|
||||
{
|
||||
//좌측포트의 하단부리밋센서가 검출될경우 마그넷이 on 되어있다면 off한다.
|
||||
if (DIO.GetIOInput(eDIName.PORTC_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG1) == true)
|
||||
if (DIO.GetIOInput(eDIName.PORTC_LIM_DN) == true && DIO.GetIOOutput(eDOName.PORTC_MAGNET) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(1, false);
|
||||
PUB.log.Add("Center port magnet OFF");
|
||||
@@ -450,38 +450,12 @@ namespace Project
|
||||
else if (pin == eDIName.PORTR_LIM_DN)
|
||||
{
|
||||
//좌측포트의 하단부리밋센서가 검출될경우 마그넷이 on 되어있다면 off한다.
|
||||
if (DIO.GetIOInput(eDIName.PORTR_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG2) == true)
|
||||
if (DIO.GetIOInput(eDIName.PORTR_LIM_DN) == true && DIO.GetIOOutput(eDOName.PORTR_MAGNET) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(2, false);
|
||||
PUB.log.Add("Right port magnet OFF");
|
||||
}
|
||||
}
|
||||
else if (pin == eDIName.L_CONV3)
|
||||
{
|
||||
VAR.TIME[(int)eVarTime.JOBEVENT] = DateTime.Now;
|
||||
if (value)
|
||||
{
|
||||
if(VAR.I32[eVarInt32.LEFT_ITEM_COUNT] > 0)
|
||||
{
|
||||
VAR.I32[eVarInt32.LEFT_ITEM_COUNT] -= 1;//= false; //해제
|
||||
PUB.log.AddAT($"Left buffer quantity decrease");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (pin == eDIName.R_CONV3)
|
||||
{
|
||||
VAR.TIME[(int)eVarTime.JOBEVENT] = DateTime.Now;
|
||||
if (value)
|
||||
{
|
||||
if (VAR.I32[eVarInt32.RIGT_ITEM_COUNT] > 0)
|
||||
{
|
||||
VAR.I32[eVarInt32.RIGT_ITEM_COUNT] -= 1;//= false; //해제
|
||||
PUB.log.AddAT($"Right buffer quantity decrease");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (pin == eDIName.R_CONV4 || pin == eDIName.L_CONV1 || pin == eDIName.L_CONV4 || pin == eDIName.R_CONV1)
|
||||
{
|
||||
VAR.TIME[(int)eVarTime.JOBEVENT] = DateTime.Now;
|
||||
|
||||
@@ -42,8 +42,8 @@ namespace Project
|
||||
PUB.iLock[(int)eAxis.PZ_PICK].set((int)eILock.XMOVE, PUB.mot.IsMotion((int)eAxis.PX_PICK), "COMMINTERLOCK");
|
||||
|
||||
//외부컨베어 신호 인터락설정 (출구쪽센서가 인식되지 않았다면 멈추지 않는다)
|
||||
var cvLBusy = (DIO.GetIOInput(eDIName.L_CONV4) && DIO.GetIOInput(eDIName.L_EXT_READY) == false);
|
||||
var cvRBusy = (DIO.GetIOInput(eDIName.R_CONV4) && DIO.GetIOInput(eDIName.R_EXT_READY) == false);
|
||||
var cvLBusy = DIO.GetIOInput(eDIName.L_CONV4) && DIO.GetIOInput(eDIName.L_EXT_READY) == false && VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] == false;
|
||||
var cvRBusy = DIO.GetIOInput(eDIName.R_CONV4) && DIO.GetIOInput(eDIName.R_EXT_READY) == false && VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] == false;
|
||||
PUB.iLockCVL.set((int)eILockCV.EXTBUSY, cvLBusy, "COMMINTERLOCK");
|
||||
PUB.iLockCVR.set((int)eILockCV.EXTBUSY, cvRBusy, "COMMINTERLOCK");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user