using System;
using XP.Hardware.MotionControl.Abstractions;
using XP.Hardware.MotionControl.Config;
using XP.Hardware.Plc.Abstractions;
namespace XP.Hardware.MotionControl.Implementations
{
///
/// 基于 PLC 的轴复位实现 | PLC-based Axis Reset Implementation
/// 写入复位信号,读取复位完成信号 | Writes reset signal, reads reset-done signal
///
public class PlcAxisReset : IAxisReset
{
private readonly ISignalDataService _signalService;
private bool _isResetDone;
public PlcAxisReset(ISignalDataService signalService)
{
_signalService = signalService ?? throw new ArgumentNullException(nameof(signalService));
}
///
public bool IsResetDone => _isResetDone;
///
public MotionResult Reset()
{
_signalService.EnqueueWrite(MotionSignalNames.Axis_Reset, true);
return MotionResult.Ok();
}
///
public void UpdateStatus()
{
_isResetDone = _signalService.GetValueByName(MotionSignalNames.Axis_ResetDone);
}
}
}