Files
ENIG/Cs_HMI/Project/StateMachine/AGVProtocolHandler.cs
2025-04-24 11:51:55 +09:00

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}";
}
}
}