using RobotNet.VDA5050.Type; using RobotNet10.RobotApp.Interfaces; namespace RobotNet10.RobotApp.Services.Robot.Actions; [RobotAction(ActionType.MUTED_BASE_ON, [ActionScope.INSTANT, ActionScope.NODE, ActionScope.EDGE], [BlockingType.NONE, BlockingType.SOFT, BlockingType.HARD], "Bật chế độ muted base robot.", "Robot đã bật chế độ muted base.")] public class RobotMutedBaseOnAction(IServiceProvider ServiceProvider) : RobotAction(ServiceProvider) { private IPlcController? PlcController; private const int MAX_TIMEOUT = 4000; private int CountTimeout = 0; protected override Task StartAction() { PlcController = ServiceProvider.GetRequiredService(); PlcController.SetMutedBase(true); return base.StartAction(); } protected override Task ExecuteAction() { if(PlcController is not null && PlcController.MutedBase) { SetStatus(ActionEvent.FINISHED); ResultDescription = string.IsNullOrEmpty(ActionAttribute.ResultDescription) ? ResultDescription : ActionAttribute.ResultDescription; } else if (CountTimeout++ > MAX_TIMEOUT / ActionInterval) { SetStatus(ActionEvent.FAILED); ResultDescription = "Timeout action"; } return base.ExecuteAction(); } }