diff --git a/src/pPowerManger.zip b/src/pPowerManger.zip deleted file mode 100644 index a15027b..0000000 Binary files a/src/pPowerManger.zip and /dev/null differ diff --git a/src/pPowerManger/CMakeLists.txt b/src/pPowerManger/CMakeLists.txt index 9d7b35d..6095a65 100644 --- a/src/pPowerManger/CMakeLists.txt +++ b/src/pPowerManger/CMakeLists.txt @@ -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}) diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index e88d54c..2f98cba 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -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 (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 (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(p.data.dyn_alarm_flag[i]) << "\n"; for (int i = 0; i < 6; ++i) os << "仪表电池报警标志 ins_alarm_flag[" << i << "]: 0x" << std::hex << static_cast(p.data.ins_alarm_flag[i]) << "\n"; + os << "仪表正极/充电继电器状态 (ins_relay_status1): 0x" << std::hex << static_cast(p.data.ins_relay_status1) << "\n"; os << "仪表预充/负极继电器状态 (ins_relay_status2): 0x" << static_cast(p.data.ins_relay_status2) << "\n"; os << "动力正极/充电继电器状态 (dyn_relay_status1): 0x" << static_cast(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 (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 (p.data.dyn_current) * 0.05 << " A\n"; os << "动力正端绝缘电阻: " << p.data.dyn_resistance_pos << " kΩ\n"; os << "动力负端绝缘电阻: " << p.data.dyn_resistance_neg << " kΩ\n"; diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 191cfc0..baf720b 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -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++; diff --git a/src/pPowerManger/UpperCommManager.cpp b/src/pPowerManger/UpperCommManager.cpp index a6062a6..28411f9 100644 --- a/src/pPowerManger/UpperCommManager.cpp +++ b/src/pPowerManger/UpperCommManager.cpp @@ -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 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 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; - } -} \ No newline at end of file +// 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; +// } +// } \ No newline at end of file diff --git a/src/pPowerManger/UpperCommManager.h b/src/pPowerManger/UpperCommManager.h index 84b5af5..c22c8e5 100644 --- a/src/pPowerManger/UpperCommManager.h +++ b/src/pPowerManger/UpperCommManager.h @@ -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 \ No newline at end of file diff --git a/src/pPowerManger/fsm/FloatAdjust.cpp b/src/pPowerManger/fsm/FloatAdjust.cpp index 259c323..8ead65b 100644 --- a/src/pPowerManger/fsm/FloatAdjust.cpp +++ b/src/pPowerManger/fsm/FloatAdjust.cpp @@ -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, "进入浮调模式"); diff --git a/src/pPowerManger/fsm/StandbyState.cpp b/src/pPowerManger/fsm/StandbyState.cpp index 1003dc7..114a2fc 100644 --- a/src/pPowerManger/fsm/StandbyState.cpp +++ b/src/pPowerManger/fsm/StandbyState.cpp @@ -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); diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h index 3dd63c9..eb247e5 100644 --- a/src/pPowerManger/pmSysvariable.h +++ b/src/pPowerManger/pmSysvariable.h @@ -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字节,按位表示各类报警 diff --git a/src/pPowerManger/upmsg/uDevice_secdistState.h b/src/pPowerManger/upmsg/uDevice_secdistState.h index f61c440..2c6f58a 100644 --- a/src/pPowerManger/upmsg/uDevice_secdistState.h +++ b/src/pPowerManger/upmsg/uDevice_secdistState.h @@ -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); }; diff --git a/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h b/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h new file mode 100644 index 0000000..2afaa1d --- /dev/null +++ b/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h @@ -0,0 +1,43 @@ +#ifndef UEXTERNCOMM_SETDEVICESWITCH_CMD_H +#define UEXTERNCOMM_SETDEVICESWITCH_CMD_H +#include + +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 \ No newline at end of file diff --git a/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch_cmd.h b/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch_cmd.h deleted file mode 100644 index 9a5748f..0000000 --- a/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch_cmd.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef UEXTERNCOMM_SETDEVICESWITCH_CMD_H -#define UEXTERNCOMM_SETDEVICESWITCH_CMD_H -#include - - - -#endif \ No newline at end of file diff --git a/src/pPowerManger/upmsg/uExternComm_setOpMode.h b/src/pPowerManger/upmsg/uExternComm_setOpMode.h new file mode 100644 index 0000000..4c58701 --- /dev/null +++ b/src/pPowerManger/upmsg/uExternComm_setOpMode.h @@ -0,0 +1,46 @@ +#ifndef UEXTERCOMM_SETOPMODE_CMD_H +#define UEXTERCOMM_SETOPMODE_CMD_H +#include +#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 diff --git a/src/pPowerManger/upmsg/uExternComm_setOpMode_cmd.h b/src/pPowerManger/upmsg/uExternComm_setOpMode_cmd.h deleted file mode 100644 index 201fe5d..0000000 --- a/src/pPowerManger/upmsg/uExternComm_setOpMode_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//外部通信消息 -#define DB_TO_PM_SETOPMODE "uExternComm_setOpMode_cmd" diff --git a/src/pPowerManger/upmsg/uExternComm_setPowerSystem.h b/src/pPowerManger/upmsg/uExternComm_setPowerSystem.h new file mode 100644 index 0000000..a6ced49 --- /dev/null +++ b/src/pPowerManger/upmsg/uExternComm_setPowerSystem.h @@ -0,0 +1,39 @@ +#ifndef UEXTERNCONM_SETPMSYS_H +#define UEXTERNCONM_SETPMSYS_H +#include +#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 + diff --git a/src/pPowerManger/upmsg/uExternComm_setPowerSystem_cmd.h b/src/pPowerManger/upmsg/uExternComm_setPowerSystem_cmd.h deleted file mode 100644 index 9ca2f37..0000000 --- a/src/pPowerManger/upmsg/uExternComm_setPowerSystem_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//外部通信消息 -#define DB_TO_PM_SETPMSYS "uExternComm_setPowerSystem_cmd" diff --git a/src/pPowerManger/upmsg/uPlan_planStop.h b/src/pPowerManger/upmsg/uPlan_planStop.h new file mode 100644 index 0000000..9defc3c --- /dev/null +++ b/src/pPowerManger/upmsg/uPlan_planStop.h @@ -0,0 +1,35 @@ +#ifndef UPLAN_PLANSTOP_CMD_H +#define UPLAN_PLANSTOP_CMD_H +#include +#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 + diff --git a/src/pPowerManger/upmsg/uPlan_planStop_cmd.h b/src/pPowerManger/upmsg/uPlan_planStop_cmd.h deleted file mode 100644 index 1c59edc..0000000 --- a/src/pPowerManger/upmsg/uPlan_planStop_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//决策消息 -#define DB_TO_PM_TASKSTOP "uPlan_planStop_cmd" diff --git a/src/pPowerManger/upmsg/uPlan_taskStart.h b/src/pPowerManger/upmsg/uPlan_taskStart.h new file mode 100644 index 0000000..8a87c02 --- /dev/null +++ b/src/pPowerManger/upmsg/uPlan_taskStart.h @@ -0,0 +1,55 @@ +#ifndef UPPERCOMMMANAGER_H +#define UPPERCOMMMANAGER_H +#include +#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 diff --git a/src/pPowerManger/upmsg/uPlan_taskStart_cmd.h b/src/pPowerManger/upmsg/uPlan_taskStart_cmd.h deleted file mode 100644 index 5bbb366..0000000 --- a/src/pPowerManger/upmsg/uPlan_taskStart_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//决策消息 -#define DB_TO_PM_MISSION "uPlan_taskStart_cmd" diff --git a/src/pPowerManger/upmsg/uPower_equState.h b/src/pPowerManger/upmsg/uPower_equState.h index 78035e6..0818093 100644 --- a/src/pPowerManger/upmsg/uPower_equState.h +++ b/src/pPowerManger/upmsg/uPower_equState.h @@ -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 \ No newline at end of file diff --git a/src/pPowerManger/upmsg/uPower_equState_cmd.h b/src/pPowerManger/upmsg/uPower_equState_cmd.h deleted file mode 100644 index b10826a..0000000 --- a/src/pPowerManger/upmsg/uPower_equState_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//控制消息 -#define DB_TO_PM_EQUIPMENTCMD "uPower_equState_cmd" diff --git a/src/pPowerManger/upmsg/uPower_sysState.h b/src/pPowerManger/upmsg/uPower_sysState.h new file mode 100644 index 0000000..425c4c8 --- /dev/null +++ b/src/pPowerManger/upmsg/uPower_sysState.h @@ -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 +#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 diff --git a/src/pPowerManger/upmsg/uPower_sysState_cmd.h b/src/pPowerManger/upmsg/uPower_sysState_cmd.h deleted file mode 100644 index 3d86d5a..0000000 --- a/src/pPowerManger/upmsg/uPower_sysState_cmd.h +++ /dev/null @@ -1,2 +0,0 @@ -//控制消息 -#define DB_TO_PM_MSCMD "uPower_sysState_cmd"