infoclient.cpp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. if(tcpSocket.state()!=QTcpSocket::ConnectedState){
  29. tcpSocket.abort();
  30. emit write_error();
  31. return;
  32. }
  33. if(tcpSocket.waitForReadyRead(1000)){
  34. QByteArray cmd = tcpSocket.readAll();
  35. QString cmdlog = QString(cmd);
  36. this->appendData(cmdlog);
  37. QJsonParseError json_error;
  38. QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
  39. if(json_error.error==QJsonParseError::NoError){
  40. QJsonObject root = jsonDoc.object();
  41. QDateTime dt = QDateTime::currentDateTime();
  42. // QString stationid;
  43. if((!root.value("DeviceID").isUndefined())&&(!root.value("DeviceID").isNull())
  44. &&(!root.value("DeviceStatus").isUndefined())&&(!root.value("DeviceStatus").isNull())
  45. &&(!root.value("DeviceStatusNote").isUndefined())&&(!root.value("DeviceStatusNote").isNull())
  46. &&(!root.value("TimeStamp").isUndefined())&&(!root.value("TimeStamp").isNull())
  47. &&(!root.value("Values").isUndefined())&&(!root.value("Values").isNull()))
  48. {
  49. QString deviceID = root.value("DeviceID").toString();
  50. int deviceStatus = root.value("DeviceStatus").toInt();
  51. QString deviceStatusNote = root.value("DeviceStatusNote").toString();
  52. QString timeStamp = root.value("TimeStamp").toString();
  53. QJsonArray valueArray = root.value("Values").toArray();
  54. for(int s=0;s<16;s++){
  55. if(ytStationCount->station[s].Enabled==0x01){
  56. int alarm=0,fault=0,deviceStatustemp=0;
  57. for(int d=0;d<128;d++){
  58. if(ytStationCount->station[s].StationDevice[d].Enabled==0x01){
  59. if(QString::compare(deviceID,QString(ytStationCount->station[s].StationDevice[d].DeviceID))==0){
  60. ytStationCount->station[s].StationDevice[d].UpTime = dt.toTime_t();
  61. ytStationCount->station[s].StationDevice[d].DeviceStatus=deviceStatus;
  62. sprintf(ytStationCount->station[s].StationDevice[d].DeviceStatusNote,"%s",deviceStatusNote.toUtf8().data());
  63. sprintf(ytStationCount->station[s].LastCommTime,"%s",dt.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
  64. for(int n=0;n<valueArray.size();n++){
  65. QJsonObject obj = valueArray.at(n).toObject();
  66. if((!obj.value("BusAddr").isUndefined())&&(!obj.value("BusAddr").isNull())
  67. &&(!obj.value("AlarmStatus").isUndefined())&&(!obj.value("AlarmStatus").isNull())
  68. &&(!obj.value("Value").isUndefined())&&(!obj.value("Value").isNull())
  69. &&(!obj.value("Time").isUndefined())&&(!obj.value("Time").isNull())){
  70. int addr = obj.value("BusAddr").toInt();
  71. if((addr>=0)&&(addr<256)){
  72. for(int i=9;i>0;i--){
  73. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].AlarmStatus;
  74. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Time);
  75. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Value;
  76. }
  77. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus= obj.value("AlarmStatus").toInt();
  78. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time,"%s",obj.value("Time").toString().toUtf8().data());
  79. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value= obj.value("Value").toDouble();
  80. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus;
  81. sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time);
  82. ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value;
  83. }
  84. }
  85. }
  86. }
  87. deviceStatustemp = ytStationCount->station[s].StationDevice[d].DeviceStatus;
  88. if(deviceStatustemp == 1){
  89. alarm++;
  90. }else if(deviceStatustemp == 2){
  91. fault++;
  92. }
  93. }
  94. }
  95. if(alarm == 0 && fault == 0)
  96. {
  97. ytStationCount->station[s].StationStatus=0;
  98. sprintf(ytStationCount->station[s].StationStatusNote,"正常");
  99. }
  100. if(alarm != 0)
  101. {
  102. ytStationCount->station[s].StationStatus=1;
  103. sprintf(ytStationCount->station[s].StationStatusNote,"告警");
  104. }
  105. if(fault != 0 && alarm == 0)
  106. {
  107. ytStationCount->station[s].StationStatus=2;
  108. sprintf(ytStationCount->station[s].StationStatusNote,"故障");
  109. }
  110. ytStationCount->station[s].DeviceAlarm=alarm;
  111. ytStationCount->station[s].DeviceFault=fault;
  112. }
  113. }
  114. }
  115. // cmd = QString("{\"CMD\":\"pushDeviceValues\",\"TimeStamp\":\"%1\",\"REPLY\":\"1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).toUtf8();
  116. // tcpSocket.write(cmd);
  117. // tcpSocket.waitForBytesWritten(3000);
  118. }
  119. }
  120. usleep(500000);
  121. }
  122. }