修复:跨线程数据竞争 + 协议字段越界 + UDP 发送失败吞错
- 并发安全:PowerManger 新增 m_stateMutex,保护 m_pmCurrentState / m_currentDisBreakerState / m_CcuColCmd / faultCode,并封装 addFaultCode/clearFaultCodes/getFaultCodes 访问器 - SystemData 新增跨线程读访问器(getDynVoltageLink/getPowerBusStatus/ getDcdcStatus/getDeviceCommonStatus 等)及配电故障码集合加锁访问 - upmsg buildMsg / httpserver pushSystemData / LowerCommManager 均改为 持锁快照,避免 listen 线程与 comm 线程撕裂读写 - 修复析构顺序:先删 httpServer 再删其他对象,避免 use-after-free - 修复 ccuState reserved2 越界读(协议预留 2 字节,结构体仅声明 1), 修正 coutMsg 中 SOC 门限/功率限制字段打印 - udpComm::sendDisSysCmd 不再吞掉异常,返回 sendMsg 实际结果并记录 ERROR, 新增 SendDisSysCmdFailsWithoutSocket 单测 - 新增 fullFeeder 全类型 UDP 集成仿真器与 fetch-data/clean-data 脚本, .gitignore 补充 SQLite 运行期文件与 fullFeeder 二进制
This commit is contained in:
@@ -15,10 +15,13 @@ void ShoreBasedReady::entry() {
|
||||
//依次接入执行机构动力电设备
|
||||
//1. 开启动力电
|
||||
//1.1 动力锂电池上电
|
||||
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(pm->m_stateMutex);
|
||||
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
|
||||
}
|
||||
// 等待动力锂电池上电完成
|
||||
int count=0;
|
||||
while (!(pm->m_systemData->dyn_voltage_link > 500.0))
|
||||
while (!(pm->m_systemData->getDynVoltageLink() > 500.0))
|
||||
{
|
||||
LOG_F(INFO,"动力锂电池上电中...");
|
||||
MOOSPause(1000);
|
||||
|
||||
Reference in New Issue
Block a user