#include "SubThread.h" #include MySQL sql; SubThread::SubThread() { isPause = false; isLoop = true; } void SubThread::ReStart(){ isPause = false; } void SubThread::PauseThread() { isPause = true; } void SubThread::KillThread() { isLoop = false; sql.close(); wait(); thread()->quit(); } QStringList All_SqlTable; QMap Sql_TableAndField; void createTablesOnce() { /* 建表 */ QMap AlarmHistory; AlarmHistory["故障代码"] = "TEXT"; AlarmHistory["报警内容"] = "TEXT"; AlarmHistory["排查方法"] = "TEXT"; sql.createTable("AlarmHistory", AlarmHistory); for (uint16_t i = 0; i < gOPC_NodeList.length(); ++i) { const QString &tbl = gOPC_SqlTable[gOPC_NodeList[i]]; if (!All_SqlTable.contains(tbl)) { All_SqlTable.append(tbl); } Sql_TableAndField[tbl].append(gOPC_SqlField[gOPC_NodeList[i]]); } for (uint16_t i = 0; i < All_SqlTable.length(); ++i) { QMap otherFields; for (const QString &field : Sql_TableAndField[All_SqlTable[i]]) { otherFields[field] = "TEXT"; } #if defined(Q_OS_LINUX) sql.createTable(All_SqlTable[i], otherFields); #elif defined(Q_OS_WIN) //qDebug() << All_SqlTable[i] << otherFields; #endif } } uint16_t OldAlarm = 0; void SubThread::executeThreadLogic() { // 在这里实现线程的逻辑 if (!sql.open("127.0.0.1", 3306, "zmj", "Zmj@123...", "DataRecord")) qDebug()<<"连接数据库失败!"; createTablesOnce(); while (isLoop) { QThread::msleep(CONFIG_EN_SUB_THREAD_TIME);//这个是子线程的基础时间,意在多长时间循环一次,单位毫秒 if(isPause) continue; uint16_t NewAlarm = gOPC_NodeValue["ns=6;s=::AsGlobalPV:AlarmCode.New"] .toUInt(); uint8_t NewAlarm_Dev = NewAlarm / 256; uint8_t NewAlarm_Ind = NewAlarm % 256; if(NewAlarm != OldAlarm && OldAlarm != 0){ QString Hex = QString("%1").arg(NewAlarm, 4, 16, QLatin1Char('0')).toUpper(); QString Text1 = AlarmText[NewAlarm_Dev][NewAlarm_Ind].AlarmText; QString Text2 = AlarmText[NewAlarm_Dev][NewAlarm_Ind].Troubleshoot; #if defined(Q_OS_LINUX) // 判断操作系统是否为Linux sql.insertPartialV("AlarmHistory", {"故障代码", "报警内容","排查方法"}, {Hex, Text1,Text2}); #elif defined(Q_OS_WIN) // 判断操作系统是否为Windows qDebug()<<"写数据库 AlarmHistory" << Hex << Text1 << Text2; #endif } OldAlarm = NewAlarm; /* 插入示例 */ for(uint16_t i=0;i otherFields; QStringList Field; QStringList Value; for(uint16_t j=0;j