buffer in/out 시퀀스 작성중

This commit is contained in:
backuppc
2025-12-11 08:22:52 +09:00
parent 9a0a389e07
commit 6024f372d3
23 changed files with 671 additions and 806 deletions

View File

@@ -244,17 +244,17 @@ namespace Project
PUB.sm.SetMsgOptOff(); //모든 메세지출력을 해제한다. (이벤트는 동작함)
PUB.log.Add("State Machine Start");
try
{
PUB.sm = new StateMachine.StateMachine();
PUB.log.Add("StateMachine", $"객체 생성 완료 - Type: {PUB.sm.GetType().FullName}");
// StateMachine 객체의 속성 확인
var smType = PUB.sm.GetType();
var properties = smType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
PUB.log.Add("StateMachine", $"Public Properties: {properties.Length}개");
var methods = smType.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
PUB.log.Add("StateMachine", $"Public Methods: {methods.Length}개");
}
@@ -264,22 +264,22 @@ namespace Project
PUB.log.AddE($"StackTrace: {ex.StackTrace}");
throw;
}
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}");
// 스레드 시작 대기 (최대 3초)
for (int i = 0; i < 30; i++)
{
@@ -290,15 +290,15 @@ namespace Project
break;
}
}
if (!PUB.sm.IsThreadRun)
{
PUB.log.AddE( "경고: 3초 대기 후에도 스레드가 시작되지 않음!");
PUB.log.AddE("경고: 3초 대기 후에도 스레드가 시작되지 않음!");
System.Windows.Forms.MessageBox.Show(
"상태머신 스레드가 시작되지 않았습니다.\n" +
"로그 파일을 확인하세요.",
"오류",
System.Windows.Forms.MessageBoxButtons.OK,
"오류",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
}
@@ -417,12 +417,12 @@ namespace Project
void func_sw_start(bool Prompt = false)
{
if(PUB.sm.Step == eSMStep.SYNC)
if (PUB.sm.Step < eSMStep.IDLE)
{
UTIL.MsgE("초기화 중에는 사용할 수 없습니다\n초기화가 완료 된 후 시도하세요");
return;
}
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false) //자동상태가 아니라면
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false || PUB.sm.Step != eSMStep.RUN) //자동상태가 아니라면
{
PUB.AGV.AGVErrorReset();
if (Prompt)
@@ -507,136 +507,8 @@ namespace Project
PUB.log.Add("사용자 임의 위치 클릭 : " + e.Item.Title);
switch (e.Item.Position)
{
case ePosition.QA:
//아이템을 가지고 있었으니 하차를 해야한다
if (VAR.BOOL[eVarBool.ITEMON])
{
dlg.setMessage("작업 실행\n" +
"(QA) 위치로 하차를 진행 할까요?\n" +
"대상위치 : QA\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
//아이템이 있으면 하차이고 없으면 상차이다
PUB.sm.ClearRunStep();
PUB.Result.TargetPos = ePosition.QA;
PUB.sm.SetNewRunStep(ERunStep.GODOWN);
PUB.sm.SetNewStep(eSMStep.RUN);
}
}
else
{
dlg.setMessage("작업 실행\n" +
"(QA) 위치로 이동을 실행 할까요?\n" +
"대상위치 : QA\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
//아이템이 있으면 하차이고 없으면 상차이다
PUB.sm.ClearRunStep();
PUB.Result.TargetPos = ePosition.QA;
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
PUB.sm.SetNewStep(eSMStep.RUN);
}
}
break;
case ePosition.QC:
//아이템을 가지고 있었으니 하차를 해야한다
if (VAR.BOOL[eVarBool.ITEMON])
{
dlg.setMessage("작업 실행\n" +
"홈(QC) 위치로 하차를 진행 할까요?\n" +
"대상위치 : QC\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
//아이템이 있으면 하차이고 없으면 상차이다
PUB.sm.ClearRunStep();
PUB.Result.TargetPos = ePosition.QC;
PUB.sm.SetNewRunStep(ERunStep.GODOWN);
PUB.sm.SetNewStep(eSMStep.RUN);
}
}
else
{
dlg.setMessage("작업 실행\n" +
"홈(QC) 위치로 이동을 실행 할까요?\n" +
"대상위치 : QC\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
//아이템이 있으면 하차이고 없으면 상차이다
PUB.sm.ClearRunStep();
PUB.Result.TargetPos = ePosition.QC;
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
PUB.sm.SetNewStep(eSMStep.RUN);
}
}
break;
case ePosition.F1: //FVI영역은 모두 상차이동
dlg.setMessage("작업 실행\n" +
"(상차) 작업을 실행 할까요?\n" +
"대상위치 : FVI-1\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
PUB.Result.TargetPos = ePosition.F1;
PUB.sm.SetNewRunStep(ERunStep.GOUP);
PUB.sm.SetNewStep(eSMStep.RUN);
}
break;
case ePosition.F2:
dlg.setMessage("작업 실행\n" +
"(상차) 작업을 실행 할까요?\n" +
"대상위치 : FVI-2\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
PUB.Result.TargetPos = ePosition.F2;
PUB.sm.SetNewRunStep(ERunStep.GOUP);
PUB.sm.SetNewStep(eSMStep.RUN);
}
break;
case ePosition.F3:
dlg.setMessage("작업 실행\n" +
"(상차) 작업을 실행 할까요?\n" +
"대상위치 : FVI-3\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
PUB.Result.TargetPos = ePosition.F3;
PUB.sm.SetNewRunStep(ERunStep.GOUP);
PUB.sm.SetNewStep(eSMStep.RUN);
//VAR.BOOL[eVarBool.FLAG_AUTORUN] = true;
}
break;
case ePosition.F4:
dlg.setMessage("작업 실행\n" +
"(상차) 작업을 실행 할까요?\n" +
"대상위치 : FVI-4\n" +
"현재위치 : " + PUB.Result.CurrentPos.ToString());
if (dlg.ShowDialog() == DialogResult.Yes)
{
PUB.Result.TargetPos = ePosition.F4;
PUB.sm.SetNewRunStep(ERunStep.GOUP);
PUB.sm.SetNewStep(eSMStep.RUN);
}
break;
}
if (dlg != null) dlg.Dispose();
@@ -705,7 +577,6 @@ 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;
}
@@ -969,7 +840,7 @@ namespace Project
private void loadToolStripMenuItem_Click(object sender, EventArgs e)
{
//load
var od = new OpenFileDialog
{
Filter = "AGV Map Files (*.agvmap)|*.agvmap|All Files (*.*)|*.*",
@@ -1086,11 +957,11 @@ namespace Project
sb.AppendLine($"Current Step: {PUB.sm.Step}");
sb.AppendLine($"Current RunStep: {PUB.sm.RunStep}");
sb.AppendLine();
var process = System.Diagnostics.Process.GetCurrentProcess();
sb.AppendLine($"총 스레드 수: {process.Threads.Count}");
sb.AppendLine();
foreach (System.Diagnostics.ProcessThread thread in process.Threads)
{
sb.AppendLine($"Thread {thread.Id}:");
@@ -1102,11 +973,11 @@ namespace Project
}
sb.AppendLine();
}
var dump = sb.ToString();
PUB.log.Add("THREAD_DUMP", dump);
Console.WriteLine(dump);
MessageBox.Show(
$"스레드 덤프 완료\n로그 파일에 저장되었습니다.\n\n" +
//$"마지막 sm_Running: {(DateTime.Now - lastSmRunningTime).TotalSeconds:F1}초 전\n" +