125 lines
4.4 KiB
C++
125 lines
4.4 KiB
C++
/*
|
|
{
|
|
"rpm int16": "xxx", // 实际转速,类型:int16_t
|
|
"voltage_uint16": "xxx", // 电压,类型:uint16_t,单位 V
|
|
"current_uint16": "xxx", // 电流,类型:uint16_t,单位 A
|
|
"ctrlTemp_uint16": "xxx", // 控制器温度,类型:uint16_t,单位 °C
|
|
"motorTemp_uint16": "xxx", // 电机温度,类型:uint16_t,单位 °C
|
|
"motorTorque_uint16": "xxx", // 电机扭矩,类型:uint16_t,单位 N・m
|
|
"maxTorque_uint16": "xxx", // 电机最大扭矩,类型:uint16_t,单位 N・m,电机使能时该字段非零,无使能地址报警,含使能整标标识字,00 无故障,按位常量零
|
|
"error_int64": "xxx" // 见表 [1],类型:int64_t
|
|
}
|
|
*/
|
|
#ifndef UDEVICE_THRUSTER_ST_H
|
|
#define UDEVICE_THRUSTER_ST_H
|
|
|
|
#include "../logc/loguru.hpp"
|
|
#include "json/json.h"
|
|
#include <string>
|
|
#include <memory>
|
|
#include <sstream>
|
|
|
|
class uDevice_thruster_st
|
|
{
|
|
private:
|
|
/* data */
|
|
public:
|
|
uDevice_thruster_st(){};
|
|
~uDevice_thruster_st(){};
|
|
|
|
int16_t rpm_int16;
|
|
uint16_t voltage_uint16;
|
|
uint16_t current_uint16;
|
|
uint16_t ctrlTemp_uint16;
|
|
uint16_t motorTemp_uint16;
|
|
uint16_t motorTorque_uint16;
|
|
uint16_t maxTorque_uint16;
|
|
int64_t error_int64;
|
|
|
|
static std::string key;
|
|
|
|
std::string toJsonString()
|
|
{
|
|
Json::Value j;
|
|
j["rpm_int16"] = rpm_int16;
|
|
j["voltage_uint16"] = voltage_uint16;
|
|
j["current_uint16"] = current_uint16;
|
|
j["ctrlTemp_uint16"] = ctrlTemp_uint16;
|
|
j["motorTemp_uint16"] = motorTemp_uint16;
|
|
j["motorTorque_uint16"] = motorTorque_uint16;
|
|
j["maxTorque_uint16"] = maxTorque_uint16;
|
|
j["error_int64"] = static_cast<Json::Int64>(error_int64);
|
|
|
|
Json::StreamWriterBuilder builder;
|
|
builder.settings_["indentation"] = "";
|
|
return Json::writeString(builder, j);
|
|
}
|
|
|
|
bool fromJsonString(std::string jsonString)
|
|
{
|
|
Json::Value root;
|
|
Json::CharReaderBuilder builder;
|
|
JSONCPP_STRING errs;
|
|
|
|
// 解析JSON字符串
|
|
std::istringstream stream(jsonString);
|
|
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
|
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
|
return false;
|
|
}
|
|
|
|
// 提取rpm_int16
|
|
if (root.isMember("rpm_int16") && root["rpm_int16"].isInt()) {
|
|
rpm_int16 = root["rpm_int16"].asInt();
|
|
// LOG_F(INFO, "rpm_int16: %d", rpm_int16);
|
|
}
|
|
|
|
// 提取voltage_uint16
|
|
if (root.isMember("voltage_uint16") && root["voltage_uint16"].isUInt()) {
|
|
voltage_uint16 = root["voltage_uint16"].asUInt();
|
|
// LOG_F(INFO, "voltage_uint16: %u", voltage_uint16);
|
|
}
|
|
|
|
// 提取current_uint16
|
|
if (root.isMember("current_uint16") && root["current_uint16"].isUInt()) {
|
|
current_uint16 = root["current_uint16"].asUInt();
|
|
// LOG_F(INFO, "current_uint16: %u", current_uint16);
|
|
}
|
|
|
|
// 提取ctrlTemp_uint16
|
|
if (root.isMember("ctrlTemp_uint16") && root["ctrlTemp_uint16"].isUInt()) {
|
|
ctrlTemp_uint16 = root["ctrlTemp_uint16"].asUInt();
|
|
// LOG_F(INFO, "ctrlTemp_uint16: %u", ctrlTemp_uint16);
|
|
}
|
|
|
|
// 提取motorTemp_uint16
|
|
if (root.isMember("motorTemp_uint16") && root["motorTemp_uint16"].isUInt()) {
|
|
motorTemp_uint16 = root["motorTemp_uint16"].asUInt();
|
|
// LOG_F(INFO, "motorTemp_uint16: %u", motorTemp_uint16);
|
|
}
|
|
|
|
// 提取motorTorque_uint16
|
|
if (root.isMember("motorTorque_uint16") && root["motorTorque_uint16"].isUInt()) {
|
|
motorTorque_uint16 = root["motorTorque_uint16"].asUInt();
|
|
// LOG_F(INFO, "motorTorque_uint16: %u", motorTorque_uint16);
|
|
}
|
|
|
|
// 提取maxTorque_uint16
|
|
if (root.isMember("maxTorque_uint16") && root["maxTorque_uint16"].isUInt()) {
|
|
maxTorque_uint16 = root["maxTorque_uint16"].asUInt();
|
|
// LOG_F(INFO, "maxTorque_uint16: %u", maxTorque_uint16);
|
|
}
|
|
|
|
// 提取error_int64
|
|
if (root.isMember("error_int64") && root["error_int64"].isInt64()) {
|
|
error_int64 = root["error_int64"].asInt64();
|
|
// LOG_F(INFO, "error_int64: %lld", error_int64);
|
|
}
|
|
|
|
// LOG_F(INFO, "jsonString: %s", jsonString.c_str());
|
|
return true;
|
|
}
|
|
};
|
|
|
|
#endif
|