Initial commit

This commit is contained in:
ChiKyun Kim
2025-07-17 16:11:46 +09:00
parent 4865711adc
commit 4a1b1924ba
743 changed files with 230954 additions and 0 deletions

View File

@@ -0,0 +1,174 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using AR;
using arDev;
namespace Project
{
public partial class FMain
{
private void Joystick_InputChanged(object sender, arDev.Joystick.JoystickRaw.InputChangedEventHandler e)
{
var keyName = e.input.ToString();
if (e.input == HidSharp.Reports.Usage.Button5) keyName = "L-TRIGGER";
else if (e.input == HidSharp.Reports.Usage.Button6) keyName = "R-TRIGGER";
else if (e.input == HidSharp.Reports.Usage.Button9) keyName = "SELECT";
else if (e.input == HidSharp.Reports.Usage.Button10) keyName = "START";
else if (e.input == HidSharp.Reports.Usage.Button4) keyName = "BUT-Y";
else if (e.input == HidSharp.Reports.Usage.Button1) keyName = "BUT-X";
PUB.log.Add("JOYSTICK", string.Format("[{0}] {1}->{2}", keyName, e.oldValue, e.newValue));
if (PUB.sm.Step != eSMStep.IDLE && PUB.sm.Step != eSMStep.ERROR && PUB.flag.get(eVarBool.FG_MOVE_PICKER) == false && PUB.sm.Step != eSMStep.WAITSTART) return;
if (e.input == HidSharp.Reports.Usage.Button4) //stop
{
if (e.newValue > 0)
{
PUB.log.Add("Joystick Click : Stop");
_BUTTON_STOP();
}
}
else if (e.input == HidSharp.Reports.Usage.Button1) //reset
{
if (e.newValue > 0)
{
PUB.log.Add("Joystick Click : Reset");
_BUTTON_RESET();
}
}
else if (e.input == HidSharp.Reports.Usage.Button9) //select button
{
if (e.newValue == 1)
{
PUB.Result.JoystickAxisGroup += 1;
if (PUB.Result.JoystickAxisGroup > 3) PUB.Result.JoystickAxisGroup = 0;
}
}
else if (e.input == HidSharp.Reports.Usage.Button10) //start button
{
if (e.newValue == 1 && PUB.flag.get(eVarBool.FG_SCR_JOBSELECT) == false)
{
if (PUB.sm.Step >= eSMStep.IDLE)
{
PUB.log.AddI("START BUTTON");
this._BUTTON_START();
}
}
}
else if (e.input == HidSharp.Reports.Usage.Button5) //ltrigger
{
AR.SETTING.Data.Enable_SpeedLimit = true;
}
else if (e.input == HidSharp.Reports.Usage.Button6) //ltrigger
{
AR.SETTING.Data.Enable_SpeedLimit = false;
}
//트리거 L,R을 눌렀을때 홈 가능한 위치라면 홈을 진행한다
if (e.newValue > 0 && (e.input == HidSharp.Reports.Usage.Button5 || e.input == HidSharp.Reports.Usage.Button6))
{
//두개가 동시에 눌렷을때
if (PUB.joystick.Buttons[4] && PUB.joystick.Buttons[5])
{
if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) return;
if (PUB.sm.isRunning == true) return;
if (DIO.IsEmergencyOn() == true) return;
if (PUB.sm.Step == eSMStep.RUN) return;
PUB.log.AddAT("조이스틱으로 홈 초기화작업");
Func_sw_initialize();
}
}
//동작중만 아니면 작동하게한다.
if (PUB.sm.Step != eSMStep.RUN)
{
short axisH = 0;
short axisV = 1;
if (PUB.Result.JoystickAxisGroup == 1) //왼쪽뭉치
{
axisH = 2;
axisV = 3;
}
else if (PUB.Result.JoystickAxisGroup == 2) //오른쪽뭉치
{
axisH = 4;
axisV = 5;
}
else if (PUB.Result.JoystickAxisGroup == 3) //theta, picker-Z
{
axisH = 6;
axisV = 1;
}
//X축으로 이동하는것은 PX,
if (e.input == HidSharp.Reports.Usage.GenericDesktopX)
{
if (e.newValue == 0)
{
//좌
PUB.mot.JOG(axisH, arDev.MOT.MOTION_DIRECTION.Negative, 100, 500, false, false);
PUB.flag.set(eVarBool.FG_JOYSTICK, true, "joystick");
}
else if (e.newValue == 127)
{
//멈춤
PUB.mot.MoveStop("Joystick", axisH);
PUB.flag.set(eVarBool.FG_JOYSTICK, false, "joystick");
}
else if (e.newValue == 255)
{
//우
PUB.mot.JOG(axisH, arDev.MOT.MOTION_DIRECTION.Positive, 100, 500, false, false);
PUB.flag.set(eVarBool.FG_JOYSTICK, true, "joystick");
}
}
else if (e.input == HidSharp.Reports.Usage.GenericDesktopY)
{
if (e.newValue == 0)
{
//상
PUB.mot.JOG(axisV, arDev.MOT.MOTION_DIRECTION.Negative, 100, 500, false, false);
PUB.flag.set(eVarBool.FG_JOYSTICK, true, "joystick");
}
else if (e.newValue == 127)
{
//멈춤
PUB.mot.MoveStop("Joystick", axisV);
PUB.flag.set(eVarBool.FG_JOYSTICK, false, "joystick");
}
else if (e.newValue == 255)
{
//하
PUB.mot.JOG(axisV, arDev.MOT.MOTION_DIRECTION.Positive, 100, 500, false, false);
PUB.flag.set(eVarBool.FG_JOYSTICK, true, "joystick");
}
}
}
}
private void Joystick_Disconnected(object sender, EventArgs e)
{
PUB.log.AddE("조이스틱 연결 종료");
}
private void Joystick_Connected(object sender, EventArgs e)
{
PUB.log.AddI("조이스틱 연결 완료");
}
private void Joystick_Changed(object sender, EventArgs e)
{
PUB.log.AddAT("조이스틱 감지");
}
}
}

View File

@@ -0,0 +1,436 @@
using AR;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public partial class FMain
{
private void Keyence_BarcodeRecv(object sender, Device.KeyenceBarcode.RecvDataEvent e)
{
var dev = sender as Device.KeyenceBarcode;
if (e.RawData.StartsWith("ERROR"))
{
//로그가 너무 많이 쌓이니 해제한다
//Pub.log.AddE("Reader RES : " + resp);
}
else if (e.RawData.StartsWith("OK"))
{
//OK회신
}
else
{
//값은 받았다
if (PUB.sm.Step != eSMStep.HOME_FULL && PUB.sm.Step != eSMStep.HOME_QUICK)
{
// PUB.logKeyence.Add($"{resp.Replace("\n", "").Replace("\r", "")}");
ParseBarcode(e.RawData, dev.Tag.ToString());
}
else
{
//PUB.logKeyence.Add($"Code Ignore by Home Process({resp.Replace("\n", "").Replace("\r", "")})");
}
}
}
bool imageprocess = false;
private void Keyence_ImageRecv(object sender, Device.KeyenceBarcode.RecvImageEvent e)
{
var dev = sender as Device.KeyenceBarcode;
System.Windows.Forms.PictureBox keyenceview;
if (dev.Tag == "R") keyenceview = keyenceviewR;
else keyenceview = keyenceviewF;
if (imageprocess == false)
{
imageprocess = true;
if (PUB.sm.Step >= eSMStep.IDLE && this.IsDisposed == false && this.Disposing == false)
{
//var oimage = this.pictureBox1.Image;
//this.pictureBox1.Image = e.Image;
//if (oimage != null) oimage.Dispose();
if (keyenceview.Image == null)
{
//var newbitmap = new Bitmap(e.Image.Width,e.Image.Height, e.Image.PixelFormat);
var old = keyenceview.Image;
//var newbitmap = PUB.keyence.CreateBitmap(e.Image.Width, e.Image.Height);
//PUB.keyence.UpdateBitmap((Bitmap)e.Image, newbitmap);
keyenceview.Image = e.Image;
if (old != null) old.Dispose();
PUB.log.AddAT("최초 이미지 수신");
}
else
{
//내용ㅁㄴ업데이트하자
var preimage = keyenceview.Image as Bitmap;
keyenceview.Image = e.Image;
if (preimage != null) preimage.Dispose();
//PUB.keyence.UpdateBitmap((Bitmap)e.Image, preimage);
//this.pictureBox2.Invalidate();
}
}
if (this.IsDisposed)
{
dev.Dispose();
}
imageprocess = false;
}
}
double GetAngle(Point pt1, Point pt2)
{
var val = Math.Asin((pt2.Y - pt1.Y) / Math.Sqrt(Math.Pow(pt2.X - pt1.X, 2.0) + Math.Pow(pt2.Y - pt1.Y, 2.0)));
double retval = 0.0;
if ((pt2.X - pt1.X) >= 0 && (pt2.Y - pt1.Y) >= 0)
retval = val;
else if ((pt2.X - pt1.X) < 0 && (pt2.Y - pt1.Y) >= 0)
retval = Math.PI - val;
else if ((pt2.X - pt1.X) < 0 && (pt2.Y - pt1.Y) < 0)
retval = Math.PI - val;
else if ((pt2.X - pt1.X) >= 0 && (pt2.Y - pt1.Y) < 0)
retval = Math.PI * 2 + val;
return retval;
}
private string KeyenceBarcodeDataF = string.Empty;
private string KeyenceBarcodeDataR = string.Empty;
//List<Class.KeyenceBarcodeData> barcodelist = new List<Class.KeyenceBarcodeData>();
void ParseBarcode(string response, string Source)
{
//220901 - 특문있었ㅇ츰
var r1 = (char)0x1D;
var r2 = (char)0x1E;
var r3 = (char)0x04;
var r4 = (char)0x00;
response = response.Replace(r1.ToString(), "");
response = response.Replace(r2.ToString(), "");
response = response.Replace(r3.ToString(), "");
response = response.Replace(r4.ToString(), "");
response = response.Replace("\r", "");
response = response.Replace("\n", "");
response = response.Replace("\0", "");
response = response.RemoveNoneASCII().Trim();
///101409576:522/1171:427/1143:429/1134:524/1155:475/1151\r
var frames = response.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
var itemC = PUB.Result.ItemDataC;
//키엔스바코드패턴검사
var Pattern = @"^(\d+):(\w+.*):(\d+/\d+):(\d+/\d+):(\d+/\d+):(\d+/\d+):(\d+/\d+)";
Pattern = @"^(\d+):(.*):(\d+/\d+):(\d+/\d+):(\d+/\d+):(\d+/\d+):(\d+/\d+)";
var RegX = new System.Text.RegularExpressions.Regex(Pattern);
foreach (var resp in frames)
{
if (RegX.IsMatch(resp.Trim()) == false)
{
//에러처리 221018
if (resp.StartsWith("0:ERROR")) continue;
PUB.log.AddE($"***바코드({Source}) 응답데이터 오류 값(키엔스 전송포맷을 확인하세요) " + resp);
listView21.SetText(9, 3, "ERR");//.setTitle(8, 1, "ERR");
continue;
}
if (AR.VAR.BOOL[eVarBool.JOB_PickON_Retry]) //221110
{
if (PUB.sm.Step == eSMStep.RUN)
PUB.log.AddAT($"피커({Source}) 재시도 중이라 바코드를 무시 합니다:{resp}");
continue;
}
var MatchList = RegX.Matches(resp.Trim());
var buf = MatchList[0].Groups;
//var buf = resp.Split(':'); //데이터는 :로 분리되어있음
//if (buf.Length != 7) //데이터는 총 6개의 데이터로 구성됨
//{
// PUB.log.AddE("***바코드 응답데이터 오류 값(키엔스 전송포맷을 확인하세요) " + resp);
// gridView2.setTitle(8, 1, "ERR");
// continue;
//}
var angle = 0;
Boolean STDData = false; //들어온 자료가 amkor std 바코드여부
var sym = buf[1].Value;
var vData = buf[2].Value.Trim();
if (Source == "R") KeyenceBarcodeDataR = vData;
else KeyenceBarcodeDataF = vData;
//바코드 무시조건 확인
//if (PUB.Result.BCDIgnorePattern != null)
//{
// Boolean ignore = false;
// foreach (var ignoreitem in PUB.Result.BCDIgnorePattern)
// {
// if (ignoreitem.Pattern.isEmpty()) continue;
// RegX = new System.Text.RegularExpressions.Regex(ignoreitem.Pattern);
// if (RegX.IsMatch(vData))
// {
// var igmsg = "무시바코드 Patter: " + ignoreitem.Pattern + ",값=" + vData;
// ignore = true;
// break;
// }
// }
// if (ignore) continue;
//}
var vV1 = buf[3].Value.Split('/');
var vV2 = buf[4].Value.Split('/');
var vV3 = buf[5].Value.Split('/');
var vV4 = buf[6].Value.Split('/');
var vCP = buf[7].Value.Split('/');
var vertex = new Point[4];
vertex[0] = new Point(int.Parse(vV1[0]), int.Parse(vV1[1]));
vertex[1] = new Point(int.Parse(vV2[0]), int.Parse(vV2[1]));
vertex[2] = new Point(int.Parse(vV3[0]), int.Parse(vV3[1]));
vertex[3] = new Point(int.Parse(vV4[0]), int.Parse(vV4[1]));
var vertextCP = new Point(int.Parse(vCP[0]), int.Parse(vCP[1]));
var ReelCP = Point.Empty;
if (itemC.VisionData.ReelSize == eCartSize.Inch13)
ReelCP = AR.SETTING.Data.CenterPosition13;
else
ReelCP = AR.SETTING.Data.CenterPosition7;
//각도를 이곳에서 처리함
angle = (int)(GetAngle(vertex[0], vertex[1]) * 180.0 / Math.PI);
//var atkstdbcd = new StdLabelPrint.CAmkorSTDBarcode(vData);
//if (atkstdbcd.DisposalCode) //사용하지않는 103코드라면 아에 처리안함
//{
// PUB.log.AddE("***폐기된 103 코드형태라 처리하지 않음" + vData);
// continue;
//}
//특정좌표가 기준점으로부터 몇도 틀어져 있는가?
//math.atan2(PY - CY, PX - CX)
//회전후좌표계산
//x = root((px - cx) ^ 2 + (py - cy) ^ 2) * cos@ +cx
//y = root(px ^ 2 + py ^ 2) * sin@ +cy
double theta = 0.0;// Pub.Result.ItemData[1].VisionData.BaseAngle;
if (itemC.VisionData.BaseAngle(out string msg, out Class.KeyenceBarcodeData angbcd))
{
theta = angbcd.Angle;
}
var theta_rad = -theta * Math.PI / 180.0;
var PX = (int)(Math.Cos(theta_rad) * (vertextCP.X - ReelCP.X) - Math.Sin(theta_rad) * (vertextCP.Y - ReelCP.Y)) + ReelCP.X;
var PY = (int)(Math.Sin(theta_rad) * (vertextCP.X - ReelCP.X) + Math.Cos(theta_rad) * (vertextCP.Y - ReelCP.Y)) + ReelCP.Y;
float LabelAngRad = (float)(Math.Atan2(PY - ReelCP.Y, PX - ReelCP.X));// 2; //라벨의 위치값을 찾아서 입력해야한다.
var labelpos = (float)(LabelAngRad * 180.0 / Math.PI);
if (labelpos < 0) labelpos = 360 + labelpos;
byte lp = 0;
if (labelpos >= 15 * 22.5 && labelpos <= 360) lp = 6;
else if (labelpos >= 0 && labelpos <= 22.5) lp = 6;
else if (labelpos >= 1 * 22.5 && labelpos <= 3 * 22.5) lp = 3;
else if (labelpos >= 3 * 22.5 && labelpos <= 5 * 22.5) lp = 2;
else if (labelpos >= 5 * 22.5 && labelpos <= 7 * 22.5) lp = 1;
else if (labelpos >= 7 * 22.5 && labelpos <= 9 * 22.5) lp = 4;
else if (labelpos >= 9 * 22.5 && labelpos <= 11 * 22.5) lp = 7;
else if (labelpos >= 11 * 22.5 && labelpos <= 13 * 22.5) lp = 8;
else if (labelpos >= 13 * 22.5 && labelpos <= 15 * 22.5) lp = 9;
else
{
}
//중첩된 데이터가 있는가?
lock (itemC.VisionData.barcodelist)
{
//키값에 소스위치도 같이 포함한다
var valuekey = Source + vData;
var bcdin = itemC.VisionData.barcodelist.ContainsKey(valuekey);//.Where(t => t.Value.CheckIntersect(vertextCP, vData) == true).FirstOrDefault();
if (bcdin == false)
{
PUB.logKeyence.Add($"{resp.Replace("\n", "").Replace("\r", "")}");
//없다면 추가한다.
var newitem = new Class.KeyenceBarcodeData()
{
AmkorData = new StdLabelPrint.CAmkorSTDBarcode(vData),
CenterPX = vertextCP,
Data = vData,
vertex = vertex,
Angle = angle,
LabelPosition = lp,
barcodeSymbol = sym,
barcodeSource = Source,
};
var addok = itemC.VisionData.barcodelist.TryAdd(valuekey, newitem);
if (addok) PUB.log.Add($"[NEW:{sym}] " + Source + " " + vData);
else PUB.log.AddE($"X-[NEW:{sym}] " + Source + " " + vData);
itemC.VisionData.UpdateBarcodePositionData();
itemC.VisionData.BarcodeTouched = true;
}
else
{
//기존데이터와 좌표가 겹치면 두고 다르면 업데이트한다
var predata = itemC.VisionData.barcodelist[valuekey];
if (predata.CheckIntersect(vertextCP, vData) == false)
{
var newitem = new Class.KeyenceBarcodeData()
{
AmkorData = new StdLabelPrint.CAmkorSTDBarcode(vData),
CenterPX = vertextCP,
Data = vData,
vertex = vertex,
Angle = angle,
LabelPosition = lp,
barcodeSymbol = sym,
barcodeSource = Source,
};
//기존정보를 지우고
PUB.log.Add($"[UPD:{sym}] " + Source + " " + vData);
itemC.VisionData.barcodelist[valuekey] = newitem;
itemC.VisionData.UpdateBarcodePositionData();
itemC.VisionData.BarcodeTouched = true;
}
}
}
listView21.SetText(9, 3, $"{angle} > {theta}");
listView21.SetText(10, 3, itemC.VisionData.QRInputRaw.isEmpty() ? $"DETECT" : $"NONE");
listView21.SetText(13, 2, $"LABEL");
listView21.SetText(13, 3, $"{labelpos:N1}");
}
}
Boolean IsSIDValue(string data)
{
if (data.Length != 9) return false;
decimal a = 0;
if (decimal.TryParse(data, out a) == false) return false;
if (data.StartsWith("10") == false) return false;
return true;
}
Boolean IsDateValue(string date, out string datestr)
{
//821123 과 19821123 의 데이터를 판별한다
datestr = string.Empty;
date = date.Replace("-", "").Replace("/", "");
if (date.Length == 6)
{
var vy = date.Substring(0, 2);
var vm = date.Substring(2, 2);
var vd = date.Substring(4, 2);
if (isDigit(vy) == false || isDigit(vm) == false || isDigit(vd) == false)
return false;
if (vy.toInt() < 0 || vy.toInt() > 29) return false;
if (vm.toInt() < 1 || vm.toInt() > 12) return false;
if (vd.toInt() < 1 || vd.toInt() > 21) return false;
datestr = "20" + vy + vm + vd;
return true;
}
else if (date.Length == 8)
{
var vy = date.Substring(0, 4);
var vm = date.Substring(4, 2);
var vd = date.Substring(6, 2);
if (isDigit(vy) == false || isDigit(vm) == false || isDigit(vd) == false)
return false;
if (vy.toInt() < 2000 || vy.toInt() > 2900) return false;
if (vm.toInt() < 1 || vm.toInt() > 12) return false;
if (vd.toInt() < 1 || vd.toInt() > 31) return false;
datestr = vy + vm + vd;
return true;
}
else return false;
}
Boolean isDigit(string v)
{
int a;
return int.TryParse(v, out a);
}
string cmd = string.Empty;
DateTime LastTrigOnTime = DateTime.Now;
Boolean bTrgOn = false;
//private void Keyence_Trigger(bool bOn)
//{
// if (PUB.flag.get(eVarBool.KEYENCE_TRIGGER) == bOn) return;
// if (bOn)
// cmd = "LON";
// else
// cmd = "LOFF";
// if (bOn) LastTrigOnTime = DateTime.Now;
// string resp = reader.ExecCommand(cmd);
// bTrgOn = bOn;
// PUB.logKeyence.Add("BARCODE", $"트리거 전송({cmd})");
// _isCrevisACQ[1] = bOn;
// //트리거
// PUB.flag.set(eVarBool.KEYENCE_TRIGGER, bOn, "JOB");
//}
private void SaveImage(string filename)
{
var fi = new System.IO.FileInfo(filename);
var ext = fi.Extension;
var nameonly = fi.FullName.Replace(fi.Extension, "");
var fiF = new System.IO.FileInfo(nameonly + "F" + ext);
var fiR = new System.IO.FileInfo(nameonly + "F" + ext);
if (PUB.keyenceF != null)
{
var img = this.keyenceviewF.Image;
if (img == null) return;
using (var newimg = new Bitmap(img.Width, img.Height, img.PixelFormat))
{
PUB.keyenceR.UpdateBitmap((Bitmap)img, newimg);
if (fiF.Directory.Exists == false) fiF.Directory.Create();
if (fiF.Exists) fiF.Delete();
newimg.Save(fiF.FullName);
}
}
if (PUB.keyenceR != null)
{
var img = this.keyenceviewR.Image;
if (img == null) return;
using (var newimg = new Bitmap(img.Width, img.Height, img.PixelFormat))
{
PUB.keyenceR.UpdateBitmap((Bitmap)img, newimg);
if (fiR.Directory.Exists == false) fiR.Directory.Create();
if (fiR.Exists) fiR.Delete();
newimg.Save(fiR.FullName);
}
}
}
}
}

View File

@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AR;
namespace Project
{
public partial class FMain
{
///// <summary>
///// RQ바코드값 사용 여부
///// </summary>
///// <param name="vData"></param>
//Boolean Process_ReturnReel(string vData)
//{
// //120326 - return 수량 관련 (오토에서만 사용한다)
// var qrbuf = vData.Split(';');
// if (vData.EndsWith(";;;") && qrbuf.Length > 4 && VAR.BOOL[eVarBool.Opt_UserQtyRQ]== false)
// {
// var qrsid = qrbuf[0].Trim();
// var qrlot = qrbuf[1].Trim();
// var qrqty = qrbuf[2].Trim();
// if (double.TryParse(qrqty, out double qtynum) && qrsid.Length == 9 && qrsid.StartsWith("10"))
// {
// //수량이 맞고 sid 가 101로 들어있는 경우에만 처리한다
// PUB.log.Add("리턴릴 임시 바코드로 확인되어 데이터를 사용합니다 값:" + vData);
// PUB.log.Add("SID값 변경함 #2 " + PUB.Result.ItemDataC.VisionData.SID + "=>" + qrsid);
// if (PUB.Result.ItemDataC.VisionData.QTY != qrqty)
// {
// PUB.AddSystemLog(AppContext.BaseDirectory, "_KEYENCE", $"리턴릴세미형태에서 QTY값을 적용 함({qrqty})");
// }
// PUB.Result.ItemDataC.VisionData.QTY = qrqty;
// PUB.Result.ItemDataC.VisionData.SID = qrsid;
// PUB.Result.ItemDataC.VisionData.VLOT = qrlot;
// }
// }
// //리턴릴수량추가확인(수동일때에만 사용)
// if (vData.StartsWith("RQ"))
// {
// //리턴릴 바코드는 무조건 적용한다
// var rqqtystr = vData.Substring(2);
// if (int.TryParse(rqqtystr, out int rqqty))
// {
// //시스템로기
// if (PUB.Result.ItemDataC.VisionData.QTY != rqqtystr || PUB.Result.ItemDataC.VisionData.QTYRQ == false)
// {
// PUB.AddSystemLog(AppContext.BaseDirectory, "_KEYENCE", $"리턴릴 QTY값 적용({rqqtystr})");
// //수량
// PUB.Result.ItemDataC.VisionData.QTYRQ = true;
// PUB.Result.ItemDataC.VisionData.QTY = rqqtystr;
// PUB.log.Add("리턴릴 바코드값=" + vData + "을 적용합니다");
// }
// }
// else
// {
// PUB.log.AddE("리턴릴 바코드값=" + vData + "을 적용 실패");
// }
// return true;
// }
// return false;
//}
}
}