12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637 |
- #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;i<cmd.length();i++){
- Data.append(QString(" %1").arg(cmd.at(i)&0xff,2,16,QChar('0')));
- }
- emit CommData(DeviceID, 2, Data);
- WaitCount = 0;
- }
- }
- if(WaitEcho)
- WaitCount++;
- if(WaitCount>30)
- WaitEcho=false;
- usleep(100000);
- }
- }
- quint16 SmartLightCommThread::chk_crcc(QByteArray buff, int len)
- {
- quint16 default_data = 0xa001;
- quint16 crc = 0xffff;
- for(int j=0;j<len;j++)
- {
- crc ^= static_cast<quint8>(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<char>(ServerAddr1&0xff);
- body[1] = static_cast<char>((ServerAddr1>>8)&0xff);
- body[2] = static_cast<char>((ServerAddr1>>16)&0xff);
- body[3] = static_cast<char>((ServerAddr1>>24)&0xff);
- body[4] = static_cast<char>(ServerAddr0&0xff);
- body[5] = static_cast<char>((ServerAddr0>>8)&0xff);
- body[6] = static_cast<char>((ServerAddr0>>16)&0xff);
- body[7] = static_cast<char>(0x00);
- body[8] = static_cast<char>(0x0e);
- body[9] = static_cast<char>(0xe0);
- body[10] = static_cast<char>(0x00);
- body[11] = static_cast<char>(0x00);
- body[12] = static_cast<char>(type&0xff);
- body[13] = static_cast<char>(0x00);
- body[14] = static_cast<char>(cur&0xff);
- body[15] = static_cast<char>(num&0xff);
- body[16] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10));
- body[17] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10));
- body[18] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10));
- body[19] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10));
- body[20] = static_cast<char>(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;
- }
- 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<char>(ServerAddr1&0xff);
- body[1] = static_cast<char>((ServerAddr1>>8)&0xff);
- body[2] = static_cast<char>((ServerAddr1>>16)&0xff);
- body[3] = static_cast<char>((ServerAddr1>>24)&0xff);
- body[4] = static_cast<char>(ServerAddr0&0xff);
- body[5] = static_cast<char>((ServerAddr0>>8)&0xff);
- body[6] = static_cast<char>((ServerAddr0>>16)&0xff);
- body[7] = static_cast<char>(0x00);
- body[8] = static_cast<char>(0x0d);
- body[9] = static_cast<char>(0xe0);
- int pno = get_fp_byte(f_pno);
- body[10] = static_cast<char>((pno>>8)&0xff);
- body[11] = static_cast<char>(pno&0xff);
- int fno = get_fp_byte(f_fno);
- body[12] = static_cast<char>((fno>>8)&0xff);
- body[13] = static_cast<char>(fno&0xff);
- if(body.length()==22){
- body[14] = static_cast<char>((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f));
- body[15] = static_cast<char>((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f));
- body[16] = static_cast<char>((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f));
- body[17] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10));
- body[18] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10));
- body[19] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10));
- body[20] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10));
- body[21] = static_cast<char>(0x05);
- }else if(body.length()==26){
- body[14] = static_cast<char>((((t1.time().minute()/10)&0x0f)<<4)|((t1.time().minute()%10)&0x0f));
- body[15] = static_cast<char>((((t1.time().hour()/10)&0x0f)<<4)|((t1.time().hour()%10)&0x0f));
- body[16] = static_cast<char>((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f));
- body[17] = static_cast<char>((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f));
- body[18] = static_cast<char>((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f));
- body[19] = static_cast<char>(sep);
- body[20] = static_cast<char>(num);
- body[21] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10));
- body[22] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10));
- body[23] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10));
- body[24] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10));
- body[25] = static_cast<char>(0x05);
- }else if(body.length()==29){
- body[14] = static_cast<char>((((t1.time().minute()/10)&0x0f)<<4)|((t1.time().minute()%10)&0x0f));
- body[15] = static_cast<char>((((t1.time().hour()/10)&0x0f)<<4)|((t1.time().hour()%10)&0x0f));
- body[16] = static_cast<char>((((t1.date().day()/10)&0x0f)<<4)|((t1.date().day()%10)&0x0f));
- body[17] = static_cast<char>((((t1.date().month()/10)&0x0f)<<4)|((t1.date().month()%10)&0x0f));
- body[18] = static_cast<char>((((t1.date().year()/10)&0x0f)<<4)|((t1.date().year()%10)&0x0f));
- body[19] = static_cast<char>((((t2.time().minute()/10)&0x0f)<<4)|((t2.time().minute()%10)&0x0f));
- body[20] = static_cast<char>((((t2.time().hour()/10)&0x0f)<<4)|((t2.time().hour()%10)&0x0f));
- body[21] = static_cast<char>((((t2.date().day()/10)&0x0f)<<4)|((t2.date().day()%10)&0x0f));
- body[22] = static_cast<char>((((t2.date().month()/10)&0x0f)<<4)|((t2.date().month()%10)&0x0f));
- body[23] = static_cast<char>((((t2.date().year()/10)&0x0f)<<4)|((t2.date().year()%10)&0x0f));
- body[24] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10));
- body[25] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10));
- body[26] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10));
- body[27] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10));
- body[28] = static_cast<char>(0x05);
- }
- if(body.length()>1){
- QByteArray cmd = mkDataFrame(body);
- CmdList.append(cmd);
- }
- }
- void SmartLightCommThread::confirm_report(QTcpSocket *so)
- {
- QDateTime dt = QDateTime::currentDateTime();
- QByteArray body = QByteArray(20,0x00);
- body[0] = static_cast<char>(ServerAddr1&0xff);
- body[1] = static_cast<char>((ServerAddr1>>8)&0xff);
- body[2] = static_cast<char>((ServerAddr1>>16)&0xff);
- body[3] = static_cast<char>((ServerAddr1>>24)&0xff);
- body[4] = static_cast<char>(ServerAddr0&0xff);
- body[5] = static_cast<char>((ServerAddr0>>8)&0xff);
- body[6] = static_cast<char>((ServerAddr0>>16)&0xff);
- body[7] = static_cast<char>(0x00);
- body[8] = static_cast<char>(0x00);
- body[9] = static_cast<char>(0xe0);
- body[10] = static_cast<char>(0x00);
- body[11] = static_cast<char>(0x00);
- body[12] = static_cast<char>(0x01);
- body[13] = static_cast<char>(0x00);
- body[14] = static_cast<char>(0x00);
- body[15] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|(dt.time().second()%10));
- body[16] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|(dt.time().minute()%10));
- body[17] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|(dt.time().hour()%10));
- body[18] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|(dt.date().day()%10));
- body[19] = static_cast<char>(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<cmd.length();i++){
- Data.append(QString(" %1").arg(cmd.at(i)&0xff,2,16,QChar('0')));
- }
- emit CommData(DeviceID, 2, Data);
- }
- QByteArray SmartLightCommThread::mkDataFrame(QByteArray body){
- QByteArray data = QByteArray(body.length()+9,0x00);
- int len = body.length();
- data[0] = static_cast<char>(0x68);
- data[1] = static_cast<char>(len&0xff);
- data[2] = static_cast<char>((len>>8)&0xff);
- data[3] = static_cast<char>(len&0xff);
- data[4] = static_cast<char>((len>>8)&0xff);
- data[5] = static_cast<char>(0x68);
- data[6] = static_cast<char>(ServerAddr1&0xff);
- data[7] = static_cast<char>((ServerAddr1>>8)&0xff);
- data[8] = static_cast<char>((ServerAddr1>>16)&0xff);
- data[9] = static_cast<char>((ServerAddr1>>24)&0xff);
- data[10] = static_cast<char>(ServerAddr0&0xff);
- data[11] = static_cast<char>((ServerAddr0>>8)&0xff);
- data[12] = static_cast<char>((ServerAddr0>>16)&0xff);
- data[13] = static_cast<char>(0x00);
- for(int i=8;i<body.length();i++)
- data[6+i] = static_cast<char>(body.at(i)&0xff);
- quint16 crc = chk_crcc(data.mid(6,len),len);
- data[data.length()-3] = static_cast<char>(crc&0xff);
- data[data.length()-2] = static_cast<char>((crc>>8)&0xff);
- data[data.length()-1] = static_cast<char>(0x16);
- return data;
- }
- float SmartLightCommThread::get_repValue(int type, QByteArray dat)
- {
- switch (type) {
- case 0x01:
- if(dat.length()==2){
- return static_cast<float>(((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<float>((((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<float>(d*10000);
- break;
- case 0x01:
- return static_cast<float>(d*1000);
- break;
- case 0x02:
- return static_cast<float>(d*100);
- break;
- case 0x03:
- return static_cast<float>(d*10);
- break;
- case 0x04:
- return static_cast<float>(d);
- break;
- case 0x05:
- return static_cast<float>(d*0.1);
- break;
- case 0x06:
- return static_cast<float>(d*0.01);
- break;
- case 0x07:
- return static_cast<float>(d*0.001);
- break;
- }
- }
- break;
- case 0x04:
- case 0x06:
- case 0x08:
- if(dat.length()==2){
- return static_cast<float>((((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<float>(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<<i;
- if((body.at(ud_cur+2)&bit)==bit){
- f_pno += (i+1);
- break;
- }
- }
- f_fno = (body.at(ud_cur+5)&0x00ff)*8;
- for(int i=0;i<8;i++){
- int bit = 0x01<<i;
- if((body.at(ud_cur+4)&bit)==bit){
- f_fno += (i+1);
- break;
- }
- }
- switch (f_afn) {
- case 0x00://确认、否认
- break;
- case 0x01://复位
- 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://查询参数
- break;
- case 0x0c://请求实时数据
- break;
- case 0x0d://请求历史数据
- 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<evt_len;j++)
- o_data.append(QString("%1 ").arg(body.at(ud_cur+6+4+err_len+2+j)&0xff,2,16,QChar('0')));
- emit CommData(DeviceID, 1, o_data);
- switch (err_code) {
- case 1://ACU失电记录
- 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(" 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<int>(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<int>(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<int>(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<double>(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<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<<i))?QString::fromUtf8("闭合 "):QString::fromUtf8("断开 "));
- for(int i=0;i<8;i++)
- o_data.append((arg2&(0x01<<i))?QString::fromUtf8("闭合 "):QString::fromUtf8("断开 "));
- for(int i=0;i<8;i++)
- o_data.append((arg3&(0x01<<i))?QString::fromUtf8("闭合 "):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;
- slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3;
- emit getEAlarm(DeviceID,err_code,0,static_cast<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<<i))?QString::fromUtf8("闭合 "):QString::fromUtf8("断开 "));
- for(int i=0;i<8;i++)
- o_data.append((arg2&(0x01<<i))?QString::fromUtf8("闭合 "):QString::fromUtf8("断开 "));
- for(int i=0;i<8;i++)
- o_data.append((arg3&(0x01<<i))?QString::fromUtf8("闭合 "):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;
- slShm->smartLightList[idx].LastEvent[evid].ARG[2] = arg3;
- emit getEAlarm(DeviceID,err_code,0,static_cast<int>(arg1),static_cast<int>(arg2),static_cast<int>(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;i<arg2;i++){
- if(i==0)
- others.append(QString("%1").arg(((body.at(ud_cur+err_len+21+i*2)&0x00ff)|((body.at(ud_cur+err_len+22+i*2)&0x00ff)<<8))));
- else
- others.append(QString(",%1").arg(((body.at(ud_cur+err_len+21+i*2)&0x00ff)|((body.at(ud_cur+err_len+22+i*2)&0x00ff)<<8))));
- }
- others.append("]");
- o_data = "";
- o_data.append(t.toString("yyyy-MM-dd HH:mm:ss"));
- if(err_code==15){
- o_data.append(QString::fromUtf8(" 单灯正常开灯记录 "));
- o_data.append(QString::fromUtf8("开灯成功:%1 ").arg(arg1));
- o_data.append(QString::fromUtf8("开灯失败:%1 ").arg(arg2));
- }else if(err_code==16){
- o_data.append(QString::fromUtf8(" 单灯正常关灯记录 "));
- o_data.append(QString::fromUtf8("关灯成功:%1 ").arg(arg1));
- o_data.append(QString::fromUtf8("关灯失败:%1 ").arg(arg2));
- }
- if(arg2>0){
- 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<int>(arg1),static_cast<int>(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<int>(arg1),static_cast<int>(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<double>(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<int>(arg1),static_cast<int>(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<uint>(((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<double>(value),'g',3)));
- o_data.append(QString::fromUtf8(" 功率因素:%1%%").arg(QString::number(static_cast<double>(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<int>(arg1),static_cast<int>(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<uint>(((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<double>(value),'g',3)));
- o_data.append(QString::fromUtf8(" 电流值:%1A").arg(QString::number(static_cast<double>(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<int>(arg1),static_cast<int>(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<uint>(((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<int>(arg1),static_cast<int>(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<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<int>(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<int>(arg1),static_cast<int>(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<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<float>(value);
- emit getEAlarm(DeviceID,err_code,sta,static_cast<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<uint>(((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<double>(value),'g',3)));
- o_data.append(QString::fromUtf8(" 杆电压:%1V").arg(QString::number(static_cast<double>(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<int>(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<uint>(((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<int>(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<int>(arg1),static_cast<int>(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<int>(arg1),static_cast<int>(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;v<vers.length();v++){
- if(v==0)
- arg1 = vers.at(v).toUInt();
- else if(v==1)
- arg2 = vers.at(v).toUInt();
- else if(v==2)
- arg3 = vers.at(v).toUInt();
- else
- break;
- }
- }
- 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(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].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<int>(arg1),static_cast<int>(arg2),static_cast<int>(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<uint>((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<double>(v1),'g',3)));
- o_data.append(QString::fromUtf8(" 电流:%1A").arg(QString::number(static_cast<double>(v2),'g',3)));
- o_data.append(QString::fromUtf8(" 有功功率:%1W/VAR").arg(QString::number(static_cast<double>(v3),'g',3)));
- o_data.append(QString::fromUtf8(" 功率因素:%1%").arg(QString::number(static_cast<double>(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<int>(arg1),static_cast<int>(arg2),static_cast<int>(arg3),v1,v2,
- QString("%1,%2").arg(QString::number(static_cast<double>(v3),'g',3)).arg(QString::number(static_cast<double>(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;i<strlen(deviceid);i++){
- idhash = (idhash+deviceid[i]&0xff)&0xff;
- }
- for(int i=0;i<DevNum;i++){
- if(slShm->smartLightList[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;i<data.length();i++){
- Data.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
- }
- emit CommData(DeviceID, 1, Data);
- bool data_ok = checkDataFrame(so, data);
- }
- void SmartLightCommThread::close_self(QTcpSocket *so)
- {
- so->abort();
- keepcomm = false;
- }
- void SmartLightCommThread::stop()
- {
- keepcomm = false;
- }
|