|
|
@@ -93,16 +93,29 @@ namespace VehicleControlSystem.Managers
|
|
|
{
|
|
|
while (isThreadAlive)
|
|
|
{
|
|
|
- Thread.Sleep(100);
|
|
|
+ Thread.Sleep(500);
|
|
|
try
|
|
|
{
|
|
|
- Command cmd = null;
|
|
|
- cmd = CommandsList.FirstOrDefault();
|
|
|
- if ( cmd == null )
|
|
|
- continue;
|
|
|
-
|
|
|
- DoWork(cmd);
|
|
|
+ var state = this.autoManager.AutoModeStateProperty;
|
|
|
+ switch (state)
|
|
|
+ {
|
|
|
+ case OHV.Common.Shareds.eAutoModeState.ErrorStop:
|
|
|
+ break;
|
|
|
+ case OHV.Common.Shareds.eAutoModeState.StartRun:
|
|
|
+ break;
|
|
|
+ case OHV.Common.Shareds.eAutoModeState.Run:
|
|
|
+ {
|
|
|
+ Command cmd = SqlManager.Instance.CommandDAL.GetCmd();
|
|
|
+ if (cmd == null) continue;
|
|
|
|
|
|
+ DoWork(cmd);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case OHV.Common.Shareds.eAutoModeState.Stop:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
@@ -115,38 +128,128 @@ namespace VehicleControlSystem.Managers
|
|
|
{
|
|
|
switch (cmd.State)
|
|
|
{
|
|
|
- case OHV.Common.Shareds.eCommandState.init:
|
|
|
- break;
|
|
|
- case OHV.Common.Shareds.eCommandState.MoveToSource:
|
|
|
+ case OHV.Common.Shareds.eCommandState.Queued:
|
|
|
+ if ( SqlManager.Instance.SubCmdDAL.GetCount() <= 0)
|
|
|
+ {
|
|
|
+ switch (cmd.Type)
|
|
|
+ {
|
|
|
+ case OHV.Common.Shareds.eCommandType.Move:
|
|
|
+ case OHV.Common.Shareds.eCommandType.MoveNLoad:
|
|
|
+ case OHV.Common.Shareds.eCommandType.MoveNUnload:
|
|
|
+ CreateSubCommand(cmd, SubCmd.eType.Move);
|
|
|
+ break;
|
|
|
+ case OHV.Common.Shareds.eCommandType.Charging:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SqlManager.Instance.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Assign);
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.Arrived:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.AcquireStart;
|
|
|
+
|
|
|
+ case OHV.Common.Shareds.eCommandState.Assign: //Assign 되면 Vehicle 의 상태가 Busy 면 Processing 으로 전환.
|
|
|
+ {
|
|
|
+ var subCmd = SqlManager.Instance.SubCmdDAL.GetSubCmd();
|
|
|
+ if (subCmd == null) break;
|
|
|
+
|
|
|
+ if (!subCmd.CmdID.Equals(cmd.CommandID))
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ SqlManager.Instance.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Processing);
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.AcquireStart:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.AcquireComplete;
|
|
|
+
|
|
|
+ case OHV.Common.Shareds.eCommandState.Processing:
|
|
|
+ {
|
|
|
+ var subCmd = SqlManager.Instance.SubCmdDAL.GetSubCmd();
|
|
|
+ if (subCmd == null) // Move 명령을 수행 완료 했다고 판단.
|
|
|
+ {
|
|
|
+ if ( cmd.IsSecondCommanded)
|
|
|
+ {
|
|
|
+ SqlManager.Instance.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Complete);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cmd.Type == OHV.Common.Shareds.eCommandType.MoveNLoad )
|
|
|
+ {
|
|
|
+ if (this.CreateSubCommand(cmd, SubCmd.eType.Load))
|
|
|
+ cmd.IsSecondCommanded = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else if(cmd.Type == OHV.Common.Shareds.eCommandType.MoveNUnload)
|
|
|
+ {
|
|
|
+ if (this.CreateSubCommand(cmd, SubCmd.eType.Unload))
|
|
|
+ cmd.IsSecondCommanded = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else if ( cmd.Type == OHV.Common.Shareds.eCommandType.Charging)
|
|
|
+ {
|
|
|
+ if ( this.CreateSubCommand(cmd, SubCmd.eType.Chaging))
|
|
|
+ cmd.IsSecondCommanded = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else //Move Command
|
|
|
+ {
|
|
|
+ SqlManager.Instance.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Complete);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (subCmd.CmdID.Equals(cmd.CommandID)) //진행중 판단
|
|
|
+ break;
|
|
|
+ else //다른 아이디의 일을 하고 있을 경우 가 생길까??
|
|
|
+ { }
|
|
|
+ }
|
|
|
+ SqlManager.Instance.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Complete);
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.AcquireComplete:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.MoveToDest;
|
|
|
+
|
|
|
+ case OHV.Common.Shareds.eCommandState.Complete:
|
|
|
+ SqlManager.Instance.CommandDAL.Delete(cmd);
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.MoveToDest:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.Departed;
|
|
|
+ default:
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.Departed:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.DepositStart;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool CreateSubCommand(Command cmd, SubCmd.eType type)
|
|
|
+ {
|
|
|
+ //명령을 만들기 전에 Vehicle 의 상태를 확인하여 만들자.
|
|
|
+ switch (type)
|
|
|
+ {
|
|
|
+ case SubCmd.eType.Move:
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.DepositStart:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.DepositComplete;
|
|
|
+ case SubCmd.eType.Load:
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.DepositComplete:
|
|
|
- cmd.State = OHV.Common.Shareds.eCommandState.Finished;
|
|
|
+ case SubCmd.eType.Unload:
|
|
|
break;
|
|
|
- case OHV.Common.Shareds.eCommandState.Finished: //command Delete
|
|
|
- cmd.Result = OHV.Common.Shareds.eCommandResult.Completed;
|
|
|
- RemoveCommand(cmd);
|
|
|
+ case SubCmd.eType.Chaging:
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ var sub = new SubCmd
|
|
|
+ {
|
|
|
+ CmdType = SubCmd.eCmdType.Auto,
|
|
|
+ Type = type,
|
|
|
+ TargetID = cmd.TargetID,
|
|
|
+ CmdID = cmd.CommandID,
|
|
|
+ };
|
|
|
+ SqlManager.Instance.SubCmdDAL.Add(sub);
|
|
|
+ logger.I($"{sub.ID} Sub Command Create - Type={sub.Type}, TargetID={sub.TargetID}, CommandID={sub.CmdID}");
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public bool CreateTransferCommand()
|
|
|
+ {
|
|
|
+ Command cmd = new Command
|
|
|
+ {
|
|
|
+ };
|
|
|
+
|
|
|
+ SqlManager.Instance.CommandDAL.Add(cmd);
|
|
|
+ logger.I($"{cmd.CommandID} Command Create - Type={cmd.Type}, TargetID={cmd.TargetID}");
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
#region IDisposable Support
|