123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #include "infoclient.h"
- #include "databoardmem.h"
- InfoClient::InfoClient(qintptr socketDescriptor, QObject *parent)
- :QThread(parent){
- db = QSqlDatabase::database("DataDashBoard");
- AgentId = "";
- this->socketDescriptor = socketDescriptor;
- count = 0;
- isWorking = false;
- }
- void InfoClient::appendData(QString emitlog)
- {
- emit sendlog(emitlog);
- }
- void InfoClient::run()
- {
- QTcpSocket tcpSocket;
- if(!tcpSocket.setSocketDescriptor(socketDescriptor)){
- printf("setSocketDescriptor failed\n");
- emit write_error();
- return;
- }
- printf("InfoClient::run()\n");
- this->appendData("enter into InfoClient::run()");
- count = 0;
- isWorking = true;
- while(isWorking){
- if(tcpSocket.state()!=QTcpSocket::ConnectedState){
- tcpSocket.abort();
- emit write_error();
- return;
- }
- if(tcpSocket.waitForReadyRead(1000)){
- QByteArray cmd = tcpSocket.readAll();
- QString cmdlog = QString(cmd);
- this->appendData(cmdlog);
- QJsonParseError json_error;
- QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
- if(json_error.error==QJsonParseError::NoError){
- QJsonObject root = jsonDoc.object();
- QDateTime dt = QDateTime::currentDateTime();
- // QString stationid;
- if((!root.value("DeviceID").isUndefined())&&(!root.value("DeviceID").isNull())
- &&(!root.value("DeviceStatus").isUndefined())&&(!root.value("DeviceStatus").isNull())
- &&(!root.value("DeviceStatusNote").isUndefined())&&(!root.value("DeviceStatusNote").isNull())
- &&(!root.value("TimeStamp").isUndefined())&&(!root.value("TimeStamp").isNull())
- &&(!root.value("Values").isUndefined())&&(!root.value("Values").isNull()))
- {
- QString deviceID = root.value("DeviceID").toString();
- int deviceStatus = root.value("DeviceStatus").toInt();
- QString deviceStatusNote = root.value("DeviceStatusNote").toString();
- QString timeStamp = root.value("TimeStamp").toString();
- QJsonArray valueArray = root.value("Values").toArray();
- for(int s=0;s<16;s++){
- if(ytStationCount->station[s].Enabled==0x01){
- int alarm=0,fault=0,deviceStatustemp=0;
- for(int d=0;d<128;d++){
- if(ytStationCount->station[s].StationDevice[d].Enabled==0x01){
- if(QString::compare(deviceID,QString(ytStationCount->station[s].StationDevice[d].DeviceID))==0){
- ytStationCount->station[s].StationDevice[d].UpTime = dt.toTime_t();
- ytStationCount->station[s].StationDevice[d].DeviceStatus=deviceStatus;
- sprintf(ytStationCount->station[s].StationDevice[d].DeviceStatusNote,"%s",deviceStatusNote.toUtf8().data());
- sprintf(ytStationCount->station[s].LastCommTime,"%s",dt.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
- for(int n=0;n<valueArray.size();n++){
- QJsonObject obj = valueArray.at(n).toObject();
- if((!obj.value("BusAddr").isUndefined())&&(!obj.value("BusAddr").isNull())
- &&(!obj.value("AlarmStatus").isUndefined())&&(!obj.value("AlarmStatus").isNull())
- &&(!obj.value("Value").isUndefined())&&(!obj.value("Value").isNull())
- &&(!obj.value("Time").isUndefined())&&(!obj.value("Time").isNull())){
- int addr = obj.value("BusAddr").toInt();
- if((addr>=0)&&(addr<256)){
- for(int i=9;i>0;i--){
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].AlarmStatus;
- sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Time);
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Value;
- }
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus= obj.value("AlarmStatus").toInt();
- sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time,"%s",obj.value("Time").toString().toUtf8().data());
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value= obj.value("Value").toDouble();
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus;
- sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time);
- ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value;
- }
- }
- }
- }
- deviceStatustemp = ytStationCount->station[s].StationDevice[d].DeviceStatus;
- if(deviceStatustemp == 1){
- alarm++;
- }else if(deviceStatustemp == 2){
- fault++;
- }
- }
- }
- if(alarm == 0 && fault == 0)
- {
- ytStationCount->station[s].StationStatus=0;
- sprintf(ytStationCount->station[s].StationStatusNote,"正常");
- }
- if(alarm != 0)
- {
- ytStationCount->station[s].StationStatus=1;
- sprintf(ytStationCount->station[s].StationStatusNote,"告警");
- }
- if(fault != 0 && alarm == 0)
- {
- ytStationCount->station[s].StationStatus=2;
- sprintf(ytStationCount->station[s].StationStatusNote,"故障");
- }
- ytStationCount->station[s].DeviceAlarm=alarm;
- ytStationCount->station[s].DeviceFault=fault;
- }
- }
- }
- // cmd = QString("{\"CMD\":\"pushDeviceValues\",\"TimeStamp\":\"%1\",\"REPLY\":\"1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).toUtf8();
- // tcpSocket.write(cmd);
- // tcpSocket.waitForBytesWritten(3000);
- }
- }
- usleep(500000);
- }
- }
|