增加了次级配电状态,设备状态表,设备上电指令的订阅\解析\发布等功能
This commit is contained in:
@@ -49,7 +49,14 @@ PowerManger::PowerManger()
|
||||
msg_disLowBusFbMsg_Update_time = 0;
|
||||
|
||||
connectState = 0;
|
||||
|
||||
|
||||
m_pmCurrentState = {};
|
||||
m_currentDisBreakerState = {};
|
||||
m_targetDisBreakerState = {};
|
||||
m_currentDriverState = {};
|
||||
m_MSDriverCmd = {};
|
||||
m_subDisSysCmd = {};
|
||||
m_subDisSysState = {};
|
||||
//初始化断路器状态
|
||||
initControlCmd();
|
||||
|
||||
@@ -59,6 +66,10 @@ PowerManger::PowerManger()
|
||||
m_db->createPowerDataTables();
|
||||
m_db->createStateTables();
|
||||
m_db->createDisCcuSysTables();
|
||||
m_db->createDriversTables(VAR_TO_STR(m_currentDriverState));
|
||||
m_db->createDriversTables(VAR_TO_STR(m_subDisSysState));
|
||||
m_db->createDriversTables(VAR_TO_STR(m_subDisSysCmd));
|
||||
m_db->createDriversTables(VAR_TO_STR(m_MSDriverCmd));
|
||||
|
||||
//注册状态机
|
||||
m_fsm.RegisterState("Init", 1, m_Inite_s1);
|
||||
@@ -98,11 +109,11 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
|
||||
{
|
||||
if(getMsCmdFromJson(m_msCmd,strJson))
|
||||
{
|
||||
cout << "get ms cmd:" << strJson << endl;
|
||||
cout << "get ms cmd:" << strJson << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "get ms cmd error:" << strJson << endl;
|
||||
cout << MOOS::ConsoleColours::Red << "get ms cmd error:" << strJson << MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
}
|
||||
//处理设备上电指令
|
||||
@@ -110,7 +121,7 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
|
||||
{
|
||||
if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysCmd) < 0)
|
||||
{
|
||||
cout << "get sub dis cmd error:" << strJson << endl;
|
||||
cout << MOOS::ConsoleColours::Red << "get sub dis cmd error:" << strJson << MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
}
|
||||
//处理设备状态反馈
|
||||
@@ -118,7 +129,7 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
|
||||
{
|
||||
if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysState) < 0)
|
||||
{
|
||||
cout << "get sub dis state error:" << strJson << endl;
|
||||
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << strJson << MOOS::ConsoleColours::reset << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,25 +186,25 @@ bool PowerManger::Iterate()
|
||||
ccuOption();
|
||||
//c. 上位机反馈
|
||||
buildPowerSysReport();
|
||||
Notify(PM_TO_DB_SUBDISCMD,m_driver.saveDriverTableToJson(&m_subDisSysCmd));
|
||||
Notify(PM_TO_DB_EQUIPMENTSTATE,m_driver.saveDriverTableToJson(&m_currentDriverState));
|
||||
//d.保存到数据库
|
||||
writeDataToDB();
|
||||
}
|
||||
///////////////////////
|
||||
string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd);
|
||||
saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json");
|
||||
// string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd);
|
||||
// saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json");
|
||||
///////////////////////
|
||||
//4. 打印错误信息
|
||||
if(!m_udpComm.sError.empty())
|
||||
{
|
||||
for(int i=0;i<m_udpComm.sError.size();i++)
|
||||
{
|
||||
cout<<MOOS::ConsoleColours::red() << m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
|
||||
}
|
||||
m_udpComm.sError.clear();
|
||||
}
|
||||
//4. 写状态信息到数据库
|
||||
m_stateData.state_id = m_pmState.id;
|
||||
m_stateData.state_name = m_pmState.name;
|
||||
m_stateData.event = m_pmEvent;
|
||||
m_stateData.fault_code = m_faultNum;
|
||||
if(!m_db->insertStateData(m_stateData))
|
||||
return false;
|
||||
//AppCastingMOOSApp::PostReport();
|
||||
//5. 清空UDP消息队列
|
||||
m_udpComm.clearMsgQueue();
|
||||
//6. 写入数据库
|
||||
writeDataToDB();
|
||||
m_udpComm.clearMsgQueue();
|
||||
return(true);
|
||||
}
|
||||
|
||||
@@ -315,18 +326,27 @@ bool PowerManger::ListenLoopUDP()
|
||||
}
|
||||
}
|
||||
}
|
||||
// updatePmState();
|
||||
// 打印通信错误信息
|
||||
if(!m_udpComm.sError.empty())
|
||||
{
|
||||
for(int i=0;i<m_udpComm.sError.size();i++)
|
||||
{
|
||||
cout<<MOOS::ConsoleColours::red() << m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
|
||||
}
|
||||
m_udpComm.sError.clear();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PowerManger::FsmLoop()
|
||||
{
|
||||
//状态机循环
|
||||
while (!m_FsmThread.IsQuitRequested())
|
||||
{
|
||||
m_fsm.run(m_pmState,this);
|
||||
//延时200ms
|
||||
usleep(200000);
|
||||
//延时1s
|
||||
usleep(1000000);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -336,20 +356,20 @@ bool PowerManger::updateConnectState()
|
||||
double seck = 0;
|
||||
updateTime();
|
||||
connectState = 0;
|
||||
IsSkewed(msg_CcuStateFbMsg_Update_time,&seck);
|
||||
connectState++;
|
||||
if(!IsSkewed(msg_CcuStateFbMsg_Update_time,&seck))
|
||||
connectState++;
|
||||
// cout << "seck:" << seck << endl;
|
||||
IsSkewed(msg_disHighVolBusFbMsg_Update_time,&seck);
|
||||
connectState++;
|
||||
if(!IsSkewed(msg_disHighVolBusFbMsg_Update_time,&seck))
|
||||
connectState++;
|
||||
// cout << "seck:" << seck << endl;
|
||||
IsSkewed(msg_disHighAVolBusFbMsg_Update_time,&seck);
|
||||
connectState++;
|
||||
if(!IsSkewed(msg_disHighAVolBusFbMsg_Update_time,&seck))
|
||||
connectState++;
|
||||
// cout << "seck:" << seck << endl;
|
||||
IsSkewed(msg_disHighBVolBusFbMsg_Update_time,&seck);
|
||||
connectState++;
|
||||
if(!IsSkewed(msg_disHighBVolBusFbMsg_Update_time,&seck))
|
||||
connectState++;
|
||||
// cout << "seck:" << seck << endl;
|
||||
IsSkewed(msg_disLowBusFbMsg_Update_time,&seck);
|
||||
connectState++;
|
||||
if(!IsSkewed(msg_disLowBusFbMsg_Update_time,&seck))
|
||||
connectState++;
|
||||
// cout << "seck:" << seck << endl;
|
||||
return true;
|
||||
|
||||
@@ -546,17 +566,20 @@ bool PowerManger::saveStringToJsonFile(const string &strJson, const string &file
|
||||
|
||||
bool PowerManger::writeDataToDB()
|
||||
{
|
||||
m_stateData.state_id = m_pmState.id;
|
||||
m_stateData.state_name = m_pmState.name;
|
||||
m_stateData.event = m_pmEvent;
|
||||
m_stateData.event_id = 1;
|
||||
m_stateData.fault_code = m_faultNum;
|
||||
m_stateData.note = "No fault";
|
||||
if(!m_db->insertStateData(m_stateData))
|
||||
return false;
|
||||
|
||||
// //写入配电系统状态
|
||||
// if(!m_db->insertDisCcuData(m_pmCurrentState))
|
||||
// return false;
|
||||
//写入设备状态
|
||||
if(!m_db->insertDriverTables(m_currentDriverState,VAR_TO_STR(m_currentDriverState)))
|
||||
return false;
|
||||
if(!m_db->insertDriverTables(m_subDisSysState,VAR_TO_STR(m_subDisSysState)))
|
||||
return false;
|
||||
if(!m_db->insertDriverTables(m_subDisSysCmd,VAR_TO_STR(m_subDisSysCmd)))
|
||||
return false;
|
||||
if(!m_db->insertDriverTables(m_MSDriverCmd,VAR_TO_STR(m_MSDriverCmd)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
@@ -577,9 +600,10 @@ void PowerManger::printState(FSM_State st, string desp){
|
||||
int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
|
||||
{
|
||||
PowerManger* pm = (PowerManger*)pData;
|
||||
bool ok = true;
|
||||
//1. 检查通信是否正常 如果超时则进入故障状态
|
||||
double StartTime = pm->GetAppStartTime();
|
||||
while (!pm->connectState == 5)
|
||||
while (pm->connectState < 5)
|
||||
{
|
||||
MOOSPause(1000);
|
||||
pm->updateTime();
|
||||
@@ -587,14 +611,14 @@ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
|
||||
if(dft > 10)
|
||||
{
|
||||
pm->m_pmState = pm->m_Fault_s99;
|
||||
pm->m_faultNum = 1;
|
||||
pm->m_faultNum = 1; //通信故障
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
string desp = "等待复合管控消息 : " + to_string(10-dft);
|
||||
pm->printState(fsm,desp);
|
||||
}
|
||||
//2. 检查复合管控器是否上报故障 如果故障则进入故障状态
|
||||
bool ok = true;
|
||||
if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_2H != 0 ||
|
||||
@@ -604,13 +628,15 @@ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
|
||||
pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0)
|
||||
{
|
||||
ok = false;
|
||||
pm->m_faultNum = 2; //能源故障
|
||||
}
|
||||
//3. 初始化系统为待机状态
|
||||
pm->initControlCmd();
|
||||
//4.判断关键断路器是否闭合
|
||||
if(!ok)
|
||||
{
|
||||
pm->m_pmState = pm->m_Fault_s99;
|
||||
}
|
||||
//3. 初始化系统为待机状态
|
||||
pm->initControlCmd();
|
||||
pm->m_pmState = pm->m_Standby_s2;
|
||||
return 0;
|
||||
}
|
||||
@@ -701,6 +727,9 @@ void PowerManger::initControlCmd()
|
||||
m_msCmd.modCMD = 0;
|
||||
m_msCmd.powerCMD = 0;
|
||||
m_msCmd.workCMD = 0;
|
||||
|
||||
//================初始化设备驱动指令========================
|
||||
|
||||
}
|
||||
|
||||
char PowerManger::getBreakerOption(char cmd)
|
||||
|
||||
Reference in New Issue
Block a user