优化通信代码,修复状态机的bug
This commit is contained in:
@@ -6,39 +6,116 @@ UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) {}
|
||||
|
||||
bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) {
|
||||
if(key == DB_TO_PM_MSCMD) {
|
||||
if(m_pm->getMsCmdFromJson(m_pm->m_msCmd, strJson)) {
|
||||
cout << "get ms cmd:" << strJson << endl;
|
||||
return true;
|
||||
} else {
|
||||
cout << MOOS::ConsoleColours::Red << "get ms cmd error:" << strJson
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
m_pm->m_msCmd = getMasterControlCmd(key, strJson);
|
||||
return true;
|
||||
}
|
||||
else if(key == DB_TO_PM_EQUIPMENTCMD) {
|
||||
if(m_pm->m_driver.loadDriverTableFromJson(strJson, m_pm->m_subDisSysCmd) < 0) {
|
||||
cout << MOOS::ConsoleColours::Red << "get sub dis cmd error:" << strJson
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
m_pm->m_MSDriverCmd = getEquipmentCmd(key, strJson);
|
||||
return true;
|
||||
}
|
||||
else if(key == DB_TO_PM_SUBDISSTATE) {
|
||||
if(m_pm->m_driver.loadDriverTableFromJson(strJson, m_pm->m_subDisSysState) < 0) {
|
||||
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << strJson
|
||||
<< MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
m_pm->m_subDisSysState = getSubDisState(key, strJson);
|
||||
return true;
|
||||
}
|
||||
std::cout << "Unknown key: " << key << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
const std::string UpperCommManager::getCurrentEquState(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();
|
||||
// m_pm->Notify(PM_TO_DB_SUBDISCMD, m_pm->m_driver.saveDriverTableToJson(&m_pm->m_subDisSysCmd));
|
||||
// m_pm->Notify(PM_TO_DB_EQUIPMENTSTATE, m_pm->m_driver.saveDriverTableToJson(&m_pm->m_currentDriverState));
|
||||
std::string strJson;
|
||||
strJson = getCurrentEquState(m_pm->m_currentDriverState);
|
||||
m_pm->sendNotification(PM_TO_DB_EQUIPMENTSTATE, strJson);
|
||||
strJson = getSubDisCmd(m_pm->m_subDisSysCmd);
|
||||
m_pm->sendNotification(PM_TO_DB_SUBDISCMD, strJson);
|
||||
}
|
||||
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; // 缺少或类型不匹配
|
||||
}
|
||||
|
||||
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; // 成功
|
||||
}
|
||||
void UpperCommManager::buildSystemReport() {
|
||||
//TODO: 构建能源系统报告
|
||||
string suffix;
|
||||
Json::Value pms;
|
||||
Json::Value fcs;
|
||||
|
||||
Reference in New Issue
Block a user