123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- #include "electdata171.h"
- #include "wgelectricshm.h"
- extern WGDevList *wgdev;
- static QString digital171[16] = {
- "commState",
- "busLive",
- "highVoltageAlarm",
- "lowVoltageAlarm",
- "busLackPhase",
- "analog1Alarm",
- "analog2Alarm",
- "analog3Alarm",
- "analog4Alarm",
- "analog5Alarm",
- "digitalReserved1",
- "digitalReserved2",
- "digitalReserved3",
- "digitalReserved4",
- "digitalReserved5",
- "digitalReserved6"
- };
- static QString analogInfoTable171[20] = {
- "voltageA",
- "voltageB",
- "voltageC",
- "voltageAB",
- "voltageBC",
- "voltageCA",
- "frequency",
- "analog1",
- "analog2",
- "analog3",
- "analog4",
- "analog5",
- "voltageATHD",
- "voltageBTHD",
- "voltageCTHD",
- "voltageSagTimes",
- "voltageSwellTimes",
- "voltageInterruptionTimes",
- "voltageUnbalanceFactor",
- "analogReserved"
- };
- static QString digitalDesc171[16] = {
- "通信状态",
- "母线带电",
- "电压越上限",
- "电压越下限",
- "缺相",
- "直流量告警1",
- "直流量告警2",
- "直流量告警3",
- "直流量告警4",
- "直流量告警5",
- "预留1",
- "预留2",
- "预留3",
- "预留4",
- "预留5",
- "预留6"
- };
- Electdata171::Electdata171(QObject *parent) : QThread(parent)
- {
- keep = false;
- DevMsgList.clear();
- }
- void Electdata171::run()
- {
- keep = true;
- while(keep){
- if(DevMsgList.length()>0){
- DevData171 dev = DevMsgList.first();
- this->arraydataToJson(dev.topic,dev.message);
- DevMsgList.removeFirst();
- }
- usleep(10000);
- }
- }
- void Electdata171::stop()
- {
- keep = false;
- }
- void Electdata171::DevMessage(DevData171 dev)
- {
- DevMsgList.append(dev);
- }
- void Electdata171::arraydataToJson(QString topic,QByteArray data)
- {
- QByteArray devBData;
- QJsonDocument dev_doc;
- QJsonObject devdata;
- QJsonObject paradata;
- QJsonObject objdata;
- QString sql;
- int startpos=0,Idx = 0;
- QString deviceCode = (topic.split("/")).at(5);
- printf("deviceCode = %s\n",deviceCode.toUtf8().data());
- QString commData;
- for(int i=0;i<data.length();i++){
- commData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
- }
- QByteArray dat = data.mid(2,data.length()-4);
- QString column,valueData,setValue;
- quint16 crc = chk_sum(dat,static_cast<quint16>(dat.length()));
- if(((data.at(data.length()-1)&0xff)==((crc>>8)&0xff))&&((data.at(data.length()-2)&0xff)==(crc&0xff))){
- printf("crc enter\n");
- QDateTime starttime = QDateTime::currentDateTime();
- qint64 datetime = starttime.toMSecsSinceEpoch();
- devdata.insert("id",QString::number(datetime,10));
- devdata.insert("version","1.0");
- if((data.at(4)&0xff)==0x03){
- switch (data.at(5)&0xff) {
- case 0x01://遥信
- {
- devdata.insert("method","thing.event.property.post") ;
- for(int i=0;i<102400;i++){
- if(wgdev->devs[i].Enabled == 0x01){
- if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
- Idx = i;
- wgdev->devs[i].LastCommtime=starttime.toTime_t();
- break;
- }
- }
- }
- quint16 start = static_cast<quint16>(((data.at(11)&0x00ff)<<8)|(data.at(10)&0x00ff));
- quint16 num = static_cast<quint16>(((data.at(13)&0x00ff)<<8)|(data.at(12)&0x00ff));
- startpos = 14;
- for(int i=0;i<num;i++){
- paradata.insert(digital171[start+i],static_cast<quint8>(data.at(startpos)&0xff));
- column.append(digital171[start+i]).append(",");
- valueData.append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
- setValue.append(digital171[start+i]).append("=").append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
- wgdev->devs[Idx].alarm[start+i].digitalvalue = static_cast<quint8>(data.at(startpos)&0xff);
- startpos += 1;
- }
- sql.append(QString("insert into ht_switch_171_data(id,deviceName,%1dataTime)values(NULL,'%2',%3'%4');").arg(column).arg(deviceCode).arg(valueData).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
- emit appendSql(sql);
- sql.clear();
- column.clear();
- valueData.clear();
- sql.append(QString("update rt_switch_171_data set %1dataTime='%2' where deviceName = '%3';").arg(setValue).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
- emit appendSql(sql);
- sql.clear();
- setValue.clear();
- }
- break;
- case 0x10://遥测
- {
- devdata.insert("method","thing.event.analog.post");
- quint16 count = static_cast<quint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
- quint16 start = static_cast<quint16>(((data.at(9)&0x00ff)<<8)|(data.at(8)&0x00ff));
- qint64 timestamp = static_cast<qint64>(((static_cast<long int>(data.at(15)&0x00000000000000ff))<<40)|((static_cast<long int>(data.at(14)&0x00000000000000ff))<<32)|((static_cast<long int>(data.at(13)&0x00000000000000ff))<<24)|((static_cast<long int>(data.at(12)&0x00000000000000ff))<<16)|((static_cast<long int>(data.at(11)&0x00000000000000ff))<<8)|(static_cast<long int>(data.at(10)&0x00000000000000ff)));
- devdata.insert("id",QString::number(timestamp,10));
- startpos = 16;
- for(int i=0;i<count;i++){
- //4位十六进制转浮点数 BEGIN
- QString str;
- str.append(QString("%1%2%3%4").arg(data.at(startpos+3)&0xff,2,16,QChar('0')).arg(data.at(startpos+2)&0xff,2,16,QChar('0')).arg(data.at(startpos+1)&0xff,2,16,QChar('0')).arg(data.at(startpos)&0xff,2,16,QChar('0')));
- int hex = str.toUInt(0,16);
- float value = *(float*)&hex;
- //4位十六进制转浮点数 END
- objdata.insert("value",QJsonValue(value));
- objdata.insert("time",QJsonValue(timestamp));
- paradata.insert(analogInfoTable171[start+i],objdata);
- column.append(analogInfoTable171[start+i]).append(",");
- valueData.append(QString("%1").arg(value)).append(",");
- setValue.append(analogInfoTable171[start+i]).append("=").append(QString("%1").arg(value)).append(",");
- startpos += 4;
- }
- paradata.insert("freezingTime",QString::number(timestamp,10));
- QDateTime t = QDateTime::fromMSecsSinceEpoch(timestamp);
- sql.append(QString("insert into ht_analog_171_data(id,deviceName,%1freezingTime,dataTime) values (NULL,'%2',%3'%4','%5');").arg(column).arg(deviceCode).arg(valueData).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")));
- emit appendSql(sql);
- sql.clear();
- column.clear();
- valueData.clear();
- sql.append(QString("update rt_analog_171_data set %1freezingTime='%2',dataTime='%3' where deviceName = '%4';").arg(setValue).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
- emit appendSql(sql);
- sql.clear();
- setValue.clear();
- for(int i=0;i<102400;i++){
- if(wgdev->devs[i].Enabled == 0x01){
- if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
- wgdev->devs[i].LastCommtime=starttime.toTime_t();
- break;
- }
- }
- }
- }
- break;
- case 0x11:
- {
- devdata.insert("method","thing.event.SOERecord.post");
- qint16 digitalNo = static_cast<qint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
- paradata.insert("measName",digital171[digitalNo]);
- qint8 digitalValue = static_cast<qint8>(data.at(8)&0xff);
- paradata.insert("digitalValue",QJsonValue(digitalValue));
- QString mDesc;
- qint64 timestamp = static_cast<qint64>((static_cast<long int>(data.at(14)&0x00000000000000ff)<<40)|(static_cast<long int>(data.at(13)&0x00000000000000ff)<<32)|(static_cast<long int>(data.at(12)&0x00000000000000ff)<<24)|(static_cast<long int>(data.at(11)&0x00000000000000ff)<<16)|(static_cast<long int>(data.at(10)&0x00000000000000ff)<<8)|static_cast<long int>(data.at(9)&0x00000000000000ff));
- if(digitalValue == 1){
- mDesc.append(digitalDesc171[digitalNo]).append("动作");
- paradata.insert("measDesc",mDesc);
- sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',0);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital171[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
- emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
- sql.clear();
- }else{
- mDesc.append(digitalDesc171[digitalNo]).append("复归");
- paradata.insert("measDesc",mDesc);
- sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',2);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital171[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
- emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
- sql.clear();
- sql.append(QString("update alarm_power set handling_time = '%1',handling_status = 3 where device_code = '%2' and meas_name = '%3' and digital_value = 1 and handling_status = 0;")
- .arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode).arg(digital171[digitalNo]));
- emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
- sql.clear();
- }
- paradata.insert("soeTime",QString::number(timestamp));
- }
- break;
- default:
- break;
- }
- devdata.insert("params",paradata);
- dev_doc.setObject(devdata);
- devBData=dev_doc.toJson(QJsonDocument::Compact);
- }
- }
- emit sendLog(topic,commData,devBData);
- }
- quint16 Electdata171::chk_sum(QByteArray buff,quint16 len)
- {
- quint16 crc = 0x0000;
- for(int i=0;i<len;i++){
- crc += static_cast<quint16>(buff.at(i)&0x00ff);
- }
- return crc;
- }
|