Initial commit
This commit is contained in:
246
Handler/Project/RunCode/StateMachine/_Loop.cs
Normal file
246
Handler/Project/RunCode/StateMachine/_Loop.cs
Normal file
@@ -0,0 +1,246 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using arDev;
|
||||
using AR;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
DateTime lastDeleteTime = DateTime.Now;
|
||||
DateTime HomeSuccessTime;
|
||||
DateTime HomeChkTime;
|
||||
|
||||
|
||||
void SM_Loop(object sender, StateMachine.RunningEventArgs e)
|
||||
{
|
||||
//main loop
|
||||
var step = (eSMStep)e.Step;
|
||||
var obj = this.GetType();
|
||||
|
||||
var stepName = step.ToString();
|
||||
var methodName = $"_STEP_{stepName}";
|
||||
var methodNameStart = $"_STEP_{stepName}_START";
|
||||
var runMethodName = $"_{stepName}";
|
||||
|
||||
var method = obj.GetMethod(methodName);
|
||||
var methodS = obj.GetMethod(methodNameStart);
|
||||
|
||||
switch (step)
|
||||
{
|
||||
case eSMStep.NOTSET:
|
||||
PUB.log.Add("S/M Initialize Start");
|
||||
PUB.sm.SetNewStep(eSMStep.INIT);
|
||||
break;
|
||||
|
||||
case eSMStep.WAITSTART:
|
||||
if (e.isFirst) PUB.log.Add("EVENT WAITSTART");
|
||||
break;
|
||||
|
||||
case eSMStep.PAUSE:
|
||||
case eSMStep.EMERGENCY:
|
||||
case eSMStep.ERROR:
|
||||
if (e.isFirst)
|
||||
_SM_MAIN_ERROR(e.isFirst, (eSMStep)e.Step, e.StepTime);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
if (e.isFirst)
|
||||
{
|
||||
//시작명령은 반드시 구현할 필요가 없다
|
||||
if (methodS != null) methodS.Invoke(this, new object[] { step });
|
||||
else
|
||||
{
|
||||
hmi1.ClearMessage();
|
||||
PUB.log.Add($"정의되지 않은 STEP({step}) 시작");
|
||||
}
|
||||
|
||||
if (step == eSMStep.HOME_QUICK || step == eSMStep.HOME_FULL || PUB.sm.getOldStep == eSMStep.IDLE || PUB.sm.getOldStep == eSMStep.FINISH)
|
||||
{
|
||||
PUB.sm.seq.ClearData(step);
|
||||
PUB.sm.seq.Clear(step);
|
||||
}
|
||||
|
||||
PUB.sm.seq.ClearTime();
|
||||
PUB.sm.RaiseStepStarted();
|
||||
}
|
||||
|
||||
if (PUB.popup.needClose) System.Threading.Thread.Sleep(10);
|
||||
else
|
||||
{
|
||||
//스텝번호값 보정 220313
|
||||
if (PUB.sm.seq.Get(step) < 1) PUB.sm.seq.Update(step, 1);
|
||||
|
||||
if (method == null)
|
||||
{
|
||||
var runMethod = obj.GetMethod(runMethodName);
|
||||
if (runMethod == null)
|
||||
{
|
||||
PUB.log.AddE($"다음 명령이 구현되지 않았습니다 {methodName}/{runMethodName}");
|
||||
PUB.Result.SetResultMessage(eResult.DEVELOP, eECode.NOFUNCTION, eNextStep.ERROR, methodName, runMethodName);
|
||||
}
|
||||
else
|
||||
{
|
||||
var stepName2 = step.ToString();
|
||||
|
||||
//실행코드는 있으니 처리한다.
|
||||
if (PUB.popup.needClose) System.Threading.Thread.Sleep(10); //팝업이 닫힐때까지 기다린다.
|
||||
else
|
||||
{
|
||||
//실행가능여부를 확인 합니다
|
||||
if (CheckSystemRunCondition() == true)
|
||||
{
|
||||
//동작상태가 아니라면 처리하지 않는다.
|
||||
if (PUB.sm.Step == step && PUB.sm.getNewStep == step)
|
||||
{
|
||||
var param = new object[] { step };
|
||||
var rlt = (bool)runMethod.Invoke(this, param);
|
||||
if (rlt == true)
|
||||
{
|
||||
PUB.log.AddI("사용자스텝(자동) 실행완료 대기상태전환");
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var param = new object[] { step, e.StepTime, PUB.sm.seq.GetTime(step) };
|
||||
var rlt = (StepResult)method.Invoke(this, param);
|
||||
if (rlt == StepResult.Complete) PUB.sm.RaiseStepCompleted();
|
||||
else
|
||||
{
|
||||
//사용자 스텝이 설정되어있다면 자동으로 멈춘다 220223
|
||||
if (rlt == StepResult.Error)
|
||||
{
|
||||
if (PUB.sm.getNewStep != eSMStep.ERROR)
|
||||
PUB.sm.SetNewStep(eSMStep.ERROR);
|
||||
}
|
||||
|
||||
if (PUB.flag.get(eVarBool.FG_USERSTEP) == true)
|
||||
{
|
||||
if (PUB.sm.Step >= eSMStep.RUN && PUB.sm.getNewStep >= eSMStep.RUN &&
|
||||
PUB.sm.Step < eSMStep.FINISH && PUB.sm.getNewStep < eSMStep.FINISH)
|
||||
{
|
||||
//유저스텝에 걸려있지 않다면 자동으로 멈춘다
|
||||
if (LockUserL.WaitOne(10) && LockUserR.WaitOne(10))
|
||||
{
|
||||
//Pub.Result.SetResultMessage(eResult.OPERATION, eECode.USER_STOP)
|
||||
PUB.Result.ResultMessage = string.Empty;
|
||||
PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DeleteFile(string path)
|
||||
{
|
||||
var basetime = DateTime.Now.AddDays(-1 * AR.SETTING.Data.AutoDeleteDay);
|
||||
var di = new System.IO.DirectoryInfo(path);
|
||||
if (di.Exists)
|
||||
{
|
||||
var dirYear = di.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
|
||||
if (dirYear != null)
|
||||
{
|
||||
var dirMon = dirYear.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
|
||||
if (dirMon != null)
|
||||
{
|
||||
var dirDay = dirMon.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
|
||||
if (dirDay != null)
|
||||
{
|
||||
var curDay = DateTime.Parse(string.Format("{0}-{1}-{2} 00:00:00", dirYear.ToString(), dirMon.ToString(), dirDay.ToString()));
|
||||
if (curDay < basetime)
|
||||
{
|
||||
var dirLot = dirDay.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
|
||||
if (dirLot != null)
|
||||
{
|
||||
var delfile = dirLot.GetFiles().FirstOrDefault();
|
||||
if (delfile != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
PUB.log.AddI("Remove Fle : " + delfile.FullName + ",time=" + delfile.LastWriteTime.ToString());
|
||||
delfile.Delete();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("deleete error : " + ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string delpath = dirLot.FullName;
|
||||
try
|
||||
{
|
||||
dirLot.Delete(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("remove dir" + ex.Message + "," + delpath);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//이 폴더아래에 다른 폴더가 하나도 없다 즉 비어 있따.
|
||||
string delpath = dirDay.FullName;
|
||||
try
|
||||
{
|
||||
dirDay.Delete(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("remove dir" + ex.Message + "," + delpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//날짜에 해당하는 폴더가 하나도 없다. 월 폴더를 제거한다.
|
||||
string delpath = dirMon.FullName;
|
||||
try
|
||||
{
|
||||
dirMon.Delete(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("remove dir" + ex.Message + "," + delpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//이 달에 해당하는 데이터가 없다. 이 년도를 삭제한다.
|
||||
string delpath = dirYear.FullName;
|
||||
try
|
||||
{
|
||||
dirYear.Delete(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("remove dir" + ex.Message + "," + delpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
//년도별폴더목록을 정리함
|
||||
//가장작은 년도를 기준으로 파일을 검색해서 1개씩 삭제함
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user