Files
I150/srcs/RobotNet10/RobotApp/RobotNet10.RobotApp/Hubs/PlcControllerHub.cs
2026-07-03 16:37:12 +07:00

85 lines
3.4 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using RobotNet10.RobotApp.Client.Shared.Plc;
using RobotNet10.RobotApp.Interfaces;
namespace RobotNet10.RobotApp.Hubs;
/// <summary>
/// SignalR Hub cho PlcController
/// Cung cấp real-time updates về trạng thái PLC (read-only)
/// </summary>
[Authorize]
public class PlcControllerHub(IPlcController plcController) : Hub
{
/// <summary>
/// Lấy trạng thái hiện tại của PlcController
/// </summary>
public Task<PlcControllerStatusDto> GetStatus()
{
return Task.FromResult(new PlcControllerStatusDto
{
IsReady = plcController.IsReady,
// Operating mode
PeripheralMode = plcController.PeripheralMode.ToString(),
SafetySpeed = plcController.SafetySpeed.ToString(),
// Safety sensors
Emergency = plcController.Emergency,
Bumper = plcController.Bumper,
LidarFrontProtectField = plcController.LidarFrontProtectField,
LidarBackProtectField = plcController.LidarBackProtectField,
LidarFrontTimProtectField = plcController.LidarFrontTimProtectField,
// Lift state
LiftedUp = plcController.LiftedUp,
LiftedDown = plcController.LiftedDown,
LiftHome = plcController.LiftHome,
// Motor state
LeftMotorReady = plcController.LeftMotorReady,
RightMotorReady = plcController.RightMotorReady,
LiftMotorReady = plcController.LiftMotorReady,
// Button state
ButtonStart = plcController.ButtonStart,
ButtonStop = plcController.ButtonStop,
ButtonReset = plcController.ButtonReset,
// Other state
HasLoad = plcController.HasLoad,
EnabledCharger = plcController.EnabledCharger,
Charging = plcController.Charging,
MutedBase = plcController.MutedBase,
MutedLoad = plcController.MutedLoad,
// Determine current stop state
StopState = GetStopState(),
// Write state - các giá trị đã được ghi xuống PLC
CurrentSystemState = plcController.CurrentSystemState.ToString(),
CurrentOperationState = plcController.CurrentOperationState.ToString(),
CurrentRFMode = plcController.CurrentRFMode.ToString(),
SetHorizontalLoadValue = plcController.SetHorizontalLoadValue,
SetMutedBaseValue = plcController.SetMutedBaseValue,
SetMutedLoadValue = plcController.SetMutedLoadValue,
SetEnableChargerValue = plcController.SetEnableChargerValue,
SetHasLoadValue = plcController.SetHasLoadValue,
SetRFEStopValue = plcController.SetRFEStopValue,
SetBatteryLowValue = plcController.SetBatteryLowValue,
SetLightOnValue = plcController.SetLightOnValue
});
}
private string GetStopState()
{
if (plcController.Emergency) return "EMC";
if (plcController.Bumper) return "Bumper";
if (!plcController.LidarFrontProtectField) return "FrontProtective";
if (!plcController.LidarBackProtectField) return "BackProtective";
if (plcController.LidarFrontTimProtectField) return "TimProtective";
return "None";
}
}