Files
H100PowerManger/src/bck/pPowerManger/upmsg/uDevice_thruster_st.h
T
2026-01-19 21:52:26 +08:00

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