数据库:下位机交互数据全量落库,SQLite 封装重构

- 新增 msg_log 原始帧表,RX/TX 双向记录原始字节与校验结果
- SQLite 封装改为描述符驱动的泛化 insert,删除 10 个手写 SQL
- 新增 ccuSetParmCmd/ccuSetParmFb 表,补齐 CCU 参数设定反馈落库
- 错误防崩溃:统一加锁、fail-open 降级、损坏自动重建、析构顺序修复
- WAL/迁移/预编译语句路径,数据库路径支持 mission 配置 dbpath
- 清理未使用的 shell.c/sqlite3ext.h/SQLite.zip
This commit is contained in:
zjk
2026-08-19 16:28:41 +08:00
parent 3cdfa2e757
commit f50c7bd612
15 changed files with 918 additions and 35359 deletions
+23 -9
View File
@@ -69,11 +69,9 @@ PowerManger::PowerManger()
//初始化上位机通信
m_upperCommManager = new UpperCommManager(this);
//初始化数据库
m_db = new SQLite("power_data.db");
m_db->createTable();
m_lowerCommManager->startListenThread();
//数据库在 OnStartUp 读取配置后初始化
m_db = nullptr;
//初始化http服务器
m_httpServer = new HttpServer(8090);
m_httpServer->setPowerManger(this);
@@ -88,8 +86,8 @@ PowerManger::PowerManger()
PowerManger::~PowerManger()
{
m_commThread.Stop();
delete m_lowerCommManager; // 先停止监听线程,确保其不再调用 DB
delete m_db;
delete m_lowerCommManager;
delete m_upperCommManager;
delete m_systemData;
delete m_httpServer;
@@ -185,12 +183,14 @@ bool PowerManger::OnStartUp()
if(!m_MissionReader.GetConfiguration(GetAppName(), sParams))
reportConfigWarning("No config block found for " + GetAppName());
std::string dbPath; // 数据库路径,不配置则默认当前目录 power_data.db
STRING_LIST::iterator p;
for(p=sParams.begin(); p!=sParams.end(); p++) {
string orig = *p;
string line = *p;
string param = tolower(biteStringX(line, '='));
string value = line;
string param = stripBlankEnds(tolower(biteStringX(line, '=')));
string value = stripBlankEnds(line);
bool handled = false;
if(param == "foo") {
@@ -199,6 +199,10 @@ bool PowerManger::OnStartUp()
else if(param == "bar") {
handled = true;
}
else if(param == "dbpath") {
dbPath = value;
handled = true;
}
if(!handled)
reportUnhandledConfigWarning(orig);
@@ -206,7 +210,17 @@ bool PowerManger::OnStartUp()
}
registerVariables();
// 初始化数据库:dbpath 未配置则默认当前目录
if (dbPath.empty()) dbPath = "power_data.db";
LOG_F(INFO, "数据库存储路径: %s", dbPath.c_str());
m_db = new SQLite(dbPath);
m_db->createTable();
// 注入原始帧日志回调(RX/TX 双向落库)
m_lowerCommManager->setCommLogger(m_db);
// 数据库就绪后再启动下位机监听线程
m_lowerCommManager->startListenThread();
// 初始化状态机
PowerManagerFsm::init(this);
PowerManagerFsm::start();