buffer in/out 시퀀스 작성중
This commit is contained in:
@@ -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" +
|
||||
|
||||
Reference in New Issue
Block a user