已完成上位机通信代码结构优化
This commit is contained in:
Binary file not shown.
@@ -85,7 +85,7 @@ SET(DRIVER_SRC
|
||||
|
||||
# ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC})
|
||||
ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC})
|
||||
ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC})
|
||||
# ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC})
|
||||
ADD_LIBRARY(Driver STATIC ${DRIVER_SRC})
|
||||
# ADD_LIBRARY(PowerMange STATIC ${POWERMANGE_SRC})
|
||||
|
||||
|
||||
@@ -402,14 +402,25 @@ void LowerCommManager::coutMsg(const msg_CcuStateFbMsg& p, std::ostream& os){
|
||||
os << "甲醇浓度1 (ch3oh_concentration1): " << p.data.ch3oh_concentration1 * 0.01 << "% LEL\n";
|
||||
os << "甲醇浓度2 (ch3oh_concentration2): " << p.data.ch3oh_concentration2 * 0.01 << "% LEL\n";
|
||||
|
||||
for (int i = 0; i < 18; ++i)
|
||||
for (int i = 0; i < 10; ++i)
|
||||
os << "保留字段 reserved1[" << i << "]: 0x" << std::hex << p.data.reserved1[i] << "\n";
|
||||
|
||||
os << "仪表舱 氧气浓度 (cabin_ox_concentration): " << p.data.cabin_ox_concentration * 0.1 << "%\n";
|
||||
os << "仪表舱 温度 (cabin_temperature): " << static_cast<int16_t> (p.data.cabin_temperature) * 0.1 << "°C\n";
|
||||
os << "仪表舱 湿度 (cabin_humidity): " << p.data.cabin_humidity * 0.1 << "% RH\n";
|
||||
os << "仪表舱 大气压 (cabin_pressure): " << p.data.cabin_pressure * 0.2 << " kPa\n";
|
||||
|
||||
os << "动力舱 氧气浓度 (power_cabin_ox_concentration): " << p.data.power_cabin_ox_concentration * 0.1 << "%\n";
|
||||
os << "动力舱 温度 (power_cabin_temperature): " << static_cast<int16_t> (p.data.power_cabin_temperature) * 0.1 << "°C\n";
|
||||
os << "动力舱 湿度 (power_cabin_humidity): " << p.data.power_cabin_humidity * 0.1 << "% RH\n";
|
||||
os << "动力舱 大气压 (power_cabin_pressure): " << p.data.power_cabin_pressure * 0.2 << " kPa\n";
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
os << "动力电池报警标志 dyn_alarm_flag[" << i << "]: 0x" << std::hex << static_cast<int>(p.data.dyn_alarm_flag[i]) << "\n";
|
||||
for (int i = 0; i < 6; ++i)
|
||||
os << "仪表电池报警标志 ins_alarm_flag[" << i << "]: 0x" << std::hex << static_cast<int>(p.data.ins_alarm_flag[i]) << "\n";
|
||||
|
||||
|
||||
os << "仪表正极/充电继电器状态 (ins_relay_status1): 0x" << std::hex << static_cast<int>(p.data.ins_relay_status1) << "\n";
|
||||
os << "仪表预充/负极继电器状态 (ins_relay_status2): 0x" << static_cast<int>(p.data.ins_relay_status2) << "\n";
|
||||
os << "动力正极/充电继电器状态 (dyn_relay_status1): 0x" << static_cast<int>(p.data.dyn_relay_status1) << "\n";
|
||||
@@ -434,12 +445,12 @@ void LowerCommManager::coutMsg(const msg_CcuStateFbMsg& p, std::ostream& os){
|
||||
os << std::dec;
|
||||
os << "仪表LINK电压: " << p.data.ins_voltage_link * 0.01 << " V\n";
|
||||
os << "仪表PACK电压: " << p.data.ins_voltage_pack * 0.01 << " V\n";
|
||||
os << "仪表电流: " << p.data.ins_current * 0.01 << " A\n";
|
||||
os << "仪表电流: " << static_cast<int16_t> (p.data.ins_current) * 0.01 << " A\n";
|
||||
os << "仪表正端绝缘电阻: " << p.data.ins_resistance_pos << " kΩ\n";
|
||||
os << "仪表负端绝缘电阻: " << p.data.ins_resistance_neg << " kΩ\n";
|
||||
os << "动力LINK电压: " << p.data.dyn_voltage_link * 0.01 << " V\n";
|
||||
os << "动力PACK电压: " << p.data.dyn_voltage_pack * 0.01 << " V\n";
|
||||
os << "动力电流: " << p.data.dyn_current * 0.01 << " A\n";
|
||||
os << "动力电流: " << static_cast<int16_t> (p.data.dyn_current) * 0.05 << " A\n";
|
||||
os << "动力正端绝缘电阻: " << p.data.dyn_resistance_pos << " kΩ\n";
|
||||
os << "动力负端绝缘电阻: " << p.data.dyn_resistance_neg << " kΩ\n";
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ bool PowerManger::Iterate()
|
||||
PowerManagerFsm::dispatch(cycleEvent);
|
||||
faultLevel = getFaultLevel();
|
||||
//打印信息大小
|
||||
cout << sizeof(m_CcuColCmd) << endl;
|
||||
// cout << sizeof(m_CcuColCmd) << endl;
|
||||
if (m_ticker++ % 5 == 0)
|
||||
{
|
||||
m_CcuColCmd.heartbeat++;
|
||||
|
||||
@@ -4,34 +4,36 @@
|
||||
#include "fsm/PowerManagerFsm.hpp"
|
||||
|
||||
UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) {
|
||||
// 初始化消息结构体
|
||||
// uPower_equInsStateMsg m_equInsStateMsg;
|
||||
// uDevice_secdistStateMsg m_secdistStateMsg;
|
||||
// uPower_equStateMsg m_equStateMsg;
|
||||
// uPower_disSysStateMsg m_disSysStateMsg;
|
||||
// uPower_currentStateMsg m_currentStateMsg;
|
||||
// uPower_pmStateMsg m_pmStateMsg;
|
||||
// uPower_fcsStateMsg m_fcsStateMsg;
|
||||
// uPower_liBatStateMsg m_liBatStateMsg;
|
||||
|
||||
// //上位机订阅消息
|
||||
// uDevice_depthMsg m_depthMsg;
|
||||
// uExternComm_setOpConditionMsg m_setOpConditionMsg;
|
||||
// 初始化消息对象
|
||||
m_secdistStateMsg = uDevice_secdistStateMsg();
|
||||
m_setOpConditionMsg = uExternComm_setOpConditionMsg();
|
||||
|
||||
m_depthMsg = uDevice_depthMsg();
|
||||
m_taskStartMsg = uPlan_taskStartMsg();
|
||||
m_equInsStateMsg = uPower_equInsStateMsg();
|
||||
m_equStateMsg = uPower_equStateMsg();
|
||||
m_setPMSysMsg = uExternComm_setPowerSystemMsg();
|
||||
};
|
||||
|
||||
bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) {
|
||||
if(key == DB_TO_PM_MSCMD) {
|
||||
m_pm->m_msCmd = getMasterControlCmd(key, strJson);
|
||||
cout << "m_msCmd: " << endl;
|
||||
// if(key == DB_TO_PM_MSCMD)
|
||||
// {
|
||||
// m_pm->m_msCmd = getMasterControlCmd(key, strJson);
|
||||
// cout << "m_msCmd: " << endl;
|
||||
// MasterCommandEvent event;
|
||||
// PowerManagerFsm::dispatch(event);
|
||||
// return true;
|
||||
// }
|
||||
if (key == m_sysStateMsg.key)
|
||||
{
|
||||
m_pm->m_msCmd = m_sysStateMsg.getMasterControlCmd(key, strJson);
|
||||
MasterCommandEvent event;
|
||||
PowerManagerFsm::dispatch(event);
|
||||
return true;
|
||||
}
|
||||
else if(key == DB_TO_PM_EQUIPMENTCMD) {
|
||||
m_pm->m_MSDriverCmd = getEquipmentCmd(key, strJson);
|
||||
// 设备状态处理
|
||||
else if(key == m_equStateMsg.key_cmd)
|
||||
{
|
||||
m_pm->m_MSDriverCmd = m_equStateMsg.getEquipmentCmd(key, strJson);
|
||||
vector<DriverCommand> devCmdExt = m_pm->m_driver.loadDriverIdFromJson(strJson);
|
||||
if (devCmdExt.empty()) {
|
||||
LOG_F(WARNING, "控制指令");
|
||||
@@ -42,72 +44,86 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson)
|
||||
PowerManagerFsm::dispatch(event);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// else if(key == DB_TO_PM_SUBDISSTATE) {
|
||||
// m_pm->m_subDisSysState = getSubDisState(key, strJson);
|
||||
// else if(key == DB_TO_PM_EQUIPMENTCMD)
|
||||
// {
|
||||
// m_pm->m_MSDriverCmd = getEquipmentCmd(key, strJson);
|
||||
// vector<DriverCommand> devCmdExt = m_pm->m_driver.loadDriverIdFromJson(strJson);
|
||||
// if (devCmdExt.empty()) {
|
||||
// LOG_F(WARNING, "控制指令");
|
||||
// }
|
||||
// else {
|
||||
// for (auto& cmd : devCmdExt) {
|
||||
// DevCmdExt event(cmd.id, cmd.cmd);
|
||||
// PowerManagerFsm::dispatch(event);
|
||||
// }
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
// 次级配电状态处理
|
||||
else if(key == m_secdistStateMsg.key_fb) {
|
||||
else if(key == m_secdistStateMsg.key_fb)
|
||||
{
|
||||
m_secdistStateMsg.parseMsg(strJson, m_pm->m_subDisSysState);
|
||||
//debug 接受到次级配电状态,自动更新到设备状态
|
||||
//TODO:自动更新到设备状态
|
||||
//m_pm->m_subDisSysState = m_pm->m_deviceState;
|
||||
return true;
|
||||
}
|
||||
// else if(key == DB_TO_PM_DEEPTH) {
|
||||
// m_pm->m_depth = getDeepth(key, strJson);
|
||||
// return true;
|
||||
// }
|
||||
// 深度获取
|
||||
else if(key == m_depthMsg.key)
|
||||
{
|
||||
m_pm->m_depth = m_depthMsg.getDepth(key, strJson);
|
||||
return true;
|
||||
}
|
||||
else if(key == DB_TO_PM_MISSION) {
|
||||
m_pm->m_missionState = getMission(key, strJson);
|
||||
else if(key == m_taskStartMsg.key)
|
||||
{
|
||||
m_pm->m_missionState = m_taskStartMsg.getMission(key, strJson);
|
||||
TaskStartEvent event;
|
||||
event.type = m_pm->m_missionState.type;
|
||||
event.enableBowRudder = m_pm->m_missionState.enableBowRudder;
|
||||
event.enableBuoyancyAdjustment = m_pm->m_missionState.enableBuoyancyAdjustment;
|
||||
PowerManagerFsm::dispatch(event);
|
||||
return true;
|
||||
} else if(key == DB_TO_PM_SETOPCONDITION) {
|
||||
m_pm->m_msCmd.workCMD = getSetOpCondition(key, strJson);
|
||||
}
|
||||
else if(key == m_setOpModeMsg.key)
|
||||
{
|
||||
m_pm->m_msCmd.modCMD = m_setOpModeMsg.getSetOpMode(key, strJson);
|
||||
MasterCommandEvent event;
|
||||
PowerManagerFsm::dispatch(event);
|
||||
return true;
|
||||
// } else if(key == DB_TO_PM_SETOPMODE) {
|
||||
// m_pm->m_msCmd.modCMD = getSetOpMode(key, strJson);
|
||||
// MasterCommandEvent event;
|
||||
// PowerManagerFsm::dispatch(event);
|
||||
// return true;
|
||||
} else if(key == m_setOpConditionMsg.key) {
|
||||
} else if(key == m_setOpConditionMsg.key)
|
||||
{
|
||||
m_pm->m_msCmd.workCMD = m_setOpConditionMsg.getSetOpCondition(key, strJson);
|
||||
MasterCommandEvent event;
|
||||
PowerManagerFsm::dispatch(event);
|
||||
} else if(key == DB_TO_PM_SETPMSYS) {
|
||||
m_pm->m_msCmd.powerCMD = getSetPMSys(key, strJson);
|
||||
}
|
||||
else if(key == m_setPMSysMsg.key)
|
||||
{
|
||||
m_pm->m_msCmd.powerCMD = m_setPMSysMsg.getSetPMSys(key, strJson);
|
||||
MasterCommandEvent event;
|
||||
PowerManagerFsm::dispatch(event);
|
||||
return true;
|
||||
} else if(key == DB_TO_PM_SETDEVSWITCH) {
|
||||
}
|
||||
else if(key == m_setDevSwitchMsg.key)
|
||||
{
|
||||
DeviceSwitchCmd cmd;
|
||||
cmd = getSetDevSwitch(key, strJson);
|
||||
cmd = m_setDevSwitchMsg.getSetDevSwitch(key, strJson);
|
||||
if (cmd.id < 0) {
|
||||
LOG_F(WARNING, "parse device switch error:%s", strJson.c_str());
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
DevCmdExt devCmdExt;
|
||||
devCmdExt.id = cmd.id;
|
||||
devCmdExt.cmd = cmd.cmd;
|
||||
PowerManagerFsm::dispatch(devCmdExt);
|
||||
LOG_F(INFO, "set dev switch success");
|
||||
return true;
|
||||
}
|
||||
LOG_F(INFO, "set dev switch success");
|
||||
return true;
|
||||
} else if(key == DB_TO_PM_TASKSTOP) {
|
||||
bool stop = getTaskStop(key, strJson);
|
||||
}
|
||||
else if(key == m_taskStopMsg.key)
|
||||
{
|
||||
bool stop = m_taskStopMsg.getTaskStop(key, strJson);
|
||||
if (stop) {
|
||||
LOG_F(INFO, "task stop success");
|
||||
return true;
|
||||
@@ -116,45 +132,45 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson)
|
||||
LOG_F(WARNING, "task stop error:%s", strJson.c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
LOG_F(WARNING, "Unknown key: %s", key.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
const MSControlCmd UpperCommManager::getMasterControlCmd(const std::string& key, const std::string& msg)
|
||||
{
|
||||
MSControlCmd cmd;
|
||||
if (parseControlCmdFromJson(cmd, msg)) {
|
||||
// const MSControlCmd UpperCommManager::getMasterControlCmd(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// MSControlCmd cmd;
|
||||
// if (parseControlCmdFromJson(cmd, msg)) {
|
||||
|
||||
return cmd;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << MOOS::ConsoleColours::Red << "parse control cmd error:" << msg
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
}
|
||||
// return cmd;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// cout << MOOS::ConsoleColours::Red << "parse control cmd error:" << msg
|
||||
// << MOOS::ConsoleColours::reset << endl;
|
||||
// }
|
||||
// }
|
||||
|
||||
const DriverTable UpperCommManager::getEquipmentCmd(const std::string& key, const std::string& msg)
|
||||
{
|
||||
DriverTable cmd;
|
||||
if (m_pm->m_driver.loadDriverTableFromJson(msg, cmd) < 0) {
|
||||
cout << MOOS::ConsoleColours::Red << "get equipment cmd error:" << msg
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
LOG_F(WARNING, "get equipment cmd error:%s", msg.c_str());
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
// const DriverTable UpperCommManager::getEquipmentCmd(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// DriverTable cmd;
|
||||
// if (m_pm->m_driver.loadDriverTableFromJson(msg, cmd) < 0) {
|
||||
// cout << MOOS::ConsoleColours::Red << "get equipment cmd error:" << msg
|
||||
// << MOOS::ConsoleColours::reset << endl;
|
||||
// LOG_F(WARNING, "get equipment cmd error:%s", msg.c_str());
|
||||
// }
|
||||
// return cmd;
|
||||
// }
|
||||
|
||||
const DriverTable UpperCommManager::getSubDisState(const std::string& key, const std::string& msg)
|
||||
{
|
||||
DriverTable state;
|
||||
if (m_pm->m_driver.loadDriverTableFromJson(msg, state) < 0) {
|
||||
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << msg
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
LOG_F(WARNING, "get sub dis state error:%s", msg.c_str());
|
||||
}
|
||||
}
|
||||
// const DriverTable UpperCommManager::getSubDisState(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// DriverTable state;
|
||||
// if (m_pm->m_driver.loadDriverTableFromJson(msg, state) < 0) {
|
||||
// cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << msg
|
||||
// << MOOS::ConsoleColours::reset << endl;
|
||||
// LOG_F(WARNING, "get sub dis state error:%s", msg.c_str());
|
||||
// }
|
||||
// }
|
||||
|
||||
// const int UpperCommManager::getDeepth(const std::string& key, const std::string& msg){
|
||||
// int deepth;
|
||||
@@ -188,160 +204,160 @@ const DriverTable UpperCommManager::getSubDisState(const std::string& key, const
|
||||
// return deepth;
|
||||
// }
|
||||
|
||||
MissionState UpperCommManager::getMission(const std::string& key, const std::string& msg) {
|
||||
MissionState mission;
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
// MissionState UpperCommManager::getMission(const std::string& key, const std::string& msg) {
|
||||
// MissionState mission;
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return mission;
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
// return mission;
|
||||
// }
|
||||
|
||||
// 提取taskType_str
|
||||
if (root.isMember("taskType_str") && root["taskType_str"].isString()) {
|
||||
mission.type = TaskType::fromString(root["taskType_str"].asString());
|
||||
LOG_F(INFO, "taskType: %d", mission.type, root["taskType_str"].asString());
|
||||
}
|
||||
// // 提取taskType_str
|
||||
// if (root.isMember("taskType_str") && root["taskType_str"].isString()) {
|
||||
// mission.type = TaskType::fromString(root["taskType_str"].asString());
|
||||
// LOG_F(INFO, "taskType: %d", mission.type, root["taskType_str"].asString());
|
||||
// }
|
||||
|
||||
// 提取balanceEnabled_bool
|
||||
if (root.isMember("balanceEnabled_bool") && root["balanceEnabled_bool"].isBool()) {
|
||||
mission.enableBuoyancyAdjustment = root["balanceEnabled_bool"].asBool();
|
||||
LOG_F(INFO, "balanceEnabled_bool: %d", mission.enableBuoyancyAdjustment);
|
||||
}
|
||||
// // 提取balanceEnabled_bool
|
||||
// if (root.isMember("balanceEnabled_bool") && root["balanceEnabled_bool"].isBool()) {
|
||||
// mission.enableBuoyancyAdjustment = root["balanceEnabled_bool"].asBool();
|
||||
// LOG_F(INFO, "balanceEnabled_bool: %d", mission.enableBuoyancyAdjustment);
|
||||
// }
|
||||
|
||||
// 提取bowRudderUnfold_bool
|
||||
if (root.isMember("bowRudderUnfold_bool") && root["bowRudderUnfold_bool"].isBool()) {
|
||||
mission.enableBowRudder = root["bowRudderUnfold_bool"].asBool();
|
||||
LOG_F(INFO, "bowRudderUnfold_bool: %d", mission.enableBowRudder);
|
||||
}
|
||||
// // 提取bowRudderUnfold_bool
|
||||
// if (root.isMember("bowRudderUnfold_bool") && root["bowRudderUnfold_bool"].isBool()) {
|
||||
// mission.enableBowRudder = root["bowRudderUnfold_bool"].asBool();
|
||||
// LOG_F(INFO, "bowRudderUnfold_bool: %d", mission.enableBowRudder);
|
||||
// }
|
||||
|
||||
|
||||
return mission;
|
||||
}
|
||||
// return mission;
|
||||
// }
|
||||
|
||||
int UpperCommManager::getSetOpCondition(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
// int UpperCommManager::getSetOpCondition(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return -1;
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// 检查并读取操作条件
|
||||
if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
|
||||
return root["state_uint8"].asUInt();
|
||||
LOG_F(INFO, "上位机指令:opCondition: %d", root["state_uint8"].asUInt());
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: opCondition");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
// // 检查并读取操作条件
|
||||
// if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
|
||||
// return root["state_uint8"].asUInt();
|
||||
// LOG_F(INFO, "上位机指令:opCondition: %d", root["state_uint8"].asUInt());
|
||||
// } else {
|
||||
// LOG_F(WARNING, "缺少或类型不匹配: opCondition");
|
||||
// return -1;
|
||||
// }
|
||||
// }
|
||||
|
||||
int UpperCommManager::getSetOpMode(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
// int UpperCommManager::getSetOpMode(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return -1;
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// 检查并读取操作模式
|
||||
if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
|
||||
return root["state_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: opMode");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
// // 检查并读取操作模式
|
||||
// if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
|
||||
// return root["state_uint8"].asUInt();
|
||||
// } else {
|
||||
// LOG_F(WARNING, "缺少或类型不匹配: opMode");
|
||||
// return -1;
|
||||
// }
|
||||
// }
|
||||
|
||||
int UpperCommManager::getSetPMSys(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
// int UpperCommManager::getSetPMSys(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
return -1;
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// 检查并读取电源系统设置
|
||||
if (root.isMember("powerCmd_uint8") && root["powerCmd_uint8"].isUInt()) {
|
||||
return root["powerCmd_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: powerCmd_uint8");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
// // 检查并读取电源系统设置
|
||||
// if (root.isMember("powerCmd_uint8") && root["powerCmd_uint8"].isUInt()) {
|
||||
// return root["powerCmd_uint8"].asUInt();
|
||||
// } else {
|
||||
// LOG_F(WARNING, "缺少或类型不匹配: powerCmd_uint8");
|
||||
// return -1;
|
||||
// }
|
||||
// }
|
||||
|
||||
DeviceSwitchCmd UpperCommManager::getSetDevSwitch(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
DeviceSwitchCmd cmd;
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
cmd.id = -1;
|
||||
}
|
||||
// DeviceSwitchCmd UpperCommManager::getSetDevSwitch(const std::string& key, const std::string& msg)
|
||||
// {
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
// DeviceSwitchCmd cmd;
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
// cmd.id = -1;
|
||||
// }
|
||||
|
||||
// 检查并读取设备开关状态
|
||||
if (root.isMember("id_uint8") && root["id_uint8"].isUInt()) {
|
||||
cmd.id = root["id_uint8"].asUInt();
|
||||
} else {
|
||||
cmd.id = -1;
|
||||
LOG_F(WARNING, "缺少或类型不匹配: id_uint8");
|
||||
}
|
||||
if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
|
||||
cmd.cmd = root["cmd_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: state_bool");
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
// // 检查并读取设备开关状态
|
||||
// if (root.isMember("id_uint8") && root["id_uint8"].isUInt()) {
|
||||
// cmd.id = root["id_uint8"].asUInt();
|
||||
// } else {
|
||||
// cmd.id = -1;
|
||||
// LOG_F(WARNING, "缺少或类型不匹配: id_uint8");
|
||||
// }
|
||||
// if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
|
||||
// cmd.cmd = root["cmd_uint8"].asUInt();
|
||||
// } else {
|
||||
// LOG_F(WARNING, "缺少或类型不匹配: state_bool");
|
||||
// }
|
||||
// return cmd;
|
||||
// }
|
||||
|
||||
bool UpperCommManager::getTaskStop(const std::string& key, const std::string& msg) {
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
// bool UpperCommManager::getTaskStop(const std::string& key, const std::string& msg) {
|
||||
// Json::Value root;
|
||||
// Json::CharReaderBuilder builder;
|
||||
// JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return false;
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream stream(msg);
|
||||
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 检查op_int32字段
|
||||
if (root.isMember("op_int32") && root["op_int32"].isInt()) {
|
||||
return root["op_int32"].asInt() == 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// // 检查op_int32字段
|
||||
// if (root.isMember("op_int32") && root["op_int32"].isInt()) {
|
||||
// return root["op_int32"].asInt() == 1;
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
|
||||
const std::string UpperCommManager::getSubDisCmd(DriverTable& driver)
|
||||
{
|
||||
return m_pm->m_driver.saveDriverTableToJson(&driver);
|
||||
}
|
||||
// const std::string UpperCommManager::getSubDisCmd(DriverTable& driver)
|
||||
// {
|
||||
// return m_pm->m_driver.saveDriverTableToJson(&driver);
|
||||
// }
|
||||
|
||||
void UpperCommManager::processPeriodicTasks() {
|
||||
buildSystemReport();
|
||||
@@ -352,54 +368,56 @@ void UpperCommManager::processPeriodicTasks() {
|
||||
//发送次级配电指令 修改后的代码
|
||||
// strJson = getSubDisCmd(m_pm->m_subDisSysCmd);
|
||||
strJson = m_secdistStateMsg.buildMsg(m_pm->m_subDisSysCmd);
|
||||
cout << (int)m_pm->m_subDisSysCmd.depth1 << endl;
|
||||
|
||||
m_pm->sendNotification(m_secdistStateMsg.key_cmd, strJson);
|
||||
//发送仪表电状态
|
||||
m_pm->sendNotification(m_equInsStateMsg.key,m_equInsStateMsg.buildMsg(m_pm->m_subDisSysState));
|
||||
}
|
||||
bool UpperCommManager::parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson)
|
||||
{
|
||||
Json::CharReaderBuilder builder;
|
||||
Json::Value root;
|
||||
std::string errs;
|
||||
// bool UpperCommManager::parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson)
|
||||
// {
|
||||
// Json::CharReaderBuilder builder;
|
||||
// Json::Value root;
|
||||
// std::string errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream s(strJson);
|
||||
if (!Json::parseFromStream(builder, s, &root, &errs))
|
||||
{
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
return false; // 解析失败
|
||||
}
|
||||
if (root.isMember("powerCMD") && root["powerCMD"].isUInt())
|
||||
{
|
||||
cmd.powerCMD = root["powerCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: powerCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
// // 解析JSON字符串
|
||||
// std::istringstream s(strJson);
|
||||
// if (!Json::parseFromStream(builder, s, &root, &errs))
|
||||
// {
|
||||
// std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
// return false; // 解析失败
|
||||
// }
|
||||
// if (root.isMember("powerCMD") && root["powerCMD"].isUInt())
|
||||
// {
|
||||
// cmd.powerCMD = root["powerCMD"].asUInt();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// std::cerr << "缺少或类型不匹配: powerCMD" << std::endl;
|
||||
// return false; // 缺少或类型不匹配
|
||||
// }
|
||||
|
||||
if (root.isMember("modCMD") && root["modCMD"].isUInt())
|
||||
{
|
||||
cmd.modCMD = root["modCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: modCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
// if (root.isMember("modCMD") && root["modCMD"].isUInt())
|
||||
// {
|
||||
// cmd.modCMD = root["modCMD"].asUInt();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// std::cerr << "缺少或类型不匹配: modCMD" << std::endl;
|
||||
// return false; // 缺少或类型不匹配
|
||||
// }
|
||||
|
||||
if (root.isMember("workCMD") && root["workCMD"].isUInt())
|
||||
{
|
||||
cmd.workCMD = root["workCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: workCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
return true; // 成功
|
||||
}
|
||||
// if (root.isMember("workCMD") && root["workCMD"].isUInt())
|
||||
// {
|
||||
// cmd.workCMD = root["workCMD"].asUInt();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// std::cerr << "缺少或类型不匹配: workCMD" << std::endl;
|
||||
// return false; // 缺少或类型不匹配
|
||||
// }
|
||||
// return true; // 成功
|
||||
// }
|
||||
void UpperCommManager::buildSystemReport() {
|
||||
m_pmStateMsg.state.workCondition = m_pm->workCondition;
|
||||
m_pmStateMsg.state.currentMod = m_pm->currentMod;
|
||||
@@ -417,16 +435,16 @@ void UpperCommManager::buildSystemReport() {
|
||||
m_pm->sendNotification(m_disSysStateMsg.key, m_disSysStateMsg.buildMsg(m_pm->m_currentDisBreakerState));
|
||||
m_pm->sendNotification(m_currentStateMsg.key, m_currentStateMsg.buildMsg(m_pm->m_pmCurrentState));
|
||||
}
|
||||
bool UpperCommManager::saveStringToJsonFile(const string &strJson, const string &filePath)
|
||||
{
|
||||
std::ofstream file(filePath, std::ios::trunc);
|
||||
if (file.is_open()) {
|
||||
file << strJson;
|
||||
file.close();
|
||||
// std::cout << "字符串已成功保存到文件中。" << std::endl;
|
||||
return true;
|
||||
} else {
|
||||
std::cerr << "无法打开文件!" << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// bool UpperCommManager::saveStringToJsonFile(const string &strJson, const string &filePath)
|
||||
// {
|
||||
// std::ofstream file(filePath, std::ios::trunc);
|
||||
// if (file.is_open()) {
|
||||
// file << strJson;
|
||||
// file.close();
|
||||
// // std::cout << "字符串已成功保存到文件中。" << std::endl;
|
||||
// return true;
|
||||
// } else {
|
||||
// std::cerr << "无法打开文件!" << std::endl;
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
@@ -18,6 +18,14 @@
|
||||
#include "upmsg/uPower_liBatState.h"
|
||||
#include "upmsg/uDevice_depth.h"
|
||||
#include "upmsg/uExternComm_setOpCondition.h"
|
||||
#include "upmsg/uExternComm_setOpMode.h"
|
||||
#include "upmsg/uPlan_taskStart.h"
|
||||
#include "upmsg/uPlan_planStop.h"
|
||||
#include "upmsg/uExternComm_setDeviceSwitch.h"
|
||||
#include "upmsg/uExternComm_setPowerSystem.h"
|
||||
#include "upmsg/uPower_equState.h"
|
||||
#include "upmsg/uPower_sysState.h"
|
||||
|
||||
using namespace std;
|
||||
#define VAR_TO_STR(var) #var
|
||||
//控制消息
|
||||
@@ -52,21 +60,20 @@ public:
|
||||
void buildSystemReport();
|
||||
|
||||
// 消息处理函数
|
||||
const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg);
|
||||
const DriverTable getEquipmentCmd(const std::string& key, const std::string& msg);
|
||||
const DriverTable getSubDisState(const std::string& key, const std::string& msg);
|
||||
// const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg);
|
||||
// const DriverTable getEquipmentCmd(const std::string& key, const std::string& msg);
|
||||
// int getSetPMSys(const std::string& key, const std::string& msg);
|
||||
// DeviceSwitchCmd getSetDevSwitch(const std::string& key, const std::string& msg);
|
||||
// const DriverTable getSubDisState(const std::string& key, const std::string& msg);
|
||||
// const int getDeepth(const std::string& key, const std::string& msg);
|
||||
MissionState getMission(const std::string& key, const std::string& msg);
|
||||
bool getTaskStop(const std::string& key, const std::string& msg);
|
||||
// MissionState getMission(const std::string& key, const std::string& msg);
|
||||
// bool getTaskStop(const std::string& key, const std::string& msg);
|
||||
// 处理外部通信消息
|
||||
int getSetOpCondition(const std::string& key, const std::string& msg);
|
||||
int getSetOpMode(const std::string& key, const std::string& msg);
|
||||
int getSetPMSys(const std::string& key, const std::string& msg);
|
||||
DeviceSwitchCmd getSetDevSwitch(const std::string& key, const std::string& msg);
|
||||
|
||||
const std::string getSubDisCmd(DriverTable& driver);
|
||||
// int getSetOpCondition(const std::string& key, const std::string& msg);
|
||||
// int getSetOpMode(const std::string& key, const std::string& msg);
|
||||
// const std::string getSubDisCmd(DriverTable& driver);
|
||||
// 其他公共函数
|
||||
bool saveStringToJsonFile(const string &strJson, const string &filePath);
|
||||
// bool saveStringToJsonFile(const string &strJson, const string &filePath);
|
||||
|
||||
public:
|
||||
//定义上位机消息
|
||||
@@ -82,13 +89,18 @@ public:
|
||||
//上位机订阅消息
|
||||
uDevice_depthMsg m_depthMsg;
|
||||
uExternComm_setOpConditionMsg m_setOpConditionMsg;
|
||||
|
||||
uExternComm_setOpModeMsg m_setOpModeMsg;
|
||||
uPlan_taskStartMsg m_taskStartMsg;
|
||||
uPlan_planStopMsg m_taskStopMsg;
|
||||
uExternComm_setDeviceSwitchMsg m_setDevSwitchMsg;
|
||||
uExternComm_setPowerSystemMsg m_setPMSysMsg;
|
||||
uPower_sysStateMsg m_sysStateMsg;
|
||||
private:
|
||||
PowerManger* m_pm;
|
||||
MSControlCmd m_msCmd;
|
||||
Driver m_driver;
|
||||
|
||||
bool parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson);
|
||||
// bool parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson);
|
||||
};
|
||||
|
||||
#endif // UPPER_COMM_MANAGER_H
|
||||
@@ -14,7 +14,7 @@ void FloatAdjust::entry() {
|
||||
pm->m_driver.getCRUISE_MODEable(&pm->m_subDisSysCmd);
|
||||
//依次接入执行机构动力电设备
|
||||
//TODO:接入执行机构动力电设备
|
||||
|
||||
|
||||
//TODO:解除非必要动力电设备
|
||||
pm->workCondition = WorkCondition::BUOYANCY_ADJUST;
|
||||
LOG_F(INFO, "进入浮调模式");
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
// StandbyState实现
|
||||
void StandbyState::entry() {
|
||||
PowerManagerFsm::entry();
|
||||
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
|
||||
// pm->m_CcuColCmd.fcuCmd = FcuCommand::Stop;
|
||||
// pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop;
|
||||
// 启动流程 仪表电一直设置为启动
|
||||
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
|
||||
pm->workCondition = WorkCondition::STANDBY;
|
||||
|
||||
// 依次启动仪表电设备
|
||||
// 启动设备
|
||||
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
|
||||
|
||||
//
|
||||
LOG_F(INFO, "WorkCondition %d", pm->workCondition);
|
||||
|
||||
@@ -51,7 +51,16 @@ typedef struct ccuState
|
||||
uint16_t ch3oh_concentration1; // 舱室甲醇气体浓度1,单位:0.01% LEL
|
||||
uint16_t ch3oh_concentration2; // 舱室甲醇气体浓度2,单位:0.01% LEL
|
||||
|
||||
uint16_t reserved1[18]; // 保留字段,地址范围35~52,共18个uint16_t,协议预留
|
||||
uint16_t reserved1[10]; // 保留字段,地址范围35~52,共18个uint16_t,协议预留
|
||||
uint16_t cabin_ox_concentration; // 仪表舱内氧气浓度 [%]
|
||||
uint16_t cabin_temperature; // 仪表舱内温度 [°C]
|
||||
uint16_t cabin_humidity; // 仪表舱内湿度 [%RH]
|
||||
uint16_t cabin_pressure; // 仪表舱内大气压 [kPa]
|
||||
|
||||
uint16_t power_cabin_ox_concentration; // 动力舱内氧气浓度 [%]
|
||||
uint16_t power_cabin_temperature; // 动力舱内温度 [°C]
|
||||
uint16_t power_cabin_humidity; // 动力舱内湿度 [%RH]
|
||||
uint16_t power_cabin_pressure; // 动力舱内大气压 [kPa]
|
||||
uint8_t reserved2[1]; // 保留字段,地址范围54~55,共2个uint8_t,协议预留
|
||||
|
||||
uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志字数组,共6字节,按位表示各类报警
|
||||
|
||||
@@ -107,7 +107,7 @@ public:
|
||||
auto checkField = [&root](const std::string& field) -> bool {
|
||||
if(!root.isMember(field) || !root[field].isUInt()) {
|
||||
// std::cerr << "Missing or invalid field: " << field << std::endl;
|
||||
LOG_F(ERROR, "Missing or invalid field: %s", field.c_str());
|
||||
// LOG_F(ERROR, "Missing or invalid field: %s", field.c_str());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -188,6 +188,8 @@ public:
|
||||
if(!checkField("sternThrow_uint8")) ok=false; state.sternThrow = root["sternThrow_uint8"].asUInt();
|
||||
if(!checkField("mainINS_uint8")) ok=false; state.mainINS = root["mainINS_uint8"].asUInt();
|
||||
|
||||
//不检查字段缺失
|
||||
ok = true;
|
||||
return ok;
|
||||
};
|
||||
std::string buildSecdistStateToJson(DeviceSecdistState &state){
|
||||
@@ -433,6 +435,8 @@ public:
|
||||
std::string buildMsg(DriverTable &driver){
|
||||
DeviceSecdistState s;
|
||||
converFromDriverTable(s,driver);
|
||||
// std::cout << (int)s.depth1 << std::endl;
|
||||
// std::cout << buildSecdistStateToJson(s) << std::endl;
|
||||
return buildSecdistStateToJson(s);
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef UEXTERNCOMM_SETDEVICESWITCH_CMD_H
|
||||
#define UEXTERNCOMM_SETDEVICESWITCH_CMD_H
|
||||
#include <string>
|
||||
|
||||
class uExternComm_setDeviceSwitchMsg
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
std::string key = "uExternComm_setDeviceSwitch_cmd";
|
||||
|
||||
uExternComm_setDeviceSwitchMsg(/* args */){};
|
||||
~uExternComm_setDeviceSwitchMsg(){};
|
||||
DeviceSwitchCmd getSetDevSwitch(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
DeviceSwitchCmd cmd;
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
cmd.id = -1;
|
||||
}
|
||||
|
||||
// 检查并读取设备开关状态
|
||||
if (root.isMember("id_uint8") && root["id_uint8"].isUInt()) {
|
||||
cmd.id = root["id_uint8"].asUInt();
|
||||
} else {
|
||||
cmd.id = -1;
|
||||
LOG_F(WARNING, "缺少或类型不匹配: id_uint8");
|
||||
}
|
||||
if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
|
||||
cmd.cmd = root["cmd_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: state_bool");
|
||||
}
|
||||
return cmd;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,7 +0,0 @@
|
||||
#ifndef UEXTERNCOMM_SETDEVICESWITCH_CMD_H
|
||||
#define UEXTERNCOMM_SETDEVICESWITCH_CMD_H
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef UEXTERCOMM_SETOPMODE_CMD_H
|
||||
#define UEXTERCOMM_SETOPMODE_CMD_H
|
||||
#include <string>
|
||||
#include "../loguru.hpp"
|
||||
|
||||
//外部通信消息
|
||||
#define DB_TO_PM_SETOPMODE "uExternComm_setOpMode_cmd"
|
||||
|
||||
class uExternComm_setOpModeMsg
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
std::string key = "uExternComm_setOpMode_cmd";
|
||||
uExternComm_setOpModeMsg(/* args */){};
|
||||
~uExternComm_setOpModeMsg(){};
|
||||
|
||||
int getSetOpMode(const std::string& msgkey, const std::string& msg){
|
||||
if (msgkey!= key)
|
||||
{
|
||||
LOG_F(WARNING, "消息类型错误 %s", msgkey.c_str());
|
||||
return 0;
|
||||
}
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 检查并读取操作模式
|
||||
if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
|
||||
return root["state_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: opMode");
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
//外部通信消息
|
||||
#define DB_TO_PM_SETOPMODE "uExternComm_setOpMode_cmd"
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef UEXTERNCONM_SETPMSYS_H
|
||||
#define UEXTERNCONM_SETPMSYS_H
|
||||
#include <string>
|
||||
#include "../loguru.hpp"
|
||||
#define DB_TO_PM_SETPMSYS "uExternComm_setPowerSystem_cmd"
|
||||
class uExternComm_setPowerSystemMsg
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
std::string key = "uExternComm_setPowerSystem_cmd";
|
||||
uExternComm_setPowerSystemMsg(/* args */){};
|
||||
~uExternComm_setPowerSystemMsg(){};
|
||||
|
||||
int getSetPMSys(const std::string& key, const std::string& msg)
|
||||
{
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 检查并读取电源系统设置
|
||||
if (root.isMember("powerCmd_uint8") && root["powerCmd_uint8"].isUInt()) {
|
||||
return root["powerCmd_uint8"].asUInt();
|
||||
} else {
|
||||
LOG_F(WARNING, "缺少或类型不匹配: powerCmd_uint8");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
//外部通信消息
|
||||
#define DB_TO_PM_SETPMSYS "uExternComm_setPowerSystem_cmd"
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef UPLAN_PLANSTOP_CMD_H
|
||||
#define UPLAN_PLANSTOP_CMD_H
|
||||
#include <string>
|
||||
#include "../loguru.hpp"
|
||||
#define DB_TO_PM_TASKSTOP "uPlan_planStop_cmd"
|
||||
class uPlan_planStopMsg
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
std::string key = "uPlan_planStop_cmd";
|
||||
uPlan_planStopMsg(/* args */){};
|
||||
~uPlan_planStopMsg(){};
|
||||
bool getTaskStop(const std::string& key, const std::string& msg) {
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查op_int32字段
|
||||
if (root.isMember("op_int32") && root["op_int32"].isInt()) {
|
||||
return root["op_int32"].asInt() == 1;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
//决策消息
|
||||
#define DB_TO_PM_TASKSTOP "uPlan_planStop_cmd"
|
||||
@@ -0,0 +1,55 @@
|
||||
#ifndef UPPERCOMMMANAGER_H
|
||||
#define UPPERCOMMMANAGER_H
|
||||
#include <string>
|
||||
#include "../pmSysvariable.h"
|
||||
#include "../loguru.hpp"
|
||||
//决策消息
|
||||
#define DB_TO_PM_MISSION "uPlan_taskStart_cmd"
|
||||
|
||||
class uPlan_taskStartMsg
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
std::string key = "uPlan_taskStart_cmd";
|
||||
uPlan_taskStartMsg(/* args */){};
|
||||
~uPlan_taskStartMsg(){};
|
||||
|
||||
MissionState getMission(const std::string& key, const std::string& msg) {
|
||||
MissionState mission;
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
|
||||
return mission;
|
||||
}
|
||||
|
||||
// 提取taskType_str
|
||||
if (root.isMember("taskType_str") && root["taskType_str"].isString()) {
|
||||
mission.type = TaskType::fromString(root["taskType_str"].asString());
|
||||
LOG_F(INFO, "taskType: %d", mission.type, root["taskType_str"].asString());
|
||||
}
|
||||
|
||||
// 提取balanceEnabled_bool
|
||||
if (root.isMember("balanceEnabled_bool") && root["balanceEnabled_bool"].isBool()) {
|
||||
mission.enableBuoyancyAdjustment = root["balanceEnabled_bool"].asBool();
|
||||
LOG_F(INFO, "balanceEnabled_bool: %d", mission.enableBuoyancyAdjustment);
|
||||
}
|
||||
|
||||
// 提取bowRudderUnfold_bool
|
||||
if (root.isMember("bowRudderUnfold_bool") && root["bowRudderUnfold_bool"].isBool()) {
|
||||
mission.enableBowRudder = root["bowRudderUnfold_bool"].asBool();
|
||||
LOG_F(INFO, "bowRudderUnfold_bool: %d", mission.enableBowRudder);
|
||||
}
|
||||
|
||||
|
||||
return mission;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
//决策消息
|
||||
#define DB_TO_PM_MISSION "uPlan_taskStart_cmd"
|
||||
@@ -14,6 +14,7 @@ public:
|
||||
};
|
||||
~uPower_equStateMsg() {};
|
||||
std::string key = "uPower_equState_fb";
|
||||
std::string key_cmd = "uPower_equState_cmd";
|
||||
|
||||
Driver driver;
|
||||
|
||||
@@ -21,6 +22,16 @@ public:
|
||||
{
|
||||
return driver.saveDriverTableToJson(&s);
|
||||
}
|
||||
|
||||
const DriverTable getEquipmentCmd(const std::string& key, const std::string& msg)
|
||||
{
|
||||
DriverTable cmd;
|
||||
if (driver.loadDriverTableFromJson(msg, cmd) < 0)
|
||||
{
|
||||
LOG_F(WARNING, "get equipment cmd error:%s", msg.c_str());
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
//控制消息
|
||||
#define DB_TO_PM_EQUIPMENTCMD "uPower_equState_cmd"
|
||||
@@ -0,0 +1,75 @@
|
||||
#ifndef U_POWER_SYSSTATE_FB_H
|
||||
#define U_POWER_SYSSTATE_FB_H
|
||||
#include "../driver.h"
|
||||
#include "string"
|
||||
#include "json/json.h"
|
||||
#include <bitset>
|
||||
#include "../loguru.hpp"
|
||||
class uPower_sysStateMsg
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
uPower_sysStateMsg() {
|
||||
};
|
||||
~uPower_sysStateMsg() {};
|
||||
std::string key = "uPower_sysState_cmd";
|
||||
const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg)
|
||||
{
|
||||
MSControlCmd cmd;
|
||||
if (parseControlCmdFromJson(cmd, msg)) {
|
||||
|
||||
return cmd;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_F(WARNING, "get master control cmd error:%s", msg.c_str());
|
||||
}
|
||||
};
|
||||
bool parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson)
|
||||
{
|
||||
Json::CharReaderBuilder builder;
|
||||
Json::Value root;
|
||||
std::string errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream s(strJson);
|
||||
if (!Json::parseFromStream(builder, s, &root, &errs))
|
||||
{
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
return false; // 解析失败
|
||||
}
|
||||
if (root.isMember("powerCMD") && root["powerCMD"].isUInt())
|
||||
{
|
||||
cmd.powerCMD = root["powerCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: powerCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
|
||||
if (root.isMember("modCMD") && root["modCMD"].isUInt())
|
||||
{
|
||||
cmd.modCMD = root["modCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: modCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
|
||||
if (root.isMember("workCMD") && root["workCMD"].isUInt())
|
||||
{
|
||||
cmd.workCMD = root["workCMD"].asUInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "缺少或类型不匹配: workCMD" << std::endl;
|
||||
return false; // 缺少或类型不匹配
|
||||
}
|
||||
return true; // 成功
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
//控制消息
|
||||
#define DB_TO_PM_MSCMD "uPower_sysState_cmd"
|
||||
Reference in New Issue
Block a user