Просмотр исходного кода

增加水表、液位和RTU推送告警的逻辑

james 2 недель назад
Родитель
Сommit
ae99f285d2

+ 9 - 2
DataProcessService/ytRTUProcess/rtucommthread.cpp

@@ -175,9 +175,16 @@ void RtuCommThread::checkIOvalue(QByteArray data, QDateTime t)
                 }
             }
         }else if(len==4){
-            if(rtuList->rtus[E3d.at(0)&0x0f].Enabled==0x01)
+//            if(rtuList->rtus[E3d.at(0)&0x0f].Enabled==0x01)
+//            {
+//                emit getIoReport(DevIdx, ((E3d.at(0)>>4)&0x0f)*10+(E3d.at(0)&0x0f), E3d, (E3d.at(1)&0x01)==0x01?1:0, t);
+//            }
+            for(int i=1;i<16;i++)
             {
-                emit getIoReport(DevIdx, ((E3d.at(0)>>4)&0x0f)*10+(E3d.at(0)&0x0f), E3d, (E3d.at(1)&0x01)==0x01?1:0, t);
+                if((rtuList->rtus[DevIdx].Port[i].Enabled==0x01)&&((i&0x0f)==(E3d.at(0)&0x0f)))
+                {
+                    emit getIoReport(DevIdx, ((E3d.at(0)>>4)&0x0f)*10+(E3d.at(0)&0x0f), E3d, (E3d.at(1)&0x01)==0x01?1:0, t);
+                }
             }
         }
     }

+ 1 - 1
DataProcessService/ytWarterMkProcess/databasethread.cpp

@@ -70,7 +70,7 @@ void DatabaseThread::check_devicelist()
     printf("database thread check_devicelist()\n");
     uint nowTime = QDateTime::currentDateTime().toTime_t();
     hour=QTime::currentTime().hour();
-    QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,4,128) and owner_xh !=''");
+    QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,4,5,128) and owner_xh !=''");
     QSqlQuery qry = db.exec(sql);
     int nrow= 0;
     while(qry.next()){

+ 2 - 0
DataProcessService/ytWarterMkProcess/mkcore.cpp

@@ -46,6 +46,8 @@ MKCore::MKCore(QObject *parent) :
     DevIdx3 = -1;
     mkwaterserver = new Mkwaterserver(this);
     connect(mkwaterserver,&Mkwaterserver::getCommData,this,&MKCore::getCommData);
+    connect(mkwaterserver,&Mkwaterserver::getValue,this,&MKCore::getValue);
+    connect(mkwaterserver,&Mkwaterserver::getAlarm,this,&MKCore::getAlarm);
     dbThread->start();
     logThread->start();
     mqttinfoIdx = 1;

+ 65 - 14
DataProcessService/ytWarterMkProcess/nbsensorthread.cpp

@@ -78,6 +78,38 @@ QByteArray MkSensorThread::mkRtn()
     return ret;
 }
 
+// 将16进制字符串转换为ASCII字符串
+QString hexToAscii(QString hexString)
+{
+    // 移除所有空格(处理类似"48 65 6C 6C 6F"这样的格式)
+    QString hex = hexString.remove(' ');
+
+    // 检查16进制字符串长度是否为偶数
+    if (hex.length() % 2 != 0) {
+        qWarning() << "Invalid hex string: length is odd";
+        return QString();
+    }
+
+    QByteArray byteArray;
+
+    // 每次处理两个字符(一个字节)
+    for (int i = 0; i < hex.length(); i += 2) {
+        QString hexPair = hex.mid(i, 2);
+        bool ok;
+        char byte = hexPair.toUInt(&ok, 16); // 将16进制字符串转换为字节
+
+        if (!ok) {
+            qWarning() << "Invalid hex character:" << hexPair;
+            return QString();
+        }
+
+        byteArray.append(byte);
+    }
+
+    // 将字节数组转换为ASCII字符串
+    return QString(byteArray);
+}
+
 void MkSensorThread::checkDevice(QString deviceid)
 {
     if((DevIdx3>=0)&&(DevIdx3<10240))
@@ -133,10 +165,12 @@ void MkSensorThread::check_framedata(QString data, QString etime, QString ip)
 //            QDateTime stime = QDateTime::fromTime_t(static_cast<uint>(((Dat[2]&0x000000ff)<<24)|((Dat[3]&0x000000ff)<<16)|((Dat[4]&0x000000ff)<<8)|(Dat[5]&0x000000ff)));
             quint16 bodyLen = static_cast<quint16>(((Dat[3]&0x00ff)<<8)|(Dat[4]&0x00ff));
             table.append( QString("bodyLen:%1,").arg(bodyLen));
-            QString device_code = "";
+            QString device_code1 = "";
             for(int i=5;i<17;i++){
-                device_code.append( QString("%1").arg(Dat[i]&0xff,2,16,QLatin1Char('0')));
+                device_code1.append( QString("%1").arg(Dat[i]&0xff,2,16,QLatin1Char('0')));
             }
+            QString device_code = hexToAscii(device_code1);
+            checkDevice(device_code);
             table.append( QString("device_code:%1,").arg(device_code));
 
             int batteryLevel = 0;
@@ -178,7 +212,7 @@ void MkSensorThread::check_framedata(QString data, QString etime, QString ip)
              int alarmUpper1=alarmUpper;
              table.append( QString("alarmUpper:%1,").arg(alarmUpper1*sb1[deviceType]));
              quint16 dataNow = static_cast<quint16>(((Dat[29]&0x00ff)<<8)|(Dat[30]&0x00ff));
-             int dataNow1=dataNow*sb1[deviceType];
+             double dataNow1=dataNow*sb1[deviceType];
              table.append( QString("dataNow:%1,").arg(dataNow1));
              QDateTime dataTime = QDateTime::fromTime_t(static_cast<uint>(((Dat[31]&0x000000ff)<<24)|((Dat[32]&0x000000ff)<<16)|((Dat[33]&0x000000ff)<<8)|(Dat[34]&0x000000ff)));
              table.append( QString("dataTime:%1,").arg(dataTime.toString("yyyy-MM-dd HH:mm:ss")));
@@ -200,11 +234,11 @@ void MkSensorThread::check_framedata(QString data, QString etime, QString ip)
                  emit getCommData(QString("NBtable18=====:%1++++++++++++++++++%2")
                                                       .arg("table").arg(deviceType));
                  if(deviceType == 1){
-                     emit getValue(DevIdx3,"WP0",batteryLevel,signal,dataNow1,ip,dataTime);
+                     emit getValue(DeviceID3,"WP0",batteryLevel,signal,dataNow1,ip,dataTime);
                  }else if (deviceType == 8){
                      emit getCommData(QString("NBtable8=====:%1++++++++++++++++++%2")
                                                           .arg("table").arg(deviceType));
-                     emit getValue(DevIdx3,"LL0",batteryLevel,signal,dataNow1,ip,dataTime);
+                     emit getValue(DeviceID3,"LL0",batteryLevel,signal,dataNow1,ip,dataTime);
                  }
              }
              if ((Dat[24] & 0x01) == 0x01) {
@@ -212,18 +246,18 @@ void MkSensorThread::check_framedata(QString data, QString etime, QString ip)
                  alarm_state = "下限报警";
                  judge = true;
                  if(deviceType==1){
-                     emit getAlarm(DevIdx3,"WP1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低压"),dataTime);
+                     emit getAlarm(DeviceID3,"WP1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低压"),dataTime);
                  }else if (deviceType==8){
-                     emit getAlarm(DevIdx3,"LL1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低水位"),dataTime);
+                     emit getAlarm(DeviceID3,"LL1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低水位"),dataTime);
                  }
              } else if ((Dat[24] & 0x02) == 0x02) {
                  bjstr += "上限报警  ";
                  alarm_state = "上限报警";
                  judge = true;
                  if(deviceType==1){
-                     emit getAlarm(DevIdx3,"WP2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高压"),dataTime);
+                     emit getAlarm(DeviceID3,"WP2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高压"),dataTime);
                  }else if (deviceType==8){
-                     emit getAlarm(DevIdx3,"LL2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高水位"),dataTime);
+                     emit getAlarm(DeviceID3,"LL2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高水位"),dataTime);
                  }
              } else if ((Dat[24] & 0x03) == 0x00) {
                  alarm_state = "状态正常";
@@ -240,9 +274,9 @@ void MkSensorThread::check_framedata(QString data, QString etime, QString ip)
                  bjstr += "传感器异常";
                  sensor_state = "传感器异常";
                  if(deviceType==1){
-                     emit getAlarm(DevIdx3,"WP3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
+                     emit getAlarm(DeviceID3,"WP3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
                  }else if (deviceType==8){
-                     emit getAlarm(DevIdx3,"LL3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
+                     emit getAlarm(DeviceID3,"LL3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
                  }
              } else if ((Dat[24] & 0x08) == 0x00) {
                  sensor_state = "状态正常";
@@ -299,8 +333,8 @@ void MkSensorThread::check_serverdata(QString data, QString ip){
     emit getCommData(QString("[ %1 47.98.201.187 (wuji) ] %2")
                           .arg(ip)
                           .arg(DStr.replace('\n',"\\n").replace('\r',"\\r")));
-//    QString data1 = data.replace("\r","").replace("\n","").replace(" ","");
-//    check_framedata(data1,ip,ip);
+    QString data1 = data.replace("\r","").replace("\n","").replace(" ","");
+    check_framedata(data1,ip,ip);
 }
 
 static unsigned char auchCRCHi[] =
@@ -425,7 +459,7 @@ void MkSensorThread::readData(QTcpSocket *so)
 {
     QByteArray data = so->readAll();
     QDateTime t = QDateTime::currentDateTime();
-    quint16 bytesDataArray[] = { 0x48, 0x0A, 0x02, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x75};
+    quint16 bytesDataArray[] = { 0xa5, 0x5a, 0xff, 0x00, 0x1b, 0x4a, 0x53, 0x53, 0x48, 0x31, 0x39, 0x30, 0x35, 0x30, 0x30, 0x30, 0x35, 0x5d, 0x19, 0xbb, 0xde, 0x00, 0x00, 0xa3, 0x2b, 0x55, 0xaa};
 #ifdef comm_debug
     QString DStr = "";
     for(int i=0;i<data.length();i++){
@@ -476,6 +510,23 @@ void MkSensorThread::readData(QTcpSocket *so)
     bytesSend.append(bytesDataArray[7]);
     bytesSend.append(bytesDataArray[8]);
     bytesSend.append(bytesDataArray[9]);
+    bytesSend.append(bytesDataArray[10]);
+    bytesSend.append(bytesDataArray[11]);
+    bytesSend.append(bytesDataArray[12]);
+    bytesSend.append(bytesDataArray[13]);
+    bytesSend.append(bytesDataArray[14]);
+    bytesSend.append(bytesDataArray[15]);
+    bytesSend.append(bytesDataArray[16]);
+    bytesSend.append(bytesDataArray[17]);
+    bytesSend.append(bytesDataArray[18]);
+    bytesSend.append(bytesDataArray[19]);
+    bytesSend.append(bytesDataArray[20]);
+    bytesSend.append(bytesDataArray[21]);
+    bytesSend.append(bytesDataArray[22]);
+    bytesSend.append(bytesDataArray[23]);
+    bytesSend.append(bytesDataArray[24]);
+    bytesSend.append(bytesDataArray[25]);
+    bytesSend.append(bytesDataArray[26]);
 //    check_serverdata(data, so->peerAddress().toString());
     so->write(bytesSend);
 }

+ 2 - 2
DataProcessService/ytWarterMkProcess/nbsensorthread.h

@@ -32,8 +32,8 @@ public:
     quint8 hexstr_to_byte(QString dat);
 signals:
     void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getValue(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 
 public slots:

+ 2 - 2
DataProcessService/ytWarterMkProcess/nbwaterserver.cpp

@@ -34,12 +34,12 @@ void Mkwaterserver::egetCommData(QString data)
     emit getCommData(data);
 }
 
-void Mkwaterserver::egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
+void Mkwaterserver::egetValue(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
 {
     emit getValue(deviceidx,d1,d2,d3,d4,d5,t);
 }
 
-void Mkwaterserver::egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
+void Mkwaterserver::egetAlarm(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
 {
     emit getAlarm(deviceidx,d1,d2,d3,d4,d5,note,t);
 }

+ 4 - 4
DataProcessService/ytWarterMkProcess/nbwaterserver.h

@@ -14,14 +14,14 @@ public:
 
 signals:
     void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getValue(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void incomingConnection(qintptr socketDescriptor) override;
     void egetOnLine(int deviceidx, bool flag, QDateTime t);
-    void egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void egetValue(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void egetAlarm(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void egetCommData(QString data);
 };
 

+ 1 - 1
DataProcessService/ytWaterProcess/databasethread.cpp

@@ -176,7 +176,7 @@ void DatabaseThread::run()
                     usleep(1000);
                 }
             }
-            emit SqlLog(QString("[ %1 sqlbeforbefor %2] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(sqlList.length()));
+            //emit SqlLog(QString("[ %1 sqlbeforbefor %2] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(sqlList.length()));
             if(sqlList.length()>0){
                 emit SqlLog(QString("[ %1 sqlbefor] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))+sqlList.first());
                 db.exec(sqlList.first());

+ 13 - 7
DataProcessService/ytWaterProcess/sensorthread2.cpp

@@ -59,11 +59,17 @@ void SensorThread2::readData(QTcpSocket *so)
 {
     QByteArray data = so->readAll();
     QDateTime t = QDateTime::currentDateTime();
-#ifdef comm_debug
-        QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                .arg("5018 ");
-        for(int i=0;i<data.length();i++)
-            DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
-        emit getCommData(DStr);
-#endif
+    QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
+            .arg("5018 ");
+    for(int i=0;i<data.length();i++)
+        DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    printf("[5018]  %s\n",DStr.toUtf8().data());
+    emit getCommData(DStr);
+//#ifdef comm_debug
+//        QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
+//                .arg("5018 ");
+//        for(int i=0;i<data.length();i++)
+//            DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
+//        emit getCommData(DStr);
+//#endif
 }

+ 1 - 0
DataProcessService/ytWaterProcess/waterserver2.cpp

@@ -23,4 +23,5 @@ void waterserver2::incomingConnection(qintptr socketDescriptor)
     SensorThread2 *thread = new SensorThread2(socketDescriptor,this);
     connect(thread,&SensorThread2::finished,thread,&SensorThread2::quit);
     connect(thread,&SensorThread2::getCommData,this,&waterserver2::egetCommData);
+    thread->start();
 }