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

View File

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

View File

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