46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
using RobotNet.VDA5050.Type;
|
|
using RobotNet10.RobotApp.Interfaces;
|
|
|
|
namespace RobotNet10.RobotApp.Services.Robot.Actions;
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
[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<IPlcController>();
|
|
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();
|
|
}
|
|
}
|
|
|