영문화완료
This commit is contained in:
@@ -81,7 +81,7 @@ namespace Project
|
||||
if (DIO.IsEmergencyOn() == true) return;
|
||||
if (PUB.sm.Step == eSMStep.RUN) return;
|
||||
|
||||
PUB.log.AddAT("조이스틱으로 홈 초기화작업");
|
||||
PUB.log.AddAT("Home initialization operation with joystick");
|
||||
Func_sw_initialize();
|
||||
}
|
||||
}
|
||||
@@ -157,17 +157,17 @@ namespace Project
|
||||
|
||||
private void Joystick_Disconnected(object sender, EventArgs e)
|
||||
{
|
||||
PUB.log.AddE("조이스틱 연결 종료");
|
||||
PUB.log.AddE("Joystick connection terminated");
|
||||
}
|
||||
|
||||
private void Joystick_Connected(object sender, EventArgs e)
|
||||
{
|
||||
PUB.log.AddI("조이스틱 연결 완료");
|
||||
PUB.log.AddI("Joystick connection completed");
|
||||
}
|
||||
|
||||
private void Joystick_Changed(object sender, EventArgs e)
|
||||
{
|
||||
PUB.log.AddAT("조이스틱 감지");
|
||||
PUB.log.AddAT("Joystick detected");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace Project
|
||||
//PUB.keyence.UpdateBitmap((Bitmap)e.Image, newbitmap);
|
||||
keyenceview.Image = e.Image;
|
||||
if (old != null) old.Dispose();
|
||||
PUB.log.AddAT("최초 이미지 수신");
|
||||
PUB.log.AddAT("First image received");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -149,7 +149,7 @@ namespace Project
|
||||
//에러처리 221018
|
||||
if (resp.StartsWith("0:ERROR")) continue;
|
||||
|
||||
PUB.log.AddE($"***바코드({Source}) 응답데이터 오류 값(키엔스 전송포맷을 확인하세요) " + resp);
|
||||
PUB.log.AddE($"***Barcode({Source}) response data error value (please check Keyence transmission format) " + resp);
|
||||
listView21.SetText(9, 3, "ERR");//.setTitle(8, 1, "ERR");
|
||||
continue;
|
||||
}
|
||||
@@ -157,7 +157,7 @@ namespace Project
|
||||
if (AR.VAR.BOOL[eVarBool.JOB_PickON_Retry]) //221110
|
||||
{
|
||||
if (PUB.sm.Step == eSMStep.RUN)
|
||||
PUB.log.AddAT($"피커({Source}) 재시도 중이라 바코드를 무시 합니다:{resp}");
|
||||
PUB.log.AddAT($"Picker({Source}) is retrying, ignoring barcode:{resp}");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Diagnostics;
|
||||
//using System.Drawing;
|
||||
//using System.IO;
|
||||
//using System.Linq;
|
||||
//using System.Net;
|
||||
//using System.Net.NetworkInformation;
|
||||
//using System.Runtime.Serialization.Formatters.Binary;
|
||||
//using System.Text;
|
||||
//using System.Windows.Forms;
|
||||
//using System.Management;
|
||||
//using COMM;
|
||||
|
||||
|
||||
//namespace Project
|
||||
//{
|
||||
// public static partial class UTIL
|
||||
// {
|
||||
|
||||
// }
|
||||
//}
|
||||
@@ -51,14 +51,14 @@ namespace Project
|
||||
|
||||
var t1 = VAR.I32[eVarInt32.LEFT_ITEM_COUNT];
|
||||
var t2 = VAR.I32[eVarInt32.RIGT_ITEM_COUNT];
|
||||
groupBox2.Text = $"바코드({t1:N1}/{t2:N1})";
|
||||
groupBox2.Text = $"Barcode({t1:N1}/{t2:N1})";
|
||||
}
|
||||
else
|
||||
{
|
||||
groupBox2.Text = "바코드";
|
||||
groupBox2.Text = "Barcode";
|
||||
}
|
||||
|
||||
groupBox1.Text = $"장비조작({PUB.sm.Loop_ms:N0}ms)";
|
||||
groupBox1.Text = $"Equipment Operation({PUB.sm.Loop_ms:N0}ms)";
|
||||
//릴사이즈가 맞지 않으면 깜박인다.
|
||||
if (DIO.getCartSize(1) != eCartSize.None)
|
||||
{
|
||||
@@ -117,9 +117,9 @@ namespace Project
|
||||
var l1 = DIO.GetIOOutput(eDOName.CART_MAG1);
|
||||
var l2 = DIO.GetIOOutput(eDOName.CART_MAG2);
|
||||
|
||||
lbLock0.Text = l0 ? "카트 교환" : "카트 없음";
|
||||
lbLock1.Text = l1 ? "카트 교환" : "카트 없음";
|
||||
lbLock2.Text = l2 ? "카트 교환" : "카트 없음";
|
||||
lbLock0.Text = l0 ? "Cart Exchange" : "No Cart";
|
||||
lbLock1.Text = l1 ? "Cart Exchange" : "No Cart";
|
||||
lbLock2.Text = l2 ? "Cart Exchange" : "No Cart";
|
||||
|
||||
var sbVisTitle0 = listView21.GetCell(0, 1);
|
||||
var sbVisTitle2 = listView21.GetCell(0, 5);
|
||||
@@ -365,7 +365,7 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
lbModelName.Text = "모델을 선택하세요";
|
||||
lbModelName.Text = "Please select a model";
|
||||
lbModelName.ForeColor = Color.Blue;
|
||||
lbModelName.BackColor = Color.Tomato;
|
||||
lbModelName.BackColor2 = Color.Red;
|
||||
|
||||
@@ -11,14 +11,14 @@ namespace Project
|
||||
public partial class FMain
|
||||
{
|
||||
/// <summary>
|
||||
/// 상태표시라벨의 메세지 자동 변경
|
||||
/// Automatic message change for status display labels
|
||||
/// </summary>
|
||||
/// <param name="idx"></param>
|
||||
void UpdateStatusMessage()
|
||||
{
|
||||
arCtl.arLabel lbl = lbMsg;
|
||||
|
||||
//메세지창이 깜박거려야하는 상황 체크
|
||||
//Check if message window should blink
|
||||
if (lbl.Tag != null && lbl.Tag.ToString() == "BLINK")
|
||||
{
|
||||
var bg1 = lbl.BackColor;
|
||||
@@ -30,31 +30,31 @@ namespace Project
|
||||
|
||||
if (PUB.sm.Step == eSMStep.INIT)
|
||||
{
|
||||
SetStatusMessage("초기화 작업 중", Color.White, Color.FromArgb(0x38, 0x4d, 0x9d));
|
||||
SetStatusMessage("Initialization in progress", Color.White, Color.FromArgb(0x38, 0x4d, 0x9d));
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.IDLE)
|
||||
{
|
||||
//각종 IO확인하여 에러메세지 표시한다
|
||||
//Check various I/O and display error messages
|
||||
|
||||
var msg = string.Empty;
|
||||
bool errst = true;
|
||||
if (PUB.mot.IsInit == false) msg = "모션 카드 준비 안됨";
|
||||
else if (PUB.dio.IsInit == false) msg = "I/O 카드 준비 안됨";
|
||||
else if (PUB.dio.HasDIOn == false) msg = "전원 확인 필요 (입력포트 감지 안됨)";
|
||||
else if (PUB.mot.HasServoAlarm == true) msg = "서보 알람 발생";
|
||||
else if (PUB.mot.HasHoming == true) msg = "홈 검색 진행 중";
|
||||
else if (PUB.mot.HasServoOff == true) msg = "서보 OFF 발생";
|
||||
else if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) msg = "AIR 출력 안됨(전면 청색 AIR버튼을 누르세요)";
|
||||
else if (DIO.GetIOInput(eDIName.AIR_DETECT) == false) msg = "AIR 감지 안됨";
|
||||
if (PUB.mot.IsInit == false) msg = "Motion card not ready";
|
||||
else if (PUB.dio.IsInit == false) msg = "I/O card not ready";
|
||||
else if (PUB.dio.HasDIOn == false) msg = "Power check required (input port not detected)";
|
||||
else if (PUB.mot.HasServoAlarm == true) msg = "Servo alarm occurred";
|
||||
else if (PUB.mot.HasHoming == true) msg = "Home search in progress";
|
||||
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 (PUB.mot.HasHomeSetOff == true)
|
||||
{
|
||||
if (DIO.GetIOInput(eDIName.PICKER_SAFE) == false)
|
||||
{
|
||||
msg = "피커(X)축을 중앙으로 옮겨주세요 (기능-관리화면)";
|
||||
msg = "Please move the picker (X) axis to center (Function-Management screen)";
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "홈 검색이 필요 합니다";
|
||||
msg = "Home search is required";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -82,11 +82,11 @@ namespace Project
|
||||
}
|
||||
if (limport.Any())
|
||||
{
|
||||
msg = "서보 LIMIT 알람 발생(Ax:" + string.Join(",", limport) + ")";
|
||||
msg = "Servo LIMIT alarm occurred (Ax:" + string.Join(",", limport) + ")";
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "작업을 시작 하려면 START를 누르세요";
|
||||
msg = "Press START to begin operation";
|
||||
errst = false;
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace Project
|
||||
|
||||
else if (PUB.sm.Step == eSMStep.WAITSTART)
|
||||
{
|
||||
SetStatusMessage("[시작 대기] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
||||
SetStatusMessage("[Waiting to Start] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.ERROR)
|
||||
{
|
||||
@@ -119,61 +119,61 @@ namespace Project
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.PAUSE)
|
||||
{
|
||||
SetStatusMessage("[일시 정지] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
||||
SetStatusMessage("[Paused] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.HOME_FULL)// || Pub.sm.Step == eSMStep.QHOME)
|
||||
{
|
||||
SetStatusMessage($"전체 모션의 원점을 확인하고 있습니다", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
SetStatusMessage($"Checking home position of all motion axes", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.HOME_DELAY)// || Pub.sm.Step == eSMStep.QHOME)
|
||||
{
|
||||
SetStatusMessage($"잠시만 기다려 주세요(홈 진행 중)", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
SetStatusMessage($"Please wait a moment (homing in progress)", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.HOME_CONFIRM)// || Pub.sm.Step == eSMStep.QHOME)
|
||||
{
|
||||
SetStatusMessage($"홈 작업을 완료 하는 중", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
SetStatusMessage($"Completing home operation", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
||||
}
|
||||
else if (PUB.sm.Step == eSMStep.RUN)
|
||||
{
|
||||
|
||||
double cur = PUB.sm.seq.GetTime(PUB.sm.Step).TotalSeconds;
|
||||
double max = AR.SETTING.Data.Timeout_StepMaxTime;
|
||||
string msg = $"진행 중";
|
||||
string msg = $"In Progress";
|
||||
Color fColor = Color.Gold;
|
||||
|
||||
if (PUB.flag.get(eVarBool.FG_JOB_END))
|
||||
{
|
||||
msg = "로더가 비어 있습니다. 잠시 후 작업이 완료 됩니다";
|
||||
msg = "Loader is empty. Operation will be completed shortly";
|
||||
cur = max = 0;
|
||||
fColor = Color.Lime;
|
||||
|
||||
}
|
||||
else if (PUB.flag.get(eVarBool.FG_WAIT_LOADERINFO))
|
||||
{
|
||||
msg = "사용자 정보 입력을 기다리고 있습니다";
|
||||
msg = "Waiting for user information input";
|
||||
cur = 100;
|
||||
max = 100;
|
||||
}
|
||||
else //if (PUB.flag.get(eVarBool.RDY_VISION1) == true && PUB.flag.get(eVarBool.RDY_PORT_PC) == true && idx == 9)
|
||||
{
|
||||
msg = "작업 중";
|
||||
msg = "Working";
|
||||
if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) && PUB.flag.get(eVarBool.FG_END_VISIONL) == false)
|
||||
msg += "(LEFT-QR검증중)";
|
||||
msg += "(LEFT-QR validation)";
|
||||
if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) && PUB.flag.get(eVarBool.FG_END_VISIONR) == false)
|
||||
msg += "(RIGHT-QR검증중)";
|
||||
msg += "(RIGHT-QR validation)";
|
||||
|
||||
//컨베이어 사용모드에서 컨베이어 인터락 검사
|
||||
//Conveyor interlock check in conveyor usage mode
|
||||
if (VAR.BOOL[eVarBool.Use_Conveyor])
|
||||
{
|
||||
if (DIO.GetIOInput(eDIName.R_CONV1) || DIO.GetIOInput(eDIName.R_CONV4))
|
||||
{
|
||||
if (PUB.iLockCVR.IsEmpty() == false)
|
||||
msg += "(우측컨베이어 인터락 해제 대기)";
|
||||
msg += "(Waiting for right conveyor interlock release)";
|
||||
}
|
||||
if (DIO.GetIOInput(eDIName.L_CONV1) || DIO.GetIOInput(eDIName.L_CONV4))
|
||||
{
|
||||
if (PUB.iLockCVL.IsEmpty() == false)
|
||||
msg += "(좌측컨베이어 인터락 해제 대기)";
|
||||
msg += "(Waiting for left conveyor interlock release)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ namespace Project
|
||||
//}
|
||||
//else if (PUB.mot.IsMotion((int)eAxis.Y_PICKER])
|
||||
//{
|
||||
// msg = string.Format("이동 중");
|
||||
// msg = string.Format("Moving");
|
||||
// cur = 0;// Pub.getRunSteptime(0).TotalSeconds;// ts.TotalSeconds;
|
||||
// max = 10;//COMM.SETTING.Data.Timeout_JOBEnd;
|
||||
//}
|
||||
@@ -197,7 +197,7 @@ namespace Project
|
||||
}
|
||||
else if (PUB.flag.get(eVarBool.FG_MOVE_PICKER))
|
||||
{
|
||||
SetStatusMessage("X축을 버튼으로 이동 가능 합니다", Color.Black, Color.White);
|
||||
SetStatusMessage("X-axis can be moved with buttons", Color.Black, Color.White);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Project
|
||||
{
|
||||
//사용자 값 입력창에서는 오류를 표시하지않는다
|
||||
if (Step == eSMStep.PAUSE && PUB.flag.get(eVarBool.FG_WAIT_LOADERINFO))
|
||||
PUB.log.Add("바코드정보입력창이라 일시중지 메세지를 표시하지 않음");
|
||||
PUB.log.Add("Pause message not displayed because barcode information input window is open");
|
||||
else
|
||||
PUB.popup.setMessage(errorMessage);
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Project
|
||||
if (free < 3.0)
|
||||
{
|
||||
string msg = "FREE SPACE ERROR\n" +
|
||||
"디스크 공간(3%)이 부족하여 작업을 진행할 수 없습니다\n" +
|
||||
"저장경로 : {0}\n" +
|
||||
"데이터를 삭제하거나 설정의 삭제주기를 확인하세요";
|
||||
"Insufficient disk space (3%) to proceed with the work\n" +
|
||||
"Storage path: {0}\n" +
|
||||
"Please delete data or check the deletion cycle in settings";
|
||||
msg = string.Format(msg, AR.SETTING.Data.GetDataPath());
|
||||
PUB.popup.setMessage(msg);
|
||||
DIO.SetBuzzer(true);
|
||||
@@ -34,7 +34,7 @@ namespace Project
|
||||
|
||||
if (PUB.Result.isSetmModel == false)
|
||||
{
|
||||
string msg = "모션모델이 선택되지 않았습니다\n작업모델의 'MOTION'항목을 확인하세요";
|
||||
string msg = "Motion model not selected\nPlease check the 'MOTION' item in the work model";
|
||||
PUB.popup.setMessage(msg);
|
||||
DIO.SetBuzzer(true);
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
@@ -109,11 +109,11 @@ namespace Project
|
||||
if (PUB.flag.get(eVarBool.FG_USERSTEP))
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_USERSTEP, false, "STACHKSW");
|
||||
PUB.log.AddI("작업 시작으로 인해 H/W검사 무시기능을 해제 함");
|
||||
PUB.log.AddI("H/W inspection ignore function disabled due to work start");
|
||||
}
|
||||
|
||||
//공용변수초기화
|
||||
PUB.log.Add("공용변수(카운트)값 초기화");
|
||||
PUB.log.Add("Common variable (count) values initialized");
|
||||
VAR.I32.Clear((int)eVarInt32.LPickOfCount);
|
||||
VAR.I32.Clear((int)eVarInt32.LPickOnCount);
|
||||
VAR.I32.Clear((int)eVarInt32.RPickOfCount);
|
||||
@@ -136,7 +136,7 @@ namespace Project
|
||||
PUB.Result.BCDPattern = PUB.GetPatterns(modelName, false);
|
||||
PUB.Result.BCDIgnorePattern = PUB.GetPatterns(modelName, true);
|
||||
PUB.Result.BCDPrintPattern = PUB.GetPrintPatterns();
|
||||
PUB.log.Add($"모델패턴로딩:{PUB.Result.BCDPattern.Count}/{PUB.Result.BCDIgnorePattern.Count}");
|
||||
PUB.log.Add($"Model pattern loading: {PUB.Result.BCDPattern.Count}/{PUB.Result.BCDIgnorePattern.Count}");
|
||||
|
||||
//변환SID SID확인여부데이터 삭제
|
||||
PUB.Result.DTSidConvertEmptyList.Clear();
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace Project
|
||||
//}
|
||||
if (VAR.DBL[eVarDBL.CONVL_RUNTIME] > 15)
|
||||
{
|
||||
PUB.log.AddE($"(L) 컨베이어 15초 초과로 버퍼 클리어");
|
||||
PUB.log.AddE($"(L) Buffer cleared due to conveyor exceeding 15 seconds");
|
||||
VAR.I32[eVarInt32.LEFT_ITEM_COUNT] = 0;
|
||||
}
|
||||
else return false;
|
||||
@@ -144,7 +144,7 @@ namespace Project
|
||||
//}
|
||||
if (VAR.DBL[eVarDBL.CONVR_RUNTIME] > 15)
|
||||
{
|
||||
PUB.log.AddE($"(R) 컨베이어 15초 초과로 버퍼 클리어");
|
||||
PUB.log.AddE($"(R) Buffer cleared due to conveyor exceeding 15 seconds");
|
||||
VAR.I32[eVarInt32.RIGT_ITEM_COUNT] = 0;
|
||||
}
|
||||
else return false;
|
||||
@@ -222,7 +222,7 @@ namespace Project
|
||||
}
|
||||
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, funcName) == false) return false;
|
||||
PUB.log.AddAT($"###### 처음 작업 회피 이동 완료({target})");
|
||||
PUB.log.AddAT($"###### Initial work avoidance movement completed ({target})");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -293,7 +293,7 @@ namespace Project
|
||||
//sPositionData Pos = target == eWorkPort.Left ? MOT.GetPXPos(ePXLoc.READYL) : MOT.GetPXPos(ePXLoc.READYR);
|
||||
if (MOT.getPositionMatch(Pos) == false)
|
||||
{
|
||||
PUB.log.AddAT($"######비젼데이터없으므로 회피이동II({target})");
|
||||
PUB.log.AddAT($"######Avoidance movement II due to no vision data({target})");
|
||||
MOT.Move(Pos);
|
||||
}
|
||||
return false;
|
||||
@@ -315,7 +315,7 @@ namespace Project
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
PUB.log.Add("사용자 선택창(INF)을 호출 합니다");
|
||||
PUB.log.Add("Calling user selection window (INF)");
|
||||
var f = new Dialog.fSelectSIDInformation();
|
||||
f.Show();
|
||||
}));
|
||||
@@ -337,19 +337,19 @@ namespace Project
|
||||
bool ShowUserFormBCD = false;
|
||||
if (AR.SETTING.Data.RetryPickOnMaxCount == 0)
|
||||
{
|
||||
PUB.log.Add($"픽온 재시작 횟수가 없어 사용자 확인창을 띄웁니다");
|
||||
PUB.log.Add($"Showing user confirmation window due to no pick-on retry count");
|
||||
ShowUserFormBCD = true;
|
||||
}
|
||||
else if (AR.VAR.I32[AR.eVarInt32.PickOnRetry] >= AR.SETTING.Data.RetryPickOnMaxCount)
|
||||
{
|
||||
PUB.log.Add($"픽온 재시도 횟수가 초과됨 (최대:{AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
PUB.log.Add($"Pick-on retry count exceeded (Max: {AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
ShowUserFormBCD = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.Need_UserConfirm_Data])
|
||||
{
|
||||
PUB.log.Add($"사용자확인창을 띄워야함");
|
||||
PUB.log.Add($"Need to show user confirmation window");
|
||||
ShowUserFormBCD = true;
|
||||
}
|
||||
else
|
||||
@@ -357,12 +357,12 @@ namespace Project
|
||||
//읽은데이터가 atkstandard라면 바로 팝업을 띄운다
|
||||
if (PUB.Result.ItemDataC.VisionData.SID.isEmpty() || PUB.Result.ItemDataC.VisionData.SID_Trust == false)
|
||||
{
|
||||
PUB.log.Add($"픽온을 재시도 합니다 ({AR.VAR.I32[AR.eVarInt32.PickOnRetry]}/{AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
PUB.log.Add($"Retrying pick-on ({AR.VAR.I32[AR.eVarInt32.PickOnRetry]}/{AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
ShowUserFormBCD = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"SID값이 있으니 재시도하지 않고 사용자확인창을 띄웁니다");
|
||||
PUB.log.Add($"SID value exists, showing user confirmation window instead of retrying");
|
||||
ShowUserFormBCD = true;
|
||||
}
|
||||
}
|
||||
@@ -372,7 +372,7 @@ namespace Project
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
var itemC = PUB.Result.ItemDataC;
|
||||
PUB.log.Add("사용자 확인창을 호출 합니다");
|
||||
PUB.log.Add("Calling user confirmation window");
|
||||
var f = new Dialog.fLoaderInfo(itemC.VisionData.bcdMessage);
|
||||
f.Show();
|
||||
}));
|
||||
@@ -384,7 +384,7 @@ namespace Project
|
||||
VAR.I32[eVarInt32.PickOnRetry] += 1;//, 1);
|
||||
VAR.BOOL[eVarBool.JOB_PickON_Retry] = true;
|
||||
|
||||
PUB.log.Add($"픽온재시도 ({VAR.I32[eVarInt32.PickOnRetry]})");
|
||||
PUB.log.Add($"Pick-on retry ({VAR.I32[eVarInt32.PickOnRetry]})");
|
||||
PUB.sm.seq.Update(cmdIndex, -2);
|
||||
}
|
||||
}
|
||||
@@ -397,7 +397,7 @@ namespace Project
|
||||
else VAR.BOOL[eVarBool.wait_for_keyenceR] = false;
|
||||
|
||||
PUB.Result.ItemDataC.VisionData.ReelSize = DIO.getCartSize(1);
|
||||
PUB.log.AddI($"[{target}] 키엔스 확인 완료(크기:{PUB.Result.ItemDataC.VisionData.ReelSize})");
|
||||
PUB.log.AddI($"[{target}] Keyence verification completed (Size: {PUB.Result.ItemDataC.VisionData.ReelSize})");
|
||||
PUB.log.AddI($"[{target}] Print Position:{PUB.Result.ItemDataC.VisionData.PrintPositionData}");
|
||||
|
||||
|
||||
@@ -412,7 +412,7 @@ namespace Project
|
||||
PUB.sm.seq.Clear(eSMStep.RUN_PRINTER_ON_F);
|
||||
//PUB.sm.seq.Clear(eSMStep.RUN_PRINTER_OFF_F);
|
||||
PUB.Result.ItemDataC.CopyTo(ref PUB.Result.ItemDataL);
|
||||
PUB.log.Add($"[{target}] 비젼데이터 카피 (C->L) ID:{PUB.Result.ItemDataL.VisionData.RID}");
|
||||
PUB.log.Add($"[{target}] Vision data copy (C->L) ID:{PUB.Result.ItemDataL.VisionData.RID}");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -423,7 +423,7 @@ namespace Project
|
||||
PUB.sm.seq.Clear(eSMStep.RUN_PRINTER_ON_R);
|
||||
//PUB.sm.seq.Clear(eSMStep.RUN_PRINTER_OFF_R);
|
||||
PUB.Result.ItemDataC.CopyTo(ref PUB.Result.ItemDataR);
|
||||
PUB.log.Add($"[{target}] 비젼데이터 카피 (C->R) ID:{PUB.Result.ItemDataR.VisionData.RID}");
|
||||
PUB.log.Add($"[{target}] Vision data copy (C->R) ID:{PUB.Result.ItemDataR.VisionData.RID}");
|
||||
}
|
||||
|
||||
//트리거 OFF
|
||||
@@ -454,7 +454,7 @@ namespace Project
|
||||
|
||||
if (OPT_BYPASS)
|
||||
{
|
||||
PUB.log.Add($"바이패스이므로 이전 릴아이디 검사 안함");
|
||||
PUB.log.Add($"Bypass mode - skipping previous reel ID check");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -471,7 +471,7 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"신규아이디 사용체크 OK PRE={pre_ridN},NEW={cur_ridN}");
|
||||
PUB.log.Add($"New ID usage check OK PRE={pre_ridN},NEW={cur_ridN}");
|
||||
|
||||
if (pre_ridO.isEmpty() == false && cur_ridO.isEmpty() == false) //구형아이디는 둘다 값이 있을때 처리한다.
|
||||
{
|
||||
@@ -482,24 +482,24 @@ namespace Project
|
||||
else
|
||||
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.PRE_USE_REELID_R, eNextStep.ERROR, target, pre_ridO, cur_ridO);
|
||||
}
|
||||
else PUB.log.Add($"신규아이디 사용체크(ORG) OK PRE={pre_ridO},NEW={cur_ridO}");
|
||||
else PUB.log.Add($"New ID usage check (ORG) OK PRE={pre_ridO},NEW={cur_ridO}");
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"신규아이디 사용체크(ORG) SKIP(NODATA) PRE={pre_ridO},NEW={cur_ridO}");
|
||||
PUB.log.Add($"New ID usage check (ORG) SKIP (NO DATA) PRE={pre_ridO},NEW={cur_ridO}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"처음작업하므로 이전 릴아이디 검사 안함");
|
||||
PUB.log.Add($"First work - skipping previous reel ID check");
|
||||
}
|
||||
|
||||
VAR.STR[eVarString.PrePick_ReelIDNew] = cur_ridN;
|
||||
VAR.STR[eVarString.PrePick_ReelIDOld] = cur_ridO;
|
||||
VAR.STR[eVarString.PrePick_ReelIDTarget] = target.ToString();
|
||||
|
||||
PUB.log.Add($"이전작업릴ID설정 값 N={cur_ridN},O={cur_ridO}");
|
||||
PUB.log.Add($"Previous work reel ID set values N={cur_ridN},O={cur_ridO}");
|
||||
}
|
||||
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
@@ -536,7 +536,7 @@ namespace Project
|
||||
// if (cvrun < 6) return false;
|
||||
//}
|
||||
}
|
||||
PUB.log.Add($"CVMODE에서 컨베이어 비어있음(SEQ)");
|
||||
PUB.log.Add($"Conveyor empty in CV MODE (SEQ)");
|
||||
}
|
||||
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
@@ -571,7 +571,7 @@ namespace Project
|
||||
{
|
||||
PUB.sm.seq.Clear(eSMStep.RUN_PICKER_OFF_L);
|
||||
//PUB.Result.ItemData[1].CopyTo(ref PUB.Result.ItemData[0]);
|
||||
PUB.log.Add($"바코드데이터 복제(LEFT)");
|
||||
PUB.log.Add($"Barcode data copy (LEFT)");
|
||||
|
||||
PUB.flag.set(eVarBool.FG_BUSY_LEFT, true, funcName);
|
||||
//프린터용 AIR처리해준다.
|
||||
@@ -583,7 +583,7 @@ namespace Project
|
||||
{
|
||||
PUB.sm.seq.Clear(eSMStep.RUN_PICKER_OFF_R);
|
||||
//PUB.Result.ItemData[1].CopyTo(ref PUB.Result.ItemData[0]);
|
||||
PUB.log.Add($"바코드데이터 복제(RIGHT)");
|
||||
PUB.log.Add($"Barcode data copy (RIGHT)");
|
||||
|
||||
PUB.flag.set(eVarBool.FG_BUSY_RIGHT, true, funcName);
|
||||
//프린터용 AIR처리해준다.
|
||||
@@ -592,7 +592,7 @@ namespace Project
|
||||
//PUB.Result.ItemData[1].UpdateTo(ref PUB.Result.ItemData[2]);
|
||||
}
|
||||
|
||||
PUB.Result.ItemDataC.Clear($"[{target}] 픽온완료"); //전송했으니 지운다
|
||||
PUB.Result.ItemDataC.Clear($"[{target}] Pick-on completed"); //Clear after transmission
|
||||
|
||||
KeyenceBarcodeDataF = string.Empty;
|
||||
KeyenceBarcodeDataR = string.Empty;
|
||||
@@ -626,14 +626,14 @@ namespace Project
|
||||
if (PUB.Result.PrintPostionList.ContainsKey(sid) == false)
|
||||
{
|
||||
PUB.Result.PrintPostionList.Add(sid, prn);
|
||||
PUB.log.AddAT($"프린트위치저장 SID:{sid} = {prn}");
|
||||
PUB.log.AddAT($"Print position saved SID:{sid} = {prn}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var predata = PUB.Result.PrintPostionList[sid];
|
||||
if (predata != prn)
|
||||
{
|
||||
PUB.log.AddAT($"프린트위치저장값 변경 SID:{sid} = {predata} -> {prn}");
|
||||
PUB.log.AddAT($"Print position save value changed SID:{sid} = {predata} -> {prn}");
|
||||
PUB.Result.PrintPostionList[sid] = prn;
|
||||
}
|
||||
}
|
||||
@@ -964,7 +964,7 @@ namespace Project
|
||||
if (SETTING.Data.SystemBypass == false)
|
||||
{
|
||||
rlt = PUB.UpdateWMS(item.VisionData); //rlt = Amkor.RestfulService.Inbound_label_attach_reel_info(reelinfo, out errmsg);
|
||||
PUB.log.AddE("WMS전송" + (rlt ? "성공" : "실패") + $":{errmsg}");
|
||||
PUB.log.AddE("WMS transmission " + (rlt ? "success" : "failed") + $": {errmsg}");
|
||||
if (rlt == false) //230927 - 오류발생시
|
||||
{
|
||||
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.INBOUNDWEBAPIERROR, eNextStep.PAUSE, target, errmsg);
|
||||
@@ -975,7 +975,7 @@ namespace Project
|
||||
{
|
||||
errmsg = "bypass";
|
||||
rlt = false;
|
||||
PUB.log.AddAT($"System bytpass 로 인해 WMS 저장 안함");
|
||||
PUB.log.AddAT($"WMS save disabled due to System bypass");
|
||||
}
|
||||
if (errmsg.Length > 190) errmsg = errmsg.Substring(0, 190); //230810 maxlength error
|
||||
SaveData_EE(item, (target == eWorkPort.Left ? "L" : "R"), (rlt ? "OK" : errmsg), "root_sequence");
|
||||
@@ -1004,7 +1004,7 @@ namespace Project
|
||||
}
|
||||
|
||||
VAR.TIME[(int)eVarTime.JOBEVENT] = DateTime.Now;
|
||||
PUB.log.AddI($"[{target}] 작업완료");
|
||||
PUB.log.AddI($"[{target}] Work completed");
|
||||
PUB.sm.seq.Clear(cmdIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace Project
|
||||
//데이터가 완료되었는지 확인
|
||||
if (itemC.VisionData.Confirm)
|
||||
{
|
||||
PUB.log.AddAT("비젼 데이터 완료로 인해 바코드 메세지를 제거 합니다");
|
||||
PUB.log.AddAT("Removing barcode messages due to vision data completion");
|
||||
itemC.VisionData.bcdMessage.Clear();
|
||||
return EResultKeyence.Complete;
|
||||
}
|
||||
@@ -58,12 +58,12 @@ namespace Project
|
||||
{
|
||||
if (PUB.Result.DryRun)
|
||||
{
|
||||
PUB.log.Add($"[{target}] DRY-RUN 으로 인한 완료");
|
||||
PUB.log.Add($"[{target}] Completed due to DRY-RUN");
|
||||
SetDryrunData();
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.logDbg.Add($"[{target}] 키엔스 읽기 시작");
|
||||
PUB.logDbg.Add($"[{target}] Keyence reading started");
|
||||
if (PUB.keyenceF != null) PUB.keyenceF.Trigger(true);
|
||||
if (PUB.keyenceR != null) PUB.keyenceR.Trigger(true);
|
||||
}
|
||||
@@ -535,7 +535,7 @@ namespace Project
|
||||
//이미 수량업데이트된 경우이므로 복원시켜준다
|
||||
if (itemC.VisionData.QTY0.isEmpty() == false)
|
||||
{
|
||||
PUB.log.AddAT($"릴아이디 변경으로 인해 수량을 복원합니다({itemC.VisionData.QTY}->{itemC.VisionData.QTY0})");
|
||||
PUB.log.AddAT($"Restoring quantity due to reel ID change ({itemC.VisionData.QTY}->{itemC.VisionData.QTY0})");
|
||||
itemC.VisionData.QTY = itemC.VisionData.QTY0;
|
||||
itemC.VisionData.QTY0 = string.Empty;
|
||||
}
|
||||
@@ -546,7 +546,7 @@ namespace Project
|
||||
var logtime = VAR.TIME.RUN((int)eVarTime.LOG_NEWIDERROR);
|
||||
if (logtime.TotalSeconds >= 3000)
|
||||
{
|
||||
PUB.log.AddAT($"Reel_ID 생성실패 : {newid.message}");
|
||||
PUB.log.AddAT($"Reel_ID generation failed : {newid.message}");
|
||||
VAR.TIME.Update(eVarTime.LOG_NEWIDERROR);
|
||||
}
|
||||
}
|
||||
@@ -558,11 +558,11 @@ namespace Project
|
||||
{
|
||||
//이미 완료된 데이터
|
||||
if (itemC.VisionData.ConfirmAuto)
|
||||
PUB.log.AddI($"데이터확정완료(자동)로 인한 진행");
|
||||
PUB.log.AddI($"Proceeding due to data confirmation completion (automatic)");
|
||||
else if (itemC.VisionData.ConfirmUser)
|
||||
PUB.log.AddI($"데이터확정완료(수동)로 인한 진행");
|
||||
PUB.log.AddI($"Proceeding due to data confirmation completion (manual)");
|
||||
else
|
||||
PUB.log.AddI($"데이터확정완료(BYPASS)로 인한 진행");
|
||||
PUB.log.AddI($"Proceeding due to data confirmation completion (BYPASS)");
|
||||
}
|
||||
else if (itemC.VisionData.QRInputRaw.isEmpty() == false && itemC.VisionData.BATCH.isEmpty() == false)
|
||||
{
|
||||
@@ -646,24 +646,24 @@ namespace Project
|
||||
//수량원본이 없는 경우
|
||||
if (item.VisionData.QTY0.isEmpty())
|
||||
{
|
||||
string msg = "서버 수량 업데이트 기능은 WMS에 적용되지 않음, 필요한 경우 개발자 컨택";
|
||||
string msg = "Server quantity update feature is not applicable to WMS, contact developer if needed";
|
||||
var cnt = 0;// (int)(Amkor.RestfulService.get_stock_count(item.VisionData.RID, out msg));
|
||||
if (mainjob)
|
||||
{
|
||||
PUB.log.AddE("서버 수량 업데이트 기능은 WMS에 적용되지 않음, 필요한 경우 개발자 컨택");
|
||||
PUB.log.AddE("Server quantity update feature is not applicable to WMS, contact developer if needed");
|
||||
}
|
||||
if (cnt > 0)
|
||||
{
|
||||
//새로받은 데이터를 실제 수량에 추가한다
|
||||
item.VisionData.QTY0 = item.VisionData.QTY;
|
||||
item.VisionData.QTY = cnt.ToString();
|
||||
if (mainjob) PUB.log.Add($"서버수량업데이트 RID:{item.VisionData.RID} 구:{item.VisionData.QTY},신:{cnt}");
|
||||
if (mainjob) PUB.log.Add($"Server quantity update RID:{item.VisionData.RID} Old:{item.VisionData.QTY}, New:{cnt}");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mainjob) PUB.log.AddE($"수량업데이트 실패 rID:{item.VisionData.RID},Message={msg}");
|
||||
if (mainjob) PUB.log.AddE($"Quantity update failed rID:{item.VisionData.RID}, Message={msg}");
|
||||
NeedConfirm = true;
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("수량 업데이트 실패");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("Quantity update failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -678,19 +678,19 @@ namespace Project
|
||||
if (rqBcd.Value != null)
|
||||
{
|
||||
var newqty = rqBcd.Value.Data.Substring(2).Trim();
|
||||
if (mainjob) PUB.log.Add($"수량업데이트(01) {item.VisionData.QTY}->{newqty}");
|
||||
if (mainjob) PUB.log.Add($"Quantity update (01) {item.VisionData.QTY}->{newqty}");
|
||||
item.VisionData.QTY = newqty;
|
||||
if (mainjob) PUB.log.AddI("수량수동입력상태이나 RQ값이 확인되어 사용자 확인을 하지 않음");
|
||||
if (mainjob) PUB.log.AddI("Manual quantity input mode but RQ value confirmed, no user confirmation required");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("RQ값 오류 (자동불가)");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("RQ value error (auto mode not possible)");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("수량 수동 입력 필요");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("Manual quantity input required");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
@@ -752,7 +752,7 @@ namespace Project
|
||||
{
|
||||
if (NeedConfirm == false)
|
||||
{
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("사용자 확인 필요");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("User confirmation required");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
@@ -766,7 +766,7 @@ namespace Project
|
||||
//프린트를 하지 않는다면 처리하지 않는다.
|
||||
if (VAR.BOOL[eVarBool.Opt_DisablePrinter] == false)
|
||||
{
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("첫번째 릴 확인 필요");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("First reel confirmation required");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
@@ -778,7 +778,7 @@ namespace Project
|
||||
{
|
||||
if (NeedConfirm == false)
|
||||
{
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("SID변환값 확인 필요");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("SID conversion value confirmation required");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
@@ -793,7 +793,7 @@ namespace Project
|
||||
{
|
||||
item.VisionData.PrintPositionData = "1";
|
||||
item.VisionData.PrintPositionCheck = true;
|
||||
PUB.log.AddI($"바이패스SID({item.VisionData.SID})로 인해 인쇄위치 임의지정");
|
||||
PUB.log.AddI($"Print position arbitrarily set due to bypass SID ({item.VisionData.SID})");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -804,12 +804,12 @@ namespace Project
|
||||
var preprnpos = PUB.Result.PrintPostionList[item.VisionData.SID];
|
||||
item.VisionData.PrintPositionData = preprnpos;
|
||||
item.VisionData.PrintPositionCheck = true;
|
||||
PUB.log.AddI($"현 작업정보에서 프린트위치 찾음 SID:{item.VisionData.SID},값={preprnpos}");
|
||||
PUB.log.AddI($"Print position found in current job info SID:{item.VisionData.SID}, Value={preprnpos}");
|
||||
}
|
||||
else if (NeedConfirm == false)
|
||||
{
|
||||
//현작업내에서의 정보를 찾아서 적용한다 231005
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("부착위치 없음");
|
||||
if (mainjob) item.VisionData.bcdMessage.Add("Attachment position not found");
|
||||
NeedConfirm = true;
|
||||
}
|
||||
}
|
||||
@@ -839,13 +839,13 @@ namespace Project
|
||||
{
|
||||
if (OPT_BYPASS)
|
||||
{
|
||||
PUB.log.Add("데이터가 모두 확인되어 자동 확정을 진행 합니다(bypassmode)");
|
||||
PUB.log.Add("All data confirmed, proceeding with automatic confirmation (bypass mode)");
|
||||
if (item.VisionData.bcdMessage.Count > 0) item.VisionData.bcdMessage.Clear();
|
||||
item.VisionData.ConfirmBypass = true;
|
||||
}
|
||||
else if (item.VisionData.ConfirmAuto == false)
|
||||
{
|
||||
PUB.log.Add("데이터가 모두 확인되어 자동 확정을 진행 합니다");
|
||||
PUB.log.Add("All data confirmed, proceeding with automatic confirmation");
|
||||
if (item.VisionData.bcdMessage.Count > 0) item.VisionData.bcdMessage.Clear();
|
||||
item.VisionData.ConfirmAuto = true;
|
||||
}
|
||||
@@ -858,7 +858,7 @@ namespace Project
|
||||
if (mainjob)
|
||||
{
|
||||
NeedConfirm = true;
|
||||
PUB.log.AddAT($"데이터가 완료되지 않았으나 QR을 읽은 상태이므로 바로 확인창을 띄운다");
|
||||
PUB.log.AddAT($"Data incomplete but QR has been read, showing confirmation window immediately");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -875,7 +875,7 @@ namespace Project
|
||||
}
|
||||
else if (PUB.Result.ItemDataC.VisionData.ConfirmAuto == false)
|
||||
{
|
||||
PUB.logDbg.Add($"비젼 자동 확정 처리 {Source}");
|
||||
PUB.logDbg.Add($"Vision automatic confirmation processing {Source}");
|
||||
PUB.Result.ItemDataC.VisionData.ConfirmAuto = true;
|
||||
}
|
||||
|
||||
@@ -885,7 +885,7 @@ namespace Project
|
||||
private void SetDryrunData()
|
||||
{
|
||||
var item = PUB.Result.ItemDataC;
|
||||
PUB.log.AddAT("드라이런 기본 데이터 입력");
|
||||
PUB.log.AddAT("Dry run basic data input");
|
||||
if (item.VisionData.QTY.isEmpty()) item.VisionData.QTY = DateTime.Now.ToString("HHmm");
|
||||
if (item.VisionData.MFGDATE.isEmpty()) item.VisionData.MFGDATE = DateTime.Now.ToString("yy-MM-dd");
|
||||
if (item.VisionData.SID.isEmpty()) item.VisionData.SID = "108" + "0" + DateTime.Now.ToString("HH").PadLeft(2, '0') + DateTime.Now.ToString("fff").PadLeft(3, '0');
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Project
|
||||
//####################################################
|
||||
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
||||
{
|
||||
PUB.log.Add($"[{target}] 피커 ON 작업시작");
|
||||
PUB.log.Add($"[{target}] Picker ON work started");
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
}
|
||||
@@ -65,7 +65,7 @@ namespace Project
|
||||
var PosZ = MOT.GetPZPos(ePZLoc.READY);
|
||||
if (MOT.CheckMotionPos(seqTime, PosZ, funcName) == false) return false;
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, funcName) == false) return false;
|
||||
PUB.log.Add($"[{target}] 피커 ON X,Y 준비위치 확인");
|
||||
PUB.log.Add($"[{target}] Picker ON X,Y ready position confirmed");
|
||||
DIO.SetPickerVac(true);
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
@@ -205,11 +205,11 @@ namespace Project
|
||||
{
|
||||
baseAngle = bcd.Angle;
|
||||
baseSource = bcd.barcodeSource; //230504 각도
|
||||
PUB.log.AddI($"[{target}] 각도산출내용:{msg},바코드:{bcd.Data},ID:{vdata.RID}"); //210602
|
||||
PUB.log.AddI($"[{target}] Angle calculation: {msg}, Barcode: {bcd.Data}, ID: {vdata.RID}"); //210602
|
||||
}
|
||||
else if (PUB.Result.DryRun)
|
||||
{
|
||||
PUB.log.AddAT($"[{target}] 드라이런으로 인해 각도를 적용하지 않음");
|
||||
PUB.log.AddAT($"[{target}] Angle not applied due to dry run");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -218,7 +218,7 @@ namespace Project
|
||||
|
||||
var addangle = baseSource == "R" ? SETTING.Data.RearBarcodeRotate : SETTING.Data.FrontBarcodeRotate;
|
||||
var rotAngle = baseAngle + addangle + vdata.PositionAngle;
|
||||
PUB.log.AddI($"[{target}]-소스:{baseSource} 회전값(Base:{baseAngle}+추가:{addangle}+비젼:{vdata.PositionAngle}={rotAngle})");
|
||||
PUB.log.AddI($"[{target}] Source: {baseSource} Rotation value (Base: {baseAngle} + Additional: {addangle} + Vision: {vdata.PositionAngle} = {rotAngle})");
|
||||
|
||||
int dir = -1;
|
||||
while (true)
|
||||
@@ -234,7 +234,7 @@ namespace Project
|
||||
dir = 1;
|
||||
}
|
||||
|
||||
PUB.log.AddI($"[{target}] 회전(최종) [{rotAngle}도,방향:{dir}],RID:{vdata.RID}");
|
||||
PUB.log.AddI($"[{target}] Rotation (Final) [{rotAngle} degrees, Direction: {dir}], RID: {vdata.RID}");
|
||||
|
||||
if (target == eWorkPort.Left)
|
||||
PUB.Result.ItemDataL.VisionData.ApplyAngle = rotAngle; //회전각도를 넣는다
|
||||
@@ -243,7 +243,7 @@ namespace Project
|
||||
|
||||
var curtheta = PUB.mot.GetActPos((int)eAxis.Z_THETA);
|
||||
var newPos = curtheta + (dir * rotAngle);
|
||||
PUB.log.Add($"회전전 모터 위치 : {curtheta}, 대상위치:{newPos},속도:{thpos.Speed},가속:{thpos.Acc}");
|
||||
PUB.log.Add($"Motor position before rotation: {curtheta}, Target position: {newPos}, Speed: {thpos.Speed}, Acceleration: {thpos.Acc}");
|
||||
|
||||
if (target == eWorkPort.Left)
|
||||
VAR.DBL[(int)eVarDBL.ThetaPositionL] = newPos;
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Project
|
||||
//####################################################
|
||||
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
||||
{
|
||||
PUB.log.Add($"[{target}] 피커 RETRY 작업시작({PickerRetryCount}/{AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
PUB.log.Add($"[{target}] Picker RETRY work started ({PickerRetryCount}/{AR.SETTING.Data.RetryPickOnMaxCount})");
|
||||
|
||||
//기존자료를 모두 삭제 한다 221102
|
||||
if (PUB.Result.ItemDataC != null && PUB.Result.ItemDataC.VisionData != null && PUB.Result.ItemDataC.VisionData.barcodelist != null)
|
||||
@@ -218,7 +218,7 @@ namespace Project
|
||||
PUB.mot.ClearPosition((int)eAxis.Z_THETA);
|
||||
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, funcName) == false) return false;
|
||||
PUB.log.AddAT($"###### 재시도 작업 회피 이동 완료({target})");
|
||||
PUB.log.AddAT($"###### Retry work avoidance movement completed ({target})");
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
}
|
||||
@@ -228,7 +228,7 @@ namespace Project
|
||||
//####################################################
|
||||
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
||||
{
|
||||
PUB.log.Add($"retry 완료로 비젼데이터를 삭제 합니다");
|
||||
PUB.log.Add($"Deleting vision data due to retry completion");
|
||||
PUB.Result.ItemDataC.VisionData.Clear(funcName, true);
|
||||
AR.VAR.BOOL[eVarBool.JOB_PickON_Retry] = false;
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
|
||||
@@ -70,10 +70,10 @@ namespace Project
|
||||
if (DIO.GetIOInput(eDIName.R_CONV1)) return false;
|
||||
if (VAR.I32[eVarInt32.RIGT_ITEM_COUNT] > 0) return false;
|
||||
}
|
||||
PUB.log.Add($"CVMODE에서 컨베이어 비어있음");
|
||||
PUB.log.Add($"Conveyor is empty in CV MODE");
|
||||
}
|
||||
|
||||
PUB.log.Add($"[{target}] 피커 OFF 작업시작");
|
||||
PUB.log.Add($"[{target}] Picker OFF work started");
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
}
|
||||
@@ -87,7 +87,7 @@ namespace Project
|
||||
var Pos = target == eWorkPort.Left ? MOT.GetLMPos(eLMLoc.READY) : MOT.GetRMPos(eRMLoc.READY);
|
||||
if (MOT.getPositionMatch(Pos) == false)
|
||||
{
|
||||
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.POSITION_ERROR, eNextStep.PAUSE, "프린터 Y축이 준비위치에 있지 않습니다");
|
||||
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.POSITION_ERROR, eNextStep.PAUSE, "Printer Y-axis is not at ready position");
|
||||
return false;
|
||||
}
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
@@ -265,7 +265,7 @@ namespace Project
|
||||
{
|
||||
if (OPT_BYPASS == true || OPT_PrinterOff)
|
||||
{
|
||||
PUB.log.AddAT($"bypass 로 인해 추가 회전을 하지 않습니다");
|
||||
PUB.log.AddAT($"Additional rotation not performed due to bypass");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -285,7 +285,7 @@ namespace Project
|
||||
else VAR.DBL[(int)eVarDBL.ThetaPositionR] = theta + OffsetAngle;
|
||||
|
||||
if (AR.SETTING.Data.Log_Debug)
|
||||
PUB.logDbg.Add($"[{target}] 모션 추가회전 :{OffsetAngle}");
|
||||
PUB.logDbg.Add($"[{target}] Motor additional rotation: {OffsetAngle}");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -307,7 +307,7 @@ namespace Project
|
||||
var Pos = MOT.GetPTPos(ePTLoc.READY);
|
||||
Pos.Position = Theta;
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, funcName, false) == false) return false;
|
||||
PUB.log.Add($"[{target}] 회전축 확인 완료 위치:{Theta},모터값:{PUB.mot.GetActPos((int)eAxis.Z_THETA)} => 위치초기화함");
|
||||
PUB.log.Add($"[{target}] Rotation axis verification complete Position: {Theta}, Motor value: {PUB.mot.GetActPos((int)eAxis.Z_THETA)} => Position initialized");
|
||||
PUB.mot.ClearPosition((int)eAxis.Z_THETA);
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace Project
|
||||
//####################################################
|
||||
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
||||
{
|
||||
PUB.log.Add($"[{target}] 프린트 작업 시작");
|
||||
PUB.log.Add($"[{target}] Print operation started");
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
}
|
||||
@@ -106,7 +106,7 @@ namespace Project
|
||||
item.VisionData.ZPL = zpl;
|
||||
item.VisionData.PrintQRData = qrdata;
|
||||
|
||||
PUB.log.Add("PRINT", $"[{target}] 프린트");//QR=" + item.VisionData.QRData);
|
||||
PUB.log.Add("PRINT", $"[{target}] Printing");//QR=" + item.VisionData.QRData);
|
||||
|
||||
if (target == eWorkPort.Left)
|
||||
{
|
||||
@@ -141,7 +141,7 @@ namespace Project
|
||||
}
|
||||
}
|
||||
}
|
||||
else PUB.log.AddAT($"[{target}] 프린터 기능 OFF(bypass or model or setting)");
|
||||
else PUB.log.AddAT($"[{target}] Printer function OFF (bypass or model or setting)");
|
||||
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return false;
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Project
|
||||
if (용지감지기능 == false)
|
||||
{
|
||||
if (seqTime.TotalMilliseconds < 100) return false;
|
||||
PUB.log.AddAT($"[{target}] 용지감지기능 OFF(3초후 진행)");
|
||||
PUB.log.AddAT($"[{target}] Paper detection function OFF(proceed after 3 seconds)");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -148,7 +148,7 @@ namespace Project
|
||||
if (용지감지기능 == false)
|
||||
{
|
||||
if (seqTime.TotalMilliseconds < 100) return false;
|
||||
PUB.log.AddAT($"[{target}] 용지감지기능 OFF(3초후 진행)");
|
||||
PUB.log.AddAT($"[{target}] Paper detection function OFF(proceed after 3 seconds)");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Project
|
||||
var retval = false;
|
||||
if (AR.SETTING.Data.OnlineMode == false)
|
||||
{
|
||||
PUB.log.AddAT($"[SAVE-EE] 오프라인으로 저장 하지 않음");
|
||||
PUB.log.AddAT($"[SAVE-EE] Not saving in offline mode");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Project
|
||||
{
|
||||
//카메라 트리거 전송
|
||||
var sendok = WS_Send(target, WS, item.guid, "TRIG", item.VisionData.PrintQRData);
|
||||
PUB.log.Add($"바코드트리거전송({target}) = {sendok}");
|
||||
PUB.log.Add($"Barcode trigger transmission ({target}) = {sendok}");
|
||||
if(sendok==false) //230512 전송실패시 오류로 한다
|
||||
{
|
||||
PUB.Result.SetResultMessage(eResult.HARDWARE, eECode.VISION_TRIGERROR, eNextStep.PAUSE);
|
||||
@@ -73,7 +73,7 @@ namespace Project
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.VisionL_Retry] == false)
|
||||
{
|
||||
PUB.log.AddAT("비젼(L) 1회 실패로 재 시도 합니다");
|
||||
PUB.log.AddAT("Vision (L) failed once, retrying");
|
||||
VAR.BOOL[eVarBool.VisionL_Retry] = true;
|
||||
PUB.sm.seq.Update(cmdIndex, -1);
|
||||
return false;
|
||||
@@ -92,7 +92,7 @@ namespace Project
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.VisionR_Retry] == false)
|
||||
{
|
||||
PUB.log.AddAT("비젼(R) 1회 실패로 재 시도 합니다");
|
||||
PUB.log.AddAT("Vision (R) failed once, retrying");
|
||||
VAR.BOOL[eVarBool.VisionR_Retry] = true;
|
||||
PUB.sm.seq.Update(cmdIndex, -1);
|
||||
return false;
|
||||
@@ -121,12 +121,12 @@ namespace Project
|
||||
{
|
||||
if (PUB.flag.get(eVarBool.FG_END_VISIONL)) //종료신호가 설정되어있다면 완료된 경우다
|
||||
{
|
||||
PUB.log.AddI($"{target} 비젼 종료 신호로 인해 완료 처리 합니다");
|
||||
PUB.log.AddI($"{target} Completed processing due to vision end signal");
|
||||
item.PrintQRValid = true;
|
||||
}
|
||||
else if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) == false) //사용자가 취소했다면 넘어간다
|
||||
{
|
||||
PUB.log.AddAT($"{target} 사용자 취소로 QR검증을 넘김");
|
||||
PUB.log.AddAT($"{target} Skip QR verification due to user cancellation");
|
||||
item.PrintQRValid = false;
|
||||
}
|
||||
else return false; //아직 완료전이므로 리턴한다
|
||||
@@ -135,12 +135,12 @@ namespace Project
|
||||
{
|
||||
if (PUB.flag.get(eVarBool.FG_END_VISIONR))
|
||||
{
|
||||
PUB.log.AddI($"{target} 비젼 종료 신호로 인해 완료 처리 합니다");
|
||||
PUB.log.AddI($"{target} Completed processing due to vision end signal");
|
||||
item.PrintQRValid = true;
|
||||
}
|
||||
else if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) == false) //사용자가 취소했다면 넘어간다
|
||||
{
|
||||
PUB.log.AddAT($"{target} 사용자 취소로 QR검증을 넘김");
|
||||
PUB.log.AddAT($"{target} Skip QR verification due to user cancellation");
|
||||
item.PrintQRValid = false;
|
||||
}
|
||||
else return false; //아직 완료전이므로 리턴한다
|
||||
@@ -157,7 +157,7 @@ namespace Project
|
||||
//####################################################
|
||||
if (PUB.sm.seq.Get(cmdIndex) == idx++)
|
||||
{
|
||||
PUB.log.Add($"{target} 비젼 검증 완료(결과:{item.PrintQRValid})");
|
||||
PUB.log.Add($"{target} Vision verification completed (Result: {item.PrintQRValid})");
|
||||
|
||||
if (target == eWorkPort.Left)
|
||||
PUB.flag.set(eVarBool.FG_PRC_VISIONL, false, funcName);
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace Project
|
||||
{
|
||||
var o = (eSMStep)e.Old;
|
||||
var n = (eSMStep)e.New;
|
||||
PUB.log.AddI($"스텝전환({o} >> {n})");
|
||||
PUB.log.AddI($"Step transition({o} >> {n})");
|
||||
|
||||
//230313
|
||||
EEMStatus.AddStatusSQL(n);
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace Project
|
||||
var runMethod = obj.GetMethod(runMethodName);
|
||||
if (runMethod == null)
|
||||
{
|
||||
PUB.log.AddE($"다음 명령이 구현되지 않았습니다 {methodName}/{runMethodName}");
|
||||
PUB.log.AddE($"The following command is not implemented {methodName}/{runMethodName}");
|
||||
PUB.Result.SetResultMessage(eResult.DEVELOP, eECode.NOFUNCTION, eNextStep.ERROR, methodName, runMethodName);
|
||||
}
|
||||
else
|
||||
@@ -101,7 +101,7 @@ namespace Project
|
||||
var rlt = (bool)runMethod.Invoke(this, param);
|
||||
if (rlt == true)
|
||||
{
|
||||
PUB.log.AddI("사용자스텝(자동) 실행완료 대기상태전환");
|
||||
PUB.log.AddI("User step(automatic) execution completed, switching to idle state");
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Project
|
||||
var diPin = DIO.Pin.input.Where(t=>t.terminalno == e.ArrIDX).FirstOrDefault();
|
||||
if(diPin == null)
|
||||
{
|
||||
PUB.log.AddE($"DI INDEX:{e.ArrIDX} 에 해당하는 터미널 대상이 없습니다");
|
||||
PUB.log.AddE($"No terminal target found for DI INDEX:{e.ArrIDX}");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -33,7 +33,7 @@ namespace Project
|
||||
var doPin = DIO.Pin.output.Where(t => t.terminalno == e.ArrIDX).FirstOrDefault();
|
||||
if (doPin == null)
|
||||
{
|
||||
PUB.log.AddE($"DO INDEX:{e.ArrIDX} 에 해당하는 터미널 대상이 없습니다");
|
||||
PUB.log.AddE($"No terminal target found for DO INDEX:{e.ArrIDX}");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -108,7 +108,7 @@ namespace Project
|
||||
if (port == 3) SETTING.Counter.CountPrintR += value;
|
||||
else
|
||||
{
|
||||
PUB.log.AddAT(string.Format("[{0}] 미지정 포트이므로 수량 증가 불가", seq));
|
||||
PUB.log.AddAT(string.Format("[{0}] Cannot increase quantity as it is an unspecified port", seq));
|
||||
}
|
||||
|
||||
//Pub.log.AddI("수량정보가 저장 되었습니다");
|
||||
|
||||
@@ -62,9 +62,9 @@ namespace Project
|
||||
|
||||
PUB.Result.ResultCode = eResult.EMERGENCY;
|
||||
PUB.Result.ResultMessage = string.Format("EMERGENCY\n" +
|
||||
"비상정지 버튼({0})이 눌렸습니다\n" +
|
||||
"모든 모션이 강제 정지 합니다\n" +
|
||||
"비상 정지 버튼을 확인 한 후 시스템을 초기화 하세요", EmgButtonState);
|
||||
"Emergency stop button ({0}) has been pressed\n" +
|
||||
"All motions are forced to stop\n" +
|
||||
"Please check the emergency stop button and initialize the system", EmgButtonState);
|
||||
|
||||
PUB.log.AddI("SPS:Reserve Emergency Step");
|
||||
PUB.sm.SetNewStep(eSMStep.EMERGENCY);
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Project
|
||||
|
||||
if (pats.Any() == false)
|
||||
{
|
||||
PUB.log.AddAT($"등록된 패턴이 없습니다(SYM={barcodeSymbol})");
|
||||
PUB.log.AddAT($"No registered pattern(SYM={barcodeSymbol})");
|
||||
return new Tuple<int, List<string>>(0, new List<string>());
|
||||
}
|
||||
|
||||
@@ -50,19 +50,19 @@ namespace Project
|
||||
{
|
||||
if (vm.BCD_DM == false && barcodeSymbol == "2")
|
||||
{
|
||||
PUB.log.AddAT($"모델(DM)에서 비활성:{bcd}");
|
||||
PUB.log.AddAT($"Inactive in model(DM):{bcd}");
|
||||
IgnoreBarcode = true;
|
||||
return new Tuple<int, List<string>>(0, new List<string>());
|
||||
}
|
||||
else if (vm.BCD_1D == false && (barcodeSymbol == "6" || barcodeSymbol == "11"))
|
||||
{
|
||||
PUB.log.AddAT($"모델(1D)에서 비활성:{bcd}");
|
||||
PUB.log.AddAT($"Inactive in model(1D):{bcd}");
|
||||
IgnoreBarcode = true;
|
||||
return new Tuple<int, List<string>>(0, new List<string>());
|
||||
}
|
||||
else if (vm.BCD_QR == false && (barcodeSymbol == "1"))
|
||||
{
|
||||
PUB.log.AddAT($"모델(QR)에서 비활성:{bcd}");
|
||||
PUB.log.AddAT($"Inactive in model(QR):{bcd}");
|
||||
IgnoreBarcode = true;
|
||||
return new Tuple<int, List<string>>(0, new List<string>());
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Project
|
||||
DIO.SetOutput(eDOName.RIGHT_CONV, false);
|
||||
|
||||
DIO.SetBuzzer(true, AR.SETTING.Data.Force_JobEndBuzzer);
|
||||
PUB.log.AddI("작업이 완료되었습니다");
|
||||
PUB.log.AddI("Work has been completed");
|
||||
needShowSummary = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Project
|
||||
DIO.SetBuzzer(false);
|
||||
|
||||
//홈이완료되었으므로 3초정도 기다려준다.
|
||||
PUB.log.AddAT("홈 완료 확정을 위한 타이머 시작");
|
||||
PUB.log.AddAT("Timer started for home completion confirmation");
|
||||
HomeSuccessTime = DateTime.Now;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Project
|
||||
DIO.SetBuzzer(false);
|
||||
|
||||
PUB.flag.set(eVarBool.FG_USERSTEP, false, "SM_HOME");
|
||||
PUB.log.AddI("홈 작업 완료로 인해 홈 검증 코드로 이동함");
|
||||
PUB.log.AddI("Moving to home verification code due to home operation completion");
|
||||
|
||||
HomeChkTime = DateTime.Now;
|
||||
PUB.sm.SetNewStep(eSMStep.HOME_CONFIRM);
|
||||
|
||||
@@ -478,7 +478,7 @@ namespace Project
|
||||
|
||||
void FlagClear(bool ClearItemOn)
|
||||
{
|
||||
PUB.log.AddAT($"플래그초기화({ClearItemOn})");
|
||||
PUB.log.AddAT($"Flag initialization({ClearItemOn})");
|
||||
//연관플래그 소거
|
||||
if (ClearItemOn)
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace Project
|
||||
var ts = DateTime.Now - IdleStartTime;
|
||||
if (ts.TotalMinutes > AR.SETTING.Data.AutoOffRoomLightMin)
|
||||
{
|
||||
PUB.log.Add("대기상태 전환으로 인해 조명을 끕니다");
|
||||
PUB.log.Add("Turning off lights due to idle state transition");
|
||||
IdleSleep = true;
|
||||
DIO.SetRoomLight(false);
|
||||
}
|
||||
|
||||
@@ -32,11 +32,11 @@ namespace Project
|
||||
if (PUB.mot.Init() == false)
|
||||
{
|
||||
PUB.log.AddE(string.Format("MOT INIT ERROR : {0}", PUB.mot.ErrorMessage));
|
||||
PUB.log.AddE("모션 초기화 오류로 잠시 후 다시 시도합니다");
|
||||
PUB.log.AddE("Motion initialization error, retrying shortly");
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
if (PUB.mot.Init() == false)
|
||||
{
|
||||
PUB.log.AddE("모션 초기화 재시도 실패" + PUB.mot.ErrorMessage);
|
||||
PUB.log.AddE("Motion initialization retry failed " + PUB.mot.ErrorMessage);
|
||||
}
|
||||
}
|
||||
_SM_RUN_INIT_MOTION();
|
||||
@@ -66,7 +66,7 @@ namespace Project
|
||||
PUB.sm.RaiseStateProgress(++progress, "Set DIO Names", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
_SM_RUN_INIT_SETDIONAME();
|
||||
|
||||
PUB.log.AddI("모션 초기화 플래그 설정완료");
|
||||
PUB.log.AddI("Motion initialization flag setup complete");
|
||||
PUB.flag.set(eVarBool.FG_INIT_MOTIO, true, "INIT");
|
||||
|
||||
//230504
|
||||
@@ -74,12 +74,12 @@ namespace Project
|
||||
hmi1.SetMOT(PUB.mot);
|
||||
|
||||
//남은 공간
|
||||
PUB.sm.RaiseStateProgress(++progress, "공간 확인", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
PUB.sm.RaiseStateProgress(++progress, "Space Check", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
CheckFreeSpace(); //181225
|
||||
|
||||
|
||||
//프린터설정
|
||||
PUB.sm.RaiseStateProgress(++progress, "프린터설정", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
PUB.sm.RaiseStateProgress(++progress, "Printer Setup", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
PUB.PrinterL = new Device.SATOPrinterAPI();
|
||||
PUB.PrinterL.PortName = AR.SETTING.Data.PrintL_Port;
|
||||
PUB.PrinterL.BaudRate = AR.SETTING.Data.PrintL_Baud;
|
||||
@@ -91,7 +91,7 @@ namespace Project
|
||||
PUB.flag.set(eVarBool.FG_INIT_PRINTER, true, "INIT");
|
||||
|
||||
//모델자동선택 181206
|
||||
PUB.sm.RaiseStateProgress(++progress, "이전모델 확인", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
PUB.sm.RaiseStateProgress(++progress, "Previous Model Check", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
|
||||
|
||||
//
|
||||
if (SETTING.User.LastModelV != "") PUB.SelectModelV(SETTING.User.LastModelV, false);
|
||||
@@ -101,7 +101,7 @@ namespace Project
|
||||
else PUB.flag.set(eVarBool.Use_Conveyor, false, "load");
|
||||
PUB.SelectModelM(motionmodel, false);
|
||||
|
||||
PUB.sm.RaiseStateProgress(ProgressMax, "초기화 완료", ProgressMax, Color.Gold); System.Threading.Thread.Sleep(5);
|
||||
PUB.sm.RaiseStateProgress(ProgressMax, "Initialization Complete", ProgressMax, Color.Gold); System.Threading.Thread.Sleep(5);
|
||||
PUB.log.Add("init finish");
|
||||
|
||||
//조명 ON
|
||||
@@ -111,7 +111,7 @@ namespace Project
|
||||
// Start OWIN host
|
||||
var baseAddress = "http://*:9001";
|
||||
WebApp.Start<OWIN.Startup>(url: baseAddress);
|
||||
PUB.log.AddI($"호스팅서비스ON : {baseAddress}");
|
||||
PUB.log.AddI($"Hosting service ON: {baseAddress}");
|
||||
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Project
|
||||
//7개의 축을 사용한다
|
||||
if (PUB.mot.IsInit == false)
|
||||
{
|
||||
PUB.log.AddE("모션보드 초기화 오류로 설정을 진행하지 않습니다");
|
||||
PUB.log.AddE("Motion board initialization error, configuration will not proceed");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -167,15 +167,15 @@ namespace Project
|
||||
var file = System.IO.Path.Combine(UTIL.CurrentPath, "Model", "axis" + i.ToString() + ".motaxt");
|
||||
if (System.IO.File.Exists(file) == false)
|
||||
{
|
||||
PUB.log.AddAT($"모션({i}) 설정파일 없음!!");
|
||||
PUB.log.AddAT($"Motion ({i}) configuration file not found!!");
|
||||
PUB.mot.InitAxis(i, file);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PUB.mot.InitAxis((short)i, file) == false)
|
||||
PUB.log.AddE("모션 설정 실패 축:" + i.ToString());
|
||||
PUB.log.AddE("Motion setup failed axis:" + i.ToString());
|
||||
else
|
||||
PUB.log.AddI($"모션({i}) 설정 완료");
|
||||
PUB.log.AddI($"Motion ({i}) setup complete");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Project
|
||||
|
||||
//plc의 SID 데이터를 갱신하도록 한다
|
||||
PUB.Result.ClearAllSID = true;
|
||||
PUB.log.AddI("*** 신규 작업이 시작 되었습니다 ***");
|
||||
PUB.log.AddI("*** New job has started ***");
|
||||
//PUB.flag.set(eVarBool.RDY_VISION1, true, "JOB START"); //최초 시작시에는 1번 비젼이 동작하게 한다
|
||||
|
||||
//새로시작할때에는 이 값을 초기화 해준다.
|
||||
@@ -149,10 +149,10 @@ namespace Project
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.wait_for_keyence])
|
||||
{
|
||||
PUB.log.Add($"바코드수신대기중이었으므로 기존 값을 삭제 합니다(CONF={PUB.Result.ItemDataC.VisionData.Confirm},ID:{PUB.Result.ItemDataC.VisionData.RID})");
|
||||
PUB.log.Add($"Deleting existing values because barcode reception was waiting (CONF={PUB.Result.ItemDataC.VisionData.Confirm}, ID:{PUB.Result.ItemDataC.VisionData.RID})");
|
||||
PUB.Result.ItemDataC.VisionData.Clear("RESTART", true);
|
||||
}
|
||||
PUB.log.AddI("*** 작업이 재시작 되었습니다 ***");
|
||||
PUB.log.AddI("*** Job has been restarted ***");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ namespace Project
|
||||
|
||||
if (PUB.flag.get(eVarBool.FG_JOB_END) == false)
|
||||
{
|
||||
PUB.log.AddAT("작업완료조건실행");
|
||||
PUB.log.AddAT("Work completion condition execution");
|
||||
VAR.TIME.Update(eVarTime.JOB_END);
|
||||
PUB.flag.set(eVarBool.FG_JOB_END, true, "SM_RUN");
|
||||
}
|
||||
@@ -264,7 +264,7 @@ namespace Project
|
||||
if (ts.TotalSeconds >= AR.SETTING.Data.Timeout_JOBEnd)
|
||||
{
|
||||
PUB.Result.JobEndTime = DateTime.Now;
|
||||
PUB.log.AddI($"작업완료 상태로 전환합니다(대기시간:{AR.SETTING.Data.Timeout_JOBEnd}초)");
|
||||
PUB.log.AddI($"Switching to job completion state (wait time: {AR.SETTING.Data.Timeout_JOBEnd} seconds)");
|
||||
PUB.sm.SetNewStep(eSMStep.FINISH);
|
||||
PUB.flag.set(eVarBool.FG_JOB_END, false, "SM_RUN:FINISH");
|
||||
}
|
||||
@@ -275,7 +275,7 @@ namespace Project
|
||||
//이조건일때에는 job_End 가 없어야한다
|
||||
if (PUB.flag.get(eVarBool.FG_JOB_END) == true)
|
||||
{
|
||||
PUB.log.AddI("작업완료조건 해제");
|
||||
PUB.log.AddI("Work completion condition released");
|
||||
PUB.flag.set(eVarBool.FG_JOB_END, false, "run");
|
||||
|
||||
//메인메세지를 제거 해준다.
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace Project
|
||||
{
|
||||
PUB.flag.set(FG_RDY_PORT, false, "IOCHANGE");
|
||||
if (PUB.sm.Step > eSMStep.IDLE)
|
||||
PUB.log.AddAT("안전센서 검출로 인해 PORT_READY(L)를 해제 합니다");
|
||||
PUB.log.AddAT("Releasing PORT_READY(L) due to safety sensor detection");
|
||||
}
|
||||
|
||||
//도어가 열리면 포트를 멈춘다 210329
|
||||
@@ -225,7 +225,7 @@ namespace Project
|
||||
var PosZ = MOT.getPositionMatch(MOT.GetLZPos(eLZLoc.PICKON));//.MOT.GetPRM_PosName();
|
||||
if (PosM && PosZ)
|
||||
{
|
||||
PUB.log.Add("도어열림으로 인해 프린터L Z축을 올립니다");
|
||||
PUB.log.Add("Raising printer L Z-axis due to door opening");
|
||||
var Pos = MOT.GetLZPos(eLZLoc.PICKON);
|
||||
MOT.Move(Pos);
|
||||
}
|
||||
@@ -236,7 +236,7 @@ namespace Project
|
||||
var PosZ = MOT.getPositionMatch(MOT.GetRZPos(eRZLoc.PICKON));// GetPRZ_PosName();
|
||||
if (PosM && PosZ)
|
||||
{
|
||||
PUB.log.Add("도어열림으로 인해 프린터R Z축을 올립니다");
|
||||
PUB.log.Add("Raising printer R Z-axis due to door opening");
|
||||
MOT.Move(eAxis.PR_UPDN, 0, 100, 1000, false, false, false);
|
||||
}
|
||||
}
|
||||
@@ -257,7 +257,7 @@ namespace Project
|
||||
if (PosM && PosZ)
|
||||
{
|
||||
var zpos = MOT.GetLZPos(eLZLoc.PICKON);
|
||||
PUB.log.Add("도어닫힘으로 인해 프린터L Z축을 내립니다");
|
||||
PUB.log.Add("Lowering printer L Z-axis due to door closing");
|
||||
MOT.Move(eAxis.PL_UPDN, zpos.Position, 100, 1000, false, false, false);
|
||||
}
|
||||
}
|
||||
@@ -268,7 +268,7 @@ namespace Project
|
||||
if (PosM && PosZ)
|
||||
{
|
||||
var zpos = MOT.GetRZPos(eRZLoc.PICKON);
|
||||
PUB.log.Add("도어닫힘으로 인해 프린터R Z축을 내립니다");
|
||||
PUB.log.Add("Lowering printer R Z-axis due to door closing");
|
||||
MOT.Move(eAxis.PR_UPDN, zpos.Position, 100, 1000, false, false, false);
|
||||
}
|
||||
}
|
||||
@@ -286,12 +286,12 @@ namespace Project
|
||||
if (curState == false)
|
||||
{
|
||||
DIO.SetAIR(!curState);
|
||||
PUB.log.AddI("에어 컴");
|
||||
PUB.log.AddI("Air ON");
|
||||
}
|
||||
else
|
||||
{
|
||||
DIO.SetAIR(!curState);
|
||||
PUB.log.AddAT("에어 끔");
|
||||
PUB.log.AddAT("Air OFF");
|
||||
}
|
||||
}
|
||||
//AIR의 LED는 실제 AIR 출력 상태와 동기화 한다 * output event 에서 처리함
|
||||
@@ -430,7 +430,7 @@ namespace Project
|
||||
if (DIO.GetIOInput(eDIName.PORTL_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG0) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(0, false);
|
||||
PUB.log.Add("좌측 포트의 마그넷 OFF");
|
||||
PUB.log.Add("Left port magnet OFF");
|
||||
}
|
||||
}
|
||||
else if (pin == eDIName.PORTC_LIM_DN)
|
||||
@@ -439,7 +439,7 @@ namespace Project
|
||||
if (DIO.GetIOInput(eDIName.PORTC_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG1) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(1, false);
|
||||
PUB.log.Add("중앙 포트의 마그넷 OFF");
|
||||
PUB.log.Add("Center port magnet OFF");
|
||||
|
||||
if(PUB.sm.Step == eSMStep.FINISH)
|
||||
{
|
||||
@@ -453,7 +453,7 @@ namespace Project
|
||||
if (DIO.GetIOInput(eDIName.PORTR_LIM_DN) == true && DIO.GetIOOutput(eDOName.CART_MAG2) == true)
|
||||
{
|
||||
DIO.SetPortMagnet(2, false);
|
||||
PUB.log.Add("우측 포트의 마그넷 OFF");
|
||||
PUB.log.Add("Right port magnet OFF");
|
||||
}
|
||||
}
|
||||
else if (pin == eDIName.L_CONV3)
|
||||
@@ -464,7 +464,7 @@ namespace Project
|
||||
if(VAR.I32[eVarInt32.LEFT_ITEM_COUNT] > 0)
|
||||
{
|
||||
VAR.I32[eVarInt32.LEFT_ITEM_COUNT] -= 1;//= false; //해제
|
||||
PUB.log.AddAT($"left 버퍼 수량 감소");
|
||||
PUB.log.AddAT($"Left buffer quantity decrease");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -477,7 +477,7 @@ namespace Project
|
||||
if (VAR.I32[eVarInt32.RIGT_ITEM_COUNT] > 0)
|
||||
{
|
||||
VAR.I32[eVarInt32.RIGT_ITEM_COUNT] -= 1;//= false; //해제
|
||||
PUB.log.AddAT($"right 버퍼 수량 감소");
|
||||
PUB.log.AddAT($"Right buffer quantity decrease");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace Project
|
||||
}
|
||||
|
||||
var reason = string.Join(",", lst);
|
||||
PUB.log.Add("MOT", $"모터정지사유({e.axis}):{reason}:bit={bitstatus}");
|
||||
PUB.log.Add("MOT", $"Motor stop reason ({e.axis}): {reason}: bit={bitstatus}");
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Project
|
||||
}
|
||||
else if (e.NewStatus == arDev.MOT.HOME_RESULT.HOME_SUCCESS)
|
||||
{
|
||||
PUB.log.AddI(string.Format("홈 검색이 완료되었습니다 축:{0}", e.Axis));
|
||||
PUB.log.AddI(string.Format("Home search completed for axis: {0}", e.Axis));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,7 @@ namespace Project
|
||||
{
|
||||
if (e.IsError)
|
||||
{
|
||||
if (e.Message.IndexOf("동일위치") != -1 || e.Message.IndexOf("inposition") != -1)
|
||||
if (e.Message.IndexOf("same position") != -1 || e.Message.IndexOf("inposition") != -1)
|
||||
{ // Pub.log.AddAT("MOT:" + e.Message);
|
||||
}
|
||||
else PUB.log.AddE("MOT:" + e.Message);
|
||||
|
||||
@@ -148,11 +148,11 @@ namespace Project
|
||||
if (DIO.isSaftyDoorF() == false)
|
||||
{
|
||||
PUB.Result.SetResultMessage(eResult.EMERGENCY, eECode.DOORSAFTY, eNextStep.PAUSE);// false);
|
||||
PUB.mot.MoveStop("안전문제", true);
|
||||
PUB.mot.MoveStop("Safety issue", true);
|
||||
|
||||
if (DIO.isSaftyDoorF(0, false) == false) DIO.SetPortMotor(0, eMotDir.CW, false, "안전오류");
|
||||
if (DIO.isSaftyDoorF(1, false) == false) DIO.SetPortMotor(1, eMotDir.CW, false, "안전오류");
|
||||
if (DIO.isSaftyDoorF(2, false) == false) DIO.SetPortMotor(2, eMotDir.CW, false, "안전오류");
|
||||
if (DIO.isSaftyDoorF(0, false) == false) DIO.SetPortMotor(0, eMotDir.CW, false, "Safety error");
|
||||
if (DIO.isSaftyDoorF(1, false) == false) DIO.SetPortMotor(1, eMotDir.CW, false, "Safety error");
|
||||
if (DIO.isSaftyDoorF(2, false) == false) DIO.SetPortMotor(2, eMotDir.CW, false, "Safety error");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ namespace Project
|
||||
|
||||
Boolean isPortLimDN(int idx)
|
||||
{
|
||||
if (idx < 0 || idx > 2) throw new Exception("포트번호는(0~2)사이로 입력하세요");
|
||||
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
||||
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_LIM_DN);
|
||||
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_LIM_DN);
|
||||
else return DIO.GetIOInput(eDIName.PORTR_LIM_DN);
|
||||
@@ -184,14 +184,14 @@ namespace Project
|
||||
}
|
||||
Boolean isPortLimUP(int idx)
|
||||
{
|
||||
if (idx < 0 || idx > 2) throw new Exception("포트번호는(0~2)사이로 입력하세요");
|
||||
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
||||
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_LIM_UP);
|
||||
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_LIM_UP);
|
||||
else return DIO.GetIOInput(eDIName.PORTR_LIM_UP);
|
||||
}
|
||||
Boolean isPortDetUp(int idx)
|
||||
{
|
||||
if (idx < 0 || idx > 2) throw new Exception("포트번호는(0~2)사이로 입력하세요");
|
||||
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
||||
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_DET_UP);
|
||||
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_DET_UP);
|
||||
else return DIO.GetIOInput(eDIName.PORTR_DET_UP);
|
||||
|
||||
@@ -56,27 +56,27 @@ namespace Project
|
||||
private void Ws_DisconnectedL(object sender, EventArgs e)
|
||||
{
|
||||
var ws = sender as WatsonWebsocket.WatsonWsClient;
|
||||
PUB.log.AddAT("카메라L 접속 종료");
|
||||
PUB.log.AddAT("Camera L connection terminated");
|
||||
//_isCrevisOpen[0] = false;
|
||||
PUB.flag.set(eVarBool.FG_RDY_CAMERA_L, false, "DISC");
|
||||
}
|
||||
|
||||
private void Ws_ConnectedL(object sender, EventArgs e)
|
||||
{
|
||||
PUB.log.AddAT("카메라L 접속 성공");
|
||||
PUB.log.AddAT("Camera L connection successful");
|
||||
//_isCrevisOpen[0] = true;
|
||||
}
|
||||
private void Ws_DisconnectedR(object sender, EventArgs e)
|
||||
{
|
||||
var ws = sender as WatsonWebsocket.WatsonWsClient;
|
||||
PUB.log.AddAT("카메라R 접속 종료");
|
||||
PUB.log.AddAT("Camera R connection terminated");
|
||||
//_isCrevisOpen[2] = false;
|
||||
PUB.flag.set(eVarBool.FG_RDY_CAMERA_R, false, "DISC");
|
||||
}
|
||||
|
||||
private void Ws_ConnectedR(object sender, EventArgs e)
|
||||
{
|
||||
PUB.log.AddAT("카메라R 접속 성공");
|
||||
PUB.log.AddAT("Camera R connection successful");
|
||||
//_isCrevisOpen[2] = true;
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ namespace Project
|
||||
if(PUB.flag.get(eVarBool.FG_RDY_CAMERA_L)==false)
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_RDY_CAMERA_L, true, "WEBSOCKET");
|
||||
PUB.log.Add("왼쪽카메라 준비 완료");
|
||||
PUB.log.Add("Left camera ready");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -145,7 +145,7 @@ namespace Project
|
||||
if (PUB.flag.get(eVarBool.FG_RDY_CAMERA_R) == false)
|
||||
{
|
||||
PUB.flag.set(eVarBool.FG_RDY_CAMERA_R, true, "WEBSOCKET");
|
||||
PUB.log.Add("오른쪽카메라 준비 완료");
|
||||
PUB.log.Add("Right camera ready");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -158,7 +158,7 @@ namespace Project
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("상태메시지 분석실패: " + ex.Message);
|
||||
PUB.log.AddE("Status message analysis failed: " + ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -166,16 +166,16 @@ namespace Project
|
||||
//처리가능한 상황에서만 큐에 데이터를 넣는다
|
||||
if (idx == 0 && PUB.flag.get(eVarBool.FG_PRC_VISIONL) == false)
|
||||
{
|
||||
PUB.log.AddAT("(좌)측 비젼 검증상태가 아니므로 바코드 데이터 삭제\n" + data);
|
||||
PUB.log.AddAT("Left side vision not in verification state, deleting barcode data\n" + data);
|
||||
return;
|
||||
}
|
||||
if (idx != 0 && PUB.flag.get(eVarBool.FG_PRC_VISIONR) == false)
|
||||
{
|
||||
PUB.log.AddAT("(우)측 비젼 검증상태가 아니므로 바코드 데이터 삭제\n" + data);
|
||||
PUB.log.AddAT("Right side vision not in verification state, deleting barcode data\n" + data);
|
||||
return;
|
||||
}
|
||||
|
||||
PUB.log.Add($"QR검증({(idx == 0 ? "L" : "R")})수신: " + data);
|
||||
PUB.log.Add($"QR verification ({(idx == 0 ? "L" : "R")}) received: " + data);
|
||||
var guid = idx == 0 ? PUB.Result.ItemDataL.guid : PUB.Result.ItemDataR.guid;
|
||||
|
||||
//BarcodeParsing(idx, guid, data, "WS");
|
||||
@@ -190,7 +190,7 @@ namespace Project
|
||||
var Complete = RecvQRProcess(qrDataList, eWorkPort.Left);
|
||||
if (Complete) PUB.flag.set(eVarBool.FG_END_VISIONL, true, "DATA_ARRIVAL");
|
||||
}
|
||||
else PUB.log.AddAT("비젼(L) 이전작업이 완료되어 처리하지 않음");
|
||||
else PUB.log.AddAT("Vision (L) previous task completed, not processing");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -199,7 +199,7 @@ namespace Project
|
||||
var Complete = RecvQRProcess(qrDataList, eWorkPort.Right);
|
||||
if (Complete) PUB.flag.set(eVarBool.FG_END_VISIONR, true, "DATA_ARRIVAL");
|
||||
}
|
||||
else PUB.log.AddAT("비젼(R) 이전작업이 완료되어 처리하지 않음");
|
||||
else PUB.log.AddAT("Vision (R) previous task completed, not processing");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ namespace Project
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE($"전송{idx}실패{ex.Message}");
|
||||
PUB.log.AddE($"Transmission {idx} failed {ex.Message}");
|
||||
sendok = false;
|
||||
}
|
||||
|
||||
@@ -271,13 +271,13 @@ namespace Project
|
||||
|
||||
if(ws != null)
|
||||
{
|
||||
PUB.log.AddAT($"전송{idx} 실패로 소켓을 닫습니다");
|
||||
PUB.log.AddAT($"Closing socket due to transmission {idx} failure");
|
||||
ws.Stop();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE($"소켓{idx} 종료 실패:{ex.Message}");
|
||||
PUB.log.AddE($"Socket {idx} termination failed: {ex.Message}");
|
||||
}
|
||||
}
|
||||
return sendok;
|
||||
@@ -303,7 +303,7 @@ namespace Project
|
||||
|
||||
if (JsonStr.isEmpty())
|
||||
{
|
||||
PUB.log.AddE("바코드 수신값(JSON) 이 없어 진행할 수 없습니다");
|
||||
PUB.log.AddE("Cannot proceed due to missing barcode receive value (JSON)");
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -371,7 +371,7 @@ namespace Project
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.logVision.Add($"카메라(${vIdx}) ProcessBarcodeQue 실패{ex.Message}"); PUB.logVision.Flush();
|
||||
PUB.logVision.Add($"Camera ({vIdx}) ProcessBarcodeQue failed {ex.Message}"); PUB.logVision.Flush();
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
||||
Reference in New Issue
Block a user