107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace Project.StateMachine
|
|
{
|
|
public class AGVProtocolHandler
|
|
{
|
|
private static AGVProtocolHandler instance;
|
|
private AGVStateManager stateManager;
|
|
|
|
private AGVProtocolHandler()
|
|
{
|
|
stateManager = AGVStateManager.Instance;
|
|
}
|
|
|
|
public static AGVProtocolHandler Instance
|
|
{
|
|
get
|
|
{
|
|
if (instance == null)
|
|
{
|
|
instance = new AGVProtocolHandler();
|
|
}
|
|
return instance;
|
|
}
|
|
}
|
|
|
|
public bool ProcessProtocol(string protocol)
|
|
{
|
|
try
|
|
{
|
|
// 프로토콜 형식: COMMAND:DESTINATION
|
|
var parts = protocol.Split(':');
|
|
if (parts.Length != 2)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
var command = parts[0].ToUpper();
|
|
var destination = parts[1].ToUpper();
|
|
|
|
switch (command)
|
|
{
|
|
case "MOVE_TO":
|
|
return HandleMoveToCommand(destination);
|
|
case "PICKUP":
|
|
return HandlePickupCommand(destination);
|
|
case "DROPOFF":
|
|
return HandleDropoffCommand(destination);
|
|
case "EMERGENCY_STOP":
|
|
return HandleEmergencyStopCommand();
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private bool HandleMoveToCommand(string destination)
|
|
{
|
|
switch (destination)
|
|
{
|
|
case "T1":
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToTops1);
|
|
case "S1":
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToSstron1);
|
|
case "S2":
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToSstron2);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private bool HandlePickupCommand(string destination)
|
|
{
|
|
if (destination != "T1")
|
|
{
|
|
return false;
|
|
}
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.PickupCart);
|
|
}
|
|
|
|
private bool HandleDropoffCommand(string destination)
|
|
{
|
|
if (destination != "S1" && destination != "S2")
|
|
{
|
|
return false;
|
|
}
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.DropoffCart);
|
|
}
|
|
|
|
private bool HandleEmergencyStopCommand()
|
|
{
|
|
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.EmergencyStop);
|
|
}
|
|
|
|
public string GetCurrentStatus()
|
|
{
|
|
var state = stateManager.CurrentState;
|
|
return $"Current State: {state}";
|
|
}
|
|
}
|
|
} |