..
This commit is contained in:
107
Cs_HMI/Project/StateMachine/AGVProtocolHandler.cs
Normal file
107
Cs_HMI/Project/StateMachine/AGVProtocolHandler.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user