#include "SubThread.h" #include #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); // 通过DataCenter安全访问节点列表 DataCenter* dataCenter = DataCenter::instance(); // // 使用新的公共接口获取节点列表 // QStringList nodeList = dataCenter->getNodeList(); // for (uint16_t i = 0; i < nodeList.length(); ++i) { // const QString &tbl = gOPC_SqlTable[nodeList[i]]; // if (!All_SqlTable.contains(tbl)) { // All_SqlTable.append(tbl); // } // Sql_TableAndField[tbl].append(gOPC_SqlField[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() { // 在这里实现线程的逻辑 bool ConnectOK = sql.open("127.0.0.1", 3306, "zmj", "Zmj@123...", "DataRecord"); isLoop = false; if (!ConnectOK) qDebug()<<"连接数据库失败!"; if(ConnectOK){ createTablesOnce(); isLoop = true; } DataCenter* dataCenter = DataCenter::instance(); while (isLoop) { // QThread::msleep(CONFIG_EN_SUB_THREAD_TIME);//这个是子线程的基础时间,意在多长时间循环一次,单位毫秒 // if(isPause) continue; // // 通过DataCenter安全访问节点值 // //uint16_t NewAlarm = dataCenter->getNodeValueThreadSafe("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;jgetNodeValueThreadSafe(nodeId).toString(); // Field.append(field); // Value.append(raw); // } // #if defined(Q_OS_LINUX) // 判断操作系统是否为Linux // sql.insertPartial(All_SqlTable[i], Field,Value); // #elif defined(Q_OS_WIN) // 判断操作系统是否为Windows // //qDebug()<