에뮬레이터 개발 전.

This commit is contained in:
backuppc
2025-12-12 14:29:06 +09:00
parent ee2a6f04bb
commit 07ddc0425f
35 changed files with 952 additions and 1242 deletions

View File

@@ -66,7 +66,6 @@ namespace Project
this.panTopMenu.MouseDown += LbTitle_MouseDown;
this.panTopMenu.DoubleClick += LbTitle_DoubleClick;
this.ctlPos1.ItemClick += CtlPos1_ItemClick;
this.MouseMove += (s1, e1) => { if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now; };
this.FormClosing += __Closing;
@@ -101,19 +100,6 @@ namespace Project
}
}
/// <summary>
/// 상단 위치 표시기의 대상 위치값을 표시 합니다
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Display_Position_TargetPosSet(object sender, EventArgs e)
{
//대상위치가 설정되었다x
this.ctlPos1.SetTargetPosition(PUB.Result.TargetPos);
this.ctlPos1.Invalidate();
}
private void __Closing(object sender, FormClosingEventArgs e)
{
// 장치 관리 태스크는 _STEP_CLOSING_START에서 종료됨
@@ -176,50 +162,31 @@ namespace Project
private void __Load(object sender, EventArgs e)
{
this.Text = Application.ProductName + " ver " + Application.ProductVersion;
//this.lbTitle.Text = this.Text;
PUB.init(); //public initialize
if (PUB.setting.FullScreen) this.WindowState = FormWindowState.Maximized;
// PUB.log.RaiseMsg += log_RaiseMsg;
PUB.init();
if (PUB.setting.FullScreen)
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
this.Show();
PUB.Result.TargetPosSet += Display_Position_TargetPosSet;
this.ctlPos1.ClearData();
this.ctlPos1.Invalidate();
//lbDM1.Text = "";
//sbBatteryLv.Text = "";
btHome.Text = "홈";
btChargeA.Text = "자동충전";
VAR.STR[eVarString.SWVersion] = Application.ProductVersion;
Application.DoEvents();
//setting dio events
VAR.STR[eVarString.SWVersion] = Application.ProductVersion;
//SETTING H/W
this.IOState.ItemClick += gridView2_ItemClick;
//PUB.flag.ValueChanged += Flag_ValueChagned;
VAR.BOOL.PropertyChanged += BOOL_PropertyChanged;
/////모터용 pLC
//PUB.PLC = new arDev.FakePLC();
//PUB.PLC.ValueChanged += PLC_DioChanged;
//PUB.PLC.FlagChanged += PLC_FlagChanged;
//PUB.PLC.Message += PLC_Message;
//지그비통신
PUB.XBE = new Device.Xbee();
PUB.XBE.MessageReceived += XBE_MessageReceived;
PUB.XBE.ProtocReceived += XBE_ProtocReceived;
//HWState.setTitle(1, 3, Pub.setting.Port_Xbee);
//HWState.setTitle(1, 0, Pub.setting.Address_RFID);
//AGV
PUB.AGV = new arDev.Narumi();
PUB.AGV.Message += AGV_Message;
PUB.AGV.DataReceive += AGV_DataReceive;
//배터리관리시스템
PUB.BMS = new arDev.BMS();
PUB.BMS.BMSDataReceive += Bms_BMSDataReceive;
@@ -266,19 +233,11 @@ namespace Project
}
PUB.sm.StepChanged += sm_StepChanged;
PUB.log.Add("StateMachine", "StepChanged 이벤트 등록 완료");
PUB.sm.Message += sm_Message;
PUB.log.Add("StateMachine", "Message 이벤트 등록 완료");
PUB.sm.Running += sm_Running;
PUB.log.Add("StateMachine", "Running 이벤트 등록 완료");
PUB.sm.SPS += sm_SPS;
PUB.log.Add("StateMachine", "SPS 이벤트 등록 완료");
PUB.sm.Start();
PUB.log.Add("StateMachine", $"Start() 호출 완료 - IsThreadRun:{PUB.sm.IsThreadRun}");
PUB.log.Add("StateMachine", "SM 이벤트 등록 완료");
// 스레드 시작 대기 (최대 3초)
for (int i = 0; i < 30; i++)
@@ -307,10 +266,8 @@ namespace Project
PUB.log.Add("Display", "Display Timer 시작 완료");
this.btDebug.Visible = System.Diagnostics.Debugger.IsAttached || PUB.setting.UseDebugMode;
PUB.log.Add("Program Start");
//수량표시
PUB.counter.PropertyChanged += (s1, e1) => Update_Count();
Update_Count();
@@ -322,11 +279,8 @@ namespace Project
MenuLog.PerformClick();
PUB.AddEEDB("프로그램 시작");
}
#region "Mouse Form Move"
private Boolean fMove = false;
@@ -417,12 +371,12 @@ namespace Project
void func_sw_start(bool Prompt = false)
{
if (PUB.sm.Step < eSMStep.IDLE)
if (PUB.sm.Step == eSMStep.SYNC)
{
UTIL.MsgE("초기화 중에는 사용할 수 없습니다\n초기화가 완료 된 후 시도하세요");
return;
}
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false || PUB.sm.Step != eSMStep.RUN) //자동상태가 아니라면
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false) //자동상태가 아니라면
{
PUB.AGV.AGVErrorReset();
if (Prompt)
@@ -433,9 +387,13 @@ namespace Project
//충전상태확인
if (PUB.CheckManualChargeMode() == false) return;
PUB.popup.needClose = true;
PUB.sm.bPause = false;
//PUB.sm.bPause = false;
//PUB.sm.ClearRunStep();
//PUB.sm.SetNewRunStep(ERunStep.READY);
PUB.sm.SetNewStep(eSMStep.RUN);
PUB.Speak(Lang.);
PUB.Speak(Lang., addlog: false);
PUB.log.Add($"자동전환 이전스텝:{PUB.sm.RunStep},IDX:{PUB.sm.RunStepSeq}]");
}
else
{
@@ -489,31 +447,6 @@ namespace Project
}
private void CtlPos1_ItemClick(object sender, CtlPos.ItemClickEventArgs e)
{
if (VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
{
UTIL.MsgE("수동 충전 상태이므로 진행 할 수 없습니다");
return;
}
if (VAR.BOOL[eVarBool.EMERGENCY] == true)
{
var dlgE = UTIL.MsgQ("비상정지 상태입니다.\n오류를 먼저 소거하고 실행 할까요?");
if (dlgE == DialogResult.Yes) PUB.AGV.AGVErrorReset();
else return;
}
//위치표시 컨트롤에서 아이템을 클릭했다
var dlg = new Dialog.fJobSelect();
PUB.log.Add("사용자 임의 위치 클릭 : " + e.Item.Title);
switch (e.Item.Position)
{
}
if (dlg != null) dlg.Dispose();
}
private void demoRunToolStripMenuItem_Click(object sender, EventArgs e)
{
PUB.Result.JobEndTime = DateTime.Now;
@@ -577,6 +510,7 @@ namespace Project
}
VAR.BOOL[eVarBool.FLAG_SETUP] = false;// VAR.BOOL[eVarBool.FLAG_SETUP] = false;//VAR.BOOL[eVarBool.FLAG_SETUP] = false;
if (popmsg) PUB.popup.Visible = true;
}
@@ -681,7 +615,10 @@ namespace Project
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
//대상노드를 충전기로하고
PUB._virtualAGV.StartNode = null;
PUB._virtualAGV.TargetNode = null;
PUB.sm.SetNewRunStep(ERunStep.GOTO);
PUB.sm.SetNewStep(eSMStep.RUN);
PUB.log.Add("사용자 충전 해제");
}
@@ -720,26 +657,23 @@ namespace Project
}
private void brHome_Click(object sender, EventArgs e)
{
var bCharge = PUB.sm.Step == eSMStep.RUN &&
(PUB.sm.RunStep == ERunStep.GOHOME);
if (PUB.CheckManualChargeMode() == false) return;
if (bCharge == true)
var bHome = PUB.sm.Step == eSMStep.RUN && (PUB.sm.RunStep == ERunStep.GOHOME);
if (bHome == true)
{
var dlg = UTIL.MsgQ("홈(QC) 이동을 취소 할까요?");
var dlg = UTIL.MsgQ("홈 이동을 취소 할까요?");
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
PUB.sm.SetNewStep(eSMStep.IDLE);
PUB.AGV.AGVMoveStop("user home cancle", arDev.Narumi.eStopOpt.Stop);
//PUB.AGV.AddCommand(arDev.Narumi.eAgvCmd.MoveStop);//.Move(Device.PLC.Rundirection.Stop, "사용자 홈 이동 취소");
PUB.log.Add("사용자 홈 이동 취소");
}
}
else
{
var dlg = UTIL.MsgQ("홈(QC) 이동을 실행 할까요?");
var dlg = UTIL.MsgQ("홈 이동을 실행 할까요?");
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
@@ -748,7 +682,6 @@ namespace Project
PUB.log.Add("사용자 홈 이동 실행");
}
}
}
@@ -869,6 +802,7 @@ namespace Project
{
var _mapCanvas = PUB._mapCanvas;
PUB._mapNodes = result.Nodes;
PUB.log.Add($"Set _mapNodes");
// 맵 캔버스에 데이터 설정
_mapCanvas.Nodes = result.Nodes;