#include "smartlightcommthread.h" #include "smartlightshm.h" SmartLightCommThread::SmartLightCommThread(qintptr socketDescriptor, QObject *parent) : QThread (parent) { idx = -1; ErrorCount[0] = 0x0000; ErrorCount[1] = 0x0000; WirelessSignal = 0xff; keepcomm = false; CmdList.clear(); this->SocketDescriptor = socketDescriptor; } SmartLightCommThread::~SmartLightCommThread() { deleteLater(); } QString SmartLightCommThread::deviceID() { return DeviceID; } void SmartLightCommThread::run() { QTcpSocket *so = new QTcpSocket; if(!so->setSocketDescriptor(this->SocketDescriptor)) { so->abort(); return; } WaitEcho = false; WaitCount = 0; DevType = -1; DeviceID = ""; keepcomm = true; err_count = 0; while (keepcomm) { if(so->state()!=QTcpSocket::ConnectedState){ close_self(so); return; } if(so->waitForReadyRead(1000)){ WaitCount = 0; readData(so); } if(CmdList.length()>0){ if(!WaitEcho){ QByteArray cmd = CmdList.first(); so->write(cmd); so->flush(); CmdList.removeFirst(); QString Data = QString("[ %1 %2 %3 >>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(so->peerAddress().toString()) .arg(DeviceID.length()>0?QString("%1").arg(DeviceID):QString("")); for(int i=0;i30) WaitEcho=false; usleep(100000); } } quint16 SmartLightCommThread::chk_crcc(QByteArray buff, int len) { quint16 default_data = 0xa001; quint16 crc = 0xffff; for(int j=0;j(buff[j]&0xff); for(int i=0;i<8;i++) { if(crc&0x01) { crc >>= 1; crc ^= default_data; }else crc >>= 1; } } return crc; } void SmartLightCommThread::mk_EventList_qry(QString deviceId, quint8 type, quint8 cur, quint8 num) { UN_REFERENCED_PARAMETER(deviceId); if((type==0x01)||(type==0x02)){ QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(21,0x00); body[0] = static_cast(ServerAddr1&0xff); body[1] = static_cast((ServerAddr1>>8)&0xff); body[2] = static_cast((ServerAddr1>>16)&0xff); body[3] = static_cast((ServerAddr1>>24)&0xff); body[4] = static_cast(ServerAddr0&0xff); body[5] = static_cast((ServerAddr0>>8)&0xff); body[6] = static_cast((ServerAddr0>>16)&0xff); body[7] = static_cast(0x00); body[8] = static_cast(0x0e); body[9] = static_cast(0xe0); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(type&0xff); body[13] = static_cast(0x00); body[14] = static_cast(cur&0xff); body[15] = static_cast(num&0xff); body[16] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[17] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[18] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[19] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[20] = static_cast(0x05); QByteArray cmd = mkDataFrame(body); CmdList.append(cmd); } } int SmartLightCommThread::get_fp_byte(int num) { if(num>0) return ((0x0100<<((num-1)&0x07))|(num>>3)); return 0; } quint8 SmartLightCommThread::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(((tmp[0]&0x0f)<<4)|(tmp[1]&0x0f)); } void SmartLightCommThread::mk_hisData_qry(QString deviceId, quint16 f_pno, quint16 f_fno, QDateTime t1, QDateTime t2, quint8 sep, quint8 num) { UN_REFERENCED_PARAMETER(deviceId); QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(1,0x00); if((f_fno==2)||(f_fno==9)){ body = QByteArray(22,0x00); }else if((f_fno==1)||(f_fno==17)||(f_fno==18)||(f_fno==19)||(f_fno==20)||(f_fno==21)||(f_fno==22)){ body = QByteArray(26,0x00); }else if((f_fno==41)||(f_fno==42)||(f_fno==43)||(f_fno==61)||(f_fno==62)){ body = QByteArray(29,0x00); } body[0] = static_cast(ServerAddr1&0xff); body[1] = static_cast((ServerAddr1>>8)&0xff); body[2] = static_cast((ServerAddr1>>16)&0xff); body[3] = static_cast((ServerAddr1>>24)&0xff); body[4] = static_cast(ServerAddr0&0xff); body[5] = static_cast((ServerAddr0>>8)&0xff); body[6] = static_cast((ServerAddr0>>16)&0xff); body[7] = static_cast(0x00); body[8] = static_cast(0x0d); body[9] = static_cast(0xe0); int pno = get_fp_byte(f_pno); body[10] = static_cast((pno>>8)&0xff); body[11] = static_cast(pno&0xff); int fno = get_fp_byte(f_fno); body[12] = static_cast((fno>>8)&0xff); body[13] = static_cast(fno&0xff); if(body.length()==22){ body[14] = static_cast((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f)); body[15] = static_cast((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f)); body[16] = static_cast((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f)); body[17] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[18] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[19] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[20] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[21] = static_cast(0x05); }else if(body.length()==26){ body[14] = static_cast((((t1.time().minute()/10)&0x0f)<<4)|((t1.time().minute()%10)&0x0f)); body[15] = static_cast((((t1.time().hour()/10)&0x0f)<<4)|((t1.time().hour()%10)&0x0f)); body[16] = static_cast((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f)); body[17] = static_cast((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f)); body[18] = static_cast((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f)); body[19] = static_cast(sep); body[20] = static_cast(num); body[21] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[22] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[23] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[24] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[25] = static_cast(0x05); }else if(body.length()==29){ body[14] = static_cast((((t1.time().minute()/10)&0x0f)<<4)|((t1.time().minute()%10)&0x0f)); body[15] = static_cast((((t1.time().hour()/10)&0x0f)<<4)|((t1.time().hour()%10)&0x0f)); body[16] = static_cast((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f)); body[17] = static_cast((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f)); body[18] = static_cast((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f)); body[19] = static_cast((((t2.time().minute()/10)&0x0f)<<4)|((t2.time().minute()%10)&0x0f)); body[20] = static_cast((((t2.time().hour()/10)&0x0f)<<4)|((t2.time().hour()%10)&0x0f)); body[21] = static_cast((((t2.date().day()/10)&0x0f)<<4)|((t2.date().day()%10)&0x0f)); body[22] = static_cast((((t2.date().month()/10)&0x0f)<<4)|((t2.date().month()%10)&0x0f)); body[23] = static_cast((((t2.date().year()/10)&0x0f)<<4)|((t2.date().year()%10)&0x0f)); body[24] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[25] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[26] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[27] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[28] = static_cast(0x05); } if(body.length()>1){ QByteArray cmd = mkDataFrame(body); CmdList.append(cmd); } } //复位命令 void SmartLightCommThread::reset_command(QString deviceId) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(21,0x00); body[0] = static_cast(0x01); body[1] = static_cast(0x00); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x01); body[9] = static_cast(0xe0); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x00); body[14] = static_cast(0x01); body[15] = static_cast(0x00); body[16] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[17] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[18] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[19] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[20] = static_cast(0x05); QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //设置参数开关灯时间 void SmartLightCommThread::request_set_parameters_command(QString deviceId, int parameterType, QString tmp) { QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(tmp.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(tmp) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << tmp.toUtf8() << " error: " << err.error; return; } QJsonArray data_list=document.array(); QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==9){ body= QByteArray(22,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x01); int ncount = data_list.size(); QJsonArray senddata; // for (int j = 0; j < ncount; j++) // { QJsonValue name_value = data_list.at(0); QJsonObject temp1 = name_value.toObject(); QJsonValue value = temp1.value("date"); QString studentname = value.toString(); // } int month = studentname.mid(0, 2).toInt(); int day = studentname.mid(3, 2).toInt(); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(month) .arg(day); emit CommData(DeviceID, 2, Data); QString hex1 = QString("%1").arg(month, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); QString hex2 = QString("%1").arg(day, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[14] = static_cast(Dat1[0]&0xff); body[15] = static_cast(Dat2[0]&0xff); body[16] = static_cast(0x01); body[17] = static_cast(0x00); QString on_hour = temp1.value("on_hour").toString(); QString on_minute = temp1.value("on_minute").toString(); QString off_hour = temp1.value("off_hour").toString(); QString off_minute = temp1.value("off_minute").toString(); QTime on_time = QTime::fromString(on_hour+":"+on_minute,"hh:mm"); QTime off_time = QTime::fromString(off_hour+":"+off_minute,"hh:mm"); QByteArray Dat3 =mkB19time(on_time); QByteArray Dat4 =mkB19time(off_time); body[18] = static_cast(Dat3[0]&0xff); body[19] = static_cast(Dat3[1]&0xff); body[20] = static_cast(Dat4[0]&0xff); body[21] = static_cast(Dat4[1]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //设置参数通信参数配置 void SmartLightCommThread::request_set_parameters_communication_command(QString deviceId, int parameterType, int timeOut,int retransmissionsNumber, int realTimeData, int historicalData, int eventData, int heartbeatCycle) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==1){ body= QByteArray(18,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x00); body[14] = static_cast(((((timeOut%100)/10)&0x0f)<<4)|(((timeOut%100)%10)&0x0f)); body[15] = static_cast(((retransmissionsNumber&0x0f)<<4)|((timeOut/100)&0x0f)); if(realTimeData==1&&historicalData==1&&eventData==1){ body[16] = static_cast(0x07); }else if(realTimeData==1&&historicalData==1&&eventData==0){ body[16] = static_cast(0x03); }else if(realTimeData==1&&historicalData==0&&eventData==1){ body[16] = static_cast(0x05); }else if(realTimeData==1&&historicalData==0&&eventData==0){ body[16] = static_cast(0x01); }else if(realTimeData==0&&historicalData==1&&eventData==1){ body[16] = static_cast(0x06); }else if(realTimeData==0&&historicalData==0&&eventData==1){ body[16] = static_cast(0x04); }else if(realTimeData==0&&historicalData==1&&eventData==0){ body[16] = static_cast(0x02); }else if(realTimeData==0&&historicalData==0&&eventData==0){ body[16] = static_cast(0x00); } QString hex1 = QString("%1").arg(heartbeatCycle, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[17] = static_cast(Dat1[0]&0xff); }else if(parameterType==5){ body= QByteArray(19,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x10); body[13] = static_cast(0x00); QString hex = QString("%1").arg(timeOut, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString hex1 = QString("%1").arg(retransmissionsNumber, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); QString hex2 = QString("%1").arg(realTimeData, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); QString hex3 = QString("%1").arg(historicalData, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); QString hex4 = QString("%1").arg(eventData, 2, 16, QChar('0')); QByteArray Dat4 = QByteArray(1,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex4)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); body[16] = static_cast(Dat2[0]&0xff); body[17] = static_cast(Dat3[0]&0xff); body[18] = static_cast(Dat4[0]&0xff); }else if(parameterType==11){ body= QByteArray(21,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x04); body[13] = static_cast(0x01); QByteArray Dat =mkB08integer(timeOut);//DI QByteArray Dat1 =mkB10integer(retransmissionsNumber);//AI QByteArray Dat2 =mkB08integer(realTimeData);//智能表 body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat[1]&0xff); body[16] = static_cast(Dat1[0]&0xff); body[17] = static_cast(Dat1[1]&0xff); body[18] = static_cast(Dat1[2]&0xff); body[19] = static_cast(Dat2[0]&0xff); body[20] = static_cast(Dat2[1]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //设置参数主站IP、控制回路 void SmartLightCommThread::request_set_parameters_ip_command(QString deviceId, int parameterType, int address1,int address2, int address3, int address4, int port, QString apn) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==2){ body= QByteArray(36,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x02); body[13] = static_cast(0x00); QString hex = QString("%1").arg(address1, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString hex1 = QString("%1").arg(address2, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); QString hex2 = QString("%1").arg(address3, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); QString hex3 = QString("%1").arg(address4, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); body[16] = static_cast(Dat2[0]&0xff); body[17] = static_cast(Dat3[0]&0xff); QString hex4 = QString("%1").arg(port, 4, 16, QChar('0')); QString hex5 = hex4.mid(0, 2); QString hex6 = hex4.mid(2, 2); QByteArray Dat4 = QByteArray(2,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex5)&0xff); Dat4[1] = static_cast(hexstr_to_byte(hex6)&0xff); body[18] = static_cast(Dat4[1]&0xff); body[19] = static_cast(Dat4[0]&0xff); }else if(parameterType==12){ body= QByteArray(18,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x01); QString bin1 = apn.mid(0, 8); bool ok; int c = bin1.toInt(&ok,2);//先转为10进制 QString d = QString("%1").arg(c,2,16,QLatin1Char('0')); //10进制转16进制 QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(d)&0xff); QString bin2 = apn.mid(8, 8); bool ok1; int c1 = bin2.toInt(&ok1,2);//先转为10进制 QString d1 = QString("%1").arg(c1,2,16,QLatin1Char('0')); //10进制转16进制 QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(d1)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); QString hex3 = QString("%1").arg(address2, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[16] = static_cast(Dat2[0]&0xff); body[17] = static_cast(Dat3[0]&0xff); }else if(parameterType==13||parameterType==19){ body= QByteArray(16+address3*11,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); int pn_re=address1%8; int pn_int=(address1-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); if(address1==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(address1==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==13){ body[12] = static_cast(0x10); body[13] = static_cast(0x01); }else if(parameterType==19){ body[12] = static_cast(0x04); body[13] = static_cast(0x02); } QString hex2 = QString("%1").arg(address2, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); QString hex3 = QString("%1").arg(address3, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[14] = static_cast(Dat2[0]&0xff); body[15] = static_cast(Dat3[0]&0xff); QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(apn.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(apn) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << apn.toUtf8() << " error: " << err.error; return; } QJsonArray data_list=document.array(); for (int j = 0; j < address3; j++) { QJsonValue name_value = data_list.at(j); QJsonObject temp1 = name_value.toObject(); int configurationNumber = temp1.value("configuration_number").toInt(); QString hex4 = QString("%1").arg(configurationNumber, 2, 16, QChar('0')); QByteArray Dat4 = QByteArray(1,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex4)&0xff); body[16+11*j] = static_cast(Dat4[0]&0xff); int operationMode = temp1.value("Operation_mode").toInt(); QString hex5 = QString("%1").arg(operationMode, 2, 16, QChar('0')); QByteArray Dat5 = QByteArray(1,0x00); Dat5[0] = static_cast(hexstr_to_byte(hex5)&0xff); body[17+11*j] = static_cast(Dat5[0]&0xff); int controlType = temp1.value("control_type").toInt(); QString hex6 = QString("%1").arg(controlType, 2, 16, QChar('0')); QByteArray Dat6 = QByteArray(1,0x00); Dat6[0] = static_cast(hexstr_to_byte(hex6)&0xff); body[18+11*j] = static_cast(Dat6[0]&0xff); int switchPosition = temp1.value("switch_position").toInt(); QString hex7 = QString("%1").arg(switchPosition, 2, 16, QChar('0')); QByteArray Dat7 = QByteArray(1,0x00); Dat7[0] = static_cast(hexstr_to_byte(hex7)&0xff); body[19+11*j] = static_cast(Dat7[0]&0xff); int relativeTime = temp1.value("relative_time").toInt(); QString hex8 = QString("%1").arg(relativeTime, 2, 16, QChar('0')); QByteArray Dat8 = QByteArray(1,0x00); Dat8[0] = static_cast(hexstr_to_byte(hex8)&0xff); body[20+11*j] = static_cast(Dat8[0]&0xff); QString absoluteTime = temp1.value("absolute_time").toString(); QDateTime time = QDateTime::fromString(absoluteTime, "yyyy-MM-dd hh:mm:ss"); QByteArray Dat9 =mkB01datetime(time); body[21+11*j] = static_cast(Dat9[0]&0xff); body[22+11*j] = static_cast(Dat9[1]&0xff); body[23+11*j] = static_cast(Dat9[2]&0xff); body[24+11*j] = static_cast(Dat9[3]&0xff); body[25+11*j] = static_cast(Dat9[4]&0xff); body[26+11*j] = static_cast(Dat9[5]&0xff); } }else if(parameterType==20){ body= QByteArray(15+address2,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); int pn_re=address1%8; int pn_int=(address1-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); if(address1==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(address1==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } body[12] = static_cast(0x08); body[13] = static_cast(0x02); QString hex2 = QString("%1").arg(address2, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[14] = static_cast(Dat2[0]&0xff); QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(apn.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(apn) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << apn.toUtf8() << " error: " << err.error; return; } QJsonObject data_list=document.object(); for (int j = 0; j < address3; j++) { QString s = QString::number(j+1, 10); int groupNumber = data_list.value("group_number"+s).toInt(); QString hex3 = QString("%1").arg(groupNumber, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[15+j] = static_cast(Dat3[0]&0xff); } }else if(parameterType==25){ body= QByteArray(16+address1*3,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x03); QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[14] = static_cast(Dat2[0]&0xff); QString hex3 = QString("%1").arg(address2, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[15] = static_cast(Dat3[0]&0xff); QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(apn.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(apn) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << apn.toUtf8() << " error: " << err.error; return; } QJsonArray data_list=document.array(); for (int j = 0; j < address1; j++) { QJsonValue name_value = data_list.at(j); QJsonObject temp1 = name_value.toObject(); int portType = temp1.value("port_type").toInt(); QString hex4 = QString("%1").arg(portType, 2, 16, QChar('0')); QByteArray Dat4 = QByteArray(1,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex4)&0xff); body[16+3*j] = static_cast(Dat4[0]&0xff); int linesIdentification = temp1.value("lines_identification").toInt(); int portWays = temp1.value("port_ways").toInt(); body[17+3*j] = static_cast(((linesIdentification&0x01)<<7)|(portWays&0x0f)); int pointPhase = temp1.value("point_phase").toInt(); QString hex6 = QString("%1").arg(pointPhase, 2, 16, QChar('0')); QByteArray Dat6 = QByteArray(1,0x00); Dat6[0] = static_cast(hexstr_to_byte(hex6)&0xff); body[18+3*j] = static_cast(Dat6[0]&0xff); } }else if(parameterType==26){ body= QByteArray(15+address1*12,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x02); body[13] = static_cast(0x03); QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[14] = static_cast(Dat2[0]&0xff); QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(apn.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(apn) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << apn.toUtf8() << " error: " << err.error; return; } QJsonArray data_list=document.array(); for (int j = 0; j < address1; j++) { QJsonValue name_value = data_list.at(j); QJsonObject temp1 = name_value.toObject(); int enableIdentity = temp1.value("enable_identity").toInt(); QString hex3 = QString("%1").arg(enableIdentity, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[15+12*j] = static_cast(Dat3[0]&0xff); int portType = temp1.value("port_type").toInt(); QString hex4 = QString("%1").arg(portType, 2, 16, QChar('0')); QByteArray Dat4 = QByteArray(1,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex4)&0xff); body[16+12*j] = static_cast(Dat4[0]&0xff); int linesIdentification = temp1.value("lines_identification").toInt(); int portWays = temp1.value("port_ways").toInt(); body[17+12*j] = static_cast(((linesIdentification&0x01)<<7)|(portWays&0x0f)); int pointPhase = temp1.value("point_phase").toInt(); QString hex6 = QString("%1").arg(pointPhase, 2, 16, QChar('0')); QByteArray Dat6 = QByteArray(1,0x00); Dat6[0] = static_cast(hexstr_to_byte(hex6)&0xff); body[18+12*j] = static_cast(Dat6[0]&0xff); QString onUpperLimit = temp1.value("on_upper_limit").toString(); int onUpperLimitLength = onUpperLimit.length(); QString s = "."; int onUpperLimitIntLength = onUpperLimit.indexOf(s); float d; int g; if(onUpperLimitIntLength==-1){ if(onUpperLimitLength<=3){ d=onUpperLimit.toFloat(); g=0; }else if(onUpperLimitLength>3&&onUpperLimitLength<=7){ d=onUpperLimit.mid(0,3).toFloat(); g=onUpperLimitLength-3; }else if(onUpperLimitLength>7){ d=onUpperLimit.mid(0,3).toFloat(); g=4; } }else{ if(onUpperLimitIntLength==1){ int onUpperIntLimit = onUpperLimit.mid(0,1).toInt(); if(onUpperIntLimit==0){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=-3; }else{ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=-2; } }else if(onUpperLimitIntLength==2){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=-1; }else if(onUpperLimitIntLength==3){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=0; }else if(onUpperLimitIntLength==4){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=1; }else if(onUpperLimitIntLength==5){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=2; }else if(onUpperLimitIntLength==6){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=3; }else if(onUpperLimitIntLength==7){ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=4; }else{ QString str=QString("%1").arg(onUpperLimit.toFloat(),0,'G',3); d = str.toFloat(); g=4; } } d = onUpperLimitLength-onUpperLimitIntLength+1; } } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //设置参数单灯事件检测配置参数 void SmartLightCommThread::request_set_parameters_event_detection_command(QString deviceId, int parameterType, int excessiveCurrent,int excessiveCurrentRecovery,int lowCurrent, int lowCurrentRecovery, int capacitorFailure, int capacitorFailureRecovery, int lampFailure, int lampFailureRecovery, int fuseFailure, int fuseFailureRecovery) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==6){ body= QByteArray(26,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x44); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x20); body[13] = static_cast(0x00); QString hex = QString("%1").arg(excessiveCurrent, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString hex1 = QString("%1").arg(excessiveCurrentRecovery, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); QString hex2 = QString("%1").arg(lowCurrent, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); QString hex3 = QString("%1").arg(lowCurrentRecovery, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); QString hex4 = QString("%1").arg(capacitorFailure, 4, 16, QChar('0')); QString hex41 = hex4.mid(0, 2); QString hex42 = hex4.mid(2, 2); QByteArray Dat4 = QByteArray(2,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex41)&0xff); Dat4[1] = static_cast(hexstr_to_byte(hex42)&0xff); QString hex5 = QString("%1").arg(capacitorFailureRecovery, 4, 16, QChar('0')); QString hex51 = hex5.mid(0, 2); QString hex52 = hex5.mid(2, 2); QByteArray Dat5 = QByteArray(2,0x00); Dat5[0] = static_cast(hexstr_to_byte(hex51)&0xff); Dat5[1] = static_cast(hexstr_to_byte(hex52)&0xff); QString hex6 = QString("%1").arg(lampFailure, 2, 16, QChar('0')); QByteArray Dat6 = QByteArray(1,0x00); Dat6[0] = static_cast(hexstr_to_byte(hex6)&0xff); QString hex7 = QString("%1").arg(lampFailureRecovery, 2, 16, QChar('0')); QByteArray Dat7 = QByteArray(1,0x00); Dat7[0] = static_cast(hexstr_to_byte(hex7)&0xff); QString hex8 = QString("%1").arg(fuseFailure, 2, 16, QChar('0')); QByteArray Dat8 = QByteArray(1,0x00); Dat8[0] = static_cast(hexstr_to_byte(hex8)&0xff); QString hex9 = QString("%1").arg(fuseFailureRecovery, 2, 16, QChar('0')); QByteArray Dat9 = QByteArray(1,0x00); Dat9[0] = static_cast(hexstr_to_byte(hex9)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); body[16] = static_cast(Dat2[0]&0xff); body[17] = static_cast(Dat3[0]&0xff); body[18] = static_cast(Dat4[1]&0xff); body[19] = static_cast(Dat4[0]&0xff); body[20] = static_cast(Dat5[1]&0xff); body[21] = static_cast(Dat5[0]&0xff); body[22] = static_cast(Dat6[0]&0xff); body[23] = static_cast(Dat7[0]&0xff); body[24] = static_cast(Dat8[0]&0xff); body[25] = static_cast(Dat9[0]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //控制命令开关灯 void SmartLightCommThread::request_control_command(QString deviceId, int parameterType, int pn, int controlType, int economizeGear) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==2||parameterType==1||parameterType==3||parameterType==9){ body= QByteArray(16,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(controlType) .arg(economizeGear); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==1){ body[12] = static_cast(0x01); body[13] = static_cast(0x00); }else if(parameterType==2){ body[12] = static_cast(0x02); body[13] = static_cast(0x00); }else if(parameterType==3){ body[12] = static_cast(0x04); body[13] = static_cast(0x00); }else if(parameterType==9){ body[12] = static_cast(0x01); body[13] = static_cast(0x01); } if(controlType==3){ QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); QString hex2 = QString("%1").arg(economizeGear, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[14] = static_cast(Dat1[0]&0xff); body[15] = static_cast(Dat2[0]&0xff); }else{ QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat1[0]&0xff); body[15] = static_cast(0x00); } }else if(parameterType==10||parameterType==11){//单灯控制器复位 body= QByteArray(15,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(controlType) .arg(economizeGear); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==10){ body[12] = static_cast(0x02); body[13] = static_cast(0x01); }else if(parameterType==11){ body[12] = static_cast(0x04); body[13] = static_cast(0x01); } QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat1[0]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //控制命令单灯预约 void SmartLightCommThread::request_control_command_appointment(QString deviceId, int parameterType, int pn,int configure, int controlType, int economizeGear,QString control_time) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==12||parameterType==13||parameterType==17){ body= QByteArray(23,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(controlType) .arg(economizeGear); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==12){ body[12] = static_cast(0x08); body[13] = static_cast(0x01); }else if(parameterType==13){ body[12] = static_cast(0x10); body[13] = static_cast(0x01); }else if(parameterType==17){ body[12] = static_cast(0x01); body[13] = static_cast(0x02); } QString hex1 = QString("%1").arg(configure, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat1[0]&0xff); QDateTime time = QDateTime::fromString(control_time, "yyyy-MM-dd hh:mm:ss"); QByteArray Dat2 =mkB01datetime(time); body[15] = static_cast(Dat2[0]&0xff); body[16] = static_cast(Dat2[1]&0xff); body[17] = static_cast(Dat2[2]&0xff); body[18] = static_cast(Dat2[3]&0xff); body[19] = static_cast(Dat2[4]&0xff); body[20] = static_cast(Dat2[5]&0xff); QString hex3 = QString("%1").arg(controlType, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex3)&0xff); body[21] = static_cast(Dat3[0]&0xff); QString hex4 = QString("%1").arg(economizeGear, 2, 16, QChar('0')); QByteArray Dat4 = QByteArray(1,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex4)&0xff); body[22] = static_cast(Dat4[0]&0xff); }else if(parameterType==14||parameterType==15||parameterType==18){ body= QByteArray(15,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(controlType) .arg(economizeGear); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==14){ body[12] = static_cast(0x20); body[13] = static_cast(0x01); }else if(parameterType==15){ body[12] = static_cast(0x40); body[13] = static_cast(0x01); }else if(parameterType==18){ body[12] = static_cast(0x02); body[13] = static_cast(0x02); } QString hex1 = QString("%1").arg(configure, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat1[0]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //控制命令对时命令 void SmartLightCommThread::request_control_command_time(QString deviceId, int parameterType, QString control_time) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==31){ body= QByteArray(20,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x40); body[13] = static_cast(0x03); QDateTime time = QDateTime::fromString(control_time, "yyyy-MM-dd hh:mm:ss"); QByteArray Dat =mkB01datetime(time); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat[1]&0xff); body[16] = static_cast(Dat[2]&0xff); body[17] = static_cast(Dat[3]&0xff); body[18] = static_cast(Dat[4]&0xff); body[19] = static_cast(Dat[5]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //控制命令无参数 void SmartLightCommThread::request_control_command_no_parameters(QString deviceId, int parameterType) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==4){ body= QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x45); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x00); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //请求实时数据命令无参数 void SmartLightCommThread::request_real_time_data_command(QString deviceId,int parameterType) { QString Data = QString("[ %1 %2 %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg("12345678") .arg(DeviceID.length()>0?QString("%1").arg(DeviceID):QString("")); emit CommData(DeviceID, 2, Data); QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); if(parameterType==2){ body[9] = static_cast(0x73); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x02); body[13] = static_cast(0x00); }else if(parameterType==3){ body[9] = static_cast(0x74); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x04); body[13] = static_cast(0x00); }else if(parameterType==4){ body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x00); }else if(parameterType==25){ body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x03); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //请求实时数据命令参数 void SmartLightCommThread::request_real_time_data_command2(QString deviceId, int parameterType, int pn, int queryNumber, int startPoint) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==9){ body= QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); body[9] = static_cast(0x76); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(Dat[0]&0xff) .arg(Dat[0]&0xff); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } body[12] = static_cast(0x01); body[13] = static_cast(0x01); }else if(parameterType==10){ body= QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); body[9] = static_cast(0x76); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(Dat[0]&0xff) .arg(Dat[0]&0xff); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } body[12] = static_cast(0x02); body[13] = static_cast(0x01); }else if(parameterType==11){ body= QByteArray(16,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x04); body[13] = static_cast(0x01); if(startPoint>255){ if(queryNumber>120){ body[14] = static_cast(0x0A); body[15] = static_cast(0xFF); }else{ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(0xFF); } }else{ if(queryNumber>120){ QString hex = QString("%1").arg(startPoint, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); body[14] = static_cast(0x0A); body[15] = static_cast(Dat[0]&0xff); }else{ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString hex1 = QString("%1").arg(startPoint, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); } } }else if(parameterType==12){ body= QByteArray(16,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); body[9] = static_cast(0x75); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x01); if(startPoint>255){ if(queryNumber>120){ body[14] = static_cast(0x0A); body[15] = static_cast(0xFF); }else{ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(0xFF); } }else{ if(queryNumber>120){ QString hex = QString("%1").arg(startPoint, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); body[14] = static_cast(0x0A); body[15] = static_cast(Dat[0]&0xff); }else{ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString hex1 = QString("%1").arg(startPoint, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat[0]&0xff); body[15] = static_cast(Dat1[0]&0xff); } } }else if(parameterType==17||parameterType==33||parameterType==34||parameterType==35||parameterType==36||parameterType==37||parameterType==38||parameterType==39||parameterType==100){ body= QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4C); body[9] = static_cast(0x76); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(Dat[0]&0xff) .arg(Dat[0]&0xff); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==17){ body[12] = static_cast(0x01); body[13] = static_cast(0x02); }else if(parameterType==33){ body[12] = static_cast(0x01); body[13] = static_cast(0x04); }else if(parameterType==34){ body[12] = static_cast(0x02); body[13] = static_cast(0x04); }else if(parameterType==35){ body[12] = static_cast(0x04); body[13] = static_cast(0x04); }else if(parameterType==36){ body[12] = static_cast(0x08); body[13] = static_cast(0x04); }else if(parameterType==37){ body[12] = static_cast(0x10); body[13] = static_cast(0x04); }else if(parameterType==38){ body[12] = static_cast(0x20); body[13] = static_cast(0x04); }else if(parameterType==39){ body[12] = static_cast(0x40); body[13] = static_cast(0x04); }else if(parameterType==100){ body[12] = static_cast(0x08); body[13] = static_cast(0x0C); } } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //请求历史数据 void SmartLightCommThread::request_historical_data_command(QString deviceId, int parameterType, int pn, int dataFreezingDensity, int dataPoints,QString start_time) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==1||parameterType==17||parameterType==18||parameterType==19||parameterType==20||parameterType==21||parameterType==22){ body = QByteArray(21,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4D); body[9] = static_cast(0x76); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(Dat[0]&0xff) .arg(Dat[0]&0xff); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==1){ body[12] = static_cast(0x01); body[13] = static_cast(0x00); }else if(parameterType==17){ body[12] = static_cast(0x01); body[13] = static_cast(0x02); }else if(parameterType==18){ body[12] = static_cast(0x02); body[13] = static_cast(0x02); }else if(parameterType==19){ body[12] = static_cast(0x04); body[13] = static_cast(0x02); }else if(parameterType==20){ body[12] = static_cast(0x08); body[13] = static_cast(0x02); }else if(parameterType==21){ body[12] = static_cast(0x10); body[13] = static_cast(0x02); }else if(parameterType==22){ body[12] = static_cast(0x20); body[13] = static_cast(0x02); } QDateTime time = QDateTime::fromString(start_time, "yyyy-MM-dd hh:mm:ss"); QByteArray Dat1 =mkB15datetime(time); body[14] = static_cast(Dat1[0]&0xff); body[15] = static_cast(Dat1[1]&0xff); body[16] = static_cast(Dat1[2]&0xff); body[17] = static_cast(Dat1[3]&0xff); body[18] = static_cast(Dat1[4]&0xff); QString hex1 = QString("%1").arg(dataFreezingDensity, 2, 16, QChar('0')); QByteArray Dat2 = QByteArray(1,0x00); Dat2[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[19] = static_cast(Dat2[0]&0xff); QString hex2 = QString("%1").arg(dataPoints, 2, 16, QChar('0')); QByteArray Dat3 = QByteArray(1,0x00); Dat3[0] = static_cast(hexstr_to_byte(hex2)&0xff); body[20] = static_cast(Dat3[0]&0xff); }else if(parameterType==2){ body = QByteArray(17,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4D); body[9] = static_cast(0x76); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x02); body[13] = static_cast(0x00); QDate date = QDate::fromString(start_time, "yyyy-MM-dd"); QByteArray Dat1 =mkB20date(date); body[14] = static_cast(Dat1[0]&0xff); body[15] = static_cast(Dat1[1]&0xff); body[16] = static_cast(Dat1[2]&0xff); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //请求事件数据 void SmartLightCommThread::request_event_data_command(QString deviceId, int parameterType, int pm, int pn) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(16,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4E); body[9] = static_cast(0x76); body[10] = static_cast(0x00); body[11] = static_cast(0x00); if(parameterType==1){ body[12] = static_cast(0x01); }else if(parameterType==2){ body[12] = static_cast(0x02); } body[13] = static_cast(0x00); QString hex = QString("%1").arg(pm, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); body[14] = static_cast(Dat[0]&0xff); QString hex1 = QString("%1").arg(pn, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[15] = static_cast(Dat1[0]&0xff); QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //查询参数控制器开关灯时间参数命令 void SmartLightCommThread::query_parameters_commandf9(QString deviceId,int parameterType) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(18,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4A); body[9] = static_cast(0x76); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x01); body[14] = static_cast(0x01); body[15] = static_cast(0x01); body[16] = static_cast(0x00); body[17] = static_cast(0x0a); QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //查询参数命令带参数 void SmartLightCommThread::query_parameters_command_parameter(QString deviceId,int parameterType,int pn,int number,QString dataList) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body; if(parameterType==13||parameterType==19||parameterType==20){ body= QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4A); body[9] = static_cast(0x76); int pn_re=pn%8; int pn_int=(pn-pn_re)/8+1; QString hex = QString("%1").arg(pn_int, 2, 16, QChar('0')); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(hexstr_to_byte(hex)&0xff); QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(Dat[0]&0xff) .arg(Dat[0]&0xff); emit CommData(DeviceID, 2, Data); if(pn==0){ body[10] = static_cast(0x00); body[11] = static_cast(0x00); }else{ if(pn_re==1){ body[10] = static_cast(0x01); }else if(pn_re==2){ body[10] = static_cast(0x02); }else if(pn_re==3){ body[10] = static_cast(0x04); }else if(pn_re==4){ body[10] = static_cast(0x08); }else if(pn_re==5){ body[10] = static_cast(0x10); }else if(pn_re==6){ body[10] = static_cast(0x20); }else if(pn_re==7){ body[10] = static_cast(0x40); }else if(pn_re==0){ body[10] = static_cast(0x80); } if(pn==8){ body[11] = static_cast(0x01); }else{ body[11] = static_cast(Dat[0]&0xff); } } if(parameterType==13){ body[12] = static_cast(0x10); body[13] = static_cast(0x01); }else if (parameterType==19) { body[12] = static_cast(0x04); body[13] = static_cast(0x02); }else if (parameterType==20) { body[12] = static_cast(0x08); body[13] = static_cast(0x02); } }else if(parameterType==17){ body= QByteArray(15+2*number,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4A); body[9] = static_cast(0x76); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x02); QString hex1 = QString("%1").arg(number, 2, 16, QChar('0')); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex1)&0xff); body[14] = static_cast(Dat1[0]&0xff); QJsonDocument document; QJsonParseError err; document = QJsonDocument::fromJson(dataList.toUtf8(), &err); if (err.error != QJsonParseError::NoError){ QString Data = QString("[ %1 %2 +++++++++ %3 >>>>>>>>>>>>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(dataList) .arg(err.error); emit CommData(DeviceID, 2, Data); qDebug() << "Parse json " << dataList.toUtf8() << " error: " << err.error; return; } QJsonArray data_list=document.array(); for (int j = 0; j < number; j++) { QJsonValue name_value = data_list.at(j); QJsonObject temp1 = name_value.toObject(); int serialNumber = temp1.value("serial_number").toInt(); QString hex4 = QString("%1").arg(serialNumber, 4, 16, QChar('0')); QString hex5 = hex4.mid(0,2); QString hex6 = hex4.mid(2,2); QByteArray Dat4 = QByteArray(2,0x00); Dat4[0] = static_cast(hexstr_to_byte(hex5)&0xff); Dat4[1] = static_cast(hexstr_to_byte(hex6)&0xff); body[15+2*j] = static_cast(Dat4[0]&0xff); body[16+2*j] = static_cast(Dat4[1]&0xff); } } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } //查询参数命令 void SmartLightCommThread::query_parameters_command(QString deviceId,int parameterType, int pseq) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(14,0x00); body[0] = static_cast(0x00); body[1] = static_cast(0x09); body[2] = static_cast(0x00); body[3] = static_cast(0x00); body[4] = static_cast(0x00); body[5] = static_cast(0x00); body[6] = static_cast(0x00); body[7] = static_cast(0x00); body[8] = static_cast(0x4A); QString hex1 = QString("%1").arg(pseq, 1, 16); QString hex = QString("%1%2").arg(7).arg(hex1); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(hexstr_to_byte(hex)&0xff); body[9] = static_cast(Dat1[0]&0xff); if(parameterType==1){//终端上行通信口通信参数设置 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x00); }else if(parameterType==2){//主站IP地址和端口 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x02); body[13] = static_cast(0x00); }else if(parameterType==3){//终端事件记录配置设置 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x04); body[13] = static_cast(0x00); }else if(parameterType==4){//设备基本信息 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x00); }else if(parameterType==5){//终端事件检测配置参数 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x10); body[13] = static_cast(0x00); }else if(parameterType==6){//单灯事件检测配置参数 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x20); body[13] = static_cast(0x00); }else if(parameterType==11){//信息量检测间隔时间参数 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x04); body[13] = static_cast(0x01); }else if(parameterType==12){//控制回路参数 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x08); body[13] = static_cast(0x01); }else if(parameterType==88){//防盗通道配置 body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x80); body[13] = static_cast(0x0A); } QByteArray cmd = resetDataFrame(body); CmdList.append(cmd); } QByteArray SmartLightCommThread::resetDataFrame(QByteArray body){ QByteArray data = QByteArray(body.length()+9,0x00); int len = body.length(); data[0] = static_cast(0x68); data[1] = static_cast(len&0xff); data[2] = static_cast((len>>8)&0xff); data[3] = static_cast(len&0xff); data[4] = static_cast((len>>8)&0xff); data[5] = static_cast(0x68); data[6] = static_cast(0x00); data[7] = static_cast(0x09); data[8] = static_cast(0x00); data[9] = static_cast(0x00); data[10] = static_cast(0x00); data[11] = static_cast(0x00); data[12] = static_cast(0x00); data[13] = static_cast(0x00); for(int i=8;i(body.at(i)&0xff); quint16 crc = chk_crcc(data.mid(6,len),len); data[data.length()-3] = static_cast(crc&0xff); data[data.length()-2] = static_cast((crc>>8)&0xff); data[data.length()-1] = static_cast(0x16); return data; } void SmartLightCommThread::confirm_report(QTcpSocket *so) { QDateTime dt = QDateTime::currentDateTime(); QByteArray body = QByteArray(20,0x00); body[0] = static_cast(ServerAddr1&0xff); body[1] = static_cast((ServerAddr1>>8)&0xff); body[2] = static_cast((ServerAddr1>>16)&0xff); body[3] = static_cast((ServerAddr1>>24)&0xff); body[4] = static_cast(ServerAddr0&0xff); body[5] = static_cast((ServerAddr0>>8)&0xff); body[6] = static_cast((ServerAddr0>>16)&0xff); body[7] = static_cast(0x00); body[8] = static_cast(0x00); body[9] = static_cast(0xe0); body[10] = static_cast(0x00); body[11] = static_cast(0x00); body[12] = static_cast(0x01); body[13] = static_cast(0x00); body[14] = static_cast(0x00); body[15] = static_cast((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10)); body[16] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10)); body[17] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10)); body[18] = static_cast((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10)); body[19] = static_cast(0x05); QByteArray cmd = mkDataFrame(body); so->write(cmd); so->flush(); QString Data = QString("[ %1 %2 %3 >>> ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(so->peerAddress().toString()) .arg(DeviceID.length()>0?QString("%1").arg(DeviceID):QString("")); for(int i=0;i(0x68); data[1] = static_cast(len&0xff); data[2] = static_cast((len>>8)&0xff); data[3] = static_cast(len&0xff); data[4] = static_cast((len>>8)&0xff); data[5] = static_cast(0x68); data[6] = static_cast(ServerAddr1&0xff); data[7] = static_cast((ServerAddr1>>8)&0xff); data[8] = static_cast((ServerAddr1>>16)&0xff); data[9] = static_cast((ServerAddr1>>24)&0xff); data[10] = static_cast(ServerAddr0&0xff); data[11] = static_cast((ServerAddr0>>8)&0xff); data[12] = static_cast((ServerAddr0>>16)&0xff); data[13] = static_cast(0x00); for(int i=8;i(body.at(i)&0xff); quint16 crc = chk_crcc(data.mid(6,len),len); data[data.length()-3] = static_cast(crc&0xff); data[data.length()-2] = static_cast((crc>>8)&0xff); data[data.length()-1] = static_cast(0x16); return data; } float SmartLightCommThread::get_repValue(int type, QByteArray dat) { switch (type) { case 0x01: if(dat.length()==2){ return static_cast(((dat.at(1)&0xf0)>>4)*100 +(dat.at(1)&0x0f)*10 +((dat.at(0)&0xf0)>>4) +(dat.at(0)&0x0f)*0.1); } break; case 0x02: if(dat.length()==3){ return static_cast((((dat.at(2)&0x80)==0x80)?-1:1) *(((dat.at(2)&0x70)>>4)*100 +(dat.at(2)&0x0f)*10 +((dat.at(1)&0xf0)>>4) +((dat.at(1)&0x0f)*0.1) +(((dat.at(0)&0xf0)>>4)*0.01) +((dat.at(0)&0x0f)*0.001))); } break; case 0x03: case 0x05: case 0x07: if(dat.length()==2){ int d = (((dat.at(1)&0x10)==0x10)?-1:1) *((dat.at(1)&0x0f)*100+((dat.at(0)&0xf0)>>4)*10+(dat.at(0)&0x0f)); switch ((dat.at(1)>>5)&0x07) { case 0x00: return static_cast(d*10000); break; case 0x01: return static_cast(d*1000); break; case 0x02: return static_cast(d*100); break; case 0x03: return static_cast(d*10); break; case 0x04: return static_cast(d); break; case 0x05: return static_cast(d*0.1); break; case 0x06: return static_cast(d*0.01); break; case 0x07: return static_cast(d*0.001); break; } } break; case 0x04: case 0x06: case 0x08: if(dat.length()==2){ return static_cast((((dat.at(1)&0x80)==0x80)?-1:1) *(((dat.at(1)&0x70)>>4)*100 +(dat.at(1)&0x0f)*10 +((dat.at(0)&0xf0)>>4) +((dat.at(0)&0x0f)*0.1))); } break; } return static_cast(0.0); } bool SmartLightCommThread::checkDataBody(QTcpSocket *so, QByteArray body) { int ud_cur=0; int len = body.length(); quint8 f_dir=0x00; quint8 f_prm=0x00; quint8 f_afn=0x00; quint8 f_seq=0x00; quint8 f_con=0x00; quint8 f_fin=0x00; quint8 f_fir=0x00; quint8 f_tpv=0x00; quint16 f_dlen=0x0000; quint16 f_prof=0x0000; quint16 f_sn=0x0000; quint16 f_pno=0x0000; quint16 f_fno=0x0000; if(DevType==0x00){ ud_cur = 8; }else{ f_prof = (body.at(ud_cur+0)&0x00ff)|((body.at(ud_cur+1)&0x00ff)<<8); f_sn = (body.at(ud_cur+2)&0x00ff)|((body.at(ud_cur+3)&0x00ff)<<8); ud_cur =12; } f_dir = (body.at(ud_cur+0)&0x80)>>7; f_prm = (body.at(ud_cur+0)&0x40)>>6; f_afn = body.at(ud_cur+0)&0x1f; f_seq = body.at(ud_cur+1)&0x0f; f_con = (body.at(ud_cur+1)&0x10)>>4; f_fin = (body.at(ud_cur+1)&0x20)>>5; f_fir = (body.at(ud_cur+1)&0x40)>>6; f_tpv = (body.at(ud_cur+1)&0x80)>>7; f_pno = (body.at(ud_cur+3)&0x00ff)*8; for(int i=0;i<8;i++){ int bit = 0x01<=(ud_cur+6+2)){ ErrorCount[0] = body.at(ud_cur+6)&0xff; ErrorCount[1] = body.at(ud_cur+7)&0xff; if(f_con==0x01){ confirm_report(so); } } }else if(f_fno==2){//上行通信重连指令 f_dlen=4; if(len>=(ud_cur+6+2)){ ErrorCount[0] = body.at(ud_cur+6)&0xff; ErrorCount[1] = body.at(ud_cur+7)&0xff; if(f_con==0x01){ confirm_report(so); } } }else if(f_fno==3){//终端模块复位 f_dlen=5; if(len>=(ud_cur+6+3)){ ErrorCount[0] = body.at(ud_cur+7)&0xff; ErrorCount[1] = body.at(ud_cur+8)&0xff; WirelessSignal = body.at(ud_cur+6)&0xff; if(f_con==0x01){ confirm_report(so); } } } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal); emit CommData(DeviceID, 1, o_Data); } break; case 0x02://链路接口检测 if(f_pno==0){ if(f_fno==1){//登录 f_dlen=4; if(len>=(ud_cur+6+2)){ ErrorCount[0] = body.at(ud_cur+6)&0xff; ErrorCount[1] = body.at(ud_cur+7)&0xff; if(f_con==0x01){ confirm_report(so); } } }else if(f_fno==2){//退出 f_dlen=4; if(len>=(ud_cur+6+2)){ ErrorCount[0] = body.at(ud_cur+6)&0xff; ErrorCount[1] = body.at(ud_cur+7)&0xff; if(f_con==0x01){ confirm_report(so); } } }else if(f_fno==3){//心跳 f_dlen=5; if(len>=(ud_cur+6+3)){ ErrorCount[0] = body.at(ud_cur+7)&0xff; ErrorCount[1] = body.at(ud_cur+8)&0xff; WirelessSignal = body.at(ud_cur+6)&0xff; if(f_con==0x01){ confirm_report(so); } } } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal); emit CommData(DeviceID, 1, o_Data); } break; case 0x04://设置参数 break; case 0x05://控制命令 break; case 0x09://请求终端配置 break; case 0x0a://查询参数 if(f_pno==0){ if(f_fno==1){ QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(body.at(ud_cur+6)); QString over_time1(Dat.toHex()); // QString over_time1 = QString::fromUtf8(Dat); QString over_time2 = QString("%1").arg(body.at(ud_cur+7)&0x0f); QString over_time3 = "0x0"+over_time2+over_time1; // QByteArray Dat1 = QByteArray(1,0x0000); // Dat1[0] = static_cast(hexstr_to_byte(over_time3)&0xffff); int over_time = over_time3.toInt(NULL, 16); int retransmission = (body.at(ud_cur+7)&0xf0)>>4; int anasta = (body.at(ud_cur+8)&0xff); int realTimeData=0; int historicalData=0; int eventData =0; if(anasta==0x00){ realTimeData=0; historicalData=0; eventData=0; }else if(anasta==0x01){ realTimeData=1; historicalData=0; eventData=0; }else if(anasta==0x02){ realTimeData=0; historicalData=1; eventData=0; }else if(anasta==0x03){ realTimeData=1; historicalData=1; eventData=0; }else if(anasta==0x04){ realTimeData=0; historicalData=0; eventData=1; }else if(anasta==0x05){ realTimeData=1; historicalData=0; eventData=1; }else if(anasta==0x06){ realTimeData=0; historicalData=1; eventData=1; }else if(anasta==0x07){ realTimeData=1; historicalData=1; eventData=1; } int heartbeat = (body.at(ud_cur+9)&0xff); QJsonObject o_Data2; o_Data2.insert("retransmission", retransmission); o_Data2.insert("realTimeData", realTimeData); o_Data2.insert("historicalData", historicalData); o_Data2.insert("eventData", eventData); o_Data2.insert("heartbeat", heartbeat); o_Data2.insert("tovTimeInt", over_time); QJsonObject o_Data1; o_Data1.insert("code", 200); o_Data1.insert("msg", "操作成功"); o_Data1.insert("data", o_Data2); QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\toverTime:%14\tretransmission:%15\trealTimeData:%16\thistoricalData:%17\teventData:%18\theartbeat:%19\tovTimeInt:%20") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(over_time3).arg(retransmission).arg(realTimeData).arg(historicalData).arg(eventData).arg(heartbeat).arg(over_time); emit CommData(DeviceID, 11, QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); }else if(f_fno==2){ int address1 = (body.at(ud_cur+6)&0xff); int address2 = (body.at(ud_cur+7)&0xff); int address3 = (body.at(ud_cur+8)&0xff); int address4 = (body.at(ud_cur+9)&0xff); QByteArray Dat = QByteArray(1,0x00); Dat[0] = static_cast(body.at(ud_cur+10)); QByteArray Dat1 = QByteArray(1,0x00); Dat1[0] = static_cast(body.at(ud_cur+11)); QString portString1(Dat.toHex()); QString portString2(Dat1.toHex()); QString portString = portString2+portString1; int port = portString.toInt(NULL, 16); QString addresss = QString("%1.%2.%3.%4").arg(address1).arg(address2).arg(address3).arg(address4); QJsonObject o_Data; o_Data.insert("addresss", addresss); o_Data.insert("port", port); emit CommData(DeviceID, 11, QString(QJsonDocument(o_Data).toJson()).replace("\"","\\\"")); }else if(f_fno==3){ } } break; case 0x0c://请求实时数据 if(f_pno==0){ if(f_fno==2){//终端日历时钟 QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+11)&0xf0)>>4)*10+(body.at(ud_cur+11)&0x0f)), (((body.at(ud_cur+10)&0x10)>>4)*10+(body.at(ud_cur+10)&0x0f)), (((body.at(ud_cur+9)&0xf0)>>4)*10+(body.at(ud_cur+9)&0x0f))), QTime((((body.at(ud_cur+8)&0xf0)>>4)*10+(body.at(ud_cur+8)&0x0f)), (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)), (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)))); QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\ttime:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(t.toString("yyyy-MM-dd HH:mm:ss")); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==3){//节能开关档位 quint8 gear = body.at(ud_cur+6)&0xff; QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tgear:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(gear); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==4){//单灯轮询当前状态查询 int polsta = (body.at(ud_cur+6)&0x01); int consta = (body.at(ud_cur+7)&0x01); QString polling = ""; QString conenble = ""; if(polsta==0x01){ polling="轮询中"; }else{ polling="不轮询"; } if(consta==0x01){ conenble="发现"; }else{ conenble="未发现"; } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tpolling:%14\tcontroll:%15") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(polling).arg(conenble); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==9){//模拟量查询 QString ananame = ""; int anasta = (body.at(ud_cur+6)&0xff); if(anasta==0x00){ ananame="未知"; }else if(anasta==0x01){ ananame="电压"; }else if(anasta==0x02){ ananame="电流"; }else if(anasta==0x03){ ananame="有功功率"; }else if(anasta==0x04){ ananame="无功功率"; }else if(anasta==0x05){ ananame="功率因数"; }else if(anasta==0x06){ ananame="频率"; }else if(anasta==0x07){ ananame="相角"; }else if(anasta==0x08){ ananame="照度"; } int analog_data = ((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100; QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\ttype:%14\tvalue:%15") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(ananame).arg(analog_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==10){//状态量查询 int state_data = (body.at(ud_cur+6)&0xff); QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(state_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==11){//模拟量批量查询 quint8 query_number = body.at(ud_cur+6)&0xff; quint8 start_point = body.at(ud_cur+7)&0xff; QJsonArray o_Data1; for(quint8 i=0;i>4; f_g1 = (body.at(ud_cur+11+4*i)&0x20)>>5; f_g2 = (body.at(ud_cur+11+4*i)&0x40)>>6; f_g3 = (body.at(ud_cur+11+4*i)&0x80)>>7; if(f_s==0x01){ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*10000); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*1000); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*100); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*10); }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*1); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.1); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.01); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.001); } }else{ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*10000; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*1000; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*100; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*10; }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*1; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.1; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.01; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+10+4*i)&0xf0)>>4)*10+(body.at(ud_cur+10+4*i)&0x0f)+(body.at(ud_cur+11+4*i)&0x0f)*100)*0.001; } } QJsonObject o_Data2; o_Data2.insert("point", point); o_Data2.insert("type", ananame); o_Data2.insert("value", analog_data); o_Data1.append(o_Data2); } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tquery_number:%14\tstart_point:%15\tdata_list:%16") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(query_number).arg(start_point).arg(QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==12){//遥信量批量查询 quint8 query_number = body.at(ud_cur+6)&0xff; quint8 start_point = body.at(ud_cur+7)&0xff; QJsonArray o_Data1; for(quint8 i=0;i>4; f_g1 = (body.at(ud_cur+8)&0x20)>>5; f_g2 = (body.at(ud_cur+8)&0x40)>>6; f_g3 = (body.at(ud_cur+8)&0x80)>>7; if(f_s==0x01){ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*10000); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*1000); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*100); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*10); }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*1); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.1); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.01); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.001); } }else{ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*10000; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*1000; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*100; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*10; }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*1; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.1; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.01; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)+(body.at(ud_cur+8)&0x0f)*100)*0.001; } } QString o_Data = QString("dir:%1\tpointprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\ttype:%14\tvalue:%15") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(ananame).arg(analog_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==10){//状态量查询 int state_data = (body.at(ud_cur+6)&0xff); QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(state_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==33){//单灯运行状态查询 int swtich_status = (body.at(ud_cur+6)&0xff); int run_status = (body.at(ud_cur+7)&0xff); QString swtich_name = ""; QString run_name = ""; if(swtich_status==0x00){ swtich_name="关灯"; }else if(swtich_status==0x01){ swtich_name="正常开灯"; }else if(swtich_status==0x02){ swtich_name="节能开灯状态"; } if(run_status==0x00){ run_name="正常"; }else if(run_status==0x01){ run_name="灯亮但有异常"; }else if(run_status==0x02){ run_name="异常灭灯 "; }else if(run_status==0x03){ run_name="其他"; } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tswtich_status:%14\trun_status:%15") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(swtich_name).arg(run_name); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==34){//单灯电压查询 double analog_data; analog_data = ((body.at(ud_cur+6)&0xf0)>>4)+(body.at(ud_cur+6)&0x0f)*0.1+(body.at(ud_cur+7)&0x0f)*10+((body.at(ud_cur+7)&0xf0)>>4)*100; QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(analog_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==35){//单灯电流查询 quint8 f_s=0x00; double ele_data; f_s = (body.at(ud_cur+8)&0x80)>>7; if(f_s==0x01){ ele_data = -(((body.at(ud_cur+6)&0xf0)>>4)*0.01+(body.at(ud_cur+6)&0x0f)*0.001+(body.at(ud_cur+7)&0x0f)*0.1+((body.at(ud_cur+7)&0xf0)>>4)+(body.at(ud_cur+8)&0x0f)*10+((body.at(ud_cur+8)&0x70)>>4)*100); }else{ ele_data = ((body.at(ud_cur+6)&0xf0)>>4)*0.01+(body.at(ud_cur+6)&0x0f)*0.001+(body.at(ud_cur+7)&0x0f)*0.1+((body.at(ud_cur+7)&0xf0)>>4)+(body.at(ud_cur+8)&0x0f)*10+((body.at(ud_cur+8)&0x70)>>4)*100; } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(ele_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==36||f_fno==38||f_fno==39){//单灯有功功率查询 quint8 f_g1=0x00; quint8 f_g2=0x00; quint8 f_g3=0x00; quint8 f_s=0x00; double active_power_data; f_s = (body.at(ud_cur+7)&0x10)>>4; f_g1 = (body.at(ud_cur+7)&0x20)>>5; f_g2 = (body.at(ud_cur+7)&0x40)>>6; f_g3 = (body.at(ud_cur+7)&0x80)>>7; if(f_s==0x01){ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*10000); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*1000); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*100); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*10); }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*1); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.1); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.01); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ active_power_data = -((((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.001); } }else{ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*10000; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*1000; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*100; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*10; }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*1; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.1; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.01; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ active_power_data = (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)+(body.at(ud_cur+7)&0x0f)*100)*0.001; } } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(active_power_data); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==37){//单灯功率因数查询 quint8 f_s=0x00; double power_factor_data; f_s = (body.at(ud_cur+7)&0x80)>>7; if(f_s==0x01){ power_factor_data = -((body.at(ud_cur+6)&0x0f)*0.1+((body.at(ud_cur+6)&0xf0)>>4)+(body.at(ud_cur+7)&0x0f)*10+((body.at(ud_cur+7)&0x70)>>4)*100); }else{ power_factor_data = (body.at(ud_cur+6)&0x0f)*0.1+((body.at(ud_cur+6)&0xf0)>>4)+(body.at(ud_cur+7)&0x0f)*10+((body.at(ud_cur+7)&0x70)>>4)*100; } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tvalue:%14") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(power_factor_data); emit CommData(DeviceID, 1, o_Data); } } break; case 0x0d://请求历史数据 if(f_pno==0){ if(f_fno==1||f_fno==17||f_fno==18||f_fno==19||f_fno==20||f_fno==21||f_fno==22){//控制器模拟量历史数据曲线 QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+10)&0xf0)>>4)*10+(body.at(ud_cur+10)&0x0f)), (((body.at(ud_cur+9)&0xf0)>>4)*10+(body.at(ud_cur+9)&0x0f)), (((body.at(ud_cur+8)&0xf0)>>4)*10+(body.at(ud_cur+8)&0x0f))), QTime((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)), (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)), 0)); quint8 data_freezing_density = body.at(ud_cur+11)&0xff; quint8 data_points = body.at(ud_cur+12)&0xff; QString ananame = ""; int anasta = (body.at(ud_cur+13)&0xff); if(anasta==0x00){ ananame="未知"; }else if(anasta==0x01){ ananame="电压"; }else if(anasta==0x02){ ananame="电流"; }else if(anasta==0x03){ ananame="有功功率"; }else if(anasta==0x04){ ananame="无功功率"; }else if(anasta==0x05){ ananame="功率因数"; }else if(anasta==0x06){ ananame="频率"; }else if(anasta==0x07){ ananame="相角"; }else if(anasta==0x08){ ananame="照度"; } QJsonArray o_Data1; for(quint8 i=0;i>4; f_g1 = (body.at(ud_cur+15+2*i)&0x20)>>5; f_g2 = (body.at(ud_cur+15+2*i)&0x40)>>6; f_g3 = (body.at(ud_cur+15+2*i)&0x80)>>7; if(f_s==0x01){ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10000); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1000); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*100); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10); }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.1); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.01); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.001); } }else{ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10000; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1000; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*100; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10; }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.1; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.01; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.001; } } QJsonObject o_Data2; o_Data2.insert("point", i+1); o_Data2.insert("type", ananame); o_Data2.insert("value", analog_data); o_Data1.append(o_Data2); } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tdata_freezing_density:%14\tdata_points:%15\tdata_time:%16\tdata_list:%17") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(data_freezing_density).arg(data_points).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==2){ QDate t = QDate(2000+(((body.at(ud_cur+8)&0xf0)>>4)*10+(body.at(ud_cur+8)&0x0f)), (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)), (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f))); quint8 records_number = body.at(ud_cur+9)&0xff; QJsonArray o_Data1; for(quint8 i=0;i>4)*10+(body.at(ud_cur+15+9*i)&0x0f)), (((body.at(ud_cur+14+9*i)&0x10)>>4)*10+(body.at(ud_cur+14+9*i)&0x0f)), (((body.at(ud_cur+13+9*i)&0xf0)>>4)*10+(body.at(ud_cur+13+9*i)&0x0f))), QTime((((body.at(ud_cur+12+9*i)&0xf0)>>4)*10+(body.at(ud_cur+12+9*i)&0x0f)), (((body.at(ud_cur+11+9*i)&0xf0)>>4)*10+(body.at(ud_cur+11+9*i)&0x0f)), (((body.at(ud_cur+10+9*i)&0xf0)>>4)*10+(body.at(ud_cur+10+9*i)&0x0f)))); quint8 control_point = body.at(ud_cur+16+9*i)&0xff; int control_type = body.at(ud_cur+17+9*i)&0xff; QString control_name = ""; if(control_type==0x00){ control_name="开"; }else if(control_type==0x01){ control_name="关"; }else if(control_type==0x02){ control_name="节能开关调档"; } quint8 economize_gear = body.at(ud_cur+18+9*i)&0xff; QJsonObject o_Data2; o_Data2.insert("time", t.toString("yyyy-MM-dd HH:mm:ss")); o_Data2.insert("point", control_point); o_Data2.insert("type", control_name); o_Data2.insert("value", economize_gear); o_Data1.append(o_Data2); } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tdata:%14\trecords_numbers:%15\tdata_list:%16") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(t.toString("yyyy-MM-dd")).arg(records_number).arg(QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); emit CommData(DeviceID, 1, o_Data); } }else{ if(f_fno==1||f_fno==17||f_fno==18||f_fno==19||f_fno==20||f_fno==21||f_fno==22){//控制器模拟量历史数据曲线 QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+10)&0xf0)>>4)*10+(body.at(ud_cur+10)&0x0f)), (((body.at(ud_cur+9)&0xf0)>>4)*10+(body.at(ud_cur+9)&0x0f)), (((body.at(ud_cur+8)&0xf0)>>4)*10+(body.at(ud_cur+8)&0x0f))), QTime((((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)), (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f)), 0)); quint8 data_freezing_density = body.at(ud_cur+11)&0xff; quint8 data_points = body.at(ud_cur+12)&0xff; QString ananame = ""; int anasta = (body.at(ud_cur+13)&0xff); if(anasta==0x00){ ananame="未知"; }else if(anasta==0x01){ ananame="电压"; }else if(anasta==0x02){ ananame="电流"; }else if(anasta==0x03){ ananame="有功功率"; }else if(anasta==0x04){ ananame="无功功率"; }else if(anasta==0x05){ ananame="功率因数"; }else if(anasta==0x06){ ananame="频率"; }else if(anasta==0x07){ ananame="相角"; }else if(anasta==0x08){ ananame="照度"; } QJsonArray o_Data1; for(quint8 i=0;i>4; f_g1 = (body.at(ud_cur+15+2*i)&0x20)>>5; f_g2 = (body.at(ud_cur+15+2*i)&0x40)>>6; f_g3 = (body.at(ud_cur+15+2*i)&0x80)>>7; if(f_s==0x01){ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10000); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1000); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*100); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10); }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1); }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.1); }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.01); }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = -((((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.001); } }else{ if(f_g1==0x00&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10000; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1000; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*100; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x00){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*10; }else if(f_g1==0x00&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*1; }else if(f_g1==0x01&&f_g2==0x00&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.1; }else if(f_g1==0x00&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.01; }else if(f_g1==0x01&&f_g2==0x01&&f_g3==0x01){ analog_data = (((body.at(ud_cur+14+2*i)&0xf0)>>4)*10+(body.at(ud_cur+14+2*i)&0x0f)+(body.at(ud_cur+15+2*i)&0x0f)*100)*0.001; } } QJsonObject o_Data2; o_Data2.insert("point", i+1); o_Data2.insert("type", ananame); o_Data2.insert("value", analog_data); o_Data1.append(o_Data2); } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tdata_freezing_density:%14\tdata_points:%15\tdata_time:%16\tdata_list:%17") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(data_freezing_density).arg(data_points).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); emit CommData(DeviceID, 1, o_Data); }else if(f_fno==2){ QDate t = QDate(2000+(((body.at(ud_cur+8)&0xf0)>>4)*10+(body.at(ud_cur+8)&0x0f)), (((body.at(ud_cur+7)&0xf0)>>4)*10+(body.at(ud_cur+7)&0x0f)), (((body.at(ud_cur+6)&0xf0)>>4)*10+(body.at(ud_cur+6)&0x0f))); quint8 records_number = body.at(ud_cur+9)&0xff; QJsonArray o_Data1; for(quint8 i=0;i>4)*10+(body.at(ud_cur+15+9*i)&0x0f)), (((body.at(ud_cur+14+9*i)&0x10)>>4)*10+(body.at(ud_cur+14+9*i)&0x0f)), (((body.at(ud_cur+13+9*i)&0xf0)>>4)*10+(body.at(ud_cur+13+9*i)&0x0f))), QTime((((body.at(ud_cur+12+9*i)&0xf0)>>4)*10+(body.at(ud_cur+12+9*i)&0x0f)), (((body.at(ud_cur+11+9*i)&0xf0)>>4)*10+(body.at(ud_cur+11+9*i)&0x0f)), (((body.at(ud_cur+10+9*i)&0xf0)>>4)*10+(body.at(ud_cur+10+9*i)&0x0f)))); quint8 control_point = body.at(ud_cur+16+9*i)&0xff; int control_type = body.at(ud_cur+17+9*i)&0xff; QString control_name = ""; if(control_type==0x00){ control_name="开"; }else if(control_type==0x01){ control_name="关"; }else if(control_type==0x02){ control_name="节能开关调档"; } quint8 economize_gear = body.at(ud_cur+18+9*i)&0xff; QJsonObject o_Data2; o_Data2.insert("time", t.toString("yyyy-MM-dd HH:mm:ss")); o_Data2.insert("point", control_point); o_Data2.insert("type", control_name); o_Data2.insert("value", economize_gear); o_Data1.append(o_Data2); } QString o_Data = QString("dir:%1\tprm:%2\tafn:%3\tseq:%4\tcon:%5\tfin:%6\tfir:%7\ttpv:%8\tpno:%9\tfno:%10\tec0:%11\tec1:%12\tsig:%13\tdata:%14\trecords_numbers:%15\tdata_list:%16") .arg(f_dir).arg(f_prm).arg(f_afn,2,16,QChar('0')).arg(f_seq).arg(f_con).arg(f_fin).arg(f_fir).arg(f_tpv).arg(f_pno).arg(f_fno).arg(ErrorCount[0]).arg(ErrorCount[1]).arg(WirelessSignal).arg(t.toString("yyyy-MM-dd")).arg(records_number).arg(QString(QJsonDocument(o_Data1).toJson()).replace("\"","\\\"")); emit CommData(DeviceID, 1, o_Data); } } break; case 0x0e://请求事件数据 if(f_pno==0){ if(f_fno==1){//重要事件 if(len>(ud_cur+6+4)){ ErrorCount[0] = body.at(ud_cur+6)&0xff; ErrorCount[1] = body.at(ud_cur+7)&0xff; quint8 Err_Cur = body.at(ud_cur+8)&0xff; quint8 Err_End = body.at(ud_cur+9)&0xff; int err_len=0; slShm->smartLightList[idx].ErrCount[0]=(ErrorCount[0]&0xff); slShm->smartLightList[idx].ErrCount[1]=(ErrorCount[1]&0xff); for(quint8 i=0;i<=(Err_End-Err_Cur);i++){ quint8 evid = (Err_Cur+i)&0xff; if(len>(ud_cur+6+4+err_len+2)){ quint8 err_code = body.at(ud_cur+err_len+10)&0xff; quint8 evt_len = body.at(ud_cur+err_len+11)&0xff; QString o_data = ""; if(len>=(ud_cur+6+4+err_len+2+evt_len)){ o_data.append(QString("%1 ").arg(err_code,2,16,QChar('0'))); o_data.append(QString("%1 ").arg(evt_len,2,16,QChar('0'))); for(int j=0;j>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" ACU失电记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; emit getEAlarm(DeviceID,err_code,sta,0,0,0,0.0,0.0,"",t); } } break; case 2://正常开灯成功记录 if(evt_len==5){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 正常开灯成功记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; emit getEAlarm(DeviceID,err_code,0,0,0,0,0.0,0.0,"",t); } } break; case 3://正常开灯失败记录 if(evt_len==5){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 正常开灯失败记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; emit getEAlarm(DeviceID,err_code,0,0,0,0,0.0,0.0,"",t); } } break; case 4://正常关灯成功记录 if(evt_len==5){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 正常关开灯成功记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; emit getEAlarm(DeviceID,err_code,0,0,0,0,0.0,0.0,"",t); } } break; case 5://正常关灯失败记录 if(evt_len==5){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 正常关灯失败记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; emit getEAlarm(DeviceID,err_code,0,0,0,0,0.0,0.0,"",t); } } break; case 6://异常开灯记录 if(evt_len==7){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); uint arg1 = (body.at(ud_cur+err_len+18)&0x01); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 异常开灯记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(",异常原因:")); if(arg1==0x01) o_data.append(QString::fromUtf8("调试")); else o_data.append(QString::fromUtf8("未知")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),0,0,0.0,0.0,"",t); } } break; case 7://异常关灯记录 if(evt_len==7){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); uint arg1 = (body.at(ud_cur+err_len+18)&0x01); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 异常关灯记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(",异常原因:")); if(arg1==0x01) o_data.append(QString::fromUtf8("调试")); else o_data.append(QString::fromUtf8("未知")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),0,0,0.0,0.0,"",t); } } break; case 8://模拟量上限告警(关灯时间内) case 9://模拟量上限告警(开灯时间内) case 10://模拟量下限告警(开灯时间内) if(evt_len>=11){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); uint arg1 = (body.at(ud_cur+err_len+18)&0x01); uint arg2 = (body.at(ud_cur+err_len+19)&0x03); uint arg3 = (body.at(ud_cur+err_len+20)&0x07); float value = get_repValue(static_cast(arg3),body.mid(ud_cur+err_len+21,evt_len-9)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); if((err_code==8)||(err_code==9)) o_data.append(QString::fromUtf8(" 模拟量上限告警")); else if(err_code==10) o_data.append(QString::fromUtf8(" 模拟量下限告警")); if(err_code==8) o_data.append(QString::fromUtf8("(关灯时间内) ")); else if((err_code==9)||(err_code==10)) o_data.append(QString::fromUtf8("(开灯时间内) ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" %1 %2 ").arg((arg1&0x7f)?QString::fromUtf8("%1").arg(arg1&0x7f):QString::fromUtf8("总")).arg((arg1&0x80)?QString::fromUtf8("出线"):QString::fromUtf8("进线"))); if(arg2==0x00) o_data.append(QString::fromUtf8("相位:未知")); else if(arg2==0x01) o_data.append(QString::fromUtf8("相位:A相")); else if(arg2==0x02) o_data.append(QString::fromUtf8("相位:B相")); else if(arg2==0x03) o_data.append(QString::fromUtf8("相位:C相")); o_data.append(QString::fromUtf8(" 当前值:%1%2").arg(QString::number(static_cast(value),'g',3)) .arg(arg3==0x01?"V" :(arg3==0x02?"A" :(((arg3==0x03)||(arg3==0x04))?"W/VAR" :(arg3==0x05?"%" :(arg3==0x06?"Hz" :(arg3==0x07?"°" :(arg3==0x08?"lx" :"")))))))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = value; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),value,0.0,"",t); } } break; case 11://终端通信故障 if(evt_len==6){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 终端通信故障 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; emit getEAlarm(DeviceID,err_code,sta,0,0,0,0.0,0.0,"",t); } } break; case 12://接口转换模块故障 if(evt_len==6){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0x01); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 接口转换模块故障 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; emit getEAlarm(DeviceID,err_code,sta,0,0,0,0.0,0.0,"",t); } } break; case 13://接触器档位切换正常记录 if(evt_len==8){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = (body.at(ud_cur+err_len+17)&0xff); uint arg2 = (body.at(ud_cur+err_len+18)&0xff); uint arg3 = (body.at(ud_cur+err_len+19)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 接触器档位正常切换 ")); for(int i=0;i<8;i++) o_data.append((arg1&(0x01<smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,"",t); } } break; case 14://接触器档位切换失败记录 if(evt_len==8){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = (body.at(ud_cur+err_len+17)&0xff); uint arg2 = (body.at(ud_cur+err_len+18)&0xff); uint arg3 = (body.at(ud_cur+err_len+19)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 接触器档位切换失败 ")); for(int i=0;i<8;i++) o_data.append((arg1&(0x01<smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,"",t); } } break; case 15://单灯正常开灯记录 case 16://单灯正常关灯记录 if(evt_len>=9){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = ((body.at(ud_cur+err_len+17)&0x00ff)|((body.at(ud_cur+err_len+18)&0x00ff)<<8)); uint arg2 = ((body.at(ud_cur+err_len+19)&0x00ff)|((body.at(ud_cur+err_len+20)&0x00ff)<<8)); if(evt_len==(9+arg2*2)){ QString others="["; for(uint i=0;i0){ o_data.append(QString::fromUtf8("失败灯号:")); o_data.append(others); } emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(arg2),0,0.0,0.0,others,t); } } } break; case 17://单灯异常开灯记录 case 18://单灯异常关灯记录 if(evt_len==9){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = ((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8)); uint arg2 = (body.at(ud_cur+err_len+20)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); if(err_code==17) o_data.append(QString::fromUtf8(" 单灯异常开灯 ")); else if(err_code==18) o_data.append(QString::fromUtf8(" 单灯异常关灯 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 灯具序号:%1 ").arg(arg1)); if(arg2==0x01) o_data.append(QString::fromUtf8("原因:调试")); else if(arg2==0x00) o_data.append(QString::fromUtf8("原因:未知")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(arg2),0,0.0,0.0,"",t); } } break; case 19://单灯过流记录 case 20://单灯欠流记录 if(evt_len>=10){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = ((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8)); float value = get_repValue(2,body.mid(20,2)); uint arg2 = (evt_len>10)?(body.at(ud_cur+err_len+22)&0xff):0x00; o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); if(err_code==19) o_data.append(QString::fromUtf8(" 单灯过流记录 ")); else if(err_code==20) o_data.append(QString::fromUtf8(" 单灯欠流记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 灯具序号:%1 ").arg(arg1)); o_data.append(QString::fromUtf8("电流值:%1A").arg(QString::number(static_cast(value),'g',3))); o_data.append(QString::fromUtf8(" 控制态:%1").arg(arg2)); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = value; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),0,value,0.0,"",t); } } break; case 21://单灯电流故障记录 if(evt_len>=12){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = static_cast(((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8))); float value = get_repValue(2,body.mid(20,2)); float v2 = get_repValue(5,body.mid(22,2)); uint arg2 = (evt_len>12)?(body.at(ud_cur+err_len+24)&0xff):0x00; o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 单灯电流故障记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 灯具序号:%1 ").arg(arg1)); o_data.append(QString::fromUtf8("电流值:%1A").arg(QString::number(static_cast(value),'g',3))); o_data.append(QString::fromUtf8(" 功率因素:%1%%").arg(QString::number(static_cast(v2),'g',3))); o_data.append(QString::fromUtf8(" 控制态:%1").arg(arg2)); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = value; slShm->smartLightList[idx].LastEvent[evid].VALUE[1] = v2; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),0,value,v2,"",t); } } break; case 22://单灯灯具故障记录 case 23://单灯熔丝故障记录 if(evt_len>=12){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = static_cast(((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8))); float value = get_repValue(1,body.mid(20,2)); float v2 = get_repValue(2,body.mid(23,2)); uint arg2 = (evt_len>12)?(body.at(ud_cur+err_len+24)&0xff):0x00; o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); if(err_code==22) o_data.append(QString::fromUtf8(" 单灯电流故障记录 ")); else if(err_code==23) o_data.append(QString::fromUtf8(" 单灯熔丝故障记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 灯具序号:%1 ").arg(arg1)); o_data.append(QString::fromUtf8("电压值:%1V").arg(QString::number(static_cast(value),'g',3))); o_data.append(QString::fromUtf8(" 电流值:%1A").arg(QString::number(static_cast(v2),'g',3))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = value; slShm->smartLightList[idx].LastEvent[evid].VALUE[1] = v2; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),0,value,v2,"",t); } } break; case 24://单灯通信故障记录 if(evt_len==12){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = static_cast(((body.at(ud_cur+err_len+17)&0x00ff)|((body.at(ud_cur+err_len+18)&0x00ff)<<8))); QDateTime t2 = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+23)&0xf0)>>4)*10+(body.at(ud_cur+err_len+23)&0x0f)), (((body.at(ud_cur+err_len+22)&0xf0)>>4)*10+(body.at(ud_cur+err_len+22)&0x0f)), (((body.at(ud_cur+err_len+21)&0xf0)>>4)*10+(body.at(ud_cur+err_len+21)&0x0f))), QTime((((body.at(ud_cur+err_len+20)&0xf0)>>4)*10+(body.at(ud_cur+err_len+20)&0x0f)), (((body.at(ud_cur+err_len+19)&0xf0)>>4)*10+(body.at(ud_cur+err_len+19)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 单灯通信故障记录 ")); o_data.append(QString::fromUtf8(" 终端控制器设备序号:%1 ").arg(arg1)); o_data.append(QString::fromUtf8("最后通信时间:%1").arg(t2.toString("yyyy-MM-dd HH:mm:ss"))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = t2.toTime_t(); emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(t2.toTime_t()),0,0.0,0.0,"",t); } } break; case 25://设施物理状态报警记录 if(evt_len==9){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); uint arg2 = (body.at(ud_cur+err_len+19)&0xff); uint arg3 = (body.at(ud_cur+err_len+20)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 设施物理状态报警记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 遥信点(设备)编号:%1").arg(arg1)); if(arg2==0x00) o_data.append(QString::fromUtf8(" 遥信点类型:开关")); else if(arg2==0x01) o_data.append(QString::fromUtf8(" 遥信点类型:失电")); else if(arg2==0x02) o_data.append(QString::fromUtf8(" 遥信点类型:接触器状态")); else if(arg2==0x03) o_data.append(QString::fromUtf8(" 遥信点类型:节能档位状态")); else if(arg2==0x04) o_data.append(QString::fromUtf8(" 遥信点类型:中间继电器状态")); else if(arg2==0x05) o_data.append(QString::fromUtf8(" 遥信点类型:手自动切换")); else if(arg2==0x06) o_data.append(QString::fromUtf8(" 遥信点类型:门磁")); else if(arg2==0x07) o_data.append(QString::fromUtf8(" 遥信点类型:设施物理状态")); o_data.append(QString::fromUtf8(" 设施状态:%1").arg(arg3)); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,"",t); } } break; case 26://进线缺相事件记录 if(evt_len==7){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 进线缺相事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 第%1进线").arg(((arg1>>6)&0x03))+1); if((arg1&0x08)){ if(arg1&0x01) o_data.append(QString::fromUtf8(" A相正常")); else o_data.append(QString::fromUtf8(" A相缺相")); }else{ o_data.append(QString::fromUtf8(" A相未接")); } if((arg1&0x10)){ if(arg1&0x02) o_data.append(QString::fromUtf8(" B相正常")); else o_data.append(QString::fromUtf8(" B相缺相")); }else{ o_data.append(QString::fromUtf8(" B相未接")); } if((arg1&0x20)){ if(arg1&0x04) o_data.append(QString::fromUtf8(" C相正常")); else o_data.append(QString::fromUtf8(" C相缺相")); }else{ o_data.append(QString::fromUtf8(" C相未接")); } emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),0,0,0.0,0.0,"",t); } } break; case 27://门磁状态变化事件 if(evt_len==7){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = (body.at(ud_cur+err_len+17)&0xff); uint arg2 = (body.at(ud_cur+err_len+18)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 门磁状态变化事件 ")); if((arg1==0x00)&&(arg2==0x00)){ o_data.append(QString::fromUtf8("门被关闭,告警解除")); }else if((arg1==0x01)&&(arg2==0x01)){ o_data.append(QString::fromUtf8("门被打开,告警")); }else if((arg1==0x02)&&(arg2==0x02)){ o_data.append(QString::fromUtf8("门被打开,正常")); } emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; emit getEAlarm(DeviceID,err_code,0,static_cast(arg1),static_cast(arg2),0,0.0,0.0,"",t); } } break; case 28://校时失败事件记录 case 29://校时成功事件记录 if(evt_len>=7){//结构有疑问,需要测试确认,yao QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); if(err_code==28) o_data.append(QString::fromUtf8(" 校时失败事件记录 ")); else if(err_code==29) o_data.append(QString::fromUtf8(" 校时成功事件记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; emit getEAlarm(DeviceID,err_code,0,0,0,0,0.0,0.0,"",t); } } break; case 30://箱防雷失效事件 if(evt_len==6){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 箱防雷失效事件 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; emit getEAlarm(DeviceID,err_code,sta,0,0,0,0.0,0.0,"",t); } } break; case 33://回路切换事件记录 if(evt_len>=9){//结构有疑问,需要测试确认,yao QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); uint arg1 = (body.at(ud_cur+err_len+17)&0xff); uint arg2 = (body.at(ud_cur+err_len+18)&0xff); uint arg3 = (body.at(ud_cur+err_len+19)&0xff); int sta = (body.at(ud_cur+err_len+20)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 回路切换事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("计划自主操作")); else if(sta==0x02) o_data.append(QString::fromUtf8("应急操作")); else if(sta==0x03) o_data.append(QString::fromUtf8("根据光照度操作")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,"",t); } } break; case 34://回路状态异常事件记录 if(evt_len>=9){//结构有疑问,需要测试确认,yao QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); uint arg2 = (body.at(ud_cur+err_len+19)&0xff); uint arg3 = (body.at(ud_cur+err_len+20)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 回路状态异常事件记录 ")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,"",t); } } break; case 35://出线状态异常事件记录 if(evt_len==10){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); uint arg2 = (body.at(ud_cur+err_len+19)&0xff); uint arg3 = (body.at(ud_cur+err_len+20)&0xff); int value = (body.at(ud_cur+err_len+21)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 出线状态异常事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 出线ID:%1 ").arg(arg1)); if(arg2==0x00) o_data.append(QString::fromUtf8("相位:未知")); else if(arg2==0x01) o_data.append(QString::fromUtf8("相位:A相")); else if(arg2==0x02) o_data.append(QString::fromUtf8("相位:B相")); else if(arg2==0x03) o_data.append(QString::fromUtf8("相位:C相")); o_data.append(QString::fromUtf8(" 隶属回路控制状态:%1").arg(arg3,8,2,QChar('0'))); o_data.append(QString::fromUtf8(" 出线当前状态:%1").arg(value,8,2,QChar('0'))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = static_cast(value); emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),value,0.0,"",t); } } break; case 36://灯杆漏电事件记录 if(evt_len==12){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = static_cast(((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8))); float value = get_repValue(2,body.mid(20,2)); float v2 = get_repValue(1,body.mid(22,2)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 灯杆漏电事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 单灯设备序号:%1 ").arg(arg1)); o_data.append(QString::fromUtf8(" 漏电流:%1A").arg(QString::number(static_cast(value),'g',3))); o_data.append(QString::fromUtf8(" 杆电压:%1V").arg(QString::number(static_cast(v2),'g',3))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].VALUE[0] = value; slShm->smartLightList[idx].LastEvent[evid].VALUE[1] = v2; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),0,0,value,v2,"",t); } } break; case 37://灯杆防雷器失效事件记录 if(evt_len==8){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = static_cast(((body.at(ud_cur+err_len+18)&0x00ff)|((body.at(ud_cur+err_len+19)&0x00ff)<<8))); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 灯杆防雷器失效事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 单灯设备序号:%1 ").arg(arg1)); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),0,0,0.0,0.0,"",t); } } break; case 38://断线报警事件记录 if(evt_len==8){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); uint arg2 = (body.at(ud_cur+err_len+19)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 断线报警事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 监测出线ID:%1 ").arg(arg1)); if(arg2==0x00) o_data.append(QString::fromUtf8("正常")); else if(arg2==0x01) o_data.append(QString::fromUtf8("被盗")); else if(arg2==0x02) o_data.append(QString::fromUtf8("非法接入")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),0,0.0,0.0,"",t); } } break; case 39://光感报警事件记录 if(evt_len==8){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+16)&0xf0)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f)), (((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f))), QTime((((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)), 0)); int sta = (body.at(ud_cur+err_len+17)&0xff); uint arg1 = (body.at(ud_cur+err_len+18)&0xff); uint arg2 = (body.at(ud_cur+err_len+19)&0xff); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 光感报警事件记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8("回路ID:%1 ").arg(arg1)); if(arg2==0x00) o_data.append(QString::fromUtf8("光照度低于开灯光照度阈值")); else if(arg2==0x01) o_data.append(QString::fromUtf8("光照度高于开灯光照度阈值")); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),0,0.0,0.0,"",t); } } break; case 51://升级成功事件记录 if(evt_len==15){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+17)&0xf0)>>4)*10+(body.at(ud_cur+err_len+17)&0x0f)), (((body.at(ud_cur+err_len+16)&0x10)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f))), QTime((((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f)), (((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)))); int sta = (body.at(ud_cur+err_len+18)&0xff); uint arg1 = 0; uint arg2 = 0; uint arg3 = 0; QString others = QString(body.mid(19,8)); QStringList vers = others.split("."); if(vers.length()>0){ for(int v=0;vsmartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),0.0,0.0,others,t); } } break; case 52://单灯状态变化记录 if(evt_len==20){ QDateTime t = QDateTime(QDate(2000+(((body.at(ud_cur+err_len+17)&0xf0)>>4)*10+(body.at(ud_cur+err_len+17)&0x0f)), (((body.at(ud_cur+err_len+16)&0x10)>>4)*10+(body.at(ud_cur+err_len+16)&0x0f)), (((body.at(ud_cur+err_len+15)&0xf0)>>4)*10+(body.at(ud_cur+err_len+15)&0x0f))), QTime((((body.at(ud_cur+err_len+14)&0xf0)>>4)*10+(body.at(ud_cur+err_len+14)&0x0f)), (((body.at(ud_cur+err_len+13)&0xf0)>>4)*10+(body.at(ud_cur+err_len+13)&0x0f)), (((body.at(ud_cur+err_len+12)&0xf0)>>4)*10+(body.at(ud_cur+err_len+12)&0x0f)))); int sta = (body.at(ud_cur+err_len+18)&0xff); uint arg1 = static_cast((body.at(ud_cur+err_len+19)&0x00ff)|((body.at(ud_cur+err_len+20)&0x00ff)<<8)); uint arg2 = (body.at(ud_cur+err_len+21)&0xff); uint arg3 = (body.at(ud_cur+err_len+22)&0xff); float v1 = get_repValue(1,body.mid(23,2)); float v2 = get_repValue(2,body.mid(25,3)); float v3 = get_repValue(3,body.mid(28,2)); float v4 = get_repValue(5,body.mid(30,2)); o_data = ""; o_data.append(t.toString("yyyy-MM-dd HH:mm:ss")); o_data.append(QString::fromUtf8(" 单灯状态变化记录 ")); if(sta==0x01) o_data.append(QString::fromUtf8("开始")); else o_data.append(QString::fromUtf8("恢复")); o_data.append(QString::fromUtf8(" 灯具序号:%1 ").arg(arg1)); if(arg2==0) o_data.append(QString::fromUtf8("开关灯状态:开")); else if(arg2==1) o_data.append(QString::fromUtf8("开关灯状态:关")); else if(arg2==2){ o_data.append(QString::fromUtf8("开关灯状态:节能开关调档")); o_data.append(QString::fromUtf8(" 节能档位:%1").arg(arg3)); } o_data.append(QString::fromUtf8(" 电压:%1V").arg(QString::number(static_cast(v1),'g',3))); o_data.append(QString::fromUtf8(" 电流:%1A").arg(QString::number(static_cast(v2),'g',3))); o_data.append(QString::fromUtf8(" 有功功率:%1W/VAR").arg(QString::number(static_cast(v3),'g',3))); o_data.append(QString::fromUtf8(" 功率因素:%1%").arg(QString::number(static_cast(v4),'g',3))); emit CommData(DeviceID, 1, o_data); if(slShm->smartLightList[idx].LastEvent[evid].TIME!=t.toTime_t()){ slShm->smartLightList[idx].LastEvent[evid].TIME = t.toTime_t(); slShm->smartLightList[idx].LastEvent[evid].ERC = err_code; slShm->smartLightList[idx].LastEvent[evid].STA = sta&0xff; slShm->smartLightList[idx].LastEvent[evid].ARG[0] = arg1; slShm->smartLightList[idx].LastEvent[evid].ARG[1] = arg2; slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3; emit getEAlarm(DeviceID,err_code,sta,static_cast(arg1),static_cast(arg2),static_cast(arg3),v1,v2, QString("%1,%2").arg(QString::number(static_cast(v3),'g',3)).arg(QString::number(static_cast(v4),'g',3)),t); } } break; } err_len += (2+evt_len); }else break; }else break; } } }else if(f_fno==2){//一般事件 } } break; case 0x10://数据转发 break; } return true; } void SmartLightCommThread::check_idx() { quint8 idhash = 0x00; char *deviceid = DeviceID.toLocal8Bit().data(); for(int i=0;ismartLightList[i].Enabled==0x01){ if(idhash==slShm->smartLightList[i].LightCodeHash){ if(strcmp(deviceid,slShm->smartLightList[i].LigthCode)==0){ idx = i; return; } } }else{ idx = i; sprintf(slShm->smartLightList[i].LigthCode,"%s",deviceid); slShm->smartLightList[i].Enabled=0x01; emit getNewDev(DeviceID); return; } } } bool SmartLightCommThread::checkDataFrame(QTcpSocket *so, QByteArray dat) { int Len[2]; int len = dat.length(); if(((dat.at(0)&0xff)==0x68)&&((dat.at(5)&0xff)==0x68)&&((dat.at(len-1)&0xff)==0x16)){ Len[0] = (dat.at(1)&0x00ff)|((dat.at(2)&0x00ff)<<8); Len[1] = (dat.at(3)&0x00ff)|((dat.at(4)&0x00ff)<<8); if(Len[0]==Len[1]){ if(dat.length()==(Len[0]+9)){ quint16 crc = chk_crcc(dat.mid(6,Len[0]),Len[0]); if(((dat.at(len-3)&0xff)==(crc&0xff))&&((dat.at(len-2)&0xff)==((crc>>8)&0xff))){ if(DevType<0){ DevType = dat.at(13)&0xff; quint32 deviceId = 0; for(int i=12;i>5;i--){ if((((dat.at(i)>>4)&0x0f)<10)&&((dat.at(i)&0x0f)<10)){ deviceId = deviceId*100+((dat.at(i)>>4)&0x0f)*10+(dat.at(i)&0x0f); }else return false; } DeviceID = QString("%1").arg(deviceId,14,10,QChar('0')); } if(DeviceID.length()==14){ if(idx<0) check_idx(); return checkDataBody(so,dat.mid(6,Len[0])); } return false; } } } } return false; } void SmartLightCommThread::readData(QTcpSocket *so){ QByteArray data = so->readAll(); QString Data = QString("[ %1 %2 %3 <<< ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(so->peerAddress().toString()) .arg(DeviceID.length()>0?QString("%1").arg(DeviceID):QString("")); for(int i=0;iabort(); keepcomm = false; } void SmartLightCommThread::stop() { keepcomm = false; } QByteArray SmartLightCommThread::mkB01datetime(QDateTime dt) { QByteArray dat = QByteArray(6,0x00); dat[0] = static_cast((((dt.time().second()/10)&0x0f)<<4)|((dt.time().second()%10)&0x0f)); dat[1] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f)); dat[2] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[3] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); dat[4] = static_cast(((dt.date().dayOfWeek()&0x07)<<5)|(((dt.date().month()/10)&0x01)<<4)|((dt.date().month()%10)&0x0f)); dat[5] = static_cast(((((dt.date().year()%100)/10)&0x0f)<<4)|((dt.date().year()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB02float(float d, int g) { QByteArray dat = QByteArray(2,0x00); if((g<5)&&(g>-4)){ int D = static_cast(static_cast(d)/qPow(10,g)); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast((((4-g)&0x07)<<5)|((d<0)?0x10:0x00)|((D/100)&0x0f)); } return dat; } QByteArray SmartLightCommThread::mkB03integer(int d, int g) { QByteArray dat = QByteArray(4,0x00); if((g>-1)&&(g<2)){ dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); dat[1] = static_cast(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f)); dat[2] = static_cast(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f)); dat[3] = static_cast(((g&0x01)<<6)|((d<0)?0x10:0x00)|((d/1000000)&0x0f)); } return dat; } QByteArray SmartLightCommThread::mkB04integer(int d, int s0) { QByteArray dat = QByteArray(1, 0x00); if((s0>-1)&&(s0<2)){ dat[0] = static_cast(((s0&0x01)<<7)|(((d/10)&0x07)<<4)|((d%10)&0x0f)); } return dat; } QByteArray SmartLightCommThread::mkB05float(float d) { QByteArray dat = QByteArray(2,0x00); int D = static_cast(static_cast(d)*10); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((d<0)?0x80:0x00)|((((D%10000)/1000)&0x07)<<4)|(((D%1000)/100)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB06float(float d) { QByteArray dat = QByteArray(2,0x00); int D = static_cast(static_cast(d)*100); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((d<0)?0x80:0x00)|((((D%10000)/1000)&0x07)<<4)|(((D%1000)/100)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB07float(float d) { QByteArray dat = QByteArray(2,0x00); int D = static_cast(static_cast(d)*10); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB08integer(int d) { QByteArray dat = QByteArray(2,0x00); // int D = static_cast(static_cast(d)*100); dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); dat[1] = static_cast(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB09float(float d) { QByteArray dat = QByteArray(2,0x00); int D = static_cast(static_cast(d)*10000); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((d<0)?0x80:0x00)|((((D%1000000)/100000)&0x07)<<4)|(((D%100000)/10000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB10integer(int d) { QByteArray dat = QByteArray(3,0x00); dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); dat[1] = static_cast(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f)); dat[2] = static_cast(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB11double(double d) { QByteArray dat = QByteArray(5,0x00); long long D = static_cast(d*100); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f)); dat[3] = static_cast(((((D%100000000)/10000000)&0x0f)<<4)|(((D%10000000)/1000000)&0x0f)); dat[4] = static_cast(((((D%10000000000)/1000000000)&0x0f)<<4)|(((D%1000000000)/100000000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB12longlong(long long d) { QByteArray dat = QByteArray(6,0x00); dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); dat[1] = static_cast(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f)); dat[2] = static_cast(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f)); dat[3] = static_cast(((((d%100000000)/10000000)&0x0f)<<4)|(((d%10000000)/1000000)&0x0f)); dat[4] = static_cast(((((d%10000000000)/1000000000)&0x0f)<<4)|(((d%1000000000)/100000000)&0x0f)); dat[5] = static_cast(((((d%1000000000000)/100000000000)&0x0f)<<4)|(((d%100000000000)/10000000000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB13float(float d) { QByteArray dat = QByteArray(4,0x00); int D = static_cast(static_cast(d)*10000); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f)); dat[3] = static_cast(((((D%100000000)/10000000)&0x0f)<<4)|(((D%10000000)/1000000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB14double(double d) { QByteArray dat = QByteArray(5,0x00); long long D = static_cast(d*10000); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f)); dat[3] = static_cast(((((D%100000000)/10000000)&0x0f)<<4)|(((D%10000000)/1000000)&0x0f)); dat[4] = static_cast(((((D%10000000000)/1000000000)&0x0f)<<4)|(((D%1000000000)/100000000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB15datetime(QDateTime dt) { QByteArray dat = QByteArray(5,0x00); dat[0] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f)); dat[1] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[2] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); dat[3] = static_cast((((dt.date().month()/10)&0x01)<<4)|((dt.date().month()%10)&0x0f)); dat[4] = static_cast(((((dt.date().year()%100)/10)&0x0f)<<4)|((dt.date().year()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB16datetime(QDateTime dt) { QByteArray dat = QByteArray(4,0x00); dat[0] = static_cast((((dt.time().second()/10)&0x0f)<<4)|((dt.time().second()%10)&0x0f)); dat[1] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f)); dat[2] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[3] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB17datetime(QDateTime dt) { QByteArray dat = QByteArray(4,0x00); dat[0] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f)); dat[1] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[2] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); dat[3] = static_cast((((dt.date().month()/10)&0x01)<<4)|((dt.date().month()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB18datetime(QDateTime dt) { QByteArray dat = QByteArray(3,0x00); dat[0] = static_cast((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f)); dat[1] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[2] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB19time(QTime t) { QByteArray dat = QByteArray(2,0x00); dat[0] = static_cast((((t.minute()/10)&0x0f)<<4)|((t.minute()%10)&0x0f)); dat[1] = static_cast((((t.hour()/10)&0x0f)<<4)|((t.hour()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB20date(QDate d) { QByteArray dat = QByteArray(3,0x00); dat[0] = static_cast((((d.day()/10)&0x0f)<<4)|((d.day()%10)&0x0f)); dat[1] = static_cast((((d.month()/10)&0x01)<<4)|((d.month()%10)&0x0f)); dat[2] = static_cast(((((d.year()%100)/10)&0x0f)<<4)|((d.year()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB21date(QDate d) { QByteArray dat = QByteArray(2,0x00); dat[0] = static_cast((((d.month()/10)&0x01)<<4)|((d.month()%10)&0x0f)); dat[1] = static_cast(((((d.year()%100)/10)&0x0f)<<4)|((d.year()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB22integer(int d) { QByteArray dat = QByteArray(1,0x00); dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB23float(float d) { QByteArray dat = QByteArray(3,0x00); int D = static_cast(d*100); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB24datetime(QDateTime dt) { QByteArray dat = QByteArray(2,0x00); dat[0] = static_cast((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f)); dat[1] = static_cast((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB25float(float d) { QByteArray dat = QByteArray(3,0x00); int D = static_cast(static_cast(d)*1000); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast(((d<0)?0x80:0x00)|((((D%1000000)/100000)&0x07)<<4)|(((D%100000)/10000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB26float(float d) { QByteArray dat = QByteArray(2,0x00); int D = static_cast(static_cast(d)*1000); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB27integer(int d) { QByteArray dat = QByteArray(4,0x00); dat[0] = static_cast(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f)); dat[1] = static_cast(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f)); dat[2] = static_cast(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f)); dat[3] = static_cast(((((d%100000000)/10000000)&0x0f)<<4)|(((d%10000000)/1000000)&0x0f)); return dat; } QByteArray SmartLightCommThread::mkB28double(double d, int g) { QByteArray dat = QByteArray(2,0x00); if((g<5)&&(g>-4)){ long long D = static_cast(d/qPow(10,g)); dat[0] = static_cast(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f)); dat[1] = static_cast(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f)); dat[2] = static_cast((((4-g)&0x07)<<5)|((d<0)?0x10:0x00)|((D/10000)&0x0f)); } return dat; }