| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- #include "dataupdatethread.h"
- #include <QSqlQuery>
- #include <QSqlError>
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h> /* For O_* constants */
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/mman.h> /* For shm_open, mmap, ftruncate, etc */
- #include <sys/stat.h> /* For mode constants */
- #include <errno.h>
- #include <unistd.h>
- #include <QtSql>
- DataUpdateThread::DataUpdateThread(QObject *parent)
- :QThread(parent)
- {
- isRunStats=true;
- nMaxCh=0;
- nReadType=0;
- m_shmData=0;
- bTacStatus=0;
- }
- DataUpdateThread::~DataUpdateThread()
- {
- isRunStats=false;
- m_db.close();
- }
- void DataUpdateThread::InitSql()
- {
- m_db=QSqlDatabase::addDatabase("QSQLITE");
- m_db.setDatabaseName(strSqliteAddress);
- qDebug()<<strSqliteAddress;
- if (m_db.open())
- {
- qDebug()<<"SQL Open Success";
- isDBOpen=true;
- }else
- {
- qDebug()<<"SQL Open Error";
- isDBOpen=false;
- }
- if(isDBOpen)
- {
- ReadMaxCh();
- }
- nReadType=0;
- }
- void DataUpdateThread::run()
- {
- qDebug() <<"Start SQLThread";
- while (isRunStats)
- {
- if(pwidget)
- {
- if(nReadType==0)
- {
- int nMode=pwidget->getShowModeIndex();
- int nPage=pwidget->getShowPagIndex();
- if(nMode==0&&nPage!=0)
- {
- int nSubPag=pwidget->getShowSubIndex();
- ReadSqlData(nSubPag);
- pwidget->SetV(strV);
- pwidget->SetA(strA);
- pwidget->SetW(strW);
- pwidget->SetF(strF);
- pwidget->SetSUM(strS);
- pwidget->setCH(nSubPag);
- pwidget->update();
- //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
- }
- else if(nMode==0&&nPage==0)
- {
- pwidget->UpdateDate();
- pwidget->update();
- }
- }else
- {
- int nMode=pwidget->getShowModeIndex();
- int nPage=pwidget->getShowPagIndex();
- ReadShmMaxch();
- if(nMode==0&&nPage!=0)
- {
- int nSubPag=pwidget->getShowSubIndex();
- int nPHIndex=pwidget->getShowPHIndex();
- setShmChRead(nSubPag,nPHIndex);
- ReadShmData();
- pwidget->SetV(strV);
- pwidget->SetA(strA);
- pwidget->SetW(strW);
- pwidget->SetF(strF);
- pwidget->SetSUM(strS);
- pwidget->SetStatus(strStatus);
- pwidget->setCH(nSubPag);
- pwidget->SetT(strT);
- pwidget->SetH(strH);
- pwidget->update();
- //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
- }
- else if(nMode==0&&nPage==0)
- {
- pwidget->UpdateDate();
- pwidget->update();
- }
- }
- }
- sleep(1);
- }
- }
- void DataUpdateThread::ReadSqlData(int nCHID)
- {
- if(!isDBOpen)
- {
- return;
- }
- QSqlQuery sql_query(m_db);
- QString strSql=QString("SELECT * FROM Table_PowerInfo WHERE product_id=1 AND product_ch_id=%1 ORDER BY product_Index DESC LIMIT 1").arg(nCHID);
- //qDebug()<<strSql;
- if (sql_query.exec(strSql))
- {
- while (sql_query.next())
- {
- strV = sql_query.value("product_ch_voltage").toString();
- strA = sql_query.value("product_ch_current").toString();
- strW = sql_query.value("product_ch_power").toString();
- strF = sql_query.value("product_ch_power_freq").toString();
- strS = sql_query.value("product_ch_consumption").toString();
- //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
- }
- }else
- {
- qDebug()<<sql_query.lastError().text();
- }
- }
- void DataUpdateThread::ReadMaxCh()
- {
- if(!isDBOpen)
- {
- return;
- }
- QSqlQuery sql_query(m_db);
- QString strSql=QString("SELECT MAX(product_ch_id) as maxCh FROM Table_PowerManage ");
- //qDebug()<<strSql;
- if (sql_query.exec(strSql))
- {
- while (sql_query.next())
- {
- nMaxCh = sql_query.value("maxCh").toInt();
- if(pwidget)
- {
- pwidget->nMAXChildIndex=nMaxCh;
- }
- }
- }else
- {
- qDebug()<<sql_query.lastError().text();
- }
- }
- int DataUpdateThread::initShm()
- {
- /* 创建共享内存对象 */
- shm_fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
- if (shm_fd == -1) {
- perror("shm_open");
- return 1;
- }
- /* 设置共享内存对象的大小 */
- qDebug()<<"=======================================";
- qDebug()<<"SHM_SizeOf="<<sizeof(smartPDU_shm_data);
- qDebug()<<"=======================================";
- if (ftruncate(shm_fd, sizeof(smartPDU_shm_data)) == -1) {
- perror("ftruncate");
- return 2;
- }
- m_shmData = (smartPDU_shm_data*)mmap(NULL, sizeof(smartPDU_shm_data), PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
- memset(m_shmData,0,sizeof(smartPDU_shm_data));
- m_shmData->nSelectSensor=10;
- nReadType=1;
- return 0;
- }
- void DataUpdateThread::deleteShm()
- {
- m_shmData->bPDUSet=-1;
- if (munmap(m_shmData, sizeof(smartPDU_shm_data)) == -1) {
- perror("munmap");
- return;
- }
- if (shm_unlink(SHM_NAME) == -1) {
- perror("shm_unlink");
- return;
- }
- m_shmData=nullptr;
- }
- void DataUpdateThread::setShmChRead(int nCh,int nPhID)
- {
- if(nReadType!=1&&!m_shmData)
- {
- return;
- }
- if(m_shmData->bPDUSet>0)
- {
- if(m_shmData->nSelectPowerCH!=nCh)
- {
- m_shmData->nSelectPowerCH=nCh;
- qDebug()<<"ShmData_____bT_ACType:"<<bTacStatus<<"nSelectPowerCH:"<<m_shmData->nSelectPowerCH;
- bTacStatus=m_shmData->bT_ACType;
- pdu_Ctrl::instance()->isT_ACType=bTacStatus;
- if(bTacStatus==1)
- {
- if(m_shmData->nSelectPh!=nPhID)
- {
- m_shmData->nSelectPh=nPhID;
- qDebug()<<"ShmData_____nSelectPowerCH:"<<m_shmData->nSelectPowerCH<<"nSelectPh:"<<m_shmData->nSelectPh;
- }
- }else
- {
- m_shmData->nSelectPh=0;
- }
- m_shmData->bPDUSet=0;
- }
- }
- }
- void DataUpdateThread::ReadShmData()
- {
- if(nReadType!=1&&!m_shmData)
- {
- return;
- }
- if(m_shmData->bPDUSet>0)
- {
- if(m_shmData->fV>=0.1)
- {
- strV = QString::number(m_shmData->fV,'f',2);
- }else
- {
- strV = "0.00";
- }
- if(m_shmData->fA>=0.01)
- {
- strA = QString::number(m_shmData->fA,'f',2);
- }else
- {
- strA="0.00";
- }
- strW = QString::number(m_shmData->fW,'f',2);
- strF = QString::number(m_shmData->fF,'f',2);
- strS = QString::number(m_shmData->fS,'f',2);
- if(m_shmData->nStatus==0)
- {
- #ifdef Language_Zh
- strStatus="关";
- #elif
- strStatus="OFF";
- #endif
- }else
- {
- #ifdef Language_Zh
- strStatus="开";
- #elif
- strStatus="ON";
- #endif
- }
- strT = QString::number(m_shmData->fT,'f',2);
- strH = QString::number(m_shmData->fH,'f',2);
- }
- }
- void DataUpdateThread::ReadShmMaxch()
- {
- if(nReadType!=1&&!m_shmData)
- {
- if(pwidget)
- {
- pwidget->nMAXChildIndex=0;
- }
- return;
- }
- if(pwidget&&m_shmData->bPDUSet>0)
- {
- if(pwidget->nMAXChildIndex!=m_shmData->nMaxCh)
- {
- pwidget->nMAXChildIndex=m_shmData->nMaxCh;
- }
- }
- }
- int DataUpdateThread::isT_ACType()
- {
- return bTacStatus;
- }
|