增加了数据库功能,采用直接编译源码的方式,不使用动态库链接

This commit is contained in:
zjk
2025-05-14 23:27:35 +08:00
parent b7a624334e
commit 47079f79df
14 changed files with 310515 additions and 328 deletions
+11 -9
View File
@@ -15,8 +15,11 @@ else (${WIN32})
pthread )
endif (${WIN32})
# Find SQLite3 package
# find_package(SQLite3 REQUIRED)
# Use local SQLite3 source
SET(SQLITE_SRC
sqlit3/SQLite.cpp
sqlit3/sqlite3.c
)
SET(FSMLIB_SRC
fsm/PowerManagerFsm.cpp # 更新静态库的源文件路径
@@ -37,6 +40,7 @@ SET(FSMLIB_SRC
SET(SRC
${FSMLIB_SRC}
${SQLITE_SRC}
PowerManger.cpp
PowerManger_Info.cpp
udpComm.cpp
@@ -50,6 +54,8 @@ SET(SRC
ADD_EXECUTABLE(pPowerManger ${SRC})
TARGET_INCLUDE_DIRECTORIES(pPowerManger PRIVATE sqlit3)
TARGET_LINK_LIBRARIES(pPowerManger
${MOOS_LIBRARIES}
apputil
@@ -59,8 +65,6 @@ TARGET_LINK_LIBRARIES(pPowerManger
jsoncpp
${SYSTEM_LIBS}
dl
# SQLiteDB
# sqlite3
)
# Add SQLiteDB static library
@@ -68,9 +72,9 @@ SET(UDPCOMM_SRC
udpComm.cpp
)
SET(SQLITEDB_SRC
SQLiteDB.cpp
)
# SET(SQLITEDB_SRC
# SQLiteDB.cpp
# )
SET(DRIVER_SRC
driver.cpp)
@@ -88,5 +92,3 @@ ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC})
# ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC})
ADD_LIBRARY(Driver STATIC ${DRIVER_SRC})
# ADD_LIBRARY(PowerMange STATIC ${POWERMANGE_SRC})
+1 -1
View File
@@ -55,7 +55,7 @@ public:
msg_CcuStateFbMsg m_CcuCurrentState;
msg_disHighVolBusFbMsg m_disHighVolBusCurrentState;
msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState;
msg_disLowMainBusFbMsg m_disHighBVolBusCurrentState;
msg_disLowMainBusFbMsg m_disHighBVolBusCurrentState;
msg_disLowBusFbMsg m_disLowBusState;
// 配电和CCU的反馈状态时间戳
double msg_CcuStateFbMsg_Update_time;
+9 -14
View File
@@ -57,16 +57,8 @@ PowerManger::PowerManger()
//
//初始化数据库
// string dbPath = "/home/zjk/project/H100/H100PowerManger/data/power_data.db";
// m_db = new SQLiteDB(dbPath);
// 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_db = new SQLite("power_data.db");
m_db->createTable();
}
//---------------------------------------------------------
@@ -74,7 +66,7 @@ PowerManger::PowerManger()
PowerManger::~PowerManger()
{
// delete m_db;
delete m_db;
delete m_lowerCommManager;
}
@@ -134,12 +126,15 @@ bool PowerManger::Iterate()
{
AppCastingMOOSApp::Iterate();
// 打印当前状态
// cout << " Current State : " << (int)PowerManagerFsm::current_state_ptr->getCurrentState();
CycleTriggeredEvent cycleEvent;
PowerManagerFsm::dispatch(cycleEvent);
faultLevel = getFaultLevel();
//打印信息大小
// cout << sizeof(m_CcuColCmd) << endl;
//更新数据库
m_db->insertData(m_pmCurrentState.ccustate);
m_db->insertData(m_pmCurrentState.bus1State);
m_db->insertData(m_pmCurrentState.bus2State);
m_db->insertData(m_pmCurrentState.bus3State);
m_db->insertData(m_pmCurrentState.bus4State);
if (m_ticker++ % 5 == 0)
{
m_CcuColCmd.heartbeat++;
+2
View File
@@ -36,6 +36,7 @@
#include "driver.h"
#include "LowerCommManager.h"
#include "UpperCommManager.h"
#include "sqlit3/SQLite.h"
#define IPORT 5001
@@ -65,6 +66,7 @@ class PowerManger : public AppCastingMOOSApp
unsigned char getFaultLevel();
//数据库
// SQLiteDB* m_db;
SQLite* m_db;
bool writeDataToDB();
/************************************************************/
-288
View File
@@ -15,14 +15,6 @@ UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) {
};
bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) {
// if(key == DB_TO_PM_MSCMD)
// {
// m_pm->m_msCmd = getMasterControlCmd(key, strJson);
// cout << "m_msCmd: " << endl;
// MasterCommandEvent event;
// PowerManagerFsm::dispatch(event);
// return true;
// }
if (key == m_sysStateMsg.key)
{
m_pm->m_msCmd = m_sysStateMsg.getMasterControlCmd(key, strJson);
@@ -45,21 +37,6 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson)
}
}
}
// else if(key == DB_TO_PM_EQUIPMENTCMD)
// {
// m_pm->m_MSDriverCmd = getEquipmentCmd(key, strJson);
// vector<DriverCommand> devCmdExt = m_pm->m_driver.loadDriverIdFromJson(strJson);
// if (devCmdExt.empty()) {
// LOG_F(WARNING, "控制指令");
// }
// else {
// for (auto& cmd : devCmdExt) {
// DevCmdExt event(cmd.id, cmd.cmd);
// PowerManagerFsm::dispatch(event);
// }
// }
// return true;
// }
// 次级配电状态处理
else if(key == m_secdistStateMsg.key_fb)
{
@@ -137,228 +114,6 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson)
return false;
}
// const MSControlCmd UpperCommManager::getMasterControlCmd(const std::string& key, const std::string& msg)
// {
// MSControlCmd cmd;
// if (parseControlCmdFromJson(cmd, msg)) {
// return cmd;
// }
// else
// {
// cout << MOOS::ConsoleColours::Red << "parse control cmd error:" << msg
// << MOOS::ConsoleColours::reset << endl;
// }
// }
// const DriverTable UpperCommManager::getEquipmentCmd(const std::string& key, const std::string& msg)
// {
// DriverTable cmd;
// if (m_pm->m_driver.loadDriverTableFromJson(msg, cmd) < 0) {
// cout << MOOS::ConsoleColours::Red << "get equipment cmd error:" << msg
// << MOOS::ConsoleColours::reset << endl;
// LOG_F(WARNING, "get equipment cmd error:%s", msg.c_str());
// }
// return cmd;
// }
// const DriverTable UpperCommManager::getSubDisState(const std::string& key, const std::string& msg)
// {
// DriverTable state;
// if (m_pm->m_driver.loadDriverTableFromJson(msg, state) < 0) {
// cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << msg
// << MOOS::ConsoleColours::reset << endl;
// LOG_F(WARNING, "get sub dis state error:%s", msg.c_str());
// }
// }
// const int UpperCommManager::getDeepth(const std::string& key, const std::string& msg){
// int deepth;
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// std::cerr << "JSON解析失败: " << errs << std::endl;
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// return -1;
// }
// // 检查并读取深度数组
// if (root.isMember("value_array_int32") && root["value_array_int32"].isArray()) {
// const Json::Value& array = root["value_array_int32"];
// if (array.size() >= 3) {
// // 计算三个深度值的平均值
// deepth = (array[0].asInt() + array[1].asInt() + array[2].asInt()) / 3;
// } else {
// LOG_F(WARNING, "深度数组元素不足3个");
// return -1;
// }
// } else {
// LOG_F(WARNING, "缺少或类型不匹配: value_array_int32");
// return -1;
// }
// return deepth;
// }
// MissionState UpperCommManager::getMission(const std::string& key, const std::string& msg) {
// MissionState mission;
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// std::cerr << "JSON解析失败: " << errs << std::endl;
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// return mission;
// }
// // 提取taskType_str
// if (root.isMember("taskType_str") && root["taskType_str"].isString()) {
// mission.type = TaskType::fromString(root["taskType_str"].asString());
// LOG_F(INFO, "taskType: %d", mission.type, root["taskType_str"].asString());
// }
// // 提取balanceEnabled_bool
// if (root.isMember("balanceEnabled_bool") && root["balanceEnabled_bool"].isBool()) {
// mission.enableBuoyancyAdjustment = root["balanceEnabled_bool"].asBool();
// LOG_F(INFO, "balanceEnabled_bool: %d", mission.enableBuoyancyAdjustment);
// }
// // 提取bowRudderUnfold_bool
// if (root.isMember("bowRudderUnfold_bool") && root["bowRudderUnfold_bool"].isBool()) {
// mission.enableBowRudder = root["bowRudderUnfold_bool"].asBool();
// LOG_F(INFO, "bowRudderUnfold_bool: %d", mission.enableBowRudder);
// }
// return mission;
// }
// int UpperCommManager::getSetOpCondition(const std::string& key, const std::string& msg)
// {
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// return -1;
// }
// // 检查并读取操作条件
// if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
// return root["state_uint8"].asUInt();
// LOG_F(INFO, "上位机指令:opCondition: %d", root["state_uint8"].asUInt());
// } else {
// LOG_F(WARNING, "缺少或类型不匹配: opCondition");
// return -1;
// }
// }
// int UpperCommManager::getSetOpMode(const std::string& key, const std::string& msg)
// {
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// return -1;
// }
// // 检查并读取操作模式
// if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) {
// return root["state_uint8"].asUInt();
// } else {
// LOG_F(WARNING, "缺少或类型不匹配: opMode");
// return -1;
// }
// }
// int UpperCommManager::getSetPMSys(const std::string& key, const std::string& msg)
// {
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// std::cerr << "JSON解析失败: " << errs << std::endl;
// return -1;
// }
// // 检查并读取电源系统设置
// if (root.isMember("powerCmd_uint8") && root["powerCmd_uint8"].isUInt()) {
// return root["powerCmd_uint8"].asUInt();
// } else {
// LOG_F(WARNING, "缺少或类型不匹配: powerCmd_uint8");
// return -1;
// }
// }
// DeviceSwitchCmd UpperCommManager::getSetDevSwitch(const std::string& key, const std::string& msg)
// {
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// DeviceSwitchCmd cmd;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// cmd.id = -1;
// }
// // 检查并读取设备开关状态
// if (root.isMember("id_uint8") && root["id_uint8"].isUInt()) {
// cmd.id = root["id_uint8"].asUInt();
// } else {
// cmd.id = -1;
// LOG_F(WARNING, "缺少或类型不匹配: id_uint8");
// }
// if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
// cmd.cmd = root["cmd_uint8"].asUInt();
// } else {
// LOG_F(WARNING, "缺少或类型不匹配: state_bool");
// }
// return cmd;
// }
// bool UpperCommManager::getTaskStop(const std::string& key, const std::string& msg) {
// Json::Value root;
// Json::CharReaderBuilder builder;
// JSONCPP_STRING errs;
// // 解析JSON字符串
// std::istringstream stream(msg);
// if (!Json::parseFromStream(builder, stream, &root, &errs)) {
// LOG_F(WARNING, "JSON解析失败: %s", errs.c_str());
// return false;
// }
// // 检查op_int32字段
// if (root.isMember("op_int32") && root["op_int32"].isInt()) {
// return root["op_int32"].asInt() == 1;
// }
// return false;
// }
// const std::string UpperCommManager::getSubDisCmd(DriverTable& driver)
// {
// return m_pm->m_driver.saveDriverTableToJson(&driver);
// }
void UpperCommManager::processPeriodicTasks() {
buildSystemReport();
std::string strJson;
@@ -374,50 +129,7 @@ void UpperCommManager::processPeriodicTasks() {
//发送仪表电状态
m_pm->sendNotification(m_equInsStateMsg.key,m_equInsStateMsg.buildMsg(m_pm->m_subDisSysState));
}
// bool UpperCommManager::parseControlCmdFromJson(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; // 成功
// }
void UpperCommManager::buildSystemReport() {
m_pmStateMsg.state.workCondition = m_pm->workCondition;
m_pmStateMsg.state.currentMod = m_pm->currentMod;
+18 -14
View File
@@ -192,10 +192,12 @@ typedef struct disHighVolBusState
unsigned char dcDcFaultWord1;
// 0x00: 正常状态
// Bit0: 通讯故障报警
// Bit1: 工作状态
// Bit2: 冷却泵1故障
// Bit3: 冷却泵2故障
// Bit1: 工作状态 1:启动,0:关闭
// Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0正常
// Bit3: 冷却泵2故障 冷却泵2故障 :1故障,0 正常
// Bit4: 冷却水泄露
// Bit5:冷却泵1运行状态 :1 运行,0 停止
// Bit6:冷却泵2运行状态 :1 运行,0 停止
unsigned char dcDcFaultWord2;
// 19: 动力母排绝缘状态(0x55 正常,0xAA 绝缘低)
unsigned char powerBusInsulationStatus;
@@ -326,7 +328,7 @@ typedef struct disHighBVolBusState
unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
//26. PLC控制电源电流
unsigned short plcControlPowerCurrent;
}disLowMainBusState;
} disLowMainBusState;
typedef struct disLowBusState
{
@@ -348,25 +350,27 @@ typedef struct disLowBusState
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
//13. 仪表电源失电信号 (0x55 正常,0xAA 故障)
unsigned char powerFailureSignal;
//14. 浸水报警 (0x55 正常,0xAA 故障)
//14. 应急电源失电信号 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerFailureSignal;
//15. 浸水报警 (0x55 正常,0xAA 故障)
unsigned char waterIngressionAlarm;
//15. 仪表母排电压
//16. 仪表母排电压
unsigned short instrumentBusbarVoltage;
//16. 仪表母排电流
//17. 仪表母排电流
unsigned short instrumentBusbarCurrent;
//17. UNIT1电流
//18. UNIT1电流
unsigned short unit1Current;
//18. UNIT2电流
//19. UNIT2电流
unsigned short unit2Current;
//19. UNIT3电流
//20. UNIT3电流
unsigned short unit3Current;
//20. UNIT5电流
//21. UNIT5电流
unsigned short unit5Current;
//21. 艏部PZ装置电流
//22. 艏部PZ装置电流
unsigned short bowPZDeviceCurrent;
//22. 应急锂电池组1电流
//23. 应急锂电池组1电流
unsigned short emergencyLithiumBatteryGroup1Current;
//23. 应急1汇流排电压
//24. 应急1汇流排电压
unsigned short emergency1BusbarVoltage;
}disLowBusState;
+818
View File
@@ -0,0 +1,818 @@
#include "SQLite.h"
#include <string>
#include <iostream>
#include "../loguru.hpp"
SQLite::SQLite(const std::string& dbPath)
{
if (sqlite3_open(dbPath.c_str(), &m_db) != SQLITE_OK) {
LOG_F(WARNING, "Can't open database: %s", sqlite3_errmsg(m_db));
m_db = nullptr;
}
m_dbPath = dbPath;
}
SQLite::~SQLite()
{
if (m_db) sqlite3_close(m_db);
}
bool SQLite::createTable(const std::string& tableName, const std::string& columns) {
if (!m_db) {
std::cerr << "数据库未打开,无法创建表: " << tableName << std::endl;
return false;
}
std::string sql = "CREATE TABLE IF NOT EXISTS " + tableName + " (" + columns + ");";
char* errMsg = nullptr;
int rc = sqlite3_exec(m_db, sql.c_str(), nullptr, nullptr, &errMsg);
if (rc != SQLITE_OK) {
std::cerr << "创建表失败: " << tableName << "\n错误信息: " << errMsg << std::endl;
sqlite3_free(errMsg);
return false;
}
return true;
}
bool SQLite::createTable()
{
// 1. 创建ccuState表
std::string ccuStateColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
fc_mode INTEGER,
fc_status INTEGER,
fc_fault_level INTEGER,
output_power_limit INTEGER,
total_generation_time INTEGER,
total_generation_power INTEGER,
fault_level_1 INTEGER,
fault_level_2 INTEGER,
fault_level_3 INTEGER,
fault_level_4 INTEGER,
hydrogen_capacity INTEGER,
liquid_oxygen_capacity INTEGER,
palladium_temp INTEGER,
main_pipe_pressure INTEGER,
aux_pipe_pressure INTEGER,
cabin_pressure1 INTEGER,
cabin_pressure2 INTEGER,
cabin_temp1 INTEGER,
cabin_temp2 INTEGER,
cabin_humidity1 INTEGER,
cabin_humidity2 INTEGER,
flame_detector1 INTEGER,
flame_detector2 INTEGER,
h2_concentration1 INTEGER,
h2_concentration2 INTEGER,
h2_concentration3 INTEGER,
o2_concentration1 INTEGER,
o2_concentration2 INTEGER,
ch3oh_concentration1 INTEGER,
ch3oh_concentration2 INTEGER,
reserved1_1 INTEGER, reserved1_2 INTEGER, reserved1_3 INTEGER, reserved1_4 INTEGER,
reserved1_5 INTEGER, reserved1_6 INTEGER, reserved1_7 INTEGER, reserved1_8 INTEGER,
reserved1_9 INTEGER, reserved1_10 INTEGER,
cabin_ox_concentration INTEGER,
cabin_temperature INTEGER,
cabin_humidity INTEGER,
cabin_pressure INTEGER,
power_cabin_ox_concentration INTEGER,
power_cabin_temperature INTEGER,
power_cabin_humidity INTEGER,
power_cabin_pressure INTEGER,
reserved2 INTEGER,
dyn_alarm_flag1 INTEGER, dyn_alarm_flag2 INTEGER, dyn_alarm_flag3 INTEGER,
dyn_alarm_flag4 INTEGER, dyn_alarm_flag5 INTEGER, dyn_alarm_flag6 INTEGER,
ins_alarm_flag1 INTEGER, ins_alarm_flag2 INTEGER, ins_alarm_flag3 INTEGER,
ins_alarm_flag4 INTEGER, ins_alarm_flag5 INTEGER, ins_alarm_flag6 INTEGER,
ins_relay_status1 INTEGER,
ins_relay_status2 INTEGER,
dyn_relay_status1 INTEGER,
dyn_relay_status2 INTEGER,
ins_max_discharge_power INTEGER,
dyn_max_discharge_power INTEGER,
ins_soc INTEGER,
dyn_soc INTEGER,
ins_total_energy INTEGER,
dyn_total_energy INTEGER,
ins_power_input INTEGER,
dyn_power_input INTEGER,
ins_charge_status INTEGER,
dyn_charge_status INTEGER,
ins_voltage_link INTEGER,
ins_voltage_pack INTEGER,
ins_current INTEGER,
ins_resistance_pos INTEGER,
ins_resistance_neg INTEGER,
dyn_voltage_link INTEGER,
dyn_voltage_pack INTEGER,
dyn_current INTEGER,
dyn_resistance_pos INTEGER,
dyn_resistance_neg INTEGER,
ins_emergency_status INTEGER,
dyn_emergency_status INTEGER,
reserved3_1 INTEGER, reserved3_2 INTEGER,
ins_soc_threshold1 INTEGER,
ins_soc_threshold2 INTEGER,
ins_soc_threshold3 INTEGER,
dyn_soc_threshold1 INTEGER,
dyn_soc_threshold2 INTEGER,
dyn_soc_threshold3 INTEGER,
ins_power_limit1 INTEGER,
ins_power_limit2 INTEGER,
dyn_power_limit1 INTEGER,
dyn_power_limit2 INTEGER,
device_online_flag1 INTEGER,
device_online_flag2 INTEGER,
reserved4 INTEGER,
heartbeat INTEGER
)";
if (!createTable("ccuState", ccuStateColumns)) {
return false;
}
// 2. 创建disHighVolBusState表
std::string disHighVolBusColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
fuelCellCircuitBreaker INTEGER,
powerLithiumBatteryCircuitBreaker INTEGER,
propulsionMotorCircuitBreaker INTEGER,
lithiumBatteryGroupInstrumentCircuitBreaker INTEGER,
dcDc5ModuleCircuitBreaker INTEGER,
bowHighVoltageDistributionBoxCircuitBreaker INTEGER,
sternFTDevice45CircuitBreaker INTEGER,
sternRudderSwitch1CircuitBreaker INTEGER,
sternRudderSwitch2CircuitBreaker INTEGER,
fbReservedCircuitBreaker INTEGER,
tyzReservedCircuitBreaker INTEGER,
reservedCircuitBreaker INTEGER,
dcDcFaultWord1 INTEGER,
dcDcFaultWord2 INTEGER,
powerBusInsulationStatus INTEGER,
aBusInsulationStatus INTEGER,
meterPowerLossSignal INTEGER,
emergencyPowerLossSignal INTEGER,
powerBusVoltage INTEGER,
dcDc5ModuleCurrent INTEGER,
powerBusCurrent INTEGER,
busbarAVoltage INTEGER,
propulsionMotorControlBoxCurrent INTEGER,
busbarACurrent INTEGER,
lithiumBatteryGroupMeterCurrent INTEGER,
bowHighVoltageDistributionBoxCurrent INTEGER,
sternFTDevice45Current INTEGER,
tyzReservedSwitchCurrent INTEGER,
sternRudderSwitch1Current INTEGER,
reservedCurrent1 INTEGER,
sternRudderSwitch2Current INTEGER,
reservedCurrent2 INTEGER,
fbReservedSwitchCurrent INTEGER,
reservedCurrent3 INTEGER,
coolWaterPressure INTEGER
)";
if (!createTable("disHighVolBusState", disHighVolBusColumns)) {
return false;
}
// 3. 创建disHighAVolBusState表
std::string disHighAVolBusColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
bowFTDevice123CircuitBreaker INTEGER,
actuatorCircuitBreaker INTEGER,
mastSteeringGearControlBoxCircuitBreaker INTEGER,
xczCircuitBreaker INTEGER,
bowRudderControlBoxCircuitBreaker INTEGER,
openWaterCoverStartCylinderCircuitBreaker INTEGER,
instrumentPowerFailureSignal INTEGER,
emergencyPowerFailureSignal INTEGER,
waterIngressionAlarm INTEGER,
busbarBVoltage INTEGER,
busbarBCurrent INTEGER,
bowFTDevice123Current INTEGER,
actuatorCurrent INTEGER,
mastSteeringGearControlBoxCurrent INTEGER,
xczCurrent INTEGER,
bowRudderControlBoxCurrent INTEGER,
openWaterCoverStartCylinderCurrent INTEGER
)";
if (!createTable("disHighAVolBusState", disHighAVolBusColumns)) {
return false;
}
// 4. 创建disLowMainBusState表
std::string disLowMainBusColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
lithiumBatteryGroupInstrumentCircuitBreaker INTEGER,
bowLowVoltageDistributionBoxCircuitBreaker INTEGER,
unit4InstrumentDC48VCircuitBreaker INTEGER,
dcC1DCDistributionPanelCircuitBreaker INTEGER,
reservedCircuitBreaker1 INTEGER,
reservedCircuitBreaker2 INTEGER,
emergencyLithiumBatteryGroup2CircuitBreaker INTEGER,
instrumentPowerFailureSignal INTEGER,
emergencyPowerFailureSignal INTEGER,
instrumentBusbarInsulationLow INTEGER,
instrumentBusbarVoltage INTEGER,
bowLowVoltageDistributionBoxCurrent INTEGER,
dcC1InstrumentDC48VCurrent INTEGER,
reservedCurrent1 INTEGER,
emergencyLithiumBatteryGroup2Current INTEGER,
lithiumBatteryGroupInstrumentCurrent INTEGER,
unit4InstrumentDC48VCurrent INTEGER,
reservedCurrent2 INTEGER,
emergency2BusbarVoltage INTEGER,
compositeEnergyManagementSystemEmergencyDC48VCurrent INTEGER,
fuelCellSecuritySystemEmergencyDC48VCurrent INTEGER,
plcControlPowerCurrent INTEGER
)";
if (!createTable("disLowMainBusState", disLowMainBusColumns)) {
return false;
}
// 5. 创建disLowBusState表
std::string disLowBusColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
unit1CircuitBreaker INTEGER,
unit2CircuitBreaker INTEGER,
unit3CircuitBreaker INTEGER,
unit5CircuitBreaker INTEGER,
bowPZDeviceCircuitBreaker INTEGER,
reservedCircuitBreaker1 INTEGER,
reservedCircuitBreaker2 INTEGER,
emergencyLithiumBatteryGroup1CircuitBreaker INTEGER,
powerFailureSignal INTEGER,
emergencyPowerFailureSignal INTEGER,
waterIngressionAlarm INTEGER,
instrumentBusbarVoltage INTEGER,
instrumentBusbarCurrent INTEGER,
unit1Current INTEGER,
unit2Current INTEGER,
unit3Current INTEGER,
unit5Current INTEGER,
bowPZDeviceCurrent INTEGER,
emergencyLithiumBatteryGroup1Current INTEGER,
emergency1BusbarVoltage INTEGER
)";
if (!createTable("disLowBusState", disLowBusColumns)) {
return false;
}
return true;
}
bool SQLite::insertData(const ccuState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO CcuState (
fc_mode, fc_status, fc_fault_level,
output_power_limit, total_generation_time, total_generation_power,
fault_level_1, fault_level_2, fault_level_3, fault_level_4,
hydrogen_capacity, liquid_oxygen_capacity,
palladium_temp, main_pipe_pressure, aux_pipe_pressure,
cabin_pressure1, cabin_pressure2, cabin_temp1, cabin_temp2,
cabin_humidity1, cabin_humidity2,
flame_detector1, flame_detector2,
h2_concentration1, h2_concentration2, h2_concentration3,
o2_concentration1, o2_concentration2,
ch3oh_concentration1, ch3oh_concentration2,
reserved1_1, reserved1_2, reserved1_3, reserved1_4, reserved1_5,
reserved1_6, reserved1_7, reserved1_8, reserved1_9, reserved1_10,
cabin_ox_concentration, cabin_temperature, cabin_humidity, cabin_pressure,
power_cabin_ox_concentration, power_cabin_temperature,
power_cabin_humidity, power_cabin_pressure,
reserved2,
dyn_alarm_flag1, dyn_alarm_flag2, dyn_alarm_flag3,
dyn_alarm_flag4, dyn_alarm_flag5, dyn_alarm_flag6,
ins_alarm_flag1, ins_alarm_flag2, ins_alarm_flag3,
ins_alarm_flag4, ins_alarm_flag5, ins_alarm_flag6,
ins_relay_status1, ins_relay_status2,
dyn_relay_status1, dyn_relay_status2,
ins_max_discharge_power, dyn_max_discharge_power,
ins_soc, dyn_soc,
ins_total_energy, dyn_total_energy,
ins_power_input, dyn_power_input,
ins_charge_status, dyn_charge_status,
ins_voltage_link, ins_voltage_pack, ins_current,
ins_resistance_pos, ins_resistance_neg,
dyn_voltage_link, dyn_voltage_pack, dyn_current,
dyn_resistance_pos, dyn_resistance_neg,
ins_emergency_status, dyn_emergency_status,
reserved3_1, reserved3_2,
ins_soc_threshold1, ins_soc_threshold2, ins_soc_threshold3,
dyn_soc_threshold1, dyn_soc_threshold2, dyn_soc_threshold3,
ins_power_limit1, ins_power_limit2,
dyn_power_limit1, dyn_power_limit2,
device_online_flag1, device_online_flag2,
reserved4, heartbeat
) VALUES (
?, ?, ?,
?, ?, ?,
?, ?, ?, ?,
?, ?,
?, ?, ?,
?, ?, ?, ?,
?, ?,
?, ?,
?, ?, ?,
?, ?,
?, ?,
?, ?, ?, ?, ?,
?, ?, ?, ?, ?,
?, ?, ?, ?,
?, ?, ?, ?,
?,
?, ?, ?,
?, ?, ?,
?, ?, ?,
?, ?, ?,
?, ?,
?, ?,
?, ?,
?, ?,
?, ?,
?, ?,
?, ?,
?, ?, ?,
?, ?,
?, ?, ?,
?, ?,
?, ?,
?, ?,
?, ?,
?, ?, ?,
?, ?, ?,
?, ?,
?, ?,
?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
// 辅助宏简化绑定
#define BIND_INT(value) sqlite3_bind_int(stmt, idx++, value)
#define BIND_16(value) sqlite3_bind_int(stmt, idx++, static_cast<int>(value))
#define BIND_32(value) sqlite3_bind_int64(stmt, idx++, static_cast<sqlite3_int64>(value))
BIND_INT(data.fc_mode);
BIND_INT(data.fc_status);
BIND_INT(data.fc_fault_level);
BIND_16(data.output_power_limit);
BIND_16(data.total_generation_time);
BIND_16(data.total_generation_power);
BIND_16(data.fault_level_1);
BIND_16(data.fault_level_2);
BIND_16(data.fault_level_3);
BIND_16(data.fault_level_4);
BIND_INT(data.hydrogen_capacity);
BIND_INT(data.liquid_oxygen_capacity);
BIND_16(data.palladium_temp);
BIND_16(data.main_pipe_pressure);
BIND_16(data.aux_pipe_pressure);
BIND_16(data.cabin_pressure1);
BIND_16(data.cabin_pressure2);
BIND_16(data.cabin_temp1);
BIND_16(data.cabin_temp2);
BIND_16(data.cabin_humidity1);
BIND_16(data.cabin_humidity2);
BIND_INT(data.flame_detector1);
BIND_INT(data.flame_detector2);
BIND_16(data.h2_concentration1);
BIND_16(data.h2_concentration2);
BIND_16(data.h2_concentration3);
BIND_16(data.o2_concentration1);
BIND_16(data.o2_concentration2);
BIND_16(data.ch3oh_concentration1);
BIND_16(data.ch3oh_concentration2);
for (int i = 0; i < 10; ++i) BIND_16(data.reserved1[i]);
BIND_16(data.cabin_ox_concentration);
BIND_16(data.cabin_temperature);
BIND_16(data.cabin_humidity);
BIND_16(data.cabin_pressure);
BIND_16(data.power_cabin_ox_concentration);
BIND_16(data.power_cabin_temperature);
BIND_16(data.power_cabin_humidity);
BIND_16(data.power_cabin_pressure);
BIND_INT(data.reserved2[0]);
for (int i = 0; i < 6; ++i) BIND_INT(data.dyn_alarm_flag[i]);
for (int i = 0; i < 6; ++i) BIND_INT(data.ins_alarm_flag[i]);
BIND_INT(data.ins_relay_status1);
BIND_INT(data.ins_relay_status2);
BIND_INT(data.dyn_relay_status1);
BIND_INT(data.dyn_relay_status2);
BIND_16(data.ins_max_discharge_power);
BIND_16(data.dyn_max_discharge_power);
BIND_INT(data.ins_soc);
BIND_INT(data.dyn_soc);
BIND_16(data.ins_total_energy);
BIND_16(data.dyn_total_energy);
BIND_16(data.ins_power_input);
BIND_16(data.dyn_power_input);
BIND_INT(data.ins_charge_status);
BIND_INT(data.dyn_charge_status);
BIND_16(data.ins_voltage_link);
BIND_16(data.ins_voltage_pack);
BIND_16(data.ins_current);
BIND_16(data.ins_resistance_pos);
BIND_16(data.ins_resistance_neg);
BIND_16(data.dyn_voltage_link);
BIND_16(data.dyn_voltage_pack);
BIND_16(data.dyn_current);
BIND_16(data.dyn_resistance_pos);
BIND_16(data.dyn_resistance_neg);
BIND_INT(data.ins_emergency_status);
BIND_INT(data.dyn_emergency_status);
BIND_INT(data.reserved3[0]);
BIND_INT(data.reserved3[1]);
BIND_INT(data.ins_soc_threshold1);
BIND_INT(data.ins_soc_threshold2);
BIND_INT(data.ins_soc_threshold3);
BIND_INT(data.dyn_soc_threshold1);
BIND_INT(data.dyn_soc_threshold2);
BIND_INT(data.dyn_soc_threshold3);
BIND_INT(data.ins_power_limit1);
BIND_INT(data.ins_power_limit2);
BIND_INT(data.dyn_power_limit1);
BIND_INT(data.dyn_power_limit2);
BIND_32(data.device_online_flag1);
BIND_32(data.device_online_flag2);
BIND_32(data.reserved4);
BIND_32(data.heartbeat);
#undef BIND_INT
#undef BIND_16
#undef BIND_32
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disHighVolBusState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disHighVolBusState (
fuelCellCircuitBreaker,
powerLithiumBatteryCircuitBreaker,
propulsionMotorCircuitBreaker,
lithiumBatteryGroupInstrumentCircuitBreaker,
dcDc5ModuleCircuitBreaker,
bowHighVoltageDistributionBoxCircuitBreaker,
sternFTDevice45CircuitBreaker,
sternRudderSwitch1CircuitBreaker,
sternRudderSwitch2CircuitBreaker,
fbReservedCircuitBreaker,
tyzReservedCircuitBreaker,
reservedCircuitBreaker,
dcDcFaultWord1,
dcDcFaultWord2,
powerBusInsulationStatus,
aBusInsulationStatus,
meterPowerLossSignal,
emergencyPowerLossSignal,
powerBusVoltage,
dcDc5ModuleCurrent,
powerBusCurrent,
busbarAVoltage,
propulsionMotorControlBoxCurrent,
busbarACurrent,
lithiumBatteryGroupMeterCurrent,
bowHighVoltageDistributionBoxCurrent,
sternFTDevice45Current,
tyzReservedSwitchCurrent,
sternRudderSwitch1Current,
reservedCurrent1,
sternRudderSwitch2Current,
reservedCurrent2,
fbReservedSwitchCurrent,
reservedCurrent3,
coolWaterPressure
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(data.fuelCellCircuitBreaker);
BIND_INT(data.powerLithiumBatteryCircuitBreaker);
BIND_INT(data.propulsionMotorCircuitBreaker);
BIND_INT(data.lithiumBatteryGroupInstrumentCircuitBreaker);
BIND_INT(data.dcDc5ModuleCircuitBreaker);
BIND_INT(data.bowHighVoltageDistributionBoxCircuitBreaker);
BIND_INT(data.sternFTDevice45CircuitBreaker);
BIND_INT(data.sternRudderSwitch1CircuitBreaker);
BIND_INT(data.sternRudderSwitch2CircuitBreaker);
BIND_INT(data.fbReservedCircuitBreaker);
BIND_INT(data.tyzReservedCircuitBreaker);
BIND_INT(data.reservedCircuitBreaker);
BIND_INT(data.dcDcFaultWord1);
BIND_INT(data.dcDcFaultWord2);
BIND_INT(data.powerBusInsulationStatus);
BIND_INT(data.aBusInsulationStatus);
BIND_INT(data.meterPowerLossSignal);
BIND_INT(data.emergencyPowerLossSignal);
BIND_INT(data.powerBusVoltage);
BIND_INT(data.dcDc5ModuleCurrent);
BIND_INT(data.powerBusCurrent);
BIND_INT(data.busbarAVoltage);
BIND_INT(data.propulsionMotorControlBoxCurrent);
BIND_INT(data.busbarACurrent);
BIND_INT(data.lithiumBatteryGroupMeterCurrent);
BIND_INT(data.bowHighVoltageDistributionBoxCurrent);
BIND_INT(data.sternFTDevice45Current);
BIND_INT(data.tyzReservedSwitchCurrent);
BIND_INT(data.sternRudderSwitch1Current);
BIND_INT(data.reservedCurrent1);
BIND_INT(data.sternRudderSwitch2Current);
BIND_INT(data.reservedCurrent2);
BIND_INT(data.fbReservedSwitchCurrent);
BIND_INT(data.reservedCurrent3);
BIND_INT(data.coolWaterPressure);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disHighAVolBusState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disHighAVolBusState (
bowFTDevice123CircuitBreaker,
actuatorCircuitBreaker,
mastSteeringGearControlBoxCircuitBreaker,
xczCircuitBreaker,
bowRudderControlBoxCircuitBreaker,
openWaterCoverStartCylinderCircuitBreaker,
instrumentPowerFailureSignal,
emergencyPowerFailureSignal,
waterIngressionAlarm,
busbarBVoltage,
busbarBCurrent,
bowFTDevice123Current,
actuatorCurrent,
mastSteeringGearControlBoxCurrent,
xczCurrent,
bowRudderControlBoxCurrent,
openWaterCoverStartCylinderCurrent
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(data.bowFTDevice123CircuitBreaker);
BIND_INT(data.actuatorCircuitBreaker);
BIND_INT(data.mastSteeringGearControlBoxCircuitBreaker);
BIND_INT(data.xczCircuitBreaker);
BIND_INT(data.bowRudderControlBoxCircuitBreaker);
BIND_INT(data.openWaterCoverStartCylinderCircuitBreaker);
BIND_INT(data.instrumentPowerFailureSignal);
BIND_INT(data.emergencyPowerFailureSignal);
BIND_INT(data.waterIngressionAlarm);
BIND_INT(data.busbarBVoltage);
BIND_INT(data.busbarBCurrent);
BIND_INT(data.bowFTDevice123Current);
BIND_INT(data.actuatorCurrent);
BIND_INT(data.mastSteeringGearControlBoxCurrent);
BIND_INT(data.xczCurrent);
BIND_INT(data.bowRudderControlBoxCurrent);
BIND_INT(data.openWaterCoverStartCylinderCurrent);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disLowMainBusState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disLowMainBusState (
lithiumBatteryGroupInstrumentCircuitBreaker,
bowLowVoltageDistributionBoxCircuitBreaker,
unit4InstrumentDC48VCircuitBreaker,
dcC1DCDistributionPanelCircuitBreaker,
reservedCircuitBreaker1,
reservedCircuitBreaker2,
emergencyLithiumBatteryGroup2CircuitBreaker,
instrumentPowerFailureSignal,
emergencyPowerFailureSignal,
instrumentBusbarInsulationLow,
instrumentBusbarVoltage,
bowLowVoltageDistributionBoxCurrent,
dcC1InstrumentDC48VCurrent,
reservedCurrent1,
emergencyLithiumBatteryGroup2Current,
lithiumBatteryGroupInstrumentCurrent,
unit4InstrumentDC48VCurrent,
reservedCurrent2,
emergency2BusbarVoltage,
compositeEnergyManagementSystemEmergencyDC48VCurrent,
fuelCellSecuritySystemEmergencyDC48VCurrent,
plcControlPowerCurrent
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(data.lithiumBatteryGroupInstrumentCircuitBreaker);
BIND_INT(data.bowLowVoltageDistributionBoxCircuitBreaker);
BIND_INT(data.unit4InstrumentDC48VCircuitBreaker);
BIND_INT(data.dcC1DCDistributionPanelCircuitBreaker);
BIND_INT(data.reservedCircuitBreaker1);
BIND_INT(data.reservedCircuitBreaker2);
BIND_INT(data.emergencyLithiumBatteryGroup2CircuitBreaker);
BIND_INT(data.instrumentPowerFailureSignal);
BIND_INT(data.emergencyPowerFailureSignal);
BIND_INT(data.instrumentBusbarInsulationLow);
BIND_INT(data.instrumentBusbarVoltage);
BIND_INT(data.bowLowVoltageDistributionBoxCurrent);
BIND_INT(data.dcC1InstrumentDC48VCurrent);
BIND_INT(data.reservedCurrent1);
BIND_INT(data.emergencyLithiumBatteryGroup2Current);
BIND_INT(data.lithiumBatteryGroupInstrumentCurrent);
BIND_INT(data.unit4InstrumentDC48VCurrent);
BIND_INT(data.reservedCurrent2);
BIND_INT(data.emergency2BusbarVoltage);
BIND_INT(data.compositeEnergyManagementSystemEmergencyDC48VCurrent);
BIND_INT(data.fuelCellSecuritySystemEmergencyDC48VCurrent);
BIND_INT(data.plcControlPowerCurrent);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disLowBusState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disLowBusState (
unit1CircuitBreaker,
unit2CircuitBreaker,
unit3CircuitBreaker,
unit5CircuitBreaker,
bowPZDeviceCircuitBreaker,
reservedCircuitBreaker1,
reservedCircuitBreaker2,
emergencyLithiumBatteryGroup1CircuitBreaker,
powerFailureSignal,
emergencyPowerFailureSignal,
waterIngressionAlarm,
instrumentBusbarVoltage,
instrumentBusbarCurrent,
unit1Current,
unit2Current,
unit3Current,
unit5Current,
bowPZDeviceCurrent,
emergencyLithiumBatteryGroup1Current,
emergency1BusbarVoltage
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(data.unit1CircuitBreaker);
BIND_INT(data.unit2CircuitBreaker);
BIND_INT(data.unit3CircuitBreaker);
BIND_INT(data.unit5CircuitBreaker);
BIND_INT(data.bowPZDeviceCircuitBreaker);
BIND_INT(data.reservedCircuitBreaker1);
BIND_INT(data.reservedCircuitBreaker2);
BIND_INT(data.emergencyLithiumBatteryGroup1CircuitBreaker);
BIND_INT(data.powerFailureSignal);
BIND_INT(data.emergencyPowerFailureSignal);
BIND_INT(data.waterIngressionAlarm);
BIND_INT(data.instrumentBusbarVoltage);
BIND_INT(data.instrumentBusbarCurrent);
BIND_INT(data.unit1Current);
BIND_INT(data.unit2Current);
BIND_INT(data.unit3Current);
BIND_INT(data.unit5Current);
BIND_INT(data.bowPZDeviceCurrent);
BIND_INT(data.emergencyLithiumBatteryGroup1Current);
BIND_INT(data.emergency1BusbarVoltage);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
+30
View File
@@ -0,0 +1,30 @@
#ifndef SQLITE_H
#define SQLITE_H
#include "sqlite3.h"
#include <string>
#include "../pmSysvariable.h"
class SQLite
{
private:
sqlite3* m_db;
public:
std::string m_dbPath;
SQLite(const std::string& dbName);
~SQLite();
//创建表
bool createTable();
bool createTable(const std::string& tableName, const std::string& columns);
// 插入数据函数
bool insertData(ccuState data);
bool insertData(disHighVolBusState data);
bool insertData(disHighAVolBusState data);
bool insertData(disLowMainBusState data);
bool insertData(disLowBusState data);
};
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+719
View File
@@ -0,0 +1,719 @@
/*
** 2006 June 7
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
**
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
**
*************************************************************************
** This header file defines the SQLite interface for use by
** shared libraries that want to be imported as extensions into
** an SQLite instance. Shared libraries that intend to be loaded
** as extensions by SQLite should #include this file instead of
** sqlite3.h.
*/
#ifndef SQLITE3EXT_H
#define SQLITE3EXT_H
#include "sqlite3.h"
/*
** The following structure holds pointers to all of the SQLite API
** routines.
**
** WARNING: In order to maintain backwards compatibility, add new
** interfaces to the end of this structure only. If you insert new
** interfaces in the middle of this structure, then older different
** versions of SQLite will not be able to load each other's shared
** libraries!
*/
struct sqlite3_api_routines {
void * (*aggregate_context)(sqlite3_context*,int nBytes);
int (*aggregate_count)(sqlite3_context*);
int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
int (*bind_double)(sqlite3_stmt*,int,double);
int (*bind_int)(sqlite3_stmt*,int,int);
int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
int (*bind_null)(sqlite3_stmt*,int);
int (*bind_parameter_count)(sqlite3_stmt*);
int (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
const char * (*bind_parameter_name)(sqlite3_stmt*,int);
int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
int (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
int (*busy_timeout)(sqlite3*,int ms);
int (*changes)(sqlite3*);
int (*close)(sqlite3*);
int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
int eTextRep,const char*));
int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
int eTextRep,const void*));
const void * (*column_blob)(sqlite3_stmt*,int iCol);
int (*column_bytes)(sqlite3_stmt*,int iCol);
int (*column_bytes16)(sqlite3_stmt*,int iCol);
int (*column_count)(sqlite3_stmt*pStmt);
const char * (*column_database_name)(sqlite3_stmt*,int);
const void * (*column_database_name16)(sqlite3_stmt*,int);
const char * (*column_decltype)(sqlite3_stmt*,int i);
const void * (*column_decltype16)(sqlite3_stmt*,int);
double (*column_double)(sqlite3_stmt*,int iCol);
int (*column_int)(sqlite3_stmt*,int iCol);
sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol);
const char * (*column_name)(sqlite3_stmt*,int);
const void * (*column_name16)(sqlite3_stmt*,int);
const char * (*column_origin_name)(sqlite3_stmt*,int);
const void * (*column_origin_name16)(sqlite3_stmt*,int);
const char * (*column_table_name)(sqlite3_stmt*,int);
const void * (*column_table_name16)(sqlite3_stmt*,int);
const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
const void * (*column_text16)(sqlite3_stmt*,int iCol);
int (*column_type)(sqlite3_stmt*,int iCol);
sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
int (*complete)(const char*sql);
int (*complete16)(const void*sql);
int (*create_collation)(sqlite3*,const char*,int,void*,
int(*)(void*,int,const void*,int,const void*));
int (*create_collation16)(sqlite3*,const void*,int,void*,
int(*)(void*,int,const void*,int,const void*));
int (*create_function)(sqlite3*,const char*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*));
int (*create_function16)(sqlite3*,const void*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*));
int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
int (*data_count)(sqlite3_stmt*pStmt);
sqlite3 * (*db_handle)(sqlite3_stmt*);
int (*declare_vtab)(sqlite3*,const char*);
int (*enable_shared_cache)(int);
int (*errcode)(sqlite3*db);
const char * (*errmsg)(sqlite3*);
const void * (*errmsg16)(sqlite3*);
int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
int (*expired)(sqlite3_stmt*);
int (*finalize)(sqlite3_stmt*pStmt);
void (*free)(void*);
void (*free_table)(char**result);
int (*get_autocommit)(sqlite3*);
void * (*get_auxdata)(sqlite3_context*,int);
int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
int (*global_recover)(void);
void (*interruptx)(sqlite3*);
sqlite_int64 (*last_insert_rowid)(sqlite3*);
const char * (*libversion)(void);
int (*libversion_number)(void);
void *(*malloc)(int);
char * (*mprintf)(const char*,...);
int (*open)(const char*,sqlite3**);
int (*open16)(const void*,sqlite3**);
int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
void (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
void *(*realloc)(void*,int);
int (*reset)(sqlite3_stmt*pStmt);
void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
void (*result_double)(sqlite3_context*,double);
void (*result_error)(sqlite3_context*,const char*,int);
void (*result_error16)(sqlite3_context*,const void*,int);
void (*result_int)(sqlite3_context*,int);
void (*result_int64)(sqlite3_context*,sqlite_int64);
void (*result_null)(sqlite3_context*);
void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
void (*result_value)(sqlite3_context*,sqlite3_value*);
void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
const char*,const char*),void*);
void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
char * (*xsnprintf)(int,char*,const char*,...);
int (*step)(sqlite3_stmt*);
int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
char const**,char const**,int*,int*,int*);
void (*thread_cleanup)(void);
int (*total_changes)(sqlite3*);
void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
sqlite_int64),void*);
void * (*user_data)(sqlite3_context*);
const void * (*value_blob)(sqlite3_value*);
int (*value_bytes)(sqlite3_value*);
int (*value_bytes16)(sqlite3_value*);
double (*value_double)(sqlite3_value*);
int (*value_int)(sqlite3_value*);
sqlite_int64 (*value_int64)(sqlite3_value*);
int (*value_numeric_type)(sqlite3_value*);
const unsigned char * (*value_text)(sqlite3_value*);
const void * (*value_text16)(sqlite3_value*);
const void * (*value_text16be)(sqlite3_value*);
const void * (*value_text16le)(sqlite3_value*);
int (*value_type)(sqlite3_value*);
char *(*vmprintf)(const char*,va_list);
/* Added ??? */
int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
/* Added by 3.3.13 */
int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
int (*clear_bindings)(sqlite3_stmt*);
/* Added by 3.4.1 */
int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
void (*xDestroy)(void *));
/* Added by 3.5.0 */
int (*bind_zeroblob)(sqlite3_stmt*,int,int);
int (*blob_bytes)(sqlite3_blob*);
int (*blob_close)(sqlite3_blob*);
int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
int,sqlite3_blob**);
int (*blob_read)(sqlite3_blob*,void*,int,int);
int (*blob_write)(sqlite3_blob*,const void*,int,int);
int (*create_collation_v2)(sqlite3*,const char*,int,void*,
int(*)(void*,int,const void*,int,const void*),
void(*)(void*));
int (*file_control)(sqlite3*,const char*,int,void*);
sqlite3_int64 (*memory_highwater)(int);
sqlite3_int64 (*memory_used)(void);
sqlite3_mutex *(*mutex_alloc)(int);
void (*mutex_enter)(sqlite3_mutex*);
void (*mutex_free)(sqlite3_mutex*);
void (*mutex_leave)(sqlite3_mutex*);
int (*mutex_try)(sqlite3_mutex*);
int (*open_v2)(const char*,sqlite3**,int,const char*);
int (*release_memory)(int);
void (*result_error_nomem)(sqlite3_context*);
void (*result_error_toobig)(sqlite3_context*);
int (*sleep)(int);
void (*soft_heap_limit)(int);
sqlite3_vfs *(*vfs_find)(const char*);
int (*vfs_register)(sqlite3_vfs*,int);
int (*vfs_unregister)(sqlite3_vfs*);
int (*xthreadsafe)(void);
void (*result_zeroblob)(sqlite3_context*,int);
void (*result_error_code)(sqlite3_context*,int);
int (*test_control)(int, ...);
void (*randomness)(int,void*);
sqlite3 *(*context_db_handle)(sqlite3_context*);
int (*extended_result_codes)(sqlite3*,int);
int (*limit)(sqlite3*,int,int);
sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
const char *(*sql)(sqlite3_stmt*);
int (*status)(int,int*,int*,int);
int (*backup_finish)(sqlite3_backup*);
sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
int (*backup_pagecount)(sqlite3_backup*);
int (*backup_remaining)(sqlite3_backup*);
int (*backup_step)(sqlite3_backup*,int);
const char *(*compileoption_get)(int);
int (*compileoption_used)(const char*);
int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*),
void(*xDestroy)(void*));
int (*db_config)(sqlite3*,int,...);
sqlite3_mutex *(*db_mutex)(sqlite3*);
int (*db_status)(sqlite3*,int,int*,int*,int);
int (*extended_errcode)(sqlite3*);
void (*log)(int,const char*,...);
sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
const char *(*sourceid)(void);
int (*stmt_status)(sqlite3_stmt*,int,int);
int (*strnicmp)(const char*,const char*,int);
int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
int (*wal_autocheckpoint)(sqlite3*,int);
int (*wal_checkpoint)(sqlite3*,const char*);
void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
int (*vtab_config)(sqlite3*,int op,...);
int (*vtab_on_conflict)(sqlite3*);
/* Version 3.7.16 and later */
int (*close_v2)(sqlite3*);
const char *(*db_filename)(sqlite3*,const char*);
int (*db_readonly)(sqlite3*,const char*);
int (*db_release_memory)(sqlite3*);
const char *(*errstr)(int);
int (*stmt_busy)(sqlite3_stmt*);
int (*stmt_readonly)(sqlite3_stmt*);
int (*stricmp)(const char*,const char*);
int (*uri_boolean)(const char*,const char*,int);
sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64);
const char *(*uri_parameter)(const char*,const char*);
char *(*xvsnprintf)(int,char*,const char*,va_list);
int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
/* Version 3.8.7 and later */
int (*auto_extension)(void(*)(void));
int (*bind_blob64)(sqlite3_stmt*,int,const void*,sqlite3_uint64,
void(*)(void*));
int (*bind_text64)(sqlite3_stmt*,int,const char*,sqlite3_uint64,
void(*)(void*),unsigned char);
int (*cancel_auto_extension)(void(*)(void));
int (*load_extension)(sqlite3*,const char*,const char*,char**);
void *(*malloc64)(sqlite3_uint64);
sqlite3_uint64 (*msize)(void*);
void *(*realloc64)(void*,sqlite3_uint64);
void (*reset_auto_extension)(void);
void (*result_blob64)(sqlite3_context*,const void*,sqlite3_uint64,
void(*)(void*));
void (*result_text64)(sqlite3_context*,const char*,sqlite3_uint64,
void(*)(void*), unsigned char);
int (*strglob)(const char*,const char*);
/* Version 3.8.11 and later */
sqlite3_value *(*value_dup)(const sqlite3_value*);
void (*value_free)(sqlite3_value*);
int (*result_zeroblob64)(sqlite3_context*,sqlite3_uint64);
int (*bind_zeroblob64)(sqlite3_stmt*, int, sqlite3_uint64);
/* Version 3.9.0 and later */
unsigned int (*value_subtype)(sqlite3_value*);
void (*result_subtype)(sqlite3_context*,unsigned int);
/* Version 3.10.0 and later */
int (*status64)(int,sqlite3_int64*,sqlite3_int64*,int);
int (*strlike)(const char*,const char*,unsigned int);
int (*db_cacheflush)(sqlite3*);
/* Version 3.12.0 and later */
int (*system_errno)(sqlite3*);
/* Version 3.14.0 and later */
int (*trace_v2)(sqlite3*,unsigned,int(*)(unsigned,void*,void*,void*),void*);
char *(*expanded_sql)(sqlite3_stmt*);
/* Version 3.18.0 and later */
void (*set_last_insert_rowid)(sqlite3*,sqlite3_int64);
/* Version 3.20.0 and later */
int (*prepare_v3)(sqlite3*,const char*,int,unsigned int,
sqlite3_stmt**,const char**);
int (*prepare16_v3)(sqlite3*,const void*,int,unsigned int,
sqlite3_stmt**,const void**);
int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*));
void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*));
void *(*value_pointer)(sqlite3_value*,const char*);
int (*vtab_nochange)(sqlite3_context*);
int (*value_nochange)(sqlite3_value*);
const char *(*vtab_collation)(sqlite3_index_info*,int);
/* Version 3.24.0 and later */
int (*keyword_count)(void);
int (*keyword_name)(int,const char**,int*);
int (*keyword_check)(const char*,int);
sqlite3_str *(*str_new)(sqlite3*);
char *(*str_finish)(sqlite3_str*);
void (*str_appendf)(sqlite3_str*, const char *zFormat, ...);
void (*str_vappendf)(sqlite3_str*, const char *zFormat, va_list);
void (*str_append)(sqlite3_str*, const char *zIn, int N);
void (*str_appendall)(sqlite3_str*, const char *zIn);
void (*str_appendchar)(sqlite3_str*, int N, char C);
void (*str_reset)(sqlite3_str*);
int (*str_errcode)(sqlite3_str*);
int (*str_length)(sqlite3_str*);
char *(*str_value)(sqlite3_str*);
/* Version 3.25.0 and later */
int (*create_window_function)(sqlite3*,const char*,int,int,void*,
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
void (*xFinal)(sqlite3_context*),
void (*xValue)(sqlite3_context*),
void (*xInv)(sqlite3_context*,int,sqlite3_value**),
void(*xDestroy)(void*));
/* Version 3.26.0 and later */
const char *(*normalized_sql)(sqlite3_stmt*);
/* Version 3.28.0 and later */
int (*stmt_isexplain)(sqlite3_stmt*);
int (*value_frombind)(sqlite3_value*);
/* Version 3.30.0 and later */
int (*drop_modules)(sqlite3*,const char**);
/* Version 3.31.0 and later */
sqlite3_int64 (*hard_heap_limit64)(sqlite3_int64);
const char *(*uri_key)(const char*,int);
const char *(*filename_database)(const char*);
const char *(*filename_journal)(const char*);
const char *(*filename_wal)(const char*);
/* Version 3.32.0 and later */
const char *(*create_filename)(const char*,const char*,const char*,
int,const char**);
void (*free_filename)(const char*);
sqlite3_file *(*database_file_object)(const char*);
/* Version 3.34.0 and later */
int (*txn_state)(sqlite3*,const char*);
/* Version 3.36.1 and later */
sqlite3_int64 (*changes64)(sqlite3*);
sqlite3_int64 (*total_changes64)(sqlite3*);
/* Version 3.37.0 and later */
int (*autovacuum_pages)(sqlite3*,
unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
void*, void(*)(void*));
/* Version 3.38.0 and later */
int (*error_offset)(sqlite3*);
int (*vtab_rhs_value)(sqlite3_index_info*,int,sqlite3_value**);
int (*vtab_distinct)(sqlite3_index_info*);
int (*vtab_in)(sqlite3_index_info*,int,int);
int (*vtab_in_first)(sqlite3_value*,sqlite3_value**);
int (*vtab_in_next)(sqlite3_value*,sqlite3_value**);
/* Version 3.39.0 and later */
int (*deserialize)(sqlite3*,const char*,unsigned char*,
sqlite3_int64,sqlite3_int64,unsigned);
unsigned char *(*serialize)(sqlite3*,const char *,sqlite3_int64*,
unsigned int);
const char *(*db_name)(sqlite3*,int);
/* Version 3.40.0 and later */
int (*value_encoding)(sqlite3_value*);
/* Version 3.41.0 and later */
int (*is_interrupted)(sqlite3*);
/* Version 3.43.0 and later */
int (*stmt_explain)(sqlite3_stmt*,int);
/* Version 3.44.0 and later */
void *(*get_clientdata)(sqlite3*,const char*);
int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*));
};
/*
** This is the function signature used for all extension entry points. It
** is also defined in the file "loadext.c".
*/
typedef int (*sqlite3_loadext_entry)(
sqlite3 *db, /* Handle to the database. */
char **pzErrMsg, /* Used to set error string on failure. */
const sqlite3_api_routines *pThunk /* Extension API function pointers. */
);
/*
** The following macros redefine the API routines so that they are
** redirected through the global sqlite3_api structure.
**
** This header file is also used by the loadext.c source file
** (part of the main SQLite library - not an extension) so that
** it can get access to the sqlite3_api_routines structure
** definition. But the main library does not want to redefine
** the API. So the redefinition macros are only valid if the
** SQLITE_CORE macros is undefined.
*/
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
#define sqlite3_aggregate_context sqlite3_api->aggregate_context
#ifndef SQLITE_OMIT_DEPRECATED
#define sqlite3_aggregate_count sqlite3_api->aggregate_count
#endif
#define sqlite3_bind_blob sqlite3_api->bind_blob
#define sqlite3_bind_double sqlite3_api->bind_double
#define sqlite3_bind_int sqlite3_api->bind_int
#define sqlite3_bind_int64 sqlite3_api->bind_int64
#define sqlite3_bind_null sqlite3_api->bind_null
#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count
#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index
#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name
#define sqlite3_bind_text sqlite3_api->bind_text
#define sqlite3_bind_text16 sqlite3_api->bind_text16
#define sqlite3_bind_value sqlite3_api->bind_value
#define sqlite3_busy_handler sqlite3_api->busy_handler
#define sqlite3_busy_timeout sqlite3_api->busy_timeout
#define sqlite3_changes sqlite3_api->changes
#define sqlite3_close sqlite3_api->close
#define sqlite3_collation_needed sqlite3_api->collation_needed
#define sqlite3_collation_needed16 sqlite3_api->collation_needed16
#define sqlite3_column_blob sqlite3_api->column_blob
#define sqlite3_column_bytes sqlite3_api->column_bytes
#define sqlite3_column_bytes16 sqlite3_api->column_bytes16
#define sqlite3_column_count sqlite3_api->column_count
#define sqlite3_column_database_name sqlite3_api->column_database_name
#define sqlite3_column_database_name16 sqlite3_api->column_database_name16
#define sqlite3_column_decltype sqlite3_api->column_decltype
#define sqlite3_column_decltype16 sqlite3_api->column_decltype16
#define sqlite3_column_double sqlite3_api->column_double
#define sqlite3_column_int sqlite3_api->column_int
#define sqlite3_column_int64 sqlite3_api->column_int64
#define sqlite3_column_name sqlite3_api->column_name
#define sqlite3_column_name16 sqlite3_api->column_name16
#define sqlite3_column_origin_name sqlite3_api->column_origin_name
#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16
#define sqlite3_column_table_name sqlite3_api->column_table_name
#define sqlite3_column_table_name16 sqlite3_api->column_table_name16
#define sqlite3_column_text sqlite3_api->column_text
#define sqlite3_column_text16 sqlite3_api->column_text16
#define sqlite3_column_type sqlite3_api->column_type
#define sqlite3_column_value sqlite3_api->column_value
#define sqlite3_commit_hook sqlite3_api->commit_hook
#define sqlite3_complete sqlite3_api->complete
#define sqlite3_complete16 sqlite3_api->complete16
#define sqlite3_create_collation sqlite3_api->create_collation
#define sqlite3_create_collation16 sqlite3_api->create_collation16
#define sqlite3_create_function sqlite3_api->create_function
#define sqlite3_create_function16 sqlite3_api->create_function16
#define sqlite3_create_module sqlite3_api->create_module
#define sqlite3_create_module_v2 sqlite3_api->create_module_v2
#define sqlite3_data_count sqlite3_api->data_count
#define sqlite3_db_handle sqlite3_api->db_handle
#define sqlite3_declare_vtab sqlite3_api->declare_vtab
#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache
#define sqlite3_errcode sqlite3_api->errcode
#define sqlite3_errmsg sqlite3_api->errmsg
#define sqlite3_errmsg16 sqlite3_api->errmsg16
#define sqlite3_exec sqlite3_api->exec
#ifndef SQLITE_OMIT_DEPRECATED
#define sqlite3_expired sqlite3_api->expired
#endif
#define sqlite3_finalize sqlite3_api->finalize
#define sqlite3_free sqlite3_api->free
#define sqlite3_free_table sqlite3_api->free_table
#define sqlite3_get_autocommit sqlite3_api->get_autocommit
#define sqlite3_get_auxdata sqlite3_api->get_auxdata
#define sqlite3_get_table sqlite3_api->get_table
#ifndef SQLITE_OMIT_DEPRECATED
#define sqlite3_global_recover sqlite3_api->global_recover
#endif
#define sqlite3_interrupt sqlite3_api->interruptx
#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid
#define sqlite3_libversion sqlite3_api->libversion
#define sqlite3_libversion_number sqlite3_api->libversion_number
#define sqlite3_malloc sqlite3_api->malloc
#define sqlite3_mprintf sqlite3_api->mprintf
#define sqlite3_open sqlite3_api->open
#define sqlite3_open16 sqlite3_api->open16
#define sqlite3_prepare sqlite3_api->prepare
#define sqlite3_prepare16 sqlite3_api->prepare16
#define sqlite3_prepare_v2 sqlite3_api->prepare_v2
#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
#define sqlite3_profile sqlite3_api->profile
#define sqlite3_progress_handler sqlite3_api->progress_handler
#define sqlite3_realloc sqlite3_api->realloc
#define sqlite3_reset sqlite3_api->reset
#define sqlite3_result_blob sqlite3_api->result_blob
#define sqlite3_result_double sqlite3_api->result_double
#define sqlite3_result_error sqlite3_api->result_error
#define sqlite3_result_error16 sqlite3_api->result_error16
#define sqlite3_result_int sqlite3_api->result_int
#define sqlite3_result_int64 sqlite3_api->result_int64
#define sqlite3_result_null sqlite3_api->result_null
#define sqlite3_result_text sqlite3_api->result_text
#define sqlite3_result_text16 sqlite3_api->result_text16
#define sqlite3_result_text16be sqlite3_api->result_text16be
#define sqlite3_result_text16le sqlite3_api->result_text16le
#define sqlite3_result_value sqlite3_api->result_value
#define sqlite3_rollback_hook sqlite3_api->rollback_hook
#define sqlite3_set_authorizer sqlite3_api->set_authorizer
#define sqlite3_set_auxdata sqlite3_api->set_auxdata
#define sqlite3_snprintf sqlite3_api->xsnprintf
#define sqlite3_step sqlite3_api->step
#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata
#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup
#define sqlite3_total_changes sqlite3_api->total_changes
#define sqlite3_trace sqlite3_api->trace
#ifndef SQLITE_OMIT_DEPRECATED
#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings
#endif
#define sqlite3_update_hook sqlite3_api->update_hook
#define sqlite3_user_data sqlite3_api->user_data
#define sqlite3_value_blob sqlite3_api->value_blob
#define sqlite3_value_bytes sqlite3_api->value_bytes
#define sqlite3_value_bytes16 sqlite3_api->value_bytes16
#define sqlite3_value_double sqlite3_api->value_double
#define sqlite3_value_int sqlite3_api->value_int
#define sqlite3_value_int64 sqlite3_api->value_int64
#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type
#define sqlite3_value_text sqlite3_api->value_text
#define sqlite3_value_text16 sqlite3_api->value_text16
#define sqlite3_value_text16be sqlite3_api->value_text16be
#define sqlite3_value_text16le sqlite3_api->value_text16le
#define sqlite3_value_type sqlite3_api->value_type
#define sqlite3_vmprintf sqlite3_api->vmprintf
#define sqlite3_vsnprintf sqlite3_api->xvsnprintf
#define sqlite3_overload_function sqlite3_api->overload_function
#define sqlite3_prepare_v2 sqlite3_api->prepare_v2
#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
#define sqlite3_clear_bindings sqlite3_api->clear_bindings
#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob
#define sqlite3_blob_bytes sqlite3_api->blob_bytes
#define sqlite3_blob_close sqlite3_api->blob_close
#define sqlite3_blob_open sqlite3_api->blob_open
#define sqlite3_blob_read sqlite3_api->blob_read
#define sqlite3_blob_write sqlite3_api->blob_write
#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2
#define sqlite3_file_control sqlite3_api->file_control
#define sqlite3_memory_highwater sqlite3_api->memory_highwater
#define sqlite3_memory_used sqlite3_api->memory_used
#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc
#define sqlite3_mutex_enter sqlite3_api->mutex_enter
#define sqlite3_mutex_free sqlite3_api->mutex_free
#define sqlite3_mutex_leave sqlite3_api->mutex_leave
#define sqlite3_mutex_try sqlite3_api->mutex_try
#define sqlite3_open_v2 sqlite3_api->open_v2
#define sqlite3_release_memory sqlite3_api->release_memory
#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem
#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig
#define sqlite3_sleep sqlite3_api->sleep
#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit
#define sqlite3_vfs_find sqlite3_api->vfs_find
#define sqlite3_vfs_register sqlite3_api->vfs_register
#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister
#define sqlite3_threadsafe sqlite3_api->xthreadsafe
#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob
#define sqlite3_result_error_code sqlite3_api->result_error_code
#define sqlite3_test_control sqlite3_api->test_control
#define sqlite3_randomness sqlite3_api->randomness
#define sqlite3_context_db_handle sqlite3_api->context_db_handle
#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes
#define sqlite3_limit sqlite3_api->limit
#define sqlite3_next_stmt sqlite3_api->next_stmt
#define sqlite3_sql sqlite3_api->sql
#define sqlite3_status sqlite3_api->status
#define sqlite3_backup_finish sqlite3_api->backup_finish
#define sqlite3_backup_init sqlite3_api->backup_init
#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount
#define sqlite3_backup_remaining sqlite3_api->backup_remaining
#define sqlite3_backup_step sqlite3_api->backup_step
#define sqlite3_compileoption_get sqlite3_api->compileoption_get
#define sqlite3_compileoption_used sqlite3_api->compileoption_used
#define sqlite3_create_function_v2 sqlite3_api->create_function_v2
#define sqlite3_db_config sqlite3_api->db_config
#define sqlite3_db_mutex sqlite3_api->db_mutex
#define sqlite3_db_status sqlite3_api->db_status
#define sqlite3_extended_errcode sqlite3_api->extended_errcode
#define sqlite3_log sqlite3_api->log
#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64
#define sqlite3_sourceid sqlite3_api->sourceid
#define sqlite3_stmt_status sqlite3_api->stmt_status
#define sqlite3_strnicmp sqlite3_api->strnicmp
#define sqlite3_unlock_notify sqlite3_api->unlock_notify
#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint
#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint
#define sqlite3_wal_hook sqlite3_api->wal_hook
#define sqlite3_blob_reopen sqlite3_api->blob_reopen
#define sqlite3_vtab_config sqlite3_api->vtab_config
#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict
/* Version 3.7.16 and later */
#define sqlite3_close_v2 sqlite3_api->close_v2
#define sqlite3_db_filename sqlite3_api->db_filename
#define sqlite3_db_readonly sqlite3_api->db_readonly
#define sqlite3_db_release_memory sqlite3_api->db_release_memory
#define sqlite3_errstr sqlite3_api->errstr
#define sqlite3_stmt_busy sqlite3_api->stmt_busy
#define sqlite3_stmt_readonly sqlite3_api->stmt_readonly
#define sqlite3_stricmp sqlite3_api->stricmp
#define sqlite3_uri_boolean sqlite3_api->uri_boolean
#define sqlite3_uri_int64 sqlite3_api->uri_int64
#define sqlite3_uri_parameter sqlite3_api->uri_parameter
#define sqlite3_uri_vsnprintf sqlite3_api->xvsnprintf
#define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2
/* Version 3.8.7 and later */
#define sqlite3_auto_extension sqlite3_api->auto_extension
#define sqlite3_bind_blob64 sqlite3_api->bind_blob64
#define sqlite3_bind_text64 sqlite3_api->bind_text64
#define sqlite3_cancel_auto_extension sqlite3_api->cancel_auto_extension
#define sqlite3_load_extension sqlite3_api->load_extension
#define sqlite3_malloc64 sqlite3_api->malloc64
#define sqlite3_msize sqlite3_api->msize
#define sqlite3_realloc64 sqlite3_api->realloc64
#define sqlite3_reset_auto_extension sqlite3_api->reset_auto_extension
#define sqlite3_result_blob64 sqlite3_api->result_blob64
#define sqlite3_result_text64 sqlite3_api->result_text64
#define sqlite3_strglob sqlite3_api->strglob
/* Version 3.8.11 and later */
#define sqlite3_value_dup sqlite3_api->value_dup
#define sqlite3_value_free sqlite3_api->value_free
#define sqlite3_result_zeroblob64 sqlite3_api->result_zeroblob64
#define sqlite3_bind_zeroblob64 sqlite3_api->bind_zeroblob64
/* Version 3.9.0 and later */
#define sqlite3_value_subtype sqlite3_api->value_subtype
#define sqlite3_result_subtype sqlite3_api->result_subtype
/* Version 3.10.0 and later */
#define sqlite3_status64 sqlite3_api->status64
#define sqlite3_strlike sqlite3_api->strlike
#define sqlite3_db_cacheflush sqlite3_api->db_cacheflush
/* Version 3.12.0 and later */
#define sqlite3_system_errno sqlite3_api->system_errno
/* Version 3.14.0 and later */
#define sqlite3_trace_v2 sqlite3_api->trace_v2
#define sqlite3_expanded_sql sqlite3_api->expanded_sql
/* Version 3.18.0 and later */
#define sqlite3_set_last_insert_rowid sqlite3_api->set_last_insert_rowid
/* Version 3.20.0 and later */
#define sqlite3_prepare_v3 sqlite3_api->prepare_v3
#define sqlite3_prepare16_v3 sqlite3_api->prepare16_v3
#define sqlite3_bind_pointer sqlite3_api->bind_pointer
#define sqlite3_result_pointer sqlite3_api->result_pointer
#define sqlite3_value_pointer sqlite3_api->value_pointer
/* Version 3.22.0 and later */
#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange
#define sqlite3_value_nochange sqlite3_api->value_nochange
#define sqlite3_vtab_collation sqlite3_api->vtab_collation
/* Version 3.24.0 and later */
#define sqlite3_keyword_count sqlite3_api->keyword_count
#define sqlite3_keyword_name sqlite3_api->keyword_name
#define sqlite3_keyword_check sqlite3_api->keyword_check
#define sqlite3_str_new sqlite3_api->str_new
#define sqlite3_str_finish sqlite3_api->str_finish
#define sqlite3_str_appendf sqlite3_api->str_appendf
#define sqlite3_str_vappendf sqlite3_api->str_vappendf
#define sqlite3_str_append sqlite3_api->str_append
#define sqlite3_str_appendall sqlite3_api->str_appendall
#define sqlite3_str_appendchar sqlite3_api->str_appendchar
#define sqlite3_str_reset sqlite3_api->str_reset
#define sqlite3_str_errcode sqlite3_api->str_errcode
#define sqlite3_str_length sqlite3_api->str_length
#define sqlite3_str_value sqlite3_api->str_value
/* Version 3.25.0 and later */
#define sqlite3_create_window_function sqlite3_api->create_window_function
/* Version 3.26.0 and later */
#define sqlite3_normalized_sql sqlite3_api->normalized_sql
/* Version 3.28.0 and later */
#define sqlite3_stmt_isexplain sqlite3_api->stmt_isexplain
#define sqlite3_value_frombind sqlite3_api->value_frombind
/* Version 3.30.0 and later */
#define sqlite3_drop_modules sqlite3_api->drop_modules
/* Version 3.31.0 and later */
#define sqlite3_hard_heap_limit64 sqlite3_api->hard_heap_limit64
#define sqlite3_uri_key sqlite3_api->uri_key
#define sqlite3_filename_database sqlite3_api->filename_database
#define sqlite3_filename_journal sqlite3_api->filename_journal
#define sqlite3_filename_wal sqlite3_api->filename_wal
/* Version 3.32.0 and later */
#define sqlite3_create_filename sqlite3_api->create_filename
#define sqlite3_free_filename sqlite3_api->free_filename
#define sqlite3_database_file_object sqlite3_api->database_file_object
/* Version 3.34.0 and later */
#define sqlite3_txn_state sqlite3_api->txn_state
/* Version 3.36.1 and later */
#define sqlite3_changes64 sqlite3_api->changes64
#define sqlite3_total_changes64 sqlite3_api->total_changes64
/* Version 3.37.0 and later */
#define sqlite3_autovacuum_pages sqlite3_api->autovacuum_pages
/* Version 3.38.0 and later */
#define sqlite3_error_offset sqlite3_api->error_offset
#define sqlite3_vtab_rhs_value sqlite3_api->vtab_rhs_value
#define sqlite3_vtab_distinct sqlite3_api->vtab_distinct
#define sqlite3_vtab_in sqlite3_api->vtab_in
#define sqlite3_vtab_in_first sqlite3_api->vtab_in_first
#define sqlite3_vtab_in_next sqlite3_api->vtab_in_next
/* Version 3.39.0 and later */
#ifndef SQLITE_OMIT_DESERIALIZE
#define sqlite3_deserialize sqlite3_api->deserialize
#define sqlite3_serialize sqlite3_api->serialize
#endif
#define sqlite3_db_name sqlite3_api->db_name
/* Version 3.40.0 and later */
#define sqlite3_value_encoding sqlite3_api->value_encoding
/* Version 3.41.0 and later */
#define sqlite3_is_interrupted sqlite3_api->is_interrupted
/* Version 3.43.0 and later */
#define sqlite3_stmt_explain sqlite3_api->stmt_explain
/* Version 3.44.0 and later */
#define sqlite3_get_clientdata sqlite3_api->get_clientdata
#define sqlite3_set_clientdata sqlite3_api->set_clientdata
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
/* This case when the file really is being compiled as a loadable
** extension */
# define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api=0;
# define SQLITE_EXTENSION_INIT2(v) sqlite3_api=v;
# define SQLITE_EXTENSION_INIT3 \
extern const sqlite3_api_routines *sqlite3_api;
#else
/* This case when the file is being statically linked into the
** application */
# define SQLITE_EXTENSION_INIT1 /*no-op*/
# define SQLITE_EXTENSION_INIT2(v) (void)v; /* unused parameter */
# define SQLITE_EXTENSION_INIT3 /*no-op*/
#endif
#endif /* SQLITE3EXT_H */