using RobotNet.VDA5050.Type; using RobotNet10.RobotApp.Interfaces; namespace RobotNet10.RobotApp.Services.Robot.Actions; /// /// Bật đèn camera (M918 - coil 2966). /// action tương tự các action PLC toggle khác: ghi ON, rồi chờ PLC phản hồi đã ON. /// [RobotAction(ActionType.CAMERA_LIGHT_ON, [ActionScope.INSTANT, ActionScope.NODE, ActionScope.EDGE], [BlockingType.NONE, BlockingType.SOFT, BlockingType.HARD], "Bật đèn camera (M918 Light on).", "Đèn camera đã bật (M918 Light on).")] public class CameraLightOnAction(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.SetLightOn(true); // M918 Light on return base.StartAction(); } protected override Task ExecuteAction() { if (PlcController is not null && PlcController.SetLightOnValue) { 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(); } }