增加了解析上位机指令的功能

This commit is contained in:
zjk
2025-02-18 23:01:29 +08:00
parent 7dac85505b
commit 14f7890d77
9 changed files with 132 additions and 39 deletions
+4
View File
@@ -10,10 +10,14 @@
#include <thread>
#include <mutex>
#include "../pPowerManger/SQLiteDB.h"
#include "../pPowerManger/pmSysvariable.h"
#include <MOOS/libMOOS/Comms/MOOSAsyncCommClient.h>
using namespace std;
// 定义一个全局变量,用于存储状态信息
ccuState ccustate;
// 读取 HTML 文件内容
string read_file(const string& path) {
ifstream file(path);
+69 -2
View File
@@ -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)
{
// 映射类型名称到指定的字符串
+10 -1
View File
@@ -18,6 +18,7 @@
#ifndef PowerManger_HEADER
#define PowerManger_HEADER
#define UNIX
#define JSON_USE_EXCEPTION 1
#include <queue>
#include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h"
@@ -41,12 +42,18 @@
#define MAX_UDP_PKT_SIZE 65535
#define SKEW_TOLERANCE 5
//能源管理反馈的消息
#define PM_STATE_VAR "uPower_pmState_st"
#define PM_CURRENTSTATE_VAR "uPower_currentState_st"
#define PM_DISSTATE_VAR "uPower_disSysState_st"
#define PM_LIBATSTATE_VAR "uPower_liBatState_st"
#define PM_FCSSTATE_VAR "uPower_fcsState_st"
//控制消息
#define PM_MS_CMD_VAR "uPower_sysState_cmd"
#define PM_SUBDIS_CMD_VAR "uPower_secdistState_cmd"
#define PM_SUBDIS_STATE_VAR "uDevice_ secdistState _st"
#define PM_EQUIPMENT_STATE_VAR "uPower_equState_fb"
#define PM_EQUIPMENT_CMD_VAR "uPower_equState_cmd"
class PowerManger : public AppCastingMOOSApp
{
@@ -118,7 +125,9 @@ class PowerManger : public AppCastingMOOSApp
void initControlCmd();
//上位机操作函数
MSControlCmd m_msCmd;
bool buildPowerSysReport();
bool getMsCmdFromJson(MSControlCmd &cmd,const string &strJson);
private:
udpComm m_udpComm;
+1
View File
@@ -121,6 +121,7 @@ public:
void getDJ_MODEable(DriverTable* driverTable);
std::string saveDriverTableToJson(const DriverTable* driverTable);
std::string getDriverTableJson();
private:
+7
View File
@@ -353,5 +353,12 @@ typedef struct pmState
disBus4Breaker bus4Breaker;
} disSysBreaker;
typedef struct MSControlCmd
{
unsigned int powerCMD;
unsigned int modCMD;
unsigned int workCMD;
}MSControlCmd;
#endif