128 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} |