Add IsSafeToEnable

master
Harald Wolff-Thobaben 2021-04-30 11:34:46 +02:00
parent 809ed925b1
commit 1c2a3d6daa
3 changed files with 25 additions and 1 deletions

View File

@ -11,6 +11,8 @@ namespace ln.ethercat.controller
public delegate void ControllerLogicDelegate(Controller controller);
public delegate void ControllerStateChangeDelegate(Controller controller, ControllerStates newState);
public delegate bool ControllerIsSafeToEnable(Controller controller);
public enum ControllerStates {
NONE,
NOTREADY,
@ -27,6 +29,8 @@ namespace ln.ethercat.controller
public event ControllerStateChangeDelegate OnStateChanging;
public event ControllerStateChangeDelegate OnStateChanged;
public event ControllerIsSafeToEnable OnIsSafeToEnable;
public ECMaster ECMaster { get; }
[ESProperty]
@ -169,12 +173,25 @@ namespace ln.ethercat.controller
{
if (ControllerState == ControllerStates.READY)
{
ChangeState(ControllerStates.ENABLING);
if (!IsSafeToEnable())
ChangeState(ControllerStates.FAULT);
else
ChangeState(ControllerStates.ENABLING);
} else {
Logging.Log(LogLevel.INFO, "Controller: EnableDrives(): Current ControllerState={0}. Refusing to enable drives", ControllerState.ToString());
}
}
public bool IsSafeToEnable()
{
foreach (ControllerIsSafeToEnable ciste in OnIsSafeToEnable.GetInvocationList())
{
if (!ciste(this))
return false;
}
return true;
}
[ESMethod]
public void ClearFaults()
{

View File

@ -70,6 +70,8 @@ namespace ln.ethercat.controller
protected abstract void Cycle();
protected abstract void Shutdown();
public abstract bool IsSafeToEnable();
private void CycleThread()
{
CycleCounter = 0;

View File

@ -241,5 +241,10 @@ namespace ln.ethercat.controller.remote
stopReceiverThread = true;
serialPort.Close();
}
public override bool IsSafeToEnable()
{
return (MainTarget==0) && (FeedTarget == 0);
}
}
}