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,510 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AR;
namespace Project.Dialog
{
public partial class fPickerMove : Form
{
public fPickerMove()
{
InitializeComponent();
this.FormClosing += FPickerMove_FormClosing;
}
private void fPickerMove_Load(object sender, EventArgs e)
{
PUB.flag.set(eVarBool.FG_MOVE_PICKER, true, "PICKERMOVE");
timer1.Start();
}
private void FPickerMove_FormClosing(object sender, FormClosingEventArgs e)
{
if (ManPosL)
{
UTIL.MsgE("프린터측 모션이 관리위치에 있습니다\n위치를 복귀 한 후 다시 시도하세요", true);
e.Cancel = true;
return;
}
if (ManPosR)
{
UTIL.MsgE("프린터측 모션이 관리위치에 있습니다\n위치를 복귀 한 후 다시 시도하세요", true);
e.Cancel = true;
return;
}
PUB.flag.set(eVarBool.FG_MOVE_PICKER, false, "PICKERMOVE");
timer1.Stop();
}
Boolean CheckSafty()
{
if (DIO.isSaftyDoorF() == false)
{
UTIL.MsgE("전면 도어가 열려 있습니다");
return false;
}
if (PUB.mot.HasHomeSetOff)
{
UTIL.MsgE("모션의 홈 작업이 완료되지 않았습니다");
return false;
}
return true;
}
private void button3_Click(object sender, EventArgs e)
{
if (CheckSafty() == false) return;
//Z-check
var z = MOT.GetPZPos(ePZLoc.READY);
var zpos = MOT.getPositionOffset(z);
if (zpos >= 0.5)
{
UTIL.MsgE("Z 축을 올리고 다시 시도하세요");
return;
}
//왼쪽프린터 뭉치가 준비위치가 아니면 오류
var m1 = MOT.GetLMPos(eLMLoc.READY);
if (MOT.getPositionMatch(m1) == false)
{
UTIL.MsgE("프린터 부착물 위치가 준비 위치가 아닙니다.\n충돌 할 수 있으므로 이동 할 수 없습니다");
return;
}
//도어가 열려있다면 경고메세지를 표시한다.
if (DIO.isSaftyDoorF(2, true) == false)
{
if (UTIL.MsgQ("도어가 열려있습니다. 모션을 이동 할까요?") != DialogResult.Yes) return;
}
var p1 = MOT.GetPXPos(ePXLoc.PICKOFFL);
MOT.Move(eAxis.PX_PICK, p1.Position, 250, p1.Acc, false, false, false);
DialogResult = DialogResult.OK;
}
private void button1_Click(object sender, EventArgs e)
{
if (CheckSafty() == false) return;
//Z-check
var z = MOT.GetPZPos(ePZLoc.READY);
var zpos = MOT.getPositionOffset(z);
if (zpos >= 0.5)
{
UTIL.MsgE("Z 축을 올리고 다시 시도하세요");
return;
}
//왼쪽프린터 뭉치가 준비위치가 아니면 오류
var m1 = MOT.GetLMPos(eLMLoc.READY);
if (MOT.getPositionMatch(m1) == false)
{
UTIL.MsgE("프린터 부착물 위치가 준비 위치가 아닙니다.\n충돌 할 수 있으므로 이동 할 수 없습니다");
return;
}
//도어가 열려있다면 경고메세지를 표시한다.
if (DIO.isSaftyDoorF(2, true) == false)
{
if (UTIL.MsgQ("도어가 열려있습니다. 모션을 이동 할까요?") != DialogResult.Yes) return;
}
var p1 = MOT.GetPXPos(ePXLoc.READYL);
MOT.Move(eAxis.PX_PICK, p1.Position, 250, p1.Acc, false, false, false);
DialogResult = DialogResult.OK;
}
private void button2_Click(object sender, EventArgs e)
{
if (CheckSafty() == false) return;
//Z-check
var z = MOT.GetPZPos(ePZLoc.READY);
var zpos = MOT.getPositionOffset(z);
if (zpos >= 0.5)
{
UTIL.MsgE("Z 축을 올리고 다시 시도하세요");
return;
}
//도어가 열려있다면 경고메세지를 표시한다.
if (DIO.isSaftyDoorF(1, true) == false)
{
if (UTIL.MsgQ("도어가 열려있습니다. 모션을 이동 할까요?") != DialogResult.Yes) return;
}
var p1 = MOT.GetPXPos(ePXLoc.PICKON);
MOT.Move(eAxis.PX_PICK, p1.Position, 250, p1.Acc, false, false, false);
DialogResult = DialogResult.OK;
}
private void button4_Click(object sender, EventArgs e)
{
if (CheckSafty() == false) return;
//Z-check
var z = MOT.GetPZPos(ePZLoc.READY);
var zpos = MOT.getPositionOffset(z);
if (zpos >= 0.5)
{
UTIL.MsgE("Z 축을 올리고 다시 시도하세요");
return;
}
//오른쪽프린터 뭉치가 준비위치가 아니면 오류
var m1 = MOT.GetRMPos(eRMLoc.READY);
if (MOT.getPositionMatch(m1) == false)
{
UTIL.MsgE("프린터 부착물 위치가 준비 위치가 아닙니다.\n충돌 할 수 있으므로 이동 할 수 없습니다");
return;
}
//도어가 열려있다면 경고메세지를 표시한다.
if (DIO.isSaftyDoorF(0, true) == false)
{
if (UTIL.MsgQ("도어가 열려있습니다. 모션을 이동 할까요?") != DialogResult.Yes) return;
}
var p1 = MOT.GetPXPos(ePXLoc.READYR);
MOT.Move(eAxis.PX_PICK, p1.Position, 250, p1.Acc, false, false, false);
DialogResult = DialogResult.OK;
}
private void button5_Click(object sender, EventArgs e)
{
if (CheckSafty() == false) return;
//Z-check
var z = MOT.GetPZPos(ePZLoc.READY);
var zpos = MOT.getPositionOffset(z);
if (zpos >= 0.5)
{
UTIL.MsgE("Z 축을 올리고 다시 시도하세요");
return;
}
//오른쪽프린터 뭉치가 준비위치가 아니면 오류
var m1 = MOT.GetRMPos(eRMLoc.READY);
if (MOT.getPositionMatch(m1) == false)
{
UTIL.MsgE("프린터 부착물 위치가 준비 위치가 아닙니다.\n충돌 할 수 있으므로 이동 할 수 없습니다");
return;
}
//도어가 열려있다면 경고메세지를 표시한다.
if (DIO.isSaftyDoorF(0, true) == false)
{
if (UTIL.MsgQ("도어가 열려있습니다. 모션을 이동 할까요?") != DialogResult.Yes) return;
}
var p1 = MOT.GetPXPos(ePXLoc.PICKOFFR);
MOT.Move(eAxis.PX_PICK, p1.Position, 250, p1.Acc, false, false, false);
DialogResult = DialogResult.OK;
}
private void button8_Click(object sender, EventArgs e)
{
PUB.mot.MoveStop("pmove", (int)eAxis.PX_PICK);
}
private void button6_Click(object sender, EventArgs e)
{
//jog left
}
private void button7_Click(object sender, EventArgs e)
{
//jog right
}
private void button6_MouseDown(object sender, MouseEventArgs e)
{
//조그시작
var bt = sender as Button;
if (bt.Text.Equals("▼"))
PUB.mot.JOG((int)eAxis.PZ_PICK, arDev.MOT.MOTION_DIRECTION.Positive, AR.SETTING.Data.JOG_Speed, AR.SETTING.Data.JOG_Acc);
else if (bt.Text.Equals("▲"))
PUB.mot.JOG((int)eAxis.PZ_PICK, arDev.MOT.MOTION_DIRECTION.Negative, AR.SETTING.Data.JOG_Speed, AR.SETTING.Data.JOG_Acc);
else if (bt.Text.Equals("◀"))
PUB.mot.JOG((int)eAxis.PX_PICK, arDev.MOT.MOTION_DIRECTION.Negative, AR.SETTING.Data.JOG_Speed, AR.SETTING.Data.JOG_Acc);
else if (bt.Text.Equals("▶"))
PUB.mot.JOG((int)eAxis.PX_PICK, arDev.MOT.MOTION_DIRECTION.Positive, AR.SETTING.Data.JOG_Speed, AR.SETTING.Data.JOG_Acc);
}
private void button6_MouseUp(object sender, MouseEventArgs e)
{
//마우스 놓으면 멈춤
PUB.mot.MoveStop("pmove", (short)eAxis.PX_PICK);
PUB.mot.MoveStop("pmove", (short)eAxis.PZ_PICK);
}
private void button9_Click(object sender, EventArgs e)
{
//왼쪽검증취소
// if (PUB.flag.get(eVarBool.RDY_VISION0) == false) return;
var dlg = UTIL.MsgQ("LEFT-QR코드 검증을 취소할까요?");
if (dlg != DialogResult.Yes) return;
PUB.flag.set(eVarBool.FG_PRC_VISIONL, false, "CANCEL");
PUB.flag.set(eVarBool.FG_PORTL_ITEMON, false, "CANCEL");
//PUB.sm.seq.Clear(eSMStep.RUN_VISION0);
//PUB.sm.seq.UpdateTime(eSMStep.RUN_COM_VS0);
PUB.log.Add(string.Format("LEFT-QR검증({0}) 취소 JGUID={1}", "L", PUB.Result.ItemDataL.guid));
UpdateDatabase(0);
DialogResult = DialogResult.OK;
}
private void button10_Click(object sender, EventArgs e)
{
//왼쪽검증취소
//if (PUB.flag.get(eVarBool.RDY_VISION0) == false) return;
var dlg = UTIL.MsgQ("RIGHT-QR코드 검증을 취소할까요?");
if (dlg != DialogResult.Yes) return;
PUB.flag.set(eVarBool.FG_PRC_VISIONR, false, "CANCEL");
PUB.flag.set(eVarBool.FG_PORTR_ITEMON, false, "CANCEL");
//PUB.sm.seq.Clear(eSMStep.RUN_VISION2);
//PUB.sm.seq.UpdateTime(eSMStep.RUN_COM_VS2);
PUB.log.Add(string.Format("RIGHT-QR검증({0}) 취소 JGUID={1}", "R", PUB.Result.ItemDataR.guid));
UpdateDatabase(eWorkPort.Right);
DialogResult = DialogResult.OK;
}
void UpdateDatabase(eWorkPort vidx)
{
var itemdata = vidx == eWorkPort.Left ? PUB.Result.ItemDataL : PUB.Result.ItemDataR;
//취소상태를 DB에도 남긴다.
using (var db = new EEEntities())
{
var dr = db.Component_Reel_Result.AsNoTracking().Where(t => t.JGUID == itemdata.guid).FirstOrDefault();
if (dr == null)
{
var ermsg = string.Format("다음 guid 를 찾을수 없어 검증취소 를 변경하지 못함 vidx={2},guid={0},sid={1}", itemdata.guid, itemdata.VisionData.SID, vidx);
PUB.AddDebugLog(ermsg, true);
PUB.log.AddE(ermsg);
}
else
{
dr.ANGLE = itemdata.VisionData.ApplyAngle; //210331 - 도중에 사용자 angle 이 있다면 그것이 적용되었음
dr.PRNVALID = false;
dr.REMARK = "검증취소";
db.SaveChanges();
}
}
}
private void button11_Click(object sender, EventArgs e)
{
//관리위치L
MoveMangePos(0);
}
private void button13_Click(object sender, EventArgs e)
{
//관리위치
MoveMangePos(2);
}
Boolean ManPosL = false;
Boolean ManPosR = false;
void MoveMangePos(int vidx)
{
if (PUB.sm.Step != eSMStep.IDLE)
{
UTIL.MsgE("대기상태에서만 사용 가능 합니다");
return;
}
var Xpos = DIO.GetIOInput(eDIName.PICKER_SAFE);// MOT.getPositionMatch(MOT.GetPXPos(ePXLoc.PICKON), 1);
if (Xpos == false)
{
UTIL.MsgE("피커위치가 중앙에서만 사용 가능 합니다");
return;
}
Task.Run(new Action(() =>
{
//Z축을 Ready 위치로 이동한다.
if (vidx == 0)
{
var zPos = MOT.GetLZPos(eLZLoc.READY);
MOT.Move(zPos);
while (MOT.getPositionMatch(zPos) == false)
System.Threading.Thread.Sleep(10);
var mPos = MOT.GetLMPos(eLMLoc.PRINTL07);
MOT.Move(mPos);
while (MOT.getPositionMatch(mPos) == false)
System.Threading.Thread.Sleep(10);
var zPos2 = MOT.GetLZPos(eLZLoc.PICKOFF);
var tPos = (zPos2.Position / 2f);
MOT.Move(eAxis.PL_UPDN, tPos, zPos.Speed, zPos.Acc);
ManPosL = true;
}
else
{
var zPos = MOT.GetRZPos(eRZLoc.READY);
MOT.Move(zPos);
while (MOT.getPositionMatch(zPos) == false)
System.Threading.Thread.Sleep(10);
var mPos = MOT.GetRMPos(eRMLoc.PRINTL07);
MOT.Move(mPos);
while (MOT.getPositionMatch(mPos) == false)
System.Threading.Thread.Sleep(10);
var zPos2 = MOT.GetRZPos(eRZLoc.PICKOFF);
var tPos = (zPos2.Position / 2f);
MOT.Move(eAxis.PR_UPDN, tPos, zPos.Speed, zPos.Acc);
ManPosR = true;
}
}));
}
private void button12_Click(object sender, EventArgs e)
{
var Xpos = DIO.GetIOInput(eDIName.PICKER_SAFE);
if (Xpos == false)
{
UTIL.MsgE("피커위치가 중앙에서만 사용 가능 합니다");
return;
}
//위치복귀
PosRecover(0);
PosRecover(2);
}
void PosRecover(int vidx)
{
Task.Run(new Action(() =>
{
//Z축을 Ready 위치로 이동한다.
if (vidx == 0)
{
var zPos = MOT.GetLZPos(eLZLoc.READY);
MOT.Move(zPos);
while (MOT.getPositionMatch(zPos) == false)
System.Threading.Thread.Sleep(100);
var mPos = MOT.GetLMPos(eLMLoc.READY);
MOT.Move(mPos);
while (MOT.getPositionMatch(mPos) == false)
System.Threading.Thread.Sleep(100);
ManPosL = false;
}
else
{
var zPos = MOT.GetRZPos(eRZLoc.READY);
MOT.Move(zPos);
while (MOT.getPositionMatch(zPos) == false)
System.Threading.Thread.Sleep(100);
var mPos = MOT.GetRMPos(eRMLoc.READY);
MOT.Move(mPos);
while (MOT.getPositionMatch(zPos) == false)
System.Threading.Thread.Sleep(100);
ManPosR = false;
}
}));
}
private void timer1_Tick(object sender, EventArgs e)
{
//X축 피커는 Z축이 원점,limit 에 걸려있거나 home 위치 근처라면 가능한다
if (PUB.mot.IsHomeSet((int)eAxis.PZ_PICK) == false)
{
//Z축 홈이 안잡힌 상태에는 원점 센서 혹은 리밋이 걸린경우 이동가능한다
if (PUB.mot.IsOrg((int)eAxis.PZ_PICK) || PUB.mot.IsLimitN((int)eAxis.PZ_PICK))
button6.Enabled = true;
else
button6.Enabled = false;
}
else
{
//Z축 홈이 잡혀있다면 현재 위치는 ready 위에 있어야 한다.
var PosZ = MOT.GetPZPos(ePZLoc.READY);
var OffZ = MOT.getPositionOffset(PosZ);
button6.Enabled = OffZ < 1;
}
button7.Enabled = button6.Enabled;
AR.VAR.BOOL[eVarBool.Enable_PickerMoveX] = button6.Enabled;
var doorsafef = DIO.isSaftyDoorF();
var allsafe = PUB.mot.HasHomeSetOff == false && doorsafef == true;
this.button11.Enabled = allsafe;
this.button12.Enabled = allsafe;
this.button13.Enabled = allsafe;
//모션홈이 안잡혀있다면 이동 기능은 OFf한다
btl.Enabled = allsafe;
btlw.Enabled = allsafe;
btc.Enabled = allsafe;
btrw.Enabled = allsafe;
btr.Enabled = allsafe;
this.button8.BackColor = DIO.GetIOInput(eDIName.PICKER_SAFE) ? Color.Lime : Color.Tomato;
}
private void button2_Click_1(object sender, EventArgs e)
{
PUB.PrinterL.TestPrint(AR.SETTING.Data.DrawOutbox, "", "");
PUB.log.Add("임시프린트L:" + PUB.PrinterL.LastPrintZPL);
}
private void button4_Click_1(object sender, EventArgs e)
{
PUB.PrinterR.TestPrint(AR.SETTING.Data.DrawOutbox, "", "");
PUB.log.Add("임시프린트R:" + PUB.PrinterR.LastPrintZPL);
}
private void button5_Click_1(object sender, EventArgs e)
{
if (PUB.mot.IsHomeSet((int)eAxis.PZ_PICK) == false)
{
UTIL.MsgE("Z 홈작업이 완료되지 않았습니다 HOME 을 먼저 진행 하세요");
return;
}
if (UTIL.MsgQ("피커 Z축을 좌표:0 으로 이동 할까요?") != DialogResult.Yes) return;
MOT.Move(eAxis.PZ_PICK, 0, 500, 1000, false, false, false);
}
private void button1_Click_1(object sender, EventArgs e)
{
var dlg = UTIL.MsgQ("피커 Z축 홈 검색을 진행 할까요?");
if (dlg != DialogResult.Yes) return;
MOT.Home("관리", eAxis.PZ_PICK, false);
}
private void button3_Click_1(object sender, EventArgs e)
{
}
}
}