infoclient.cpp 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #include "infoclient.h"
  2. #include "databoardmem.h"
  3. InfoClient::InfoClient(qintptr socketDescriptor, QObject *parent)
  4. :QThread(parent){
  5. db = QSqlDatabase::database("DataDashBoard");
  6. AgentId = "";
  7. this->socketDescriptor = socketDescriptor;
  8. count = 0;
  9. isWorking = false;
  10. }
  11. void InfoClient::appendData(QString emitlog)
  12. {
  13. emit sendlog(emitlog);
  14. }
  15. void InfoClient::run()
  16. {
  17. QTcpSocket tcpSocket;
  18. if(!tcpSocket.setSocketDescriptor(socketDescriptor)){
  19. printf("setSocketDescriptor failed\n");
  20. //emit write_error();
  21. return;
  22. }
  23. printf("InfoClient::run()\n");
  24. this->appendData("enter into InfoClient::run()");
  25. count = 0;
  26. isWorking = true;
  27. while(isWorking){
  28. // printf("tcpSocket.state() = %d\n",tcpSocket.state());
  29. // this->appendData(QString("tcpSocket.state() = %1").arg(tcpSocket.state()));
  30. if(tcpSocket.state()!=QTcpSocket::ConnectedState){
  31. printf("tcpSocket.state()!=QTcpSocket::ConnectedState = %d\n",tcpSocket.state());
  32. this->appendData(QString("tcpSocket.state()!=QTcpSocket::ConnectedState = %1").arg(tcpSocket.state()));
  33. tcpSocket.abort();
  34. //emit write_error();
  35. return;
  36. }
  37. if(tcpSocket.waitForReadyRead(1000)){
  38. QByteArray cmd = tcpSocket.readAll();
  39. QString cmdlog = QString(cmd);
  40. this->appendData(cmdlog);
  41. QJsonParseError json_error;
  42. QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
  43. if(json_error.error==QJsonParseError::NoError){
  44. QJsonObject root = jsonDoc.object();
  45. QDateTime dt = QDateTime::currentDateTime();
  46. // QString stationid;
  47. if((!root.value("DeviceID").isUndefined())&&(!root.value("DeviceID").isNull())
  48. &&(!root.value("DeviceStatus").isUndefined())&&(!root.value("DeviceStatus").isNull())
  49. &&(!root.value("DeviceStatusNote").isUndefined())&&(!root.value("DeviceStatusNote").isNull())
  50. &&(!root.value("TimeStamp").isUndefined())&&(!root.value("TimeStamp").isNull())
  51. &&(!root.value("Values").isUndefined())&&(!root.value("Values").isNull()))
  52. {
  53. QString deviceID = root.value("DeviceID").toString();
  54. int deviceStatus = root.value("DeviceStatus").toInt();
  55. QString deviceStatusNote = root.value("DeviceStatusNote").toString();
  56. QString timeStamp = root.value("TimeStamp").toString();
  57. QJsonArray valueArray = root.value("Values").toArray();
  58. for(int s=0;s<16;s++){
  59. if(ytStationCount->station[s].Enabled==0x01){
  60. int alarm=0,fault=0,deviceStatustemp=0;
  61. for(int d=0;d<128;d++){
  62. if(ytStationCount->station[s].StationDevice[d].Enabled==0x01){
  63. if(QString::compare(deviceID,QString(ytStationCount->station[s].StationDevice[d].DeviceID))==0){
  64. ytStationCount->station[s].StationDevice[d].UpTime = dt.toTime_t();
  65. ytStationCount->station[s].StationDevice[d].DeviceStatus=deviceStatus;
  66. sprintf(ytStationCount->station[s].StationDevice[d].DeviceStatusNote,"%s",deviceStatusNote.toUtf8().data());
  67. sprintf(ytStationCount->station[s].LastCommTime,"%s",dt.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
  68. for(int n=0;n<valueArray.size();n++){
  69. QJsonObject obj = valueArray.at(n).toObject();
  70. if((!obj.value("BusAddr").isUndefined())&&(!obj.value("BusAddr").isNull())
  71. &&(!obj.value("AlarmStatus").isUndefined())&&(!obj.value("AlarmStatus").isNull())
  72. &&(!obj.value("Value").isUndefined())&&(!obj.value("Value").isNull())
  73. &&(!obj.value("Time").isUndefined())&&(!obj.value("Time").isNull())){
  74. int addr = obj.value("BusAddr").toInt();
  75. if((addr>=0)&&(addr<256)){
  76. for(int i=9;i>0;i--){
  77. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].AlarmStatus;
  78. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Time);
  79. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Value;
  80. }
  81. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus= obj.value("AlarmStatus").toInt();
  82. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time,"%s",obj.value("Time").toString().toUtf8().data());
  83. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value= obj.value("Value").toDouble();
  84. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus;
  85. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time);
  86. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value;
  87. }
  88. }
  89. }
  90. }
  91. deviceStatustemp = ytStationCount->station[s].StationDevice[d].DeviceStatus;
  92. if(deviceStatustemp == 1){
  93. alarm++;
  94. }else if(deviceStatustemp == 2){
  95. fault++;
  96. }
  97. }
  98. }
  99. if(alarm == 0 && fault == 0)
  100. {
  101. ytStationCount->station[s].StationStatus=0;
  102. sprintf(ytStationCount->station[s].StationStatusNote,"正常");
  103. }
  104. if(alarm != 0)
  105. {
  106. ytStationCount->station[s].StationStatus=1;
  107. sprintf(ytStationCount->station[s].StationStatusNote,"告警");
  108. }
  109. if(fault != 0 && alarm == 0)
  110. {
  111. ytStationCount->station[s].StationStatus=2;
  112. sprintf(ytStationCount->station[s].StationStatusNote,"故障");
  113. }
  114. ytStationCount->station[s].DeviceAlarm=alarm;
  115. ytStationCount->station[s].DeviceFault=fault;
  116. }
  117. }
  118. }
  119. // cmd = QString("{\"CMD\":\"pushDeviceValues\",\"TimeStamp\":\"%1\",\"REPLY\":\"1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).toUtf8();
  120. // tcpSocket.write(cmd);
  121. // tcpSocket.waitForBytesWritten(3000);
  122. }
  123. }
  124. usleep(500000);
  125. }
  126. }