增加了解析上位机指令的功能
This commit is contained in:
@@ -88,10 +88,25 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
|
||||
AppCastingMOOSApp::OnNewMail(NewMail);
|
||||
|
||||
MOOSMSG_LIST::iterator p;
|
||||
for(p=NewMail.begin(); p!=NewMail.end(); p++) {
|
||||
for(p=NewMail.begin(); p!=NewMail.end(); p++)
|
||||
{
|
||||
CMOOSMsg &msg = *p;
|
||||
string key = msg.GetKey();
|
||||
|
||||
//处理上位机发送的控制指令
|
||||
if(key == PM_MS_CMD_VAR)
|
||||
{
|
||||
string strJson = msg.GetString();
|
||||
if(getMsCmdFromJson(m_msCmd,strJson))
|
||||
{
|
||||
cout << "get ms cmd:" << strJson << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "get ms cmd error:" << strJson << endl;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0 // Keep these around just for template
|
||||
string comm = msg.GetCommunity();
|
||||
double dval = msg.GetDouble();
|
||||
@@ -223,7 +238,7 @@ bool PowerManger::OnStartUp()
|
||||
void PowerManger::registerVariables()
|
||||
{
|
||||
AppCastingMOOSApp::RegisterVariables();
|
||||
// Register("FOOBAR", 0);
|
||||
Register(PM_MS_CMD_VAR, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -663,6 +678,11 @@ void PowerManger::initControlCmd()
|
||||
m_CcuColCmd.powerBatEfficiency = 230; //默认为最大
|
||||
m_CcuColCmd.heartbeat = 0;
|
||||
m_CcuColCmd.masterState = 0xAA;//主站状态,运行中
|
||||
|
||||
//================初始化上位机指令=========================
|
||||
m_msCmd.modCMD = 0;
|
||||
m_msCmd.powerCMD = 0;
|
||||
m_msCmd.workCMD = 0;
|
||||
}
|
||||
|
||||
char PowerManger::getBreakerOption(char cmd)
|
||||
@@ -675,6 +695,53 @@ char PowerManger::getBreakerOption(char cmd)
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool PowerManger::getMsCmdFromJson(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; // 成功
|
||||
}
|
||||
|
||||
string PowerManger::getTypeName(const string typeName)
|
||||
{
|
||||
// 映射类型名称到指定的字符串
|
||||
|
||||
Reference in New Issue
Block a user