|
@@ -0,0 +1,2432 @@
|
|
|
+#include "zccomthread.h"
|
|
|
+#include "coreshm.h"
|
|
|
+
|
|
|
+//其中开入2、开入3传默认值0,不在这里展示
|
|
|
+static QString digital[33] = {
|
|
|
+ "DI1",
|
|
|
+ "FireAlarm",
|
|
|
+ "EleAlarm",
|
|
|
+ "PhaseLoss",
|
|
|
+ "LoadLive",
|
|
|
+ "LoadBrkState",
|
|
|
+ "OverV",
|
|
|
+ "UnderV",
|
|
|
+ "OverI",
|
|
|
+ "Trip",
|
|
|
+ "BusOutage",
|
|
|
+ "OverIr",
|
|
|
+ "OverT1",
|
|
|
+ "OverT2",
|
|
|
+ "OverT3",
|
|
|
+ "OverT4",
|
|
|
+ "OverEvT",
|
|
|
+ "ArcA",
|
|
|
+ "ArcB",
|
|
|
+ "ArcC",
|
|
|
+ "OverUH",
|
|
|
+ "OverIH",
|
|
|
+ "OverDemandP",
|
|
|
+ "OverDemandS",
|
|
|
+ "MeasFailure",
|
|
|
+ "DevAbnormal",
|
|
|
+ "Mute",
|
|
|
+ "DO1",
|
|
|
+ "DO2",
|
|
|
+ "ResDI1",
|
|
|
+ "ResDI2",
|
|
|
+ "ResDI3",
|
|
|
+ "ResDI4"
|
|
|
+};
|
|
|
+
|
|
|
+static QString digitalDescTable[33] = {
|
|
|
+ "开关量输入",
|
|
|
+ "火灾预警总",
|
|
|
+ "线路电气故障总",
|
|
|
+ "缺相",
|
|
|
+ "线路带电",
|
|
|
+ "线路开关状态",
|
|
|
+ "过压",
|
|
|
+ "低压",
|
|
|
+ "电流越限",
|
|
|
+ "过流跳闸",
|
|
|
+ "母线停电",
|
|
|
+ "剩余电流越限",
|
|
|
+ "测温点1超温",
|
|
|
+ "测温点2超温",
|
|
|
+ "测温点3超温",
|
|
|
+ "测温点4超温",
|
|
|
+ "环境温度越限",
|
|
|
+ "A相燃弧",
|
|
|
+ "B相燃弧",
|
|
|
+ "C相燃弧",
|
|
|
+ "电压谐波越限",
|
|
|
+ "电流谐波越限",
|
|
|
+ "有功需量超限",
|
|
|
+ "视在需量超限",
|
|
|
+ "测量通道故障",
|
|
|
+ "设备异常",
|
|
|
+ "消音",
|
|
|
+ "开出1",
|
|
|
+ "开出2",
|
|
|
+ "备用遥信1",
|
|
|
+ "备用遥信2",
|
|
|
+ "备用遥信3",
|
|
|
+ "备用遥信4"
|
|
|
+};
|
|
|
+
|
|
|
+static QString analogInfo[60] = {
|
|
|
+ "Ua",
|
|
|
+ "Ub",
|
|
|
+ "Uc",
|
|
|
+ "Ul",
|
|
|
+ "Ia",
|
|
|
+ "Ib",
|
|
|
+ "Ic",
|
|
|
+ "Ir",
|
|
|
+ "T1",
|
|
|
+ "T2",
|
|
|
+ "T3",
|
|
|
+ "T4",
|
|
|
+ "F",
|
|
|
+ "Uab",
|
|
|
+ "Ubc",
|
|
|
+ "Uca",
|
|
|
+ "Pa",
|
|
|
+ "Qa",
|
|
|
+ "COSa",
|
|
|
+ "Pb",
|
|
|
+ "Qb",
|
|
|
+ "COSb",
|
|
|
+ "Pc",
|
|
|
+ "Qc",
|
|
|
+ "COSc",
|
|
|
+ "P",
|
|
|
+ "Q",
|
|
|
+ "COS",
|
|
|
+ "Demand",
|
|
|
+ "LastDayMD",
|
|
|
+ "LastDayMDt",
|
|
|
+ "I2",
|
|
|
+ "",
|
|
|
+ "UblU2",
|
|
|
+ "UblU0",
|
|
|
+ "THDUa",
|
|
|
+ "THDUb",
|
|
|
+ "THDUc",
|
|
|
+ "IHa",
|
|
|
+ "IHb",
|
|
|
+ "IHc",
|
|
|
+ "DeviceTemp",
|
|
|
+ "SignalIntensity",
|
|
|
+ "Upt",
|
|
|
+ "Udt",
|
|
|
+ "Ust",
|
|
|
+ "Busot",
|
|
|
+ "DevResetTimes",
|
|
|
+ "Epp",
|
|
|
+ "Epn",
|
|
|
+ "Eqp",
|
|
|
+ "Eqn",
|
|
|
+ "Epp1",
|
|
|
+ "Epn1",
|
|
|
+ "Epp2",
|
|
|
+ "Epn2",
|
|
|
+ "Epp3",
|
|
|
+ "Epn3",
|
|
|
+ "Epp4",
|
|
|
+ "Epn4"
|
|
|
+};
|
|
|
+
|
|
|
+static QString average[31] = {
|
|
|
+ "avg1",
|
|
|
+ "avg2",
|
|
|
+ "avg3",
|
|
|
+ "avg4",
|
|
|
+ "avg5",
|
|
|
+ "avg6",
|
|
|
+ "avg7",
|
|
|
+ "avg8",
|
|
|
+ "avg9",
|
|
|
+ "avg10",
|
|
|
+ "avg11",
|
|
|
+ "avg12",
|
|
|
+ "avg13",
|
|
|
+ "avg14",
|
|
|
+ "avg15",
|
|
|
+ "avg16",
|
|
|
+ "avg17",
|
|
|
+ "avg18",
|
|
|
+ "avg19",
|
|
|
+ "avg20",
|
|
|
+ "avg21",
|
|
|
+ "avg22",
|
|
|
+ "avg23",
|
|
|
+ "avg24",
|
|
|
+ "avg25",
|
|
|
+ "avg26",
|
|
|
+ "avg27",
|
|
|
+ "avg28",
|
|
|
+ "avg29",
|
|
|
+ "avg30",
|
|
|
+ "avg31"
|
|
|
+};
|
|
|
+
|
|
|
+static QString maxinfo[31] = {
|
|
|
+ "max1",
|
|
|
+ "max2",
|
|
|
+ "max3",
|
|
|
+ "max4",
|
|
|
+ "max5",
|
|
|
+ "max6",
|
|
|
+ "max7",
|
|
|
+ "max8",
|
|
|
+ "max9",
|
|
|
+ "max10",
|
|
|
+ "max11",
|
|
|
+ "max12",
|
|
|
+ "max13",
|
|
|
+ "max14",
|
|
|
+ "max15",
|
|
|
+ "max16",
|
|
|
+ "max17",
|
|
|
+ "max18",
|
|
|
+ "max19",
|
|
|
+ "max20",
|
|
|
+ "max21",
|
|
|
+ "max22",
|
|
|
+ "max23",
|
|
|
+ "max24",
|
|
|
+ "max25",
|
|
|
+ "max26",
|
|
|
+ "max27",
|
|
|
+ "max28",
|
|
|
+ "max29",
|
|
|
+ "max30",
|
|
|
+ "max31"
|
|
|
+};
|
|
|
+
|
|
|
+static QString maxtimeinfo[31]={
|
|
|
+ "maxTime1",
|
|
|
+ "maxTime2",
|
|
|
+ "maxTime3",
|
|
|
+ "maxTime4",
|
|
|
+ "maxTime5",
|
|
|
+ "maxTime6",
|
|
|
+ "maxTime7",
|
|
|
+ "maxTime8",
|
|
|
+ "maxTime9",
|
|
|
+ "maxTime10",
|
|
|
+ "maxTime11",
|
|
|
+ "maxTime12",
|
|
|
+ "maxTime13",
|
|
|
+ "maxTime14",
|
|
|
+ "maxTime15",
|
|
|
+ "maxTime16",
|
|
|
+ "maxTime17",
|
|
|
+ "maxTime18",
|
|
|
+ "maxTime19",
|
|
|
+ "maxTime20",
|
|
|
+ "maxTime21",
|
|
|
+ "maxTime22",
|
|
|
+ "maxTime23",
|
|
|
+ "maxTime24",
|
|
|
+ "maxTime25",
|
|
|
+ "maxTime26",
|
|
|
+ "maxTime27",
|
|
|
+ "maxTime28",
|
|
|
+ "maxTime29",
|
|
|
+ "maxTime30",
|
|
|
+ "maxTime31"
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static QString majinfo[31] ={
|
|
|
+ "maj1",
|
|
|
+ "maj2",
|
|
|
+ "maj3",
|
|
|
+ "maj4",
|
|
|
+ "maj5",
|
|
|
+ "maj6",
|
|
|
+ "maj7",
|
|
|
+ "maj8",
|
|
|
+ "maj9",
|
|
|
+ "maj10",
|
|
|
+ "maj11",
|
|
|
+ "maj12",
|
|
|
+ "maj13",
|
|
|
+ "maj14",
|
|
|
+ "maj15",
|
|
|
+ "maj16",
|
|
|
+ "maj17",
|
|
|
+ "maj18",
|
|
|
+ "maj19",
|
|
|
+ "maj20",
|
|
|
+ "maj21",
|
|
|
+ "maj22",
|
|
|
+ "maj23",
|
|
|
+ "maj24",
|
|
|
+ "maj25",
|
|
|
+ "maj26",
|
|
|
+ "maj27",
|
|
|
+ "maj28",
|
|
|
+ "maj29",
|
|
|
+ "maj30",
|
|
|
+ "maj31"
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ZcComThread::ZcComThread(qintptr socketDescriptor,QObject *parent) : QThread(parent)
|
|
|
+{
|
|
|
+ getdata = false;
|
|
|
+ c_start = 0;
|
|
|
+ c_end = 0;
|
|
|
+
|
|
|
+ day = 255;
|
|
|
+ count = 0;
|
|
|
+ groupNum = 0;
|
|
|
+ stat_count = 0;
|
|
|
+
|
|
|
+ harDate = (QDate::currentDate());
|
|
|
+ ua_count =0;
|
|
|
+ ub_count =0;
|
|
|
+ uc_count = 0;
|
|
|
+ ia_count = 0;
|
|
|
+ ib_count = 0;
|
|
|
+ ic_count = 0;
|
|
|
+
|
|
|
+
|
|
|
+ dataTotal.clear();
|
|
|
+
|
|
|
+ idx =0;
|
|
|
+ keep = false;
|
|
|
+ this->socketDescriptor = socketDescriptor;
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+void ZcComThread::run()
|
|
|
+{
|
|
|
+
|
|
|
+ QTcpSocket *so = new QTcpSocket;
|
|
|
+
|
|
|
+ if(!so->setSocketDescriptor(this->socketDescriptor)){
|
|
|
+ so->abort();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ keep = true;
|
|
|
+ err_count = 0;
|
|
|
+ while (keep) {
|
|
|
+ if(so->state() != QTcpSocket::ConnectedState){
|
|
|
+ close_self(so);
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ if(so->waitForReadyRead()){
|
|
|
+ err_count++;
|
|
|
+ readdata(so);
|
|
|
+ }
|
|
|
+ if(err_count > 6){
|
|
|
+ close_self(so);
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ so->abort();
|
|
|
+}
|
|
|
+
|
|
|
+void ZcComThread::close_self(QTcpSocket *so)
|
|
|
+{
|
|
|
+ so->abort();
|
|
|
+ keep = false;
|
|
|
+}
|
|
|
+
|
|
|
+void ZcComThread::stop()
|
|
|
+{
|
|
|
+ keep = false;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int ZcComThread::getHead(QByteArray data)
|
|
|
+{
|
|
|
+ for(int i=0;i<data.length();i++){
|
|
|
+ if((data.at(i)&0xff) == 0x40){
|
|
|
+ if(i < (data.length()-1)){
|
|
|
+ if((data.at(i+1)&0xff) == 0x40){
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+
|
|
|
+int ZcComThread::gettail(QByteArray data)
|
|
|
+{
|
|
|
+ for(int i=0;i<data.length();i++){
|
|
|
+ if((data.at(i)&0xff) == 0x23){
|
|
|
+ if(i < (data.length()-1)){
|
|
|
+ if((data.at(i+1)&0xff) == 0x23){
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void ZcComThread::readdata(QTcpSocket *so)
|
|
|
+{
|
|
|
+ dataTotal.append(so->readAll());
|
|
|
+
|
|
|
+ QString comData="";
|
|
|
+ for(int i=0;i<dataTotal.length();i++){
|
|
|
+ comData.append(QString("%1").arg(dataTotal.at(i)&0xff,2,16,QChar('0')));
|
|
|
+ }
|
|
|
+ emit comLog(QString("[%1] %2").arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")).arg(comData));
|
|
|
+
|
|
|
+ for(int i=0;i<11;i++){
|
|
|
+ if((dataTotal.length() > 0)&&(!getdata)){
|
|
|
+ c_start = getHead(dataTotal);
|
|
|
+ c_end = gettail(dataTotal);
|
|
|
+
|
|
|
+ if((c_start > -1)&&(c_end>c_start)){
|
|
|
+ quint16 len = static_cast<quint16>(((dataTotal.at(c_start+27)&0x00ff)<<8)|(dataTotal.at(c_start+26)&0x00ff));
|
|
|
+ if(c_end != (c_start+27+len+3))
|
|
|
+ c_end = (c_start+27+len+3);
|
|
|
+
|
|
|
+ QByteArray data = dataTotal.mid(c_start,(c_end-c_start+2));
|
|
|
+ dataTotal.remove(c_start,(c_end-c_start+2));
|
|
|
+ this->dealdata(so,data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void ZcComThread::dealdata(QTcpSocket *so,QByteArray data)
|
|
|
+{
|
|
|
+ getdata = true;
|
|
|
+
|
|
|
+ QString comData="",sql="" ;
|
|
|
+
|
|
|
+ QString t = (QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ int yy = (QDateTime::currentDateTime().date().year())/100;
|
|
|
+
|
|
|
+ for(int i=0;i<data.length();i++){
|
|
|
+ comData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
|
|
|
+ }
|
|
|
+ emit comLog(QString("[%1] %2").arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")).arg(comData));
|
|
|
+
|
|
|
+ QString column,valueData,setValue;
|
|
|
+ QByteArray Dat = data.mid(2,(data.length()-5));
|
|
|
+ quint8 crc = sumCrc(Dat,static_cast<int>(Dat.length()));
|
|
|
+ printf("crc = %x\n",crc&0xff);
|
|
|
+ if((crc&0xff)==(data.at(data.length()-3)&0xff)){
|
|
|
+ zcdev->devs[idx].lastCommTime = QDateTime::currentDateTime().toTime_t() ;
|
|
|
+
|
|
|
+ if(day != QDate::currentDate().day()){
|
|
|
+ day = QDate::currentDate().day();
|
|
|
+ rtn1 = mk_time_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+
|
|
|
+ zcdev->devs[idx].harDateShm = QDate::currentDate();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if((data.at(22)&0xff)==0x01){//心跳 4.1 心跳 默认30s 40 40 03 01 01 29 09 01 03 16 01 01 88 88 80 00 00 00 77 77 FF FF 01 03 2A 01 00 00 D7 23 23
|
|
|
+ err_count = 0;
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }else if((data.at(22)&0xff)==0x02){//数据上传 处理所有02上传数据的同时也要处理06的(第一次上传没有接收到服务器应答就开始重传了)
|
|
|
+ err_count = 0;
|
|
|
+ switch (data.at(28)&0xff) {
|
|
|
+ case 0x11:
|
|
|
+ {
|
|
|
+ //数据报文产生的时间
|
|
|
+ QString date = QString("%1-%2-%3").arg(data.at(283)&0xff,2,10,QChar('0')).arg(data.at(282)&0xff,2,10,QChar('0')).arg(data.at(281)&0xff,2,10,QChar('0'));
|
|
|
+ QString datetime = QString("%1-%2-%3 %4:%5:%6").arg(data.at(283)&0xff,2,10,QChar('0')).arg(data.at(282)&0xff,2,10,QChar('0')).arg(data.at(281)&0xff,2,10,QChar('0')).arg(data.at(280)&0xff,2,10,QChar('0')).arg(data.at(279)&0xff,2,10,QChar('0')).arg(data.at(278)&0xff,2,10,QChar('0'));
|
|
|
+ //printf("datetime [%s]\n",datetime.toUtf8().data());
|
|
|
+
|
|
|
+ //遥信
|
|
|
+ quint8 devicestatus1 = static_cast<quint8>(data.at(33)&0xff);
|
|
|
+ quint8 devicestatus2 = static_cast<quint8>(data.at(34)&0xff);
|
|
|
+ quint8 devicestatus3 = static_cast<quint8>(data.at(35)&0xff);
|
|
|
+ quint8 devicestatus4 = static_cast<quint8>(data.at(36)&0xff);
|
|
|
+ quint8 devicestatus5 = static_cast<quint8>(data.at(37)&0xff);
|
|
|
+ QString alarm1 = QString("%1").arg(devicestatus1,8,2,QChar('0'));
|
|
|
+ QString alarm2 = QString("%1").arg(devicestatus2,8,2,QChar('0'));
|
|
|
+ QString alarm3 = QString("%1").arg(devicestatus3,8,2,QChar('0'));
|
|
|
+ QString alarm4 = QString("%1").arg(devicestatus4,8,2,QChar('0'));
|
|
|
+ QString alarm5 = QString("%1").arg(devicestatus5,8,2,QChar('0'));
|
|
|
+ QString alarm = QString("%1%2%3%4%5").arg(alarm1).arg(alarm2).arg(alarm3).arg(alarm4).arg(alarm5);
|
|
|
+ //printf("alarm [%s]\n",alarm.toUtf8().data());
|
|
|
+
|
|
|
+ int m =1,k =0,count=0;
|
|
|
+ for(int i=0;i<33;i++){
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(digital[i]));
|
|
|
+ valueData.append(QString("%1,").arg(alarm.mid(k,1)));
|
|
|
+ setValue.append(QString("%1=%2,").arg(digital[i]).arg(alarm.mid(k,1)));
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = (alarm.mid(k,1)).toUInt();
|
|
|
+ k++;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //printf("setValue [%s]\n",setValue.toUtf8().data());
|
|
|
+ QString tmp1 = QString("[%1] switch data [%2] [%3]").arg(datetime).arg(alarm).arg(setValue);
|
|
|
+ emit comLog(tmp1);
|
|
|
+
|
|
|
+ sql.append(QString("insert into ht_switch_data(id,deviceName,DI2,DI3,%1dataTime) values(NULL,'%2',0,0,%3'%4');").arg(column).arg(deviceid).arg(valueData).arg(datetime));
|
|
|
+ //printf("ht_switch_data sql: %s\n",sql.toUtf8().data());
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ column.clear();
|
|
|
+ valueData.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update rt_switch_data set %1dataTime='%2' where deviceName = '%3'").arg(setValue).arg(datetime).arg(deviceid));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setValue.clear();
|
|
|
+
|
|
|
+ //遥测
|
|
|
+ int start = 38;
|
|
|
+ QString str = "";
|
|
|
+ for(int j=0;j<60;j++){
|
|
|
+
|
|
|
+ if(j==7){//剩余电流(漏电流 mA)
|
|
|
+ quint16 I = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(I));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(I));
|
|
|
+
|
|
|
+ start += 2;
|
|
|
+ }else if(j==30){ //"昨日 Pmax 发生时间" - "yyMMddHHmmss"
|
|
|
+ str.append(QString("%1%2%3%4%5%6").arg(data.at(start)&0xff,2,10,QChar('0')).arg(data.at(start+1)&0xff,2,10,QChar('0')).arg(data.at(start+2)&0xff,2,10,QChar('0')).arg(data.at(start+3)&0xff,2,10,QChar('0')).arg(data.at(start+4)&0xff,2,10,QChar('0')).arg(data.at(start+5)&0xff,2,10,QChar('0')));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(str));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(str));
|
|
|
+
|
|
|
+ str.clear();
|
|
|
+ start += 6;
|
|
|
+ }else if(j==32){
|
|
|
+ //庄城的“零序电压”忽略不保存,183的“零序电流”写入默认值0.00
|
|
|
+ str.clear();
|
|
|
+ start += 4;
|
|
|
+ }else if((j==42)||(j==43)||(j==44)||(j==45)||(j==46)||(j==47)) {
|
|
|
+ //设备信号强度、电压暂升次数(次)、电压暂降次数(次)、电压中断次数(次)、母线停电次数(次)、设备复位次数(次)
|
|
|
+ quint32 v = static_cast<quint32>(((data.at(start)&0x000000ff)<<24)|((data.at(start+1)&0x000000ff)<<16)|((data.at(start+2)&0x000000ff)<<8)|(data.at(start+3)&0x000000ff));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(v));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(v));
|
|
|
+
|
|
|
+ start += 4;
|
|
|
+ }else{
|
|
|
+ //4位十六进制转浮点数
|
|
|
+ quint32 hex = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float value = *(float*)&hex;
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(value));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(value));
|
|
|
+
|
|
|
+ str.clear();
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //printf("setValue [%s]\n",setValue.toUtf8().data());
|
|
|
+ QString tmp2 = QString("[%1] analog data [%2]").arg(datetime).arg(setValue);
|
|
|
+ emit comLog(tmp2);
|
|
|
+
|
|
|
+ sql.append(QString("insert into ht_analog_data(id,deviceName,I0,%1freezingTime,dataTime) values(NULL,'%2',0.00,%3'%4','%5');").arg(column).arg(deviceid).arg(valueData).arg(date).arg(datetime));
|
|
|
+ //printf("ht_analog_data sql: %s\n",sql.toUtf8().data());
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ column.clear();
|
|
|
+ valueData.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update rt_analog_data set %1freezingTime = '%2',dataTime='%3' where deviceName = '%4';").arg(setValue).arg(date).arg(datetime).arg(deviceid));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x12:
|
|
|
+ {
|
|
|
+ //SOE 数据报文产生的时间
|
|
|
+ QString datetime = QString("%1-%2-%3 %4:%5:%6").arg(data.at(43)&0xff,2,10,QChar('0')).arg(data.at(42)&0xff,2,10,QChar('0')).arg(data.at(41)&0xff,2,10,QChar('0')).arg(data.at(40)&0xff,2,10,QChar('0')).arg(data.at(39)&0xff,2,10,QChar('0')).arg(data.at(38)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ quint8 devicestatus1 = static_cast<quint8>(data.at(33)&0xff);
|
|
|
+ quint8 devicestatus2 = static_cast<quint8>(data.at(34)&0xff);
|
|
|
+ quint8 devicestatus3 = static_cast<quint8>(data.at(35)&0xff);
|
|
|
+ quint8 devicestatus4 = static_cast<quint8>(data.at(36)&0xff);
|
|
|
+ quint8 devicestatus5 = static_cast<quint8>(data.at(37)&0xff);
|
|
|
+ QString alarm1 = QString("%1").arg(devicestatus1,8,2,QChar('0'));
|
|
|
+ QString alarm2 = QString("%1").arg(devicestatus2,8,2,QChar('0'));
|
|
|
+ QString alarm3 = QString("%1").arg(devicestatus3,8,2,QChar('0'));
|
|
|
+ QString alarm4 = QString("%1").arg(devicestatus4,8,2,QChar('0'));
|
|
|
+ QString alarm5 = QString("%1").arg(devicestatus5,8,2,QChar('0'));
|
|
|
+ QString alarm = QString("%1%2%3%4%5").arg(alarm1).arg(alarm2).arg(alarm3).arg(alarm4).arg(alarm5);
|
|
|
+
|
|
|
+ QString tmp3 = QString("[%1] SOE data [%2]").arg(datetime).arg(alarm);
|
|
|
+ emit comLog(tmp3);
|
|
|
+
|
|
|
+ int m =1,k =0,count=0;
|
|
|
+ for(int i=0;i<33;i++){
|
|
|
+
|
|
|
+ //以每个开关量的首报为状态变化的判断标准
|
|
|
+ uint digitalValue = (alarm.mid(k,1)).toUInt();
|
|
|
+ QString mDesc = "";
|
|
|
+ if(digitalValue != zcdev->devs[idx].alarm[i].digitalValue){
|
|
|
+ if(digitalValue == 1){
|
|
|
+ mDesc.append(digitalDescTable[i]).append("动作");
|
|
|
+
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = digitalValue;
|
|
|
+ sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',0);").arg(deviceid).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital[i]).arg(digitalValue).arg(mDesc).arg(datetime));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+ }else{
|
|
|
+ mDesc.append(digitalDescTable[i]).append("复归");
|
|
|
+
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = digitalValue;
|
|
|
+ sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',2);").arg(deviceid).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital[i]).arg(digitalValue).arg(mDesc).arg(datetime));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update alarm_power set handling_time = '%1',handling_status = 3 where device_code = '%2' and meas_name = '%3' and digital_value = 1 and handling_status = 0;").arg(datetime).arg(deviceid).arg(digital[i]));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ rtn1 = mk_soe_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x15:
|
|
|
+ {
|
|
|
+ switch (data.at(32)&0xff) {
|
|
|
+ case 0x00: //实时数值
|
|
|
+ {
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harData = "";
|
|
|
+ for(int i=1;i<32;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harData.append(QString(",%1").arg(f/10));
|
|
|
+ start += 4;
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[0].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[0].col[i-1].maj[(zcdev->devs[idx].har[0].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[1].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[1].col[i-1].maj[(zcdev->devs[idx].har[1].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[2].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[2].col[i-1].maj[(zcdev->devs[idx].har[2].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[3].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[3].col[i-1].maj[(zcdev->devs[idx].har[3].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[4].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[4].col[i-1].maj[(zcdev->devs[idx].har[4].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[5].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[5].col[i-1].maj[(zcdev->devs[idx].har[5].ui_ct)-1].value = f/10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(QString("insert into wave_har_data values (NULL,'%1',%2,%3%4,'%5','%6');").arg(deviceid).arg(0).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+ harData.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,3);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x01: //谐波含量
|
|
|
+ {
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harData = "";
|
|
|
+ for(int i=1;i<32;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harData.append(QString(",%1").arg(f/100));
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(QString("insert into wave_har_data values (NULL,'%1',%2,%3%4,'%5','%6');").arg(deviceid).arg(1).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ harData.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,2);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x02: //日平均数值
|
|
|
+ {
|
|
|
+ stat_count++;
|
|
|
+
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+ QString tmptime = QString("%1%2-%3-%4").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harcolumn,harData,setHarValue;
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harcolumn.append(QString("%1,").arg(average[i]));
|
|
|
+ harData.append(QString("%1,").arg(f/10));
|
|
|
+ setHarValue.append(QString("%1=%2,").arg(average[i]).arg(f/10));
|
|
|
+
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(ua_count == 0){
|
|
|
+ ua_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(ub_count == 0){
|
|
|
+ ub_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(uc_count == 0){
|
|
|
+ uc_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(ia_count == 0){
|
|
|
+ ia_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(ib_count == 0){
|
|
|
+ ib_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(ic_count == 0){
|
|
|
+ ic_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sql.clear();
|
|
|
+ harcolumn.clear();
|
|
|
+ harData.clear();
|
|
|
+ setHarValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,0);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ if(stat_count == 12){
|
|
|
+ //统计计算前一天每个通道每次谐波的%95值
|
|
|
+ QString setMajValue = "";
|
|
|
+
|
|
|
+ //对每个通道的每组谐波数据进行排序 从小到大
|
|
|
+ this->maj_sort(0,zcdev->devs[idx].har[0].ui_ct);
|
|
|
+ this->maj_sort(1,zcdev->devs[idx].har[1].ui_ct);
|
|
|
+ this->maj_sort(2,zcdev->devs[idx].har[2].ui_ct);
|
|
|
+ this->maj_sort(3,zcdev->devs[idx].har[3].ui_ct);
|
|
|
+ this->maj_sort(4,zcdev->devs[idx].har[4].ui_ct);
|
|
|
+ this->maj_sort(5,zcdev->devs[idx].har[5].ui_ct);
|
|
|
+
|
|
|
+ //A相电压谐波
|
|
|
+ int s = static_cast<int>((zcdev->devs[idx].har[0].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[0].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 0 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[1].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[1].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 1 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[2].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[2].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 2 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //A相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[3].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[3].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 3 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[4].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[4].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 4 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[5].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[5].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 5 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+
|
|
|
+ stat_count = 0;
|
|
|
+ if(tmptime.compare(harDate.toString("yyyy-MM-dd")) != 0){
|
|
|
+ harDate = harDate.addDays(1);
|
|
|
+ }
|
|
|
+ ua_count = 0;
|
|
|
+ ub_count = 0;
|
|
|
+ uc_count = 0;
|
|
|
+ ia_count = 0;
|
|
|
+ ib_count = 0;
|
|
|
+ ic_count = 0;
|
|
|
+
|
|
|
+ zcdev->devs[idx].har[0].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[1].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[2].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[3].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[4].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[5].ui_ct = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x16: //日最大值
|
|
|
+ {
|
|
|
+ stat_count++;
|
|
|
+
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(256)&0xff,2,10,QChar('0')).arg(data.at(255)&0xff,2,10,QChar('0')).arg(data.at(254)&0xff,2,10,QChar('0')).arg(data.at(253)&0xff,2,10,QChar('0')).arg(data.at(252)&0xff,2,10,QChar('0')).arg(data.at(251)&0xff,2,10,QChar('0'));
|
|
|
+ QString tmptime = QString("%1%2-%3-%4").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harcolumn,harData,setHarValue;
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ QString maxtime = QString("%1 %2:%3:%4").arg(harDate.toString("yyyy-MM-dd")).arg(data.at(start+4)&0xff,2,10,QChar('0')).arg(data.at(start+5)&0xff,2,10,QChar('0')).arg(data.at(start+6)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ harcolumn.append(QString("%1,%2,").arg(maxinfo[i]).arg(maxtimeinfo[i]));
|
|
|
+ harData.append(QString("%1,'%2',").arg(f/10).arg(maxtime));
|
|
|
+ setHarValue.append(QString("%1=%2,%3='%4',").arg(maxinfo[i]).arg(f/10).arg(maxtimeinfo[i]).arg(maxtime));
|
|
|
+
|
|
|
+ start += 7;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(ua_count == 0){
|
|
|
+ ua_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(ub_count == 0){
|
|
|
+ ub_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(uc_count == 0){
|
|
|
+ uc_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(ia_count == 0){
|
|
|
+ ia_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(ib_count == 0){
|
|
|
+ ib_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(ic_count == 0){
|
|
|
+ ic_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+ harcolumn.clear();
|
|
|
+ harData.clear();
|
|
|
+ setHarValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,1);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ if(stat_count == 12){
|
|
|
+ //统计计算前一天每个通道每次谐波的%95值
|
|
|
+ QString setMajValue = "";
|
|
|
+
|
|
|
+ //对每个通道的每组谐波数据进行排序 从小到大
|
|
|
+ this->maj_sort(0,zcdev->devs[idx].har[0].ui_ct);
|
|
|
+ this->maj_sort(1,zcdev->devs[idx].har[1].ui_ct);
|
|
|
+ this->maj_sort(2,zcdev->devs[idx].har[2].ui_ct);
|
|
|
+ this->maj_sort(3,zcdev->devs[idx].har[3].ui_ct);
|
|
|
+ this->maj_sort(4,zcdev->devs[idx].har[4].ui_ct);
|
|
|
+ this->maj_sort(5,zcdev->devs[idx].har[5].ui_ct);
|
|
|
+
|
|
|
+ //A相电压谐波
|
|
|
+ int s = static_cast<int>((zcdev->devs[idx].har[0].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[0].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 0 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[1].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[1].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 1 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[2].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[2].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 2 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //A相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[3].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[3].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 3 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[4].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[4].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 4 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[5].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[5].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 5 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+
|
|
|
+ stat_count = 0;
|
|
|
+ if(tmptime.compare(harDate.toString("yyyy-MM-dd")) != 0){
|
|
|
+ harDate = harDate.addDays(1);
|
|
|
+ }
|
|
|
+ ua_count = 0;
|
|
|
+ ub_count = 0;
|
|
|
+ uc_count = 0;
|
|
|
+ ia_count = 0;
|
|
|
+ ib_count = 0;
|
|
|
+ ic_count = 0;
|
|
|
+
|
|
|
+ zcdev->devs[idx].har[0].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[1].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[2].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[3].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[4].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[5].ui_ct = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x18://故障录波
|
|
|
+ {
|
|
|
+ //页号
|
|
|
+ int n = (QString("%1").arg(data.at(33)&0xff,2,10)).toInt();
|
|
|
+ printf("n = %d\n",n);
|
|
|
+ int start = 34;
|
|
|
+ //故障录波发生时间
|
|
|
+ QString waveTime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(199)&0xff,2,10,QChar('0')).arg(data.at(198)&0xff,2,10,QChar('0')).arg(data.at(197)&0xff,2,10,QChar('0')).arg(data.at(196)&0xff,2,10,QChar('0')).arg(data.at(195)&0xff,2,10,QChar('0')).arg(data.at(194)&0xff,2,10,QChar('0'));
|
|
|
+ //发送时间
|
|
|
+ QString sendTime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(205)&0xff,2,10,QChar('0')).arg(data.at(204)&0xff,2,10,QChar('0')).arg(data.at(203)&0xff,2,10,QChar('0')).arg(data.at(202)&0xff,2,10,QChar('0')).arg(data.at(201)&0xff,2,10,QChar('0')).arg(data.at(200)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+
|
|
|
+ if(n == 7){
|
|
|
+ for(int i=0;i<10;i++){
|
|
|
+ groupNum++;
|
|
|
+ //2位十六进制转浮点数
|
|
|
+ //UA UB UC IA IB IC IR
|
|
|
+ quint16 hex = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+ float ua = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+2)&0x00ff)<<8)|(data.at(start+3)&0x00ff));
|
|
|
+ float ub = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+4)&0x00ff)<<8)|(data.at(start+5)&0x00ff));
|
|
|
+ float uc = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+6)&0x00ff)<<8)|(data.at(start+7)&0x00ff));
|
|
|
+ float ia = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+8)&0x00ff)<<8)|(data.at(start+9)&0x00ff));
|
|
|
+ float ib = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+10)&0x00ff)<<8)|(data.at(start+11)&0x00ff));
|
|
|
+ float ic = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+12)&0x00ff)<<8)|(data.at(start+13)&0x00ff));
|
|
|
+ float ir = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat());
|
|
|
+ //BIT15:开入1 BIT14:火灾预警总 BIT13:线路电气故障总 BIT12:缺相 BIT11:过压 BIT10:欠压 BIT9:电流越限 BIT8:过流跳闸 BIT7:剩余电流越限 BIT6:T1超温 BIT5:T2超温 BIT4:T3超温 BIT3:T4超温 BIT2:环境温度超温 BIT1-0:预留
|
|
|
+ hex = static_cast<quint16>(((data.at(start+14)&0x00ff)<<8)|(data.at(start+15)&0x00ff));
|
|
|
+ QString str = QString("%1").arg(hex,16,2,QChar('0'));
|
|
|
+ QString temp = QString("[%1] wave record [ua:%2 ub:%3 uc:%4 ia:%5 ib:%6 ic:%7 ir:%8 [%9]]").arg(t).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(str);
|
|
|
+ emit comLog(temp);
|
|
|
+ QString L = "";
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ L.append(QString(",%1").arg(str.mid(j,1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(i == 9){
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12');").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ }else{
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12'),").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ start += 16;
|
|
|
+ }
|
|
|
+ sql.append(QString("insert into wave_record_data values %1").arg(sqldata));
|
|
|
+ emit appendsql(sql);
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+
|
|
|
+ sqldata.clear();
|
|
|
+ groupNum = 0;
|
|
|
+
|
|
|
+ rtn1 = mk_wave_request(data,2);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+
|
|
|
+ }else{
|
|
|
+ for(int i=0;i<10;i++){
|
|
|
+ groupNum++;
|
|
|
+ //2位十六进制转浮点数
|
|
|
+ //UA UB UC IA IB IC IR
|
|
|
+ quint16 hex = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+ float ua = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+2)&0x00ff)<<8)|(data.at(start+3)&0x00ff));
|
|
|
+ float ub = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+4)&0x00ff)<<8)|(data.at(start+5)&0x00ff));
|
|
|
+ float uc = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+6)&0x00ff)<<8)|(data.at(start+7)&0x00ff));
|
|
|
+ float ia = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+8)&0x00ff)<<8)|(data.at(start+9)&0x00ff));
|
|
|
+ float ib = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+10)&0x00ff)<<8)|(data.at(start+11)&0x00ff));
|
|
|
+ float ic = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+12)&0x00ff)<<8)|(data.at(start+13)&0x00ff));
|
|
|
+ float ir = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat());
|
|
|
+ //BIT15:开入1 BIT14:火灾预警总 BIT13:线路电气故障总 BIT12:缺相 BIT11:过压 BIT10:欠压 BIT9:电流越限 BIT8:过流跳闸 BIT7:剩余电流越限 BIT6:T1超温 BIT5:T2超温 BIT4:T3超温 BIT3:T4超温 BIT2:环境温度超温 BIT1-0:预留
|
|
|
+ hex = static_cast<quint16>(((data.at(start+14)&0x00ff)<<8)|(data.at(start+15)&0x00ff));
|
|
|
+ QString str = QString("%1").arg(hex,16,2,QChar('0'));
|
|
|
+ QString temp = QString("[%1] wave record [ua:%2 ub:%3 uc:%4 ia:%5 ib:%6 ic:%7 ir:%8 [%9]]").arg(t).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(str);
|
|
|
+ emit comLog(temp);
|
|
|
+ QString L = "";
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ L.append(QString(",%1").arg(str.mid(j,1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12'),").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ start += 16;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ {
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if((data.at(22)&0xff)==0x04){//登录
|
|
|
+ err_count = 0;
|
|
|
+ deviceid.clear();
|
|
|
+ for(int i=12;i<20;i++){
|
|
|
+ deviceid.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')));
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("deviceid: %s\n",deviceid.toUtf8().data());
|
|
|
+ emit comLog(QString("deviceid: %1").arg(deviceid));
|
|
|
+
|
|
|
+ for(int i=0;i<1024;i++){
|
|
|
+ if(zcdev->devs[i].enabled == 0x01){
|
|
|
+ if(deviceid.compare(zcdev->devs[i].deviceCode)==0){
|
|
|
+ idx = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ if((zcdev->devs[idx].harDateShm) != (QDate::currentDate())){//设备隔天没有登录的情况,初始化计数值
|
|
|
+
|
|
|
+ for(int i=0;i<6;i++){
|
|
|
+ zcdev->devs[idx].har[i].ui_ct = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ zcdev->devs[idx].harDateShm = (QDate::currentDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if((data.at(22)&0xff)==0x06){//补发
|
|
|
+ err_count = 0;
|
|
|
+ switch (data.at(28)&0xff) {
|
|
|
+ case 0x11:
|
|
|
+ {
|
|
|
+ //数据报文产生的时间
|
|
|
+ QString date = QString("%1-%2-%3").arg(data.at(283)&0xff,2,10,QChar('0')).arg(data.at(282)&0xff,2,10,QChar('0')).arg(data.at(281)&0xff,2,10,QChar('0'));
|
|
|
+ QString datetime = QString("%1-%2-%3 %4:%5:%6").arg(data.at(283)&0xff,2,10,QChar('0')).arg(data.at(282)&0xff,2,10,QChar('0')).arg(data.at(281)&0xff,2,10,QChar('0')).arg(data.at(280)&0xff,2,10,QChar('0')).arg(data.at(279)&0xff,2,10,QChar('0')).arg(data.at(278)&0xff,2,10,QChar('0'));
|
|
|
+ //printf("datetime [%s]\n",datetime.toUtf8().data());
|
|
|
+
|
|
|
+ //遥信
|
|
|
+ quint8 devicestatus1 = static_cast<quint8>(data.at(33)&0xff);
|
|
|
+ quint8 devicestatus2 = static_cast<quint8>(data.at(34)&0xff);
|
|
|
+ quint8 devicestatus3 = static_cast<quint8>(data.at(35)&0xff);
|
|
|
+ quint8 devicestatus4 = static_cast<quint8>(data.at(36)&0xff);
|
|
|
+ quint8 devicestatus5 = static_cast<quint8>(data.at(37)&0xff);
|
|
|
+ QString alarm1 = QString("%1").arg(devicestatus1,8,2,QChar('0'));
|
|
|
+ QString alarm2 = QString("%1").arg(devicestatus2,8,2,QChar('0'));
|
|
|
+ QString alarm3 = QString("%1").arg(devicestatus3,8,2,QChar('0'));
|
|
|
+ QString alarm4 = QString("%1").arg(devicestatus4,8,2,QChar('0'));
|
|
|
+ QString alarm5 = QString("%1").arg(devicestatus5,8,2,QChar('0'));
|
|
|
+ QString alarm = QString("%1%2%3%4%5").arg(alarm1).arg(alarm2).arg(alarm3).arg(alarm4).arg(alarm5);
|
|
|
+ //printf("alarm [%s]\n",alarm.toUtf8().data());
|
|
|
+
|
|
|
+ int m =1,k =0,count=0;
|
|
|
+ for(int i=0;i<33;i++){
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(digital[i]));
|
|
|
+ valueData.append(QString("%1,").arg(alarm.mid(k,1)));
|
|
|
+ setValue.append(QString("%1=%2,").arg(digital[i]).arg(alarm.mid(k,1)));
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = (alarm.mid(k,1)).toUInt();
|
|
|
+ k++;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //printf("setValue [%s]\n",setValue.toUtf8().data());
|
|
|
+ QString tmp1 = QString("[%1] switch data 06 [%2] [%3]").arg(datetime).arg(alarm).arg(setValue);
|
|
|
+ emit comLog(tmp1);
|
|
|
+
|
|
|
+ sql.append(QString("insert into ht_switch_data(id,deviceName,DI2,DI3,%1dataTime) values(NULL,'%2',0,0,%3'%4');").arg(column).arg(deviceid).arg(valueData).arg(datetime));
|
|
|
+ //printf("ht_switch_data sql: %s\n",sql.toUtf8().data());
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ column.clear();
|
|
|
+ valueData.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update rt_switch_data set %1dataTime='%2' where deviceName = '%3'").arg(setValue).arg(datetime).arg(deviceid));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setValue.clear();
|
|
|
+
|
|
|
+ //遥测
|
|
|
+ int start = 38;
|
|
|
+ QString str = "";
|
|
|
+ for(int j=0;j<60;j++){
|
|
|
+
|
|
|
+ if(j==7){//剩余电流(漏电流 mA)
|
|
|
+ quint16 I = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(I));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(I));
|
|
|
+
|
|
|
+ start += 2;
|
|
|
+ }else if(j==30){ //"昨日 Pmax 发生时间" - "yyMMddHHmmss"
|
|
|
+ str.append(QString("%1%2%3%4%5%6").arg(data.at(start)&0xff,2,10,QChar('0')).arg(data.at(start+1)&0xff,2,10,QChar('0')).arg(data.at(start+2)&0xff,2,10,QChar('0')).arg(data.at(start+3)&0xff,2,10,QChar('0')).arg(data.at(start+4)&0xff,2,10,QChar('0')).arg(data.at(start+5)&0xff,2,10,QChar('0')));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(str));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(str));
|
|
|
+
|
|
|
+ str.clear();
|
|
|
+ start += 6;
|
|
|
+ }else if(j==32){
|
|
|
+ //庄城的“零序电压”忽略不保存,183的“零序电流”写入默认值0.00
|
|
|
+ str.clear();
|
|
|
+ start += 4;
|
|
|
+ }else if((j==42)||(j==43)||(j==44)||(j==45)||(j==46)||(j==47)) {
|
|
|
+ //设备信号强度、电压暂升次数(次)、电压暂降次数(次)、电压中断次数(次)、母线停电次数(次)、设备复位次数(次)
|
|
|
+ quint32 v = static_cast<quint32>(((data.at(start)&0x000000ff)<<24)|((data.at(start+1)&0x000000ff)<<16)|((data.at(start+2)&0x000000ff)<<8)|(data.at(start+3)&0x000000ff));
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(v));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(v));
|
|
|
+
|
|
|
+ start += 4;
|
|
|
+ }else{
|
|
|
+ //4位十六进制转浮点数
|
|
|
+ quint32 hex = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float value = *(float*)&hex;
|
|
|
+
|
|
|
+ column.append(QString("%1,").arg(analogInfo[j]));
|
|
|
+ valueData.append(QString("%1,").arg(value));
|
|
|
+ setValue.append(QString("%1=%2,").arg(analogInfo[j]).arg(value));
|
|
|
+
|
|
|
+ str.clear();
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //printf("setValue [%s]\n",setValue.toUtf8().data());
|
|
|
+ QString tmp2 = QString("[%1] analog data 06 [%2]").arg(datetime).arg(setValue);
|
|
|
+ emit comLog(tmp2);
|
|
|
+
|
|
|
+ sql.append(QString("insert into ht_analog_data(id,deviceName,I0,%1freezingTime,dataTime) values(NULL,'%2',0.00,%3'%4','%5');").arg(column).arg(deviceid).arg(valueData).arg(date).arg(datetime));
|
|
|
+ //printf("ht_analog_data sql: %s\n",sql.toUtf8().data());
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ column.clear();
|
|
|
+ valueData.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update rt_analog_data set %1freezingTime = '%2',dataTime='%3' where deviceName = '%4';").arg(setValue).arg(date).arg(datetime).arg(deviceid));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x12:
|
|
|
+ {
|
|
|
+ //SOE 数据报文产生的时间
|
|
|
+ QString datetime = QString("%1-%2-%3 %4:%5:%6").arg(data.at(43)&0xff,2,10,QChar('0')).arg(data.at(42)&0xff,2,10,QChar('0')).arg(data.at(41)&0xff,2,10,QChar('0')).arg(data.at(40)&0xff,2,10,QChar('0')).arg(data.at(39)&0xff,2,10,QChar('0')).arg(data.at(38)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ quint8 devicestatus1 = static_cast<quint8>(data.at(33)&0xff);
|
|
|
+ quint8 devicestatus2 = static_cast<quint8>(data.at(34)&0xff);
|
|
|
+ quint8 devicestatus3 = static_cast<quint8>(data.at(35)&0xff);
|
|
|
+ quint8 devicestatus4 = static_cast<quint8>(data.at(36)&0xff);
|
|
|
+ quint8 devicestatus5 = static_cast<quint8>(data.at(37)&0xff);
|
|
|
+ QString alarm1 = QString("%1").arg(devicestatus1,8,2,QChar('0'));
|
|
|
+ QString alarm2 = QString("%1").arg(devicestatus2,8,2,QChar('0'));
|
|
|
+ QString alarm3 = QString("%1").arg(devicestatus3,8,2,QChar('0'));
|
|
|
+ QString alarm4 = QString("%1").arg(devicestatus4,8,2,QChar('0'));
|
|
|
+ QString alarm5 = QString("%1").arg(devicestatus5,8,2,QChar('0'));
|
|
|
+ QString alarm = QString("%1%2%3%4%5").arg(alarm1).arg(alarm2).arg(alarm3).arg(alarm4).arg(alarm5);
|
|
|
+
|
|
|
+ QString tmp3 = QString("[%1] SOE data 06 [%2]").arg(datetime).arg(alarm);
|
|
|
+ emit comLog(tmp3);
|
|
|
+
|
|
|
+ int m =1,k =0,count=0;
|
|
|
+ for(int i=0;i<33;i++){
|
|
|
+
|
|
|
+ //以每个开关量的首报为状态变化的判断标准
|
|
|
+ uint digitalValue = (alarm.mid(k,1)).toUInt();
|
|
|
+ QString mDesc = "";
|
|
|
+ if(digitalValue != zcdev->devs[idx].alarm[i].digitalValue){
|
|
|
+ if(digitalValue == 1){
|
|
|
+ mDesc.append(digitalDescTable[i]).append("动作");
|
|
|
+
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = digitalValue;
|
|
|
+ sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',0);").arg(deviceid).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital[i]).arg(digitalValue).arg(mDesc).arg(datetime));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+ }else{
|
|
|
+ mDesc.append(digitalDescTable[i]).append("复归");
|
|
|
+
|
|
|
+ zcdev->devs[idx].alarm[i].digitalValue = digitalValue;
|
|
|
+ sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',2);").arg(deviceid).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital[i]).arg(digitalValue).arg(mDesc).arg(datetime));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+
|
|
|
+ sql.append(QString("update alarm_power set handling_time = '%1',handling_status = 3 where device_code = '%2' and meas_name = '%3' and digital_value = 1 and handling_status = 0;").arg(datetime).arg(deviceid).arg(digital[i]));
|
|
|
+ emit appendAlarm(deviceid,sql,datetime,mDesc,QString("%1").arg(digitalValue),digital[i]);
|
|
|
+ sql.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ rtn1 = mk_soe_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x15:
|
|
|
+ {
|
|
|
+ switch (data.at(32)&0xff) {
|
|
|
+ case 0x00: //实时数值
|
|
|
+ {
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harData = "";
|
|
|
+ for(int i=1;i<32;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harData.append(QString(",%1").arg(f/10));
|
|
|
+ start += 4;
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[0].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[0].col[i-1].maj[(zcdev->devs[idx].har[0].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[1].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[1].col[i-1].maj[(zcdev->devs[idx].har[1].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[2].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[2].col[i-1].maj[(zcdev->devs[idx].har[2].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[3].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[3].col[i-1].maj[(zcdev->devs[idx].har[3].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[4].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[4].col[i-1].maj[(zcdev->devs[idx].har[4].ui_ct)-1].value = f/10;
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(i == 1)
|
|
|
+ (zcdev->devs[idx].har[5].ui_ct)++;
|
|
|
+ zcdev->devs[idx].har[5].col[i-1].maj[(zcdev->devs[idx].har[5].ui_ct)-1].value = f/10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(QString("insert into wave_har_data values (NULL,'%1',%2,%3%4,'%5','%6');").arg(deviceid).arg(0).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+ harData.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,3);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x01: //谐波含量
|
|
|
+ {
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harData = "";
|
|
|
+ for(int i=1;i<32;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harData.append(QString(",%1").arg(f/100));
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(QString("insert into wave_har_data values (NULL,'%1',%2,%3%4,'%5','%6');").arg(deviceid).arg(1).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ harData.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,2);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x02: //日平均数值
|
|
|
+ {
|
|
|
+ stat_count++;
|
|
|
+
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0')).arg(data.at(160)&0xff,2,10,QChar('0')).arg(data.at(159)&0xff,2,10,QChar('0')).arg(data.at(158)&0xff,2,10,QChar('0'));
|
|
|
+ QString tmptime = QString("%1%2-%3-%4").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harcolumn,harData,setHarValue;
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ harcolumn.append(QString("%1,").arg(average[i]));
|
|
|
+ harData.append(QString("%1,").arg(f/10));
|
|
|
+ setHarValue.append(QString("%1=%2,").arg(average[i]).arg(f/10));
|
|
|
+
|
|
|
+ start += 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(ua_count == 0){
|
|
|
+ ua_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(ub_count == 0){
|
|
|
+ ub_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(uc_count == 0){
|
|
|
+ uc_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(ia_count == 0){
|
|
|
+ ia_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(ib_count == 0){
|
|
|
+ ib_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(ic_count == 0){
|
|
|
+ ic_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sql.clear();
|
|
|
+ harcolumn.clear();
|
|
|
+ harData.clear();
|
|
|
+ setHarValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,0);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ if(stat_count == 12){
|
|
|
+ //统计计算前一天每个通道每次谐波的%95值
|
|
|
+ QString setMajValue = "";
|
|
|
+
|
|
|
+ //对每个通道的每组谐波数据进行排序 从小到大
|
|
|
+ this->maj_sort(0,zcdev->devs[idx].har[0].ui_ct);
|
|
|
+ this->maj_sort(1,zcdev->devs[idx].har[1].ui_ct);
|
|
|
+ this->maj_sort(2,zcdev->devs[idx].har[2].ui_ct);
|
|
|
+ this->maj_sort(3,zcdev->devs[idx].har[3].ui_ct);
|
|
|
+ this->maj_sort(4,zcdev->devs[idx].har[4].ui_ct);
|
|
|
+ this->maj_sort(5,zcdev->devs[idx].har[5].ui_ct);
|
|
|
+
|
|
|
+ //A相电压谐波
|
|
|
+ int s = static_cast<int>((zcdev->devs[idx].har[0].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[0].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 0 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[1].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[1].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 1 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[2].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[2].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 2 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //A相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[3].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[3].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 3 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[4].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[4].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 4 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[5].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[5].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 5 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+
|
|
|
+ stat_count = 0;
|
|
|
+ if(tmptime.compare(harDate.toString("yyyy-MM-dd")) != 0){
|
|
|
+ harDate = harDate.addDays(1);
|
|
|
+ }
|
|
|
+ ua_count = 0;
|
|
|
+ ub_count = 0;
|
|
|
+ uc_count = 0;
|
|
|
+ ia_count = 0;
|
|
|
+ ib_count = 0;
|
|
|
+ ic_count = 0;
|
|
|
+
|
|
|
+ zcdev->devs[idx].har[0].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[1].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[2].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[3].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[4].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[5].ui_ct = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x16: //日最大值
|
|
|
+ {
|
|
|
+ stat_count++;
|
|
|
+
|
|
|
+ int psgType = data.at(33)&0xff;
|
|
|
+ QString sendtime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(256)&0xff,2,10,QChar('0')).arg(data.at(255)&0xff,2,10,QChar('0')).arg(data.at(254)&0xff,2,10,QChar('0')).arg(data.at(253)&0xff,2,10,QChar('0')).arg(data.at(252)&0xff,2,10,QChar('0')).arg(data.at(251)&0xff,2,10,QChar('0'));
|
|
|
+ QString tmptime = QString("%1%2-%3-%4").arg(yy).arg(data.at(163)&0xff,2,10,QChar('0')).arg(data.at(162)&0xff,2,10,QChar('0')).arg(data.at(161)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ int start = 34;
|
|
|
+ QString harcolumn,harData,setHarValue;
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ quint32 h = static_cast<quint32>(((data.at(start+3)&0x000000ff)<<24)|((data.at(start+2)&0x000000ff)<<16)|((data.at(start+1)&0x000000ff)<<8)|(data.at(start)&0x000000ff));
|
|
|
+ float f = *(float*)&h;
|
|
|
+
|
|
|
+ QString maxtime = QString("%1 %2:%3:%4").arg(harDate.toString("yyyy-MM-dd")).arg(data.at(start+4)&0xff,2,10,QChar('0')).arg(data.at(start+5)&0xff,2,10,QChar('0')).arg(data.at(start+6)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+ harcolumn.append(QString("%1,%2,").arg(maxinfo[i]).arg(maxtimeinfo[i]));
|
|
|
+ harData.append(QString("%1,'%2',").arg(f/10).arg(maxtime));
|
|
|
+ setHarValue.append(QString("%1=%2,%3='%4',").arg(maxinfo[i]).arg(f/10).arg(maxtimeinfo[i]).arg(maxtime));
|
|
|
+
|
|
|
+ start += 7;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(psgType == 0){ //通道类型(0 A相电压 1 B相电压 2 C相电压 3 A相电流 4 B相电流 5 C相电流)
|
|
|
+ if(ua_count == 0){
|
|
|
+ ua_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 1){
|
|
|
+ if(ub_count == 0){
|
|
|
+ ub_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 2){
|
|
|
+ if(uc_count == 0){
|
|
|
+ uc_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 3){
|
|
|
+ if(ia_count == 0){
|
|
|
+ ia_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 4){
|
|
|
+ if(ib_count == 0){
|
|
|
+ ib_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }else if(psgType == 5){
|
|
|
+ if(ic_count == 0){
|
|
|
+ ic_count++;
|
|
|
+ sql.append(QString("insert into wave_statistic_data(id,deviceName,psgType,%1dataDate,sendTime) values (NULL,'%2',%3,%4'%5','%6');").arg(harcolumn).arg(deviceid).arg(psgType).arg(harData).arg(harDate.toString("yyyy-MM-dd")).arg(sendtime));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }else{
|
|
|
+
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = %4 and dataDate = '%5';").arg(setHarValue).arg(sendtime).arg(deviceid).arg(psgType).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+ harcolumn.clear();
|
|
|
+ harData.clear();
|
|
|
+ setHarValue.clear();
|
|
|
+
|
|
|
+ rtn1 = mk_har_request(data,1);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+
|
|
|
+ if(stat_count == 12){
|
|
|
+ //统计计算前一天每个通道每次谐波的%95值
|
|
|
+ QString setMajValue = "";
|
|
|
+
|
|
|
+ //对每个通道的每组谐波数据进行排序 从小到大
|
|
|
+ this->maj_sort(0,zcdev->devs[idx].har[0].ui_ct);
|
|
|
+ this->maj_sort(1,zcdev->devs[idx].har[1].ui_ct);
|
|
|
+ this->maj_sort(2,zcdev->devs[idx].har[2].ui_ct);
|
|
|
+ this->maj_sort(3,zcdev->devs[idx].har[3].ui_ct);
|
|
|
+ this->maj_sort(4,zcdev->devs[idx].har[4].ui_ct);
|
|
|
+ this->maj_sort(5,zcdev->devs[idx].har[5].ui_ct);
|
|
|
+
|
|
|
+ //A相电压谐波
|
|
|
+ int s = static_cast<int>((zcdev->devs[idx].har[0].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[0].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 0 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[1].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[1].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 1 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电压谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[2].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[2].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 2 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //A相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[3].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[3].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 3 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //B相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[4].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[4].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 4 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+ //C相电流谐波
|
|
|
+ s = static_cast<int>((zcdev->devs[idx].har[5].ui_ct)*(0.95));
|
|
|
+ for(int i=0;i<31;i++){
|
|
|
+ setMajValue.append(QString("%1=%2,").arg(majinfo[i]).arg(zcdev->devs[idx].har[5].col[i].maj[s-1].value));
|
|
|
+ }
|
|
|
+ sql.append(QString("update wave_statistic_data set %1sendTime ='%2' where deviceName = '%3' and psgType = 5 and dataDate = '%4';").arg(setMajValue).arg(sendtime).arg(deviceid).arg(harDate.toString("yyyy-MM-dd")));
|
|
|
+ emit appendsql(sql);
|
|
|
+ sql.clear();
|
|
|
+ setMajValue.clear();
|
|
|
+
|
|
|
+
|
|
|
+ stat_count = 0;
|
|
|
+ if(tmptime.compare(harDate.toString("yyyy-MM-dd")) != 0){
|
|
|
+ harDate = harDate.addDays(1);
|
|
|
+ }
|
|
|
+ ua_count = 0;
|
|
|
+ ub_count = 0;
|
|
|
+ uc_count = 0;
|
|
|
+ ia_count = 0;
|
|
|
+ ib_count = 0;
|
|
|
+ ic_count = 0;
|
|
|
+
|
|
|
+ zcdev->devs[idx].har[0].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[1].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[2].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[3].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[4].ui_ct = 0;
|
|
|
+ zcdev->devs[idx].har[5].ui_ct = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x18://故障录波
|
|
|
+ {
|
|
|
+ //页号
|
|
|
+ int n = (QString("%1").arg(data.at(33)&0xff,2,10)).toInt();
|
|
|
+ printf("n = %d\n",n);
|
|
|
+ int start = 34;
|
|
|
+ //故障录波发生时间
|
|
|
+ QString waveTime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(199)&0xff,2,10,QChar('0')).arg(data.at(198)&0xff,2,10,QChar('0')).arg(data.at(197)&0xff,2,10,QChar('0')).arg(data.at(196)&0xff,2,10,QChar('0')).arg(data.at(195)&0xff,2,10,QChar('0')).arg(data.at(194)&0xff,2,10,QChar('0'));
|
|
|
+ //发送时间
|
|
|
+ QString sendTime = QString("%1%2-%3-%4 %5:%6:%7").arg(yy).arg(data.at(205)&0xff,2,10,QChar('0')).arg(data.at(204)&0xff,2,10,QChar('0')).arg(data.at(203)&0xff,2,10,QChar('0')).arg(data.at(202)&0xff,2,10,QChar('0')).arg(data.at(201)&0xff,2,10,QChar('0')).arg(data.at(200)&0xff,2,10,QChar('0'));
|
|
|
+
|
|
|
+
|
|
|
+ if(n == 7){
|
|
|
+ for(int i=0;i<10;i++){
|
|
|
+ groupNum++;
|
|
|
+ //2位十六进制转浮点数
|
|
|
+ //UA UB UC IA IB IC IR
|
|
|
+ quint16 hex = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+ float ua = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+2)&0x00ff)<<8)|(data.at(start+3)&0x00ff));
|
|
|
+ float ub = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+4)&0x00ff)<<8)|(data.at(start+5)&0x00ff));
|
|
|
+ float uc = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+6)&0x00ff)<<8)|(data.at(start+7)&0x00ff));
|
|
|
+ float ia = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+8)&0x00ff)<<8)|(data.at(start+9)&0x00ff));
|
|
|
+ float ib = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+10)&0x00ff)<<8)|(data.at(start+11)&0x00ff));
|
|
|
+ float ic = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+12)&0x00ff)<<8)|(data.at(start+13)&0x00ff));
|
|
|
+ float ir = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat());
|
|
|
+ //BIT15:开入1 BIT14:火灾预警总 BIT13:线路电气故障总 BIT12:缺相 BIT11:过压 BIT10:欠压 BIT9:电流越限 BIT8:过流跳闸 BIT7:剩余电流越限 BIT6:T1超温 BIT5:T2超温 BIT4:T3超温 BIT3:T4超温 BIT2:环境温度超温 BIT1-0:预留
|
|
|
+ hex = static_cast<quint16>(((data.at(start+14)&0x00ff)<<8)|(data.at(start+15)&0x00ff));
|
|
|
+ QString str = QString("%1").arg(hex,16,2,QChar('0'));
|
|
|
+ QString temp = QString("[%1] wave record [ua:%2 ub:%3 uc:%4 ia:%5 ib:%6 ic:%7 ir:%8 [%9]]").arg(t).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(str);
|
|
|
+ //emit comLog(temp);
|
|
|
+ QString L = "";
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ L.append(QString(",%1").arg(str.mid(j,1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(i == 9){
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12');").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ }else{
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12'),").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ start += 16;
|
|
|
+ }
|
|
|
+ sql.append(QString("insert into wave_record_data values %1").arg(sqldata));
|
|
|
+ emit appendsql(sql);
|
|
|
+ emit comLog(sql);
|
|
|
+ sql.clear();
|
|
|
+
|
|
|
+ sqldata.clear();
|
|
|
+ groupNum = 0;
|
|
|
+
|
|
|
+ rtn1 = mk_wave_request(data,2);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+
|
|
|
+ }else{
|
|
|
+ for(int i=0;i<10;i++){
|
|
|
+ groupNum++;
|
|
|
+ //2位十六进制转浮点数
|
|
|
+ //UA UB UC IA IB IC IR
|
|
|
+ quint16 hex = static_cast<quint16>(((data.at(start)&0x00ff)<<8)|(data.at(start+1)&0x00ff));
|
|
|
+ float ua = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+2)&0x00ff)<<8)|(data.at(start+3)&0x00ff));
|
|
|
+ float ub = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+4)&0x00ff)<<8)|(data.at(start+5)&0x00ff));
|
|
|
+ float uc = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+6)&0x00ff)<<8)|(data.at(start+7)&0x00ff));
|
|
|
+ float ia = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+8)&0x00ff)<<8)|(data.at(start+9)&0x00ff));
|
|
|
+ float ib = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+10)&0x00ff)<<8)|(data.at(start+11)&0x00ff));
|
|
|
+ float ic = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat())/10;
|
|
|
+ hex = static_cast<quint16>(((data.at(start+12)&0x00ff)<<8)|(data.at(start+13)&0x00ff));
|
|
|
+ float ir = ((QString("%1").arg(hex,6,10,QChar('0'))).toFloat());
|
|
|
+ //BIT15:开入1 BIT14:火灾预警总 BIT13:线路电气故障总 BIT12:缺相 BIT11:过压 BIT10:欠压 BIT9:电流越限 BIT8:过流跳闸 BIT7:剩余电流越限 BIT6:T1超温 BIT5:T2超温 BIT4:T3超温 BIT3:T4超温 BIT2:环境温度超温 BIT1-0:预留
|
|
|
+ hex = static_cast<quint16>(((data.at(start+14)&0x00ff)<<8)|(data.at(start+15)&0x00ff));
|
|
|
+ QString str = QString("%1").arg(hex,16,2,QChar('0'));
|
|
|
+ QString temp = QString("[%1] wave record [ua:%2 ub:%3 uc:%4 ia:%5 ib:%6 ic:%7 ir:%8 [%9]]").arg(t).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(str);
|
|
|
+ //emit comLog(temp);
|
|
|
+ QString L = "";
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ L.append(QString(",%1").arg(str.mid(j,1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ sqldata.append(QString("(NULL,'%1',%2,%3,%4,%5,%6,%7,%8,%9%10,'%11','%12'),").arg(deviceid).arg(groupNum).arg(ua).arg(ub).arg(uc).arg(ia).arg(ib).arg(ic).arg(ir).arg(L).arg(waveTime).arg(sendTime));
|
|
|
+
|
|
|
+ start += 16;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ {
|
|
|
+ rtn1 = mk_login_rtn(data);
|
|
|
+ so->write(rtn1);
|
|
|
+ rtn1.clear();
|
|
|
+ so->flush();
|
|
|
+ msleep(200);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getdata = false;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+void ZcComThread::maj_sort(int psg,int u_ct)
|
|
|
+{
|
|
|
+ float tmp = 0.00;
|
|
|
+ //通道
|
|
|
+ for(int l=0;l<31;l++){
|
|
|
+ //1-31组
|
|
|
+ for(int i=0;i<u_ct;i++){
|
|
|
+ for(int j=i+1;j<u_ct;j++){
|
|
|
+ if(zcdev->devs[idx].har[psg].col[l].maj[i].value > zcdev->devs[idx].har[psg].col[l].maj[j].value){
|
|
|
+ tmp = zcdev->devs[idx].har[psg].col[l].maj[i].value;
|
|
|
+ zcdev->devs[idx].har[psg].col[l].maj[i].value = zcdev->devs[idx].har[psg].col[l].maj[j].value;
|
|
|
+ zcdev->devs[idx].har[psg].col[l].maj[j].value = tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//下发时间同步
|
|
|
+//下发设置时钟时间为2022-01-01 01:01:01
|
|
|
+//40 40 03 01
|
|
|
+//09 28 09 01 03 16
|
|
|
+//01 01 88 88 80 00 00 00 77 77 FF FF
|
|
|
+//03 //报文类型
|
|
|
+//00 00 //回应消息 msgid
|
|
|
+//00
|
|
|
+//11 00 //应用数据单元长度
|
|
|
+//24 07 D2 00 00 01 01 01 01 01 16 01 01 01 01 01 01
|
|
|
+//09 23 23
|
|
|
+QByteArray ZcComThread::mk_time_rtn(QByteArray data)
|
|
|
+{
|
|
|
+ int cur=0,crc=0;
|
|
|
+ QDateTime t = QDateTime::currentDateTime();
|
|
|
+ int year = t.date().year();
|
|
|
+ int yy = year%100;
|
|
|
+ int mon = t.date().month();
|
|
|
+ int day = t.date().day();
|
|
|
+ int hour = t.time().hour();
|
|
|
+ int min = t.time().minute();
|
|
|
+ int sec = t.time().second();
|
|
|
+
|
|
|
+ QByteArray rtn = QByteArray(48,0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(2)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(3)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(10)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(11)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(12)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(13)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(14)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(15)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(16)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(17)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(18)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(19)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(20)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(21)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x03);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x11);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x24);
|
|
|
+ rtn[cur++] = static_cast<char>(0x07);
|
|
|
+ rtn[cur++] = static_cast<char>(0xD2);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ for(int i=2;i<cur;i++){
|
|
|
+ crc += rtn[i]&0xff;
|
|
|
+ }
|
|
|
+ rtn[cur++] = static_cast<char>(crc&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+
|
|
|
+ return rtn;
|
|
|
+}
|
|
|
+
|
|
|
+//0x26 主机应答
|
|
|
+//40 40 03 01
|
|
|
+//09 28 09 01 03 16
|
|
|
+//01 01 88 88 80 00 00 00 77 77 FF FF
|
|
|
+//03 00 00 00
|
|
|
+//0B 00 //应用数据单元长度
|
|
|
+//26 07 D2 00 00 01 01 01 01 01 16
|
|
|
+//E5 23 23
|
|
|
+QByteArray ZcComThread::mk_soe_rtn(QByteArray data)
|
|
|
+{
|
|
|
+ int cur=0,crc=0;
|
|
|
+ QDateTime t = QDateTime::currentDateTime();
|
|
|
+ int year = t.date().year();
|
|
|
+ int yy = year%100;
|
|
|
+ int mon = t.date().month();
|
|
|
+ int day = t.date().day();
|
|
|
+ int hour = t.time().hour();
|
|
|
+ int min = t.time().minute();
|
|
|
+ int sec = t.time().second();
|
|
|
+
|
|
|
+ QByteArray rtn = QByteArray(42,0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(2)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(3)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(10)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(11)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(12)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(13)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(14)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(15)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(16)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(17)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(18)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(19)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(20)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(21)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x03);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(23)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(24)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x0B);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x26);
|
|
|
+ rtn[cur++] = static_cast<char>(0x07);
|
|
|
+ rtn[cur++] = static_cast<char>(0xD2);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ for(int i=2;i<cur;i++){
|
|
|
+ crc += rtn[i]&0xff;
|
|
|
+ }
|
|
|
+ rtn[cur++] = static_cast<char>(crc&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+
|
|
|
+ return rtn;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//5.2 故障录波下发请求和服务器端特殊帧应答
|
|
|
+//40 40 03 01
|
|
|
+//09 28 09 01 03 16
|
|
|
+//01 01 88 88 80 00 00 00 77 77 FF FF
|
|
|
+//03 00 00 01 07 00
|
|
|
+//23 07 D2
|
|
|
+//00 00
|
|
|
+//00 控制类型 0:请求上报 1:重新开始录波 2:确认文件接收完成
|
|
|
+//00 分页 0-7
|
|
|
+//09 28 09 01 03 16
|
|
|
+//DD 23 23
|
|
|
+QByteArray ZcComThread::mk_wave_request(QByteArray data,int n) //其中 n 为控制类型
|
|
|
+{
|
|
|
+ int cur=0,crc=0;
|
|
|
+ QDateTime t = QDateTime::currentDateTime();
|
|
|
+ int year = t.date().year();
|
|
|
+ int yy = year%100;
|
|
|
+ int mon = t.date().month();
|
|
|
+ int day = t.date().day();
|
|
|
+ int hour = t.time().hour();
|
|
|
+ int min = t.time().minute();
|
|
|
+ int sec = t.time().second();
|
|
|
+
|
|
|
+ QByteArray rtn = QByteArray(44,0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(2)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(3)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(10)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(11)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(12)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(13)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(14)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(15)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(16)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(17)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(18)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(19)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(20)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(21)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x03);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(23)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(24)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x0D);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x07);
|
|
|
+ rtn[cur++] = static_cast<char>(0xD2);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(31)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(32)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((n/16)&0x0f)<<4)|((n%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(33)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ for(int i=2;i<cur;i++){
|
|
|
+ crc += rtn[i]&0xff;
|
|
|
+ }
|
|
|
+ rtn[cur++] = static_cast<char>(crc&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+
|
|
|
+ return rtn;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//40 40 03 01
|
|
|
+//09 28 09 01 03 16
|
|
|
+//01 01 88 88 80 00 00 00 77 77 FF FF
|
|
|
+//03
|
|
|
+//00 00
|
|
|
+//00
|
|
|
+//07 00
|
|
|
+//25 07 D2 00 00
|
|
|
+//03 数据类型 0:日平均谐波数值 1:日最大谐波数值 2:谐波百分比 3:实时数值
|
|
|
+//01 通道 0:UA 1:UB 2:UC 3:IA 4:IB 5:IC
|
|
|
+//09 28 09 01 03 16
|
|
|
+//E3 23 23
|
|
|
+QByteArray ZcComThread::mk_har_request(QByteArray data,int n) //n 为 数据类型
|
|
|
+{
|
|
|
+ int cur=0,crc=0;
|
|
|
+ QDateTime t = QDateTime::currentDateTime();
|
|
|
+ int year = t.date().year();
|
|
|
+ int yy = year%100;
|
|
|
+ int mon = t.date().month();
|
|
|
+ int day = t.date().day();
|
|
|
+ int hour = t.time().hour();
|
|
|
+ int min = t.time().minute();
|
|
|
+ int sec = t.time().second();
|
|
|
+
|
|
|
+ QByteArray rtn = QByteArray(44,0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(2)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(3)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(10)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(11)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(12)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(13)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(14)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(15)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(16)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(17)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(18)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(19)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(20)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(21)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x03);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(23)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(24)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x0D);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x25);
|
|
|
+ rtn[cur++] = static_cast<char>(0x07);
|
|
|
+ rtn[cur++] = static_cast<char>(0xD2);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>((((n/16)&0x0f)<<4)|((n%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(33)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ for(int i=2;i<cur;i++){
|
|
|
+ crc += rtn[i]&0xff;
|
|
|
+ }
|
|
|
+ rtn[cur++] = static_cast<char>(crc&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+
|
|
|
+ return rtn;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//40 40 03 01 //与请求登录报文一致
|
|
|
+//01 29 09 01 03 16 //系统时间
|
|
|
+//01 01 88 88 80 00 00 00 77 77 FF FF //与请求登录报文一致
|
|
|
+//05 //报文类型为05
|
|
|
+//00 03 //回应消息 msgid 要和请求消息 msgid 保持 一致
|
|
|
+//00
|
|
|
+//00 00
|
|
|
+//D7 //校验码
|
|
|
+//23 23
|
|
|
+QByteArray ZcComThread::mk_login_rtn(QByteArray data)
|
|
|
+{
|
|
|
+ int cur=0,crc=0;
|
|
|
+ QDateTime t = QDateTime::currentDateTime();
|
|
|
+ int year = t.date().year();
|
|
|
+ int yy = year%100;
|
|
|
+ int mon = t.date().month();
|
|
|
+ int day = t.date().day();
|
|
|
+ int hour = t.time().hour();
|
|
|
+ int min = t.time().minute();
|
|
|
+ int sec = t.time().second();
|
|
|
+
|
|
|
+ QByteArray rtn = QByteArray(31,0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(0x40);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(2)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(3)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>((((sec/16)&0x0f)<<4)|((sec%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((min/16)&0x0f)<<4)|((min%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((hour/16)&0x0f)<<4)|((hour%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((day/16)&0x0f)<<4)|((day%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((mon/16)&0x0f)<<4)|((mon%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>((((yy/16)&0x0f)<<4)|((yy%16)&0x0f));
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(10)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(11)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(12)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(13)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(14)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(15)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(16)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(17)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(18)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(19)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(20)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(21)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x05);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(23)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(data.at(24)&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ rtn[cur++] = static_cast<char>(0x00);
|
|
|
+ for(int i=2;i<cur;i++){
|
|
|
+ crc += rtn[i]&0xff;
|
|
|
+ }
|
|
|
+ rtn[cur++] = static_cast<char>(crc&0xff);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+ rtn[cur++] = static_cast<char>(0x23);
|
|
|
+
|
|
|
+ return rtn;
|
|
|
+}
|
|
|
+
|
|
|
+quint8 ZcComThread::hexstr_to_byte(QString dat)
|
|
|
+{
|
|
|
+ quint8 tmp[2];
|
|
|
+ QByteArray Dat = dat.toLower().toLatin1();
|
|
|
+ quint8 temp;
|
|
|
+ temp = Dat.at(0)&0xff;
|
|
|
+ if((temp>=0x30)&&(temp<=0x39))
|
|
|
+ tmp[0] = temp-0x30;
|
|
|
+ else
|
|
|
+ tmp[0] = temp-0x37;
|
|
|
+ temp = Dat.at(1)&0xff;
|
|
|
+ if((temp>=0x30)&&(temp<=0x39))
|
|
|
+ tmp[1] = temp-0x30;
|
|
|
+ else
|
|
|
+ tmp[1] = temp-0x37;
|
|
|
+ return static_cast<quint8>(((tmp[0]&0x0f)<<4)|(tmp[1]&0x0f));
|
|
|
+}
|
|
|
+
|
|
|
+quint8 ZcComThread::sumCrc(QByteArray data,int len)
|
|
|
+{
|
|
|
+ quint8 crc = 0x00;
|
|
|
+ for(int i=0;i<len;i++){
|
|
|
+ //printf("%s ",(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0'))).toUtf8().data());
|
|
|
+ crc += static_cast<quint8>(data.at(i)&0xff);
|
|
|
+ }
|
|
|
+ return crc;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|