You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.8 KiB
C++
109 lines
3.8 KiB
C++
#pragma once
|
|
|
|
#include "nlohmann/json.hpp"
|
|
|
|
#include "GeneralUtils.h"
|
|
|
|
namespace nsMMF
|
|
{
|
|
// !!! Do Not change the order to support MMF use case
|
|
using MotorStatus = struct _MotorStatus
|
|
{
|
|
char MotorName[80]{}; // offset 0 : 80 byte to align to 8 bytes
|
|
|
|
bool NegLimHit{ false }; // 80
|
|
bool PosLimHit{ false }; // 81
|
|
bool Homed{ false }; // 82
|
|
bool ServoReady{ false }; // 83
|
|
bool ServoAlarm{ false }; // 84
|
|
bool InPosition{ false }; // 85
|
|
bool MtrOn{ false }; // 86
|
|
bool MtrCurOnOff{ false }; // 87 // array to store motor On/Off States before maintenance mode
|
|
double MtrPos{ 0. }; // 88
|
|
double PosErr{ 0. }; // 96
|
|
unsigned short MotionStatus{ 0 }; // 104
|
|
unsigned short Status{ 0 }; // 106
|
|
int MtrNo{ 0 }; // 108 // motor no wrt the type of card used
|
|
int MtrType{ 0 }; // 112 // servo or stepper, with or without encoder feedback
|
|
int MtrCurPos{ 0 }; // 116 // array to store motor position before maintenance mode
|
|
|
|
// Assignment operator overload
|
|
_MotorStatus& operator=(const _MotorStatus& rhs)
|
|
{
|
|
//
|
|
strcpy_s(MotorName, rhs.MotorName);
|
|
//
|
|
NegLimHit = rhs.NegLimHit;
|
|
PosLimHit = rhs.PosLimHit;
|
|
Homed = rhs.Homed;
|
|
ServoReady = rhs.ServoReady;
|
|
ServoAlarm = rhs.ServoAlarm;
|
|
InPosition = rhs.InPosition;
|
|
MtrOn = rhs.MtrOn;
|
|
MtrCurOnOff = rhs.MtrCurOnOff;
|
|
MtrPos = rhs.MtrPos;
|
|
PosErr = rhs.PosErr;
|
|
MotionStatus = rhs.MotionStatus;
|
|
Status = rhs.Status;
|
|
MtrNo = rhs.MtrNo;
|
|
MtrType = rhs.MtrType;
|
|
MtrCurPos = rhs.MtrCurPos;
|
|
|
|
return *this;
|
|
}
|
|
};
|
|
}
|
|
|
|
namespace nsMMF
|
|
{
|
|
using namespace nlohmann;
|
|
using namespace nsUtils;
|
|
|
|
void from_json(const json& j, MotorStatus& x);
|
|
void to_json(json& j, const MotorStatus& x);
|
|
|
|
inline void from_json(const json& j, MotorStatus& x)
|
|
{
|
|
std::string name = j.at("MotorName").get<std::string>();
|
|
strcpy_s(x.MotorName, name.c_str());
|
|
|
|
getValue(j, "NegLimHit", x.NegLimHit);
|
|
getValue(j, "PosLimHit", x.PosLimHit);
|
|
getValue(j, "Homed", x.Homed);
|
|
getValue(j, "ServoReady", x.ServoReady);
|
|
getValue(j, "ServoAlarm", x.ServoAlarm);
|
|
getValue(j, "InPosition", x.InPosition);
|
|
getValue(j, "MtrOn", x.MtrOn);
|
|
getValue(j, "MtrCurOnOff", x.MtrCurOnOff);
|
|
getValue(j, "MtrPos", x.MtrPos);
|
|
getValue(j, "PosErr", x.PosErr);
|
|
getValue(j, "MotionStatus", x.MotionStatus);
|
|
getValue(j, "Status", x.Status);
|
|
getValue(j, "MtrNo", x.MtrNo);
|
|
getValue(j, "MtrType", x.MtrType);
|
|
getValue(j, "MtrCurPos", x.MtrCurPos);
|
|
}
|
|
|
|
inline void to_json(json& j, const MotorStatus& x)
|
|
{
|
|
j = nlohmann::json{
|
|
{ "MotorName", x.MotorName },
|
|
{ "NegLimHit", x.NegLimHit },
|
|
{ "PosLimHit", x.PosLimHit },
|
|
{ "Homed", x.Homed },
|
|
{ "ServoReady", x.ServoReady },
|
|
{ "ServoAlarm", x.ServoAlarm },
|
|
{ "InPosition", x.InPosition },
|
|
{ "MtrOn", x.MtrOn },
|
|
{ "MtrCurOnOff", x.MtrCurOnOff },
|
|
{ "MtrPos", x.MtrPos },
|
|
{ "PosErr", x.PosErr },
|
|
{ "MotionStatus", x.MotionStatus },
|
|
{ "Status", x.Status },
|
|
{ "MtrNo", x.MtrNo },
|
|
{ "MtrType", x.MtrType },
|
|
{ "MtrCurPos", x.MtrCurPos }
|
|
};
|
|
}
|
|
|
|
} |