|
@@ -0,0 +1,4448 @@
|
|
|
+#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;
|
|
|
+}
|
|
|
+
|
|
|
+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<quint8>(((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<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::reset_command(QString deviceId)
|
|
|
+{
|
|
|
+ QDateTime dt = QDateTime::currentDateTime();
|
|
|
+ QByteArray body = QByteArray(21,0x00);
|
|
|
+ body[0] = static_cast<char>(0x01);
|
|
|
+ body[1] = static_cast<char>(0x00);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x01);
|
|
|
+ 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>(0x01);
|
|
|
+ body[15] = static_cast<char>(0x00);
|
|
|
+ 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 = 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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(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<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(day, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[16] = static_cast<char>(0x01);
|
|
|
+ body[17] = static_cast<char>(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<char>(Dat3[0]&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat3[1]&0xff);
|
|
|
+ body[20] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ body[21] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ 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>(((((timeOut%100)/10)&0x0f)<<4)|(((timeOut%100)%10)&0x0f));
|
|
|
+ body[15] = static_cast<char>(((retransmissionsNumber&0x0f)<<4)|((timeOut/100)&0x0f));
|
|
|
+ if(realTimeData==1&&historicalData==1&&eventData==1){
|
|
|
+ body[16] = static_cast<char>(0x07);
|
|
|
+ }else if(realTimeData==1&&historicalData==1&&eventData==0){
|
|
|
+ body[16] = static_cast<char>(0x03);
|
|
|
+ }else if(realTimeData==1&&historicalData==0&&eventData==1){
|
|
|
+ body[16] = static_cast<char>(0x05);
|
|
|
+ }else if(realTimeData==1&&historicalData==0&&eventData==0){
|
|
|
+ body[16] = static_cast<char>(0x01);
|
|
|
+ }else if(realTimeData==0&&historicalData==1&&eventData==1){
|
|
|
+ body[16] = static_cast<char>(0x06);
|
|
|
+ }else if(realTimeData==0&&historicalData==0&&eventData==1){
|
|
|
+ body[16] = static_cast<char>(0x04);
|
|
|
+ }else if(realTimeData==0&&historicalData==1&&eventData==0){
|
|
|
+ body[16] = static_cast<char>(0x02);
|
|
|
+ }else if(realTimeData==0&&historicalData==0&&eventData==0){
|
|
|
+ body[16] = static_cast<char>(0x00);
|
|
|
+ }
|
|
|
+ QString hex1 = QString("%1").arg(heartbeatCycle, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ }else if(parameterType==5){
|
|
|
+ body= QByteArray(19,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ QString hex = QString("%1").arg(timeOut, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(retransmissionsNumber, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(realTimeData, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(historicalData, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ QString hex4 = QString("%1").arg(eventData, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat4 = QByteArray(1,0x00);
|
|
|
+ Dat4[0] = static_cast<char>(hexstr_to_byte(hex4)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ }else if(parameterType==11){
|
|
|
+ body= QByteArray(21,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ QByteArray Dat =mkB08integer(timeOut);//DI
|
|
|
+ QByteArray Dat1 =mkB10integer(retransmissionsNumber);//AI
|
|
|
+ QByteArray Dat2 =mkB08integer(realTimeData);//智能表
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat[1]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat1[1]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat1[2]&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[20] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ QString hex = QString("%1").arg(address1, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(address2, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(address3, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(address4, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[17] = static_cast<char>(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<char>(hexstr_to_byte(hex5)&0xff);
|
|
|
+ Dat4[1] = static_cast<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat4[1]&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ }else if(parameterType==12){
|
|
|
+ body= QByteArray(18,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(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<char>(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<char>(hexstr_to_byte(d1)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(address2, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ }else if(parameterType==13||parameterType==19){
|
|
|
+ body= QByteArray(16+address3*11,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(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<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ if(address1==0){
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(address1==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==13){
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==19){
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ QString hex2 = QString("%1").arg(address2, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(address3, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(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<char>(hexstr_to_byte(hex4)&0xff);
|
|
|
+ body[16+11*j] = static_cast<char>(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<char>(hexstr_to_byte(hex5)&0xff);
|
|
|
+ body[17+11*j] = static_cast<char>(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<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ body[18+11*j] = static_cast<char>(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<char>(hexstr_to_byte(hex7)&0xff);
|
|
|
+ body[19+11*j] = static_cast<char>(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<char>(hexstr_to_byte(hex8)&0xff);
|
|
|
+ body[20+11*j] = static_cast<char>(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<char>(Dat9[0]&0xff);
|
|
|
+ body[22+11*j] = static_cast<char>(Dat9[1]&0xff);
|
|
|
+ body[23+11*j] = static_cast<char>(Dat9[2]&0xff);
|
|
|
+ body[24+11*j] = static_cast<char>(Dat9[3]&0xff);
|
|
|
+ body[25+11*j] = static_cast<char>(Dat9[4]&0xff);
|
|
|
+ body[26+11*j] = static_cast<char>(Dat9[5]&0xff);
|
|
|
+ }
|
|
|
+ }else if(parameterType==20){
|
|
|
+ body= QByteArray(15+address2,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(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<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ if(address1==0){
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(address1==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ QString hex2 = QString("%1").arg(address2, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[14] = static_cast<char>(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<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[15+j] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ }
|
|
|
+ }else if(parameterType==25){
|
|
|
+ body= QByteArray(16+address1*3,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x03);
|
|
|
+ QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(address2, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[15] = static_cast<char>(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<char>(hexstr_to_byte(hex4)&0xff);
|
|
|
+ body[16+3*j] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ int linesIdentification = temp1.value("lines_identification").toInt();
|
|
|
+ int portWays = temp1.value("port_ways").toInt();
|
|
|
+ body[17+3*j] = static_cast<char>(((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<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ body[18+3*j] = static_cast<char>(Dat6[0]&0xff);
|
|
|
+ }
|
|
|
+ }else if(parameterType==26){
|
|
|
+ body= QByteArray(15+address1*12,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x03);
|
|
|
+ QString hex2 = QString("%1").arg(address1, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[14] = static_cast<char>(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<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[15+12*j] = static_cast<char>(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<char>(hexstr_to_byte(hex4)&0xff);
|
|
|
+ body[16+12*j] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ int linesIdentification = temp1.value("lines_identification").toInt();
|
|
|
+ int portWays = temp1.value("port_ways").toInt();
|
|
|
+ body[17+12*j] = static_cast<char>(((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<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ body[18+12*j] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x44);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x20);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ QString hex = QString("%1").arg(excessiveCurrent, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(excessiveCurrentRecovery, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(lowCurrent, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(lowCurrentRecovery, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(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<char>(hexstr_to_byte(hex41)&0xff);
|
|
|
+ Dat4[1] = static_cast<char>(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<char>(hexstr_to_byte(hex51)&0xff);
|
|
|
+ Dat5[1] = static_cast<char>(hexstr_to_byte(hex52)&0xff);
|
|
|
+ QString hex6 = QString("%1").arg(lampFailure, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat6 = QByteArray(1,0x00);
|
|
|
+ Dat6[0] = static_cast<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ QString hex7 = QString("%1").arg(lampFailureRecovery, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat7 = QByteArray(1,0x00);
|
|
|
+ Dat7[0] = static_cast<char>(hexstr_to_byte(hex7)&0xff);
|
|
|
+ QString hex8 = QString("%1").arg(fuseFailure, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat8 = QByteArray(1,0x00);
|
|
|
+ Dat8[0] = static_cast<char>(hexstr_to_byte(hex8)&0xff);
|
|
|
+ QString hex9 = QString("%1").arg(fuseFailureRecovery, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat9 = QByteArray(1,0x00);
|
|
|
+ Dat9[0] = static_cast<char>(hexstr_to_byte(hex9)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat4[1]&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ body[20] = static_cast<char>(Dat5[1]&0xff);
|
|
|
+ body[21] = static_cast<char>(Dat5[0]&0xff);
|
|
|
+ body[22] = static_cast<char>(Dat6[0]&0xff);
|
|
|
+ body[23] = static_cast<char>(Dat7[0]&0xff);
|
|
|
+ body[24] = static_cast<char>(Dat8[0]&0xff);
|
|
|
+ body[25] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==1){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==2){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==3){
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==9){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }
|
|
|
+ if(controlType==3){
|
|
|
+ QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(economizeGear, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ }else{
|
|
|
+ QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(0x00);
|
|
|
+ }
|
|
|
+ }else if(parameterType==10||parameterType==11){//单灯控制器复位
|
|
|
+ body= QByteArray(15,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==10){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==11){
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }
|
|
|
+ QString hex1 = QString("%1").arg(controlType, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==12){
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==13){
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==17){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ QString hex1 = QString("%1").arg(configure, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ QDateTime time = QDateTime::fromString(control_time, "yyyy-MM-dd hh:mm:ss");
|
|
|
+ QByteArray Dat2 =mkB01datetime(time);
|
|
|
+ body[15] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat2[1]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat2[2]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat2[3]&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat2[4]&0xff);
|
|
|
+ body[20] = static_cast<char>(Dat2[5]&0xff);
|
|
|
+ QString hex3 = QString("%1").arg(controlType, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex3)&0xff);
|
|
|
+ body[21] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ QString hex4 = QString("%1").arg(economizeGear, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat4 = QByteArray(1,0x00);
|
|
|
+ Dat4[0] = static_cast<char>(hexstr_to_byte(hex4)&0xff);
|
|
|
+ body[22] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ }else if(parameterType==14||parameterType==15||parameterType==18){
|
|
|
+ body= QByteArray(15,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==14){
|
|
|
+ body[12] = static_cast<char>(0x20);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==15){
|
|
|
+ body[12] = static_cast<char>(0x40);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==18){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ QString hex1 = QString("%1").arg(configure, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x40);
|
|
|
+ body[13] = static_cast<char>(0x03);
|
|
|
+ QDateTime time = QDateTime::fromString(control_time, "yyyy-MM-dd hh:mm:ss");
|
|
|
+ QByteArray Dat =mkB01datetime(time);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat[1]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat[2]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat[3]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat[4]&0xff);
|
|
|
+ body[19] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x45);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ if(parameterType==2){
|
|
|
+ body[9] = static_cast<char>(0x73);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==3){
|
|
|
+ body[9] = static_cast<char>(0x74);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==4){
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==25){
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==10){
|
|
|
+ body= QByteArray(14,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==11){
|
|
|
+ body= QByteArray(16,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ if(startPoint>255){
|
|
|
+ if(queryNumber>120){
|
|
|
+ body[14] = static_cast<char>(0x0A);
|
|
|
+ body[15] = static_cast<char>(0xFF);
|
|
|
+ }else{
|
|
|
+ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(0xFF);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(queryNumber>120){
|
|
|
+ QString hex = QString("%1").arg(startPoint, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[14] = static_cast<char>(0x0A);
|
|
|
+ body[15] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }else{
|
|
|
+ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(startPoint, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(parameterType==12){
|
|
|
+ body= QByteArray(16,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ body[9] = static_cast<char>(0x75);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ if(startPoint>255){
|
|
|
+ if(queryNumber>120){
|
|
|
+ body[14] = static_cast<char>(0x0A);
|
|
|
+ body[15] = static_cast<char>(0xFF);
|
|
|
+ }else{
|
|
|
+ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(0xFF);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(queryNumber>120){
|
|
|
+ QString hex = QString("%1").arg(startPoint, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[14] = static_cast<char>(0x0A);
|
|
|
+ body[15] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }else{
|
|
|
+ QString hex = QString("%1").arg(queryNumber, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(startPoint, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4C);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==17){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==33){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==34){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==35){
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==36){
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==37){
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==38){
|
|
|
+ body[12] = static_cast<char>(0x20);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==39){
|
|
|
+ body[12] = static_cast<char>(0x40);
|
|
|
+ body[13] = static_cast<char>(0x04);
|
|
|
+ }else if(parameterType==100){
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4D);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==1){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==17){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==18){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==19){
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==20){
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==21){
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if(parameterType==22){
|
|
|
+ body[12] = static_cast<char>(0x20);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ QDateTime time = QDateTime::fromString(start_time, "yyyy-MM-dd hh:mm:ss");
|
|
|
+ QByteArray Dat1 =mkB15datetime(time);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[1]&0xff);
|
|
|
+ body[16] = static_cast<char>(Dat1[2]&0xff);
|
|
|
+ body[17] = static_cast<char>(Dat1[3]&0xff);
|
|
|
+ body[18] = static_cast<char>(Dat1[4]&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(dataFreezingDensity, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat2 = QByteArray(1,0x00);
|
|
|
+ Dat2[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[19] = static_cast<char>(Dat2[0]&0xff);
|
|
|
+ QString hex2 = QString("%1").arg(dataPoints, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat3 = QByteArray(1,0x00);
|
|
|
+ Dat3[0] = static_cast<char>(hexstr_to_byte(hex2)&0xff);
|
|
|
+ body[20] = static_cast<char>(Dat3[0]&0xff);
|
|
|
+ }else if(parameterType==2){
|
|
|
+ body = QByteArray(17,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4D);
|
|
|
+ body[9] = static_cast<char>(0x76);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ QDate date = QDate::fromString(start_time, "yyyy-MM-dd");
|
|
|
+ QByteArray Dat1 =mkB20date(date);
|
|
|
+ body[14] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ body[15] = static_cast<char>(Dat1[1]&0xff);
|
|
|
+ body[16] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4E);
|
|
|
+ body[9] = static_cast<char>(0x76);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ if(parameterType==1){
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==2){
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ QString hex = QString("%1").arg(pm, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat = QByteArray(1,0x00);
|
|
|
+ Dat[0] = static_cast<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[14] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ QString hex1 = QString("%1").arg(pn, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[15] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4A);
|
|
|
+ body[9] = static_cast<char>(0x76);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ body[14] = static_cast<char>(0x01);
|
|
|
+ body[15] = static_cast<char>(0x01);
|
|
|
+ body[16] = static_cast<char>(0x00);
|
|
|
+ body[17] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4A);
|
|
|
+ body[9] = static_cast<char>(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<char>(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<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ }else{
|
|
|
+ if(pn_re==1){
|
|
|
+ body[10] = static_cast<char>(0x01);
|
|
|
+ }else if(pn_re==2){
|
|
|
+ body[10] = static_cast<char>(0x02);
|
|
|
+ }else if(pn_re==3){
|
|
|
+ body[10] = static_cast<char>(0x04);
|
|
|
+ }else if(pn_re==4){
|
|
|
+ body[10] = static_cast<char>(0x08);
|
|
|
+ }else if(pn_re==5){
|
|
|
+ body[10] = static_cast<char>(0x10);
|
|
|
+ }else if(pn_re==6){
|
|
|
+ body[10] = static_cast<char>(0x20);
|
|
|
+ }else if(pn_re==7){
|
|
|
+ body[10] = static_cast<char>(0x40);
|
|
|
+ }else if(pn_re==0){
|
|
|
+ body[10] = static_cast<char>(0x80);
|
|
|
+ }
|
|
|
+ if(pn==8){
|
|
|
+ body[11] = static_cast<char>(0x01);
|
|
|
+ }else{
|
|
|
+ body[11] = static_cast<char>(Dat[0]&0xff);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(parameterType==13){
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if (parameterType==19) {
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }else if (parameterType==20) {
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ }
|
|
|
+ }else if(parameterType==17){
|
|
|
+ body= QByteArray(15+2*number,0x00);
|
|
|
+ body[0] = static_cast<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(0x4A);
|
|
|
+ body[9] = static_cast<char>(0x76);
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x02);
|
|
|
+ QString hex1 = QString("%1").arg(number, 2, 16, QChar('0'));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(hexstr_to_byte(hex1)&0xff);
|
|
|
+ body[14] = static_cast<char>(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<char>(hexstr_to_byte(hex5)&0xff);
|
|
|
+ Dat4[1] = static_cast<char>(hexstr_to_byte(hex6)&0xff);
|
|
|
+ body[15+2*j] = static_cast<char>(Dat4[0]&0xff);
|
|
|
+ body[16+2*j] = static_cast<char>(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<char>(0x00);
|
|
|
+ body[1] = static_cast<char>(0x09);
|
|
|
+ body[2] = static_cast<char>(0x00);
|
|
|
+ body[3] = static_cast<char>(0x00);
|
|
|
+ body[4] = static_cast<char>(0x00);
|
|
|
+ body[5] = static_cast<char>(0x00);
|
|
|
+ body[6] = static_cast<char>(0x00);
|
|
|
+ body[7] = static_cast<char>(0x00);
|
|
|
+ body[8] = static_cast<char>(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<char>(hexstr_to_byte(hex)&0xff);
|
|
|
+ body[9] = static_cast<char>(Dat1[0]&0xff);
|
|
|
+ if(parameterType==1){//终端上行通信口通信参数设置
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x01);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==2){//主站IP地址和端口
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x02);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==3){//终端事件记录配置设置
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==4){//设备基本信息
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==5){//终端事件检测配置参数
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x10);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==6){//单灯事件检测配置参数
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x20);
|
|
|
+ body[13] = static_cast<char>(0x00);
|
|
|
+ }else if(parameterType==11){//信息量检测间隔时间参数
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x04);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==12){//控制回路参数
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x08);
|
|
|
+ body[13] = static_cast<char>(0x01);
|
|
|
+ }else if(parameterType==88){//防盗通道配置
|
|
|
+ body[10] = static_cast<char>(0x00);
|
|
|
+ body[11] = static_cast<char>(0x00);
|
|
|
+ body[12] = static_cast<char>(0x80);
|
|
|
+ body[13] = static_cast<char>(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<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>(0x00);
|
|
|
+ data[7] = static_cast<char>(0x09);
|
|
|
+ data[8] = static_cast<char>(0x00);
|
|
|
+ data[9] = static_cast<char>(0x00);
|
|
|
+ data[10] = static_cast<char>(0x00);
|
|
|
+ data[11] = static_cast<char>(0x00);
|
|
|
+ data[12] = static_cast<char>(0x00);
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+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://确认、否认
|
|
|
+ if(f_pno==0){
|
|
|
+ QString response_type = "";
|
|
|
+ if(f_fno==1){//全部确认
|
|
|
+ response_type="全部确认";
|
|
|
+ }else if(f_fno==2){//全部否认
|
|
|
+ response_type="全部否认";
|
|
|
+ }else if(f_fno==3){//按数据单元标识确认和否认
|
|
|
+ response_type="按数据单元标识确认和否认";
|
|
|
+ }else if(f_fno==4){//安全认证错误应答
|
|
|
+ response_type="安全认证错误应答";
|
|
|
+ }
|
|
|
+ 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\tresponse_type:%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(response_type);
|
|
|
+ emit CommData(DeviceID, 1, o_Data);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0x01://复位
|
|
|
+ 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 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<char>(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<char>(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<char>(body.at(ud_cur+10));
|
|
|
+ QByteArray Dat1 = QByteArray(1,0x00);
|
|
|
+ Dat1[0] = static_cast<char>(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<query_number;i++){
|
|
|
+ QString ananame = "";
|
|
|
+ quint8 point = body.at(ud_cur+8+4*i)&0xff;
|
|
|
+ int anasta = (body.at(ud_cur+9+4*i)&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="照度";
|
|
|
+ }
|
|
|
+ quint8 f_g1=0x00;
|
|
|
+ quint8 f_g2=0x00;
|
|
|
+ quint8 f_g3=0x00;
|
|
|
+ quint8 f_s=0x00;
|
|
|
+ double analog_data;
|
|
|
+ f_s = (body.at(ud_cur+11+4*i)&0x10)>>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<query_number;i++){
|
|
|
+ quint8 point = body.at(ud_cur+8+2*i)&0xff;
|
|
|
+ int status_data = (body.at(ud_cur+9+2*i)&0xff);
|
|
|
+ QJsonObject o_Data2;
|
|
|
+ o_Data2.insert("point", point);
|
|
|
+ o_Data2.insert("value", status_data);
|
|
|
+ o_Data1.append(o_Data2);
|
|
|
+ }
|
|
|
+
|
|
|
+ QString o_Data = QString("dir:%1,prm:%2,afn:%3,seq:%4,con:%5,fin:%6,fir:%7,tpv:%8,pno:%9,fno:%10,ec0:%11,ec1:%12,sig:%13,query_number:%14,start_point:%15,data_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==33||f_fno==34||f_fno==35||f_fno==36||f_fno==37||f_fno==38||f_fno==39){//pn=0
|
|
|
+ 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(0);
|
|
|
+ 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="照度";
|
|
|
+ }
|
|
|
+ quint8 f_g1=0x00;
|
|
|
+ quint8 f_g2=0x00;
|
|
|
+ quint8 f_g3=0x00;
|
|
|
+ quint8 f_s=0x00;
|
|
|
+ double analog_data;
|
|
|
+ f_s = (body.at(ud_cur+8)&0x10)>>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<data_points;i++){
|
|
|
+ quint8 f_g1=0x00;
|
|
|
+ quint8 f_g2=0x00;
|
|
|
+ quint8 f_g3=0x00;
|
|
|
+ quint8 f_s=0x00;
|
|
|
+ double analog_data;
|
|
|
+ f_s = (body.at(ud_cur+15+2*i)&0x10)>>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<records_number;i++){
|
|
|
+ QDateTime t1 = QDateTime(QDate(2000+(((body.at(ud_cur+15+9*i)&0xf0)>>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<data_points;i++){
|
|
|
+ quint8 f_g1=0x00;
|
|
|
+ quint8 f_g2=0x00;
|
|
|
+ quint8 f_g3=0x00;
|
|
|
+ quint8 f_s=0x00;
|
|
|
+ double analog_data;
|
|
|
+ f_s = (body.at(ud_cur+15+2*i)&0x10)>>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<records_number;i++){
|
|
|
+ QDateTime t1 = QDateTime(QDate(2000+(((body.at(ud_cur+15+9*i)&0xf0)>>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<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;
|
|
|
+}
|
|
|
+
|
|
|
+QByteArray SmartLightCommThread::mkB01datetime(QDateTime dt)
|
|
|
+{
|
|
|
+ QByteArray dat = QByteArray(6,0x00);
|
|
|
+ dat[0] = static_cast<char>((((dt.time().second()/10)&0x0f)<<4)|((dt.time().second()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[3] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f));
|
|
|
+ dat[4] = static_cast<char>(((dt.date().dayOfWeek()&0x07)<<5)|(((dt.date().month()/10)&0x01)<<4)|((dt.date().month()%10)&0x0f));
|
|
|
+ dat[5] = static_cast<char>(((((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<int>(static_cast<double>(d)/qPow(10,g));
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((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<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((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<char>(((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<int>(static_cast<double>(d)*10);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((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<int>(static_cast<double>(d)*100);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((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<int>(static_cast<double>(d)*10);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((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<int>(static_cast<double>(d)*100);
|
|
|
+ dat[0] = static_cast<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((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<int>(static_cast<double>(d)*10000);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((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<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((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<long long>(d*100);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((((D%100000000)/10000000)&0x0f)<<4)|(((D%10000000)/1000000)&0x0f));
|
|
|
+ dat[4] = static_cast<char>(((((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<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((((d%100000000)/10000000)&0x0f)<<4)|(((d%10000000)/1000000)&0x0f));
|
|
|
+ dat[4] = static_cast<char>(((((d%10000000000)/1000000000)&0x0f)<<4)|(((d%1000000000)/100000000)&0x0f));
|
|
|
+ dat[5] = static_cast<char>(((((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<int>(static_cast<double>(d)*10000);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((((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<long long>(d*10000);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((D%1000000)/100000)&0x0f)<<4)|(((D%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((((D%100000000)/10000000)&0x0f)<<4)|(((D%10000000)/1000000)&0x0f));
|
|
|
+ dat[4] = static_cast<char>(((((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<char>((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f));
|
|
|
+ dat[3] = static_cast<char>((((dt.date().month()/10)&0x01)<<4)|((dt.date().month()%10)&0x0f));
|
|
|
+ dat[4] = static_cast<char>(((((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<char>((((dt.time().second()/10)&0x0f)<<4)|((dt.time().second()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[3] = static_cast<char>((((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<char>((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((dt.date().day()/10)&0x0f)<<4)|((dt.date().day()%10)&0x0f));
|
|
|
+ dat[3] = static_cast<char>((((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<char>((((dt.time().minute()/10)&0x0f)<<4)|((dt.time().minute()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((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<char>((((t.minute()/10)&0x0f)<<4)|((t.minute()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((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<char>((((d.day()/10)&0x0f)<<4)|((d.day()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((d.month()/10)&0x01)<<4)|((d.month()%10)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((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<char>((((d.month()/10)&0x01)<<4)|((d.month()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((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<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ return dat;
|
|
|
+}
|
|
|
+
|
|
|
+QByteArray SmartLightCommThread::mkB23float(float d)
|
|
|
+{
|
|
|
+ QByteArray dat = QByteArray(3,0x00);
|
|
|
+ int D = static_cast<int>(d*100);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((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<char>((((dt.time().hour()/10)&0x0f)<<4)|((dt.time().hour()%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>((((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<int>(static_cast<double>(d)*1000);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((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<int>(static_cast<double>(d)*1000);
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((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<char>(((((d%100)/10)&0x0f)<<4)|((d%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((d%10000)/1000)&0x0f)<<4)|(((d%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>(((((d%1000000)/100000)&0x0f)<<4)|(((d%100000)/10000)&0x0f));
|
|
|
+ dat[3] = static_cast<char>(((((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<long long>(d/qPow(10,g));
|
|
|
+ dat[0] = static_cast<char>(((((D%100)/10)&0x0f)<<4)|((D%10)&0x0f));
|
|
|
+ dat[1] = static_cast<char>(((((D%10000)/1000)&0x0f)<<4)|(((D%1000)/100)&0x0f));
|
|
|
+ dat[2] = static_cast<char>((((4-g)&0x07)<<5)|((d<0)?0x10:0x00)|((D/10000)&0x0f));
|
|
|
+ }
|
|
|
+ return dat;
|
|
|
+}
|