Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Update - improved settings loading for devices #6

Draft
wants to merge 17 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions BenchtopBrushless200.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,18 @@ BenchtopBrushless200::Kinesis_SetRotationModes(int mode, int direction) {
static_cast<MOT_MovementDirections>(direction));
}

short
BenchtopBrushless200::Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
STATIC_DLL_FUNC(kinesisDll, BMC_SetHomingParamsBlock, func);
MOT_HomingParameters params;
params.direction = (MOT_TravelDirection)direction;
params.limitSwitch = (MOT_HomeLimitSwitchDirection)limitSwitchMode;
params.offsetDistance = offsetDistance;
params.velocity = velocity;

return func(CSerialNo(), Channel(), &params);
}

short
BenchtopBrushless200::Kinesis_RequestPosition() {
Expand Down
6 changes: 6 additions & 0 deletions BenchtopBrushless200.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ class BenchtopBrushless200 final : public NonStepperMotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) override;
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) {
return 0;
}

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
29 changes: 29 additions & 0 deletions BenchtopBrushless300.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,18 @@ BenchtopBrushless300::Kinesis_SetRotationModes(int mode, int direction) {
static_cast<MOT_MovementDirections>(direction));
}

short
BenchtopBrushless300::Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
STATIC_DLL_FUNC(kinesisDll, BMC_SetHomingParamsBlock, func);
MOT_HomingParameters params;
params.direction = (MOT_TravelDirection)direction;
params.limitSwitch = (MOT_HomeLimitSwitchDirection)limitSwitchMode;
params.offsetDistance = offsetDistance;
params.velocity = velocity;

return func(CSerialNo(), Channel(), &params);
}

short
BenchtopBrushless300::Kinesis_RequestPosition() {
Expand Down Expand Up @@ -206,6 +218,23 @@ BenchtopBrushless300::Kinesis_Home() {
return func(CSerialNo(), Channel());
}

short
BenchtopBrushless300::Kinesis_LoadSettings()
{
STATIC_DLL_FUNC(kinesisDll, BMC_LoadSettings, func);
return func(CSerialNo(), Channel());
}

short
BenchtopBrushless300::Kinesis_GetConnectedActuatorName(std::string* actuator_name)
{
MOT_StageAxisParameters paramsBlock;
STATIC_DLL_FUNC(kinesisDll, BMC_GetStageAxisParamsBlock, func);
auto ret = func(CSerialNo(), Channel(), &paramsBlock);

actuator_name->append(paramsBlock.partNumber);
return ret;
}

short
BenchtopBrushless300::Kinesis_GetRealValueFromDeviceUnit(int deviceUnits,
Expand Down
9 changes: 9 additions & 0 deletions BenchtopBrushless300.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,12 @@ class BenchtopBrushless300 final : public NonStepperMotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) override;
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) {
return 0;
}

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand All @@ -86,6 +92,9 @@ class BenchtopBrushless300 final : public NonStepperMotorDrive {
bool Kinesis_CanHome() override;
short Kinesis_Home() override;

short Kinesis_LoadSettings() override;
short Kinesis_GetConnectedActuatorName(std::string* actuator_name) override;

short Kinesis_GetRealValueFromDeviceUnit(int deviceUnits,
double* realValue, int unitType) override;
short Kinesis_GetDeviceUnitFromRealValue(double realValue,
Expand Down
6 changes: 6 additions & 0 deletions BenchtopDCServo.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ class BenchtopDCServo final : public NonStepperMotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) { return 0; };
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) {
return 0;
};

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
20 changes: 20 additions & 0 deletions BenchtopStepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,26 @@ BenchtopStepper::Kinesis_SetRotationModes(int mode, int direction) {
static_cast<MOT_MovementDirections>(direction));
}

short
BenchtopStepper::Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
STATIC_DLL_FUNC(kinesisDll, SBC_SetHomingParamsBlock, func);
MOT_HomingParameters params;
params.direction = (MOT_TravelDirection)direction;
params.limitSwitch = (MOT_HomeLimitSwitchDirection)limitSwitchMode;
params.offsetDistance = offsetDistance;
params.velocity = velocity;

return func(CSerialNo(), Channel(), &params);
}

short
BenchtopStepper::Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode)
{
STATIC_DLL_FUNC(kinesisDll, SBC_SetLimitSwitchParams, func);
return func(CSerialNo(), Channel(), (MOT_LimitSwitchModes)cwHardwareLimitMode, (MOT_LimitSwitchModes)ccwHardwareLimitMode, cwSoftwareLimitPosition, ccwSoftwareLimitPosition, (MOT_LimitSwitchSWModes)softwareLimitMode);
}

short
BenchtopStepper::Kinesis_RequestPosition() {
Expand Down
4 changes: 4 additions & 0 deletions BenchtopStepper.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ class BenchtopStepper final : public MotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) override;
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) override;

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
4 changes: 4 additions & 0 deletions IntegratedStepper.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ class IntegratedStepper final : public MotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) { return 0; };
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) { return 0; };

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
6 changes: 6 additions & 0 deletions KCubeBrushless.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ class KCubeBrushless final : public NonStepperMotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) { return 0; };
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) {
return 0;
};

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
21 changes: 20 additions & 1 deletion KCubeDCServo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,33 @@ KCubeDCServo::Kinesis_SetRotationModes(int mode, int direction) {
static_cast<MOT_MovementDirections>(direction));
}

short
KCubeDCServo::Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
STATIC_DLL_FUNC(kinesisDll, CC_SetHomingParamsBlock, func);
MOT_HomingParameters params;
params.direction = (MOT_TravelDirection)direction;
params.limitSwitch = (MOT_HomeLimitSwitchDirection)limitSwitchMode;
params.offsetDistance = offsetDistance;
params.velocity = velocity;

return func(CSerialNo(), &params);
}

short
KCubeDCServo::Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode)
{
STATIC_DLL_FUNC(kinesisDll, CC_SetLimitSwitchParams, func);
return func(CSerialNo(), (MOT_LimitSwitchModes)cwHardwareLimitMode, (MOT_LimitSwitchModes)ccwHardwareLimitMode, cwSoftwareLimitPosition, ccwSoftwareLimitPosition, (MOT_LimitSwitchSWModes)softwareLimitMode);
}

short
KCubeDCServo::Kinesis_RequestPosition() {
STATIC_DLL_FUNC(kinesisDll, CC_RequestPosition, func);
return func(CSerialNo());
}


int
KCubeDCServo::Kinesis_GetPosition() {
STATIC_DLL_FUNC(kinesisDll, CC_GetPosition, func);
Expand Down
4 changes: 4 additions & 0 deletions KCubeDCServo.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ class KCubeDCServo final : public NonStepperMotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) override;
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) override;

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
21 changes: 21 additions & 0 deletions KCubeStepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,27 @@ KCubeStepper::Kinesis_SetRotationModes(int mode, int direction) {
static_cast<MOT_MovementDirections>(direction));
}

short
KCubeStepper::Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
STATIC_DLL_FUNC(kinesisDll, SCC_SetHomingParamsBlock, func);
MOT_HomingParameters params;
params.direction = (MOT_TravelDirection)direction;
params.limitSwitch = (MOT_HomeLimitSwitchDirection)limitSwitchMode;
params.offsetDistance = offsetDistance;
params.velocity = velocity;

return func(CSerialNo(), &params);
}

short
KCubeStepper::Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode)
{
STATIC_DLL_FUNC(kinesisDll, SCC_SetLimitSwitchParams, func);
return func(CSerialNo(), (MOT_LimitSwitchModes)cwHardwareLimitMode, (MOT_LimitSwitchModes)ccwHardwareLimitMode, cwSoftwareLimitPosition, ccwSoftwareLimitPosition, (MOT_LimitSwitchSWModes)softwareLimitMode);
}


short
KCubeStepper::Kinesis_RequestPosition() {
Expand Down
4 changes: 4 additions & 0 deletions KCubeStepper.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ class KCubeStepper final : public MotorDrive {
short Kinesis_ResetRotationModes() override;
short Kinesis_SetRotationModes(int mode, int direction) override;

short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) override;
short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) override;

short Kinesis_RequestPosition() override;
int Kinesis_GetPosition() override;
long Kinesis_GetPositionCounter() override;
Expand Down
27 changes: 26 additions & 1 deletion KinesisDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ class KinesisDevice : public SerialNumbered {

std::string GetModelNo();

DWORD GetStatusBits() { return Kinesis_GetStatusBits(); }
int GetStatusBits() { return Kinesis_GetStatusBits(); }

protected: // 1:1 wrappers for Kinesis API functions
virtual short Kinesis_RequestSettings() = 0;
Expand Down Expand Up @@ -263,6 +263,18 @@ class MotorDrive : public KinesisDevice {
return Kinesis_SetRotationModes(mode, direction);
}

short SetHomingParameters(int direction, int limitSwitchMode, int offsetDistance, int velocity)
{
return Kinesis_SetHomingParams(direction, limitSwitchMode, offsetDistance, velocity);
}

short SetLimitSwitchParameters(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode)
{
return Kinesis_SetLimitSwitchParams(ccwHardwareLimitMode, ccwSoftwareLimitPosition,
cwHardwareLimitMode, cwSoftwareLimitPosition, softwareLimitMode);
}

short RequestPosition() { return Kinesis_RequestPosition(); }
int GetPosition() { return Kinesis_GetPosition(); }
long GetPositionCounter() { return Kinesis_GetPositionCounter(); }
Expand All @@ -271,6 +283,9 @@ class MotorDrive : public KinesisDevice {
bool CanHome() { return Kinesis_CanHome(); }
short Home() { return Kinesis_Home(); }

short LoadSettings() { return Kinesis_LoadSettings(); }
short GetConnectedActuatorName(std::string* actuatorName) { return Kinesis_GetConnectedActuatorName(actuatorName); }

// These conversion functions seem to always return an error (tested with
// cage rotator K10CR1; Kinesis 1.14.18)
short DeviceToPhysicalPosition(int deviceUnits, double& physicalUnits) {
Expand All @@ -289,6 +304,13 @@ class MotorDrive : public KinesisDevice {
virtual short Kinesis_ResetRotationModes() = 0;
virtual short Kinesis_SetRotationModes(int mode, int direction) = 0;

virtual short Kinesis_SetHomingParams(int direction, int limitSwitchMode, int offsetDistance, int velocity) = 0;
//virtual short Kinesis_GetHomingParams(int* direction, int* limitSwitchMode, int* offsetDistance, int* velocity) = 0;

virtual short Kinesis_SetLimitSwitchParams(int ccwHardwareLimitMode, int ccwSoftwareLimitPosition,
int cwHardwareLimitMode, int cwSoftwareLimitPosition, int softwareLimitMode) = 0;
//virtual short Kinesis_SetLimitSwitchParams(int* ccwHardwareLimitMode, int* ccwSoftwareLimitPosition, int* cwHardwareLimitMode, int* cwSoftwareLimitPosition, int* softwareLimitMode) = 0;

virtual short Kinesis_RequestPosition() = 0;
virtual int Kinesis_GetPosition() = 0;
virtual long Kinesis_GetPositionCounter() = 0;
Expand All @@ -297,6 +319,9 @@ class MotorDrive : public KinesisDevice {
virtual bool Kinesis_CanHome() = 0;
virtual short Kinesis_Home() = 0;

virtual short Kinesis_LoadSettings() { return 1; };
virtual short Kinesis_GetConnectedActuatorName(std::string* actuator_name) { actuator_name->append("ERROR"); return 1; };

virtual short Kinesis_GetRealValueFromDeviceUnit(int deviceUnits,
double* realValue, int unitType) = 0;
virtual short Kinesis_GetDeviceUnitFromRealValue(double realValue,
Expand Down
Loading