ln.ethercat/ln.ethercat/controller/drives/DriveController.cs

128 lines
3.4 KiB
C#

using System;
using ln.http.api;
namespace ln.ethercat.controller.drives
{
public enum DriveStates {
UNDEFINED,
BOOT,
INIT,
READY,
ERROR,
POWERED,
OPERATIONAL,
}
public enum DriveMode {
UNDEFINED,
TORQUE,
SPEED,
POSITION
}
public abstract class DriveController
{
protected ECMaster ECMaster { get; }
[ESProperty]
public UInt16 Slave { get; }
[ESProperty]
public bool IgnoredByController { get; set; }
public DriveController(ECMaster ecMaster, UInt16 slave)
{
ECMaster = ecMaster;
Slave = slave;
}
public abstract void Initialize();
/* called by controller before control loops and logic */
public abstract void UpdateStates();
/* called by controller after user logic */
public abstract void UpdateDrive();
[ESProperty]
public abstract DriveStates DriveState { get; }
[ESProperty]
public abstract string OEMDriveState { get; }
[ESProperty]
public abstract Int32 ErrorCode { get; }
[ESProperty]
public abstract string ErrorText { get; }
[ESMethod]
public abstract void ClearFault();
[ESProperty]
public abstract DriveMode DriveMode { get; set; }
[ESProperty]
public abstract string OEMDriveMode { get; }
[ESMethod]
public void PowerOn() => Power(true);
[ESMethod]
public void PowerOff() => Power(false);
[ESMethod]
public abstract void Power(bool poweron);
[ESMethod]
public void EnableDrive() => Enable(true);
[ESMethod]
public void DisableDrive() => Enable(false);
[ESMethod]
public abstract void Enable(bool enabled);
[ESProperty]
public abstract double ActualPosition { get; }
[ESProperty]
public abstract double ActualSpeed { get; }
[ESProperty]
public abstract double ActualTorque { get; }
[ESProperty]
public abstract double TargetPosition { get; set; }
[ESProperty]
public abstract double TargetSpeed { get; set; }
[ESProperty]
public abstract double TargetTorque { get; set; }
[ESProperty]
public abstract double ActualLoad { get; }
[ESProperty]
public virtual double TargetValue {
get {
switch (DriveMode)
{
case DriveMode.POSITION:
return TargetPosition;
case DriveMode.SPEED:
return TargetSpeed;
case DriveMode.TORQUE:
return TargetTorque;
default:
return 0;
}
}
set {
switch (DriveMode)
{
case DriveMode.POSITION:
TargetPosition = value;
break;
case DriveMode.SPEED:
TargetSpeed = value;
break;
case DriveMode.TORQUE:
TargetTorque = value;
break;
default:
break;
}
}
}
}
}