#include "Line.h" #include "ui_port.h" #include "file_md5.h" #include "data_frame.h" #include #include #include #include #include #include #include //#include QByteArray s; int down; #if 0 class myThread : public QThread { public: myThread(); void run(); //声明继承于QThread虚函数 run() public: void out_buff(unsigned char *buff, int size); int in_buff(unsigned char *buff, int time_out); int calcrc(const unsigned char *ptr, int count); int check(int crc, const unsigned char *buf, int sz); int xmodemTransmit(unsigned char *src, int srcsz); public: QSerialPort * myserial; }; myThread::myThread() { } void myThread::run() { myserial = new QSerialPort(); myserial->setPortName("COM6"); myserial->setBaudRate(115200, QSerialPort::AllDirections); myserial->setDataBits(QSerialPort::Data8); myserial->setParity(QSerialPort::NoParity); myserial->setStopBits(QSerialPort::OneStop); if (myserial->open(QIODevice::ReadWrite) == FALSE) qDebug("open error"); else { xmodemTransmit((unsigned char*)s.data(), s.length()); myserial->close(); } down = 2; } #endif Line::Line(QWidget *parent) : QMainWindow(parent) { QActionEvent *qevent; myserial = NULL; ui.setupUi(this); //portmenu = new QMenu(QString::fromLocal8Bit("端口")); //ui.menuBar->addMenu(portmenu); setWindowState(Qt::WindowMaximized); //connect(portmenu->menuAction(), SIGNAL(portmenu->), this, SLOT(portclick())); //ui.menuBar->addAction(QString::fromLocal8Bit("端口"), this, SLOT(portclick())); //ui.menuBar->addAction(QString::fromLocal8Bit("打开"), this, SLOT(portopen())); ui.menuBar->addAction("端口", this, SLOT(portclick())); ui.menuBar->addAction("打开", this, SLOT(portopen())); ui.ReadStoreButton->connect(ui.ReadStoreButton,SIGNAL(clicked()),this,SLOT(ReadStore())); ui.SetStoreButton->connect(ui.SetStoreButton,SIGNAL(clicked()),this,SLOT(SetStore())); ui.CJReadversionButton->connect(ui.CJReadversionButton,SIGNAL(clicked()),this,SLOT(CJReadVersion())); ui.CJReadStoreButton->connect(ui.CJReadStoreButton,SIGNAL(clicked()),this,SLOT(CJReadStore())); ui.CJSetStoreButton->connect(ui.CJSetStoreButton,SIGNAL(clicked()),this,SLOT(CJSetStore())); ui.CJReadOilUnloadButton->connect(ui.CJReadOilUnloadButton,SIGNAL(clicked()),this,SLOT(CJReadOilUnload())); ui.CJSetOilUnloadButton->connect(ui.CJSetOilUnloadButton,SIGNAL(clicked()),this,SLOT(CJSetOilUnload())); ui.CJReadBottomValveButton->connect(ui.CJReadBottomValveButton,SIGNAL(clicked()),this,SLOT(CJReadBottomValve())); ui.CJSetBottomValveButton->connect(ui.CJSetBottomValveButton,SIGNAL(clicked()),this,SLOT(CJSetBottomValve())); ui.CJReadManHoleCoverButton->connect(ui.CJReadManHoleCoverButton,SIGNAL(clicked()),this,SLOT(CJReadManHoleCover())); ui.CJSetManHoleCoverButton->connect(ui.CJSetManHoleCoverButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleCover())); ui.CJReadLevelTypeButton->connect(ui.CJReadLevelTypeButton,SIGNAL(clicked()),this,SLOT(CJReadLevelType())); ui.CJSetLevelTypeButton->connect(ui.CJSetLevelTypeButton,SIGNAL(clicked()),this,SLOT(CJSetLevelType())); ui.CJReadAttitudeButton->connect(ui.CJReadAttitudeButton,SIGNAL(clicked()),this,SLOT(CJReadAttitudeType())); ui.CJSetAttitudeButton->connect(ui.CJSetAttitudeButton,SIGNAL(clicked()),this,SLOT(CJSetAttitudeType())); ui.CJReadLevelZeroButton->connect(ui.CJReadLevelZeroButton,SIGNAL(clicked()),this,SLOT(CJReadLevelZero())); ui.CJSetLevelZeroButton->connect(ui.CJSetLevelZeroButton,SIGNAL(clicked()),this,SLOT(CJSetLevelZero())); ui.CJReadTemperatureTypeButton->connect(ui.CJReadTemperatureTypeButton,SIGNAL(clicked()),this,SLOT(CJReadTemperatureType())); ui.CJSetTemperatureTypeButton->connect(ui.CJSetTemperatureTypeButton,SIGNAL(clicked()),this,SLOT(CJSetTemperatureType())); ui.CJReadManHoleCoverThresholdButton->connect(ui.CJReadManHoleCoverThresholdButton,SIGNAL(clicked()),this,SLOT(CJReadManHoleCoverThreshold())); ui.CJSetManHoleCoverThresholdButton->connect(ui.CJSetManHoleCoverThresholdButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleCoverThreshold())); ui.CJOilUnloadZeroButton->connect(ui.CJOilUnloadZeroButton,SIGNAL(clicked()),this,SLOT(CJSetOilUnloadZero())); ui.CJManHoleZeroButton->connect(ui.CJManHoleZeroButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleZero())); ui.ReadControlVersionButton->connect(ui.ReadControlVersionButton,SIGNAL(clicked()),this,SLOT(ReadControlSoftwareVer())); ui.CJTransparentButton->connect(ui.CJTransparentButton,SIGNAL(clicked()),this,SLOT(CJTransparentTransmition())); ui.ReadControlTime->connect(ui.ReadControlTime,SIGNAL(clicked()),this,SLOT(GetControlDateTime())); ui.SetControlTime->connect(ui.SetControlTime,SIGNAL(clicked()),this,SLOT(SetControlDateTime())); ui.OpenFileButton->connect(ui.OpenFileButton,SIGNAL(clicked()),this,SLOT(on_openfile())); ui.UpgradeButton->connect(ui.UpgradeButton,SIGNAL(clicked()),this,SLOT(downfile())); ui.StopUpgradeButton->connect(ui.StopUpgradeButton,SIGNAL(clicked()),this,SLOT(StopUpGrade())); ui.RebootControl->connect(ui.RebootControl,SIGNAL(clicked()),this,SLOT(RebootControl())); ui.RebootCollect->connect(ui.RebootCollect,SIGNAL(clicked()),this,SLOT(RebootCollect())); ui.ReadAutoSealTime->connect(ui.ReadAutoSealTime,SIGNAL(clicked()),this,SLOT(ReadAutoSealTime())); ui.SetAutoSealTime->connect(ui.SetAutoSealTime,SIGNAL(clicked()),this,SLOT(SetAutoSealTime())); ui.SetConfig->connect(ui.SetConfig,SIGNAL(clicked()),this,SLOT(SetConfig())); ui.ReadConfig->connect(ui.ReadConfig,SIGNAL(clicked()),this,SLOT(ReadConfig())); ui.SetCoefExp->connect(ui.SetCoefExp,SIGNAL(clicked()),this,SLOT(SetCoefExp())); ui.ReadCoefExp->connect(ui.ReadCoefExp,SIGNAL(clicked()),this,SLOT(ReadCoefExp())); ui.SetUart1TimeOut->connect(ui.SetUart1TimeOut,SIGNAL(clicked()),this,SLOT(SetUart1TimeOut())); ui.ReadUart1TimeOut->connect(ui.ReadUart1TimeOut,SIGNAL(clicked()),this,SLOT(ReadUart1TimeOut())); ui.SetTankCapicity->connect(ui.SetTankCapicity,SIGNAL(clicked()),this,SLOT(SetTankCapicity())); ui.ReadTankCapicity->connect(ui.ReadTankCapicity,SIGNAL(clicked()),this,SLOT(ReadTankCapicity())); ui.ReadEnableBlankSealButton->connect(ui.ReadEnableBlankSealButton,SIGNAL(clicked()),this,SLOT(ReadBlankSeal())); ui.SetEnableBlankSealButton->connect(ui.SetEnableBlankSealButton,SIGNAL(clicked()),this,SLOT(SetBlankSeal())); // ui.tabWidget //ui.ReadStoreButton->connect(ui.ReadStoreButton) //ui.menuBar->addAction(QString::fromLocal8Bit("关闭"), this, SLOT(portclose())); #if 0 ui.pushButton->connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(sendaddr())); ui.pushButton->connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(sendvol())); ui.pushButton->connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(change_update())); ui.pushButton->connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(reboot_dev())); ui.pushButton->connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(Clear_dev())); ui.pushButton->connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(read_line())); ui.pushButton->connect(ui.pushButton_7, SIGNAL(clicked()), this, SLOT(on_openfile())); ui.pushButton->connect(ui.pushButton_8, SIGNAL(clicked()), this, SLOT(downfile())); ui.pushButton->connect(ui.pushButton_9, SIGNAL(clicked()), this, SLOT(readver())); ui.pushButton->connect(ui.pushButton_10, SIGNAL(clicked()), this, SLOT(sendconnect())); ui.pushButton->connect(ui.pushButton_11, SIGNAL(clicked()), this, SLOT(readconnect())); ui.pushButton->connect(ui.PT_SETButton, SIGNAL(clicked()), this, SLOT(sendPT())); ui.pushButton->connect(ui.PT_RDButton, SIGNAL(clicked()), this, SLOT(ReadPT())); ui.pushButton->connect(ui.CT_SETButton, SIGNAL(clicked()), this, SLOT(sendCT())); ui.pushButton->connect(ui.CT_RDButton, SIGNAL(clicked()), this, SLOT(ReadCT())); #endif //ui.into_cali_button->connect(ui.into_cali_button,SIGNAL(clicked()),this,SLOT(into_cali())); //ui.quit_cali_button->connect(ui.quit_cali_button,SIGNAL(clicked()),this,SLOT(quit_cali())); // // ui.get_reg->connect(ui.get_reg,SIGNAL(clicked()),this,SLOT(Read_RegVal())); // ui.set_reg->connect(ui.set_reg,SIGNAL(clicked()),this,SLOT(Write_RegVal())); portui.comboBox = NULL; down = 0; portdialog = new QDialog(); timer_id_searil = 0; portui.setupUi(portdialog); timerid=startTimer(280); } void Line::textEdit_append(QString str_txt) { //获取当前时间 QDateTime current_date_time = QDateTime::currentDateTime(); QString str = current_date_time.toString("yyyy-MM-dd hh:mm:ss.zzz "); str.append(str_txt); ui.textEdit->append(str); } void Line::SerialSend(QByteArray data) { // QString str; if(myserial==NULL) return; if (myserial->isOpen()) { myserial->write(data); } //获取当前时间 QDateTime current_date_time = QDateTime::currentDateTime(); QString str = current_date_time.toString("yyyy-MM-dd hh:mm:ss.zzz "); str.append("TX : "); //str = QString::fromUtf8("TX: "); str.append(data.toHex().toUpper()); ui.textEdit->append(str); } uint8_t Line::MODBUS_ASCII_GetLrc(QByteArray data) { uint8_t i; uint8_t cyLrcVal; int cyLen; QByteArray tmp=data; tmp.remove(0,1); tmp = tmp.fromHex(tmp); cyLen = tmp.length(); cyLrcVal = 0; for (i = 0; i < cyLen; i++) { cyLrcVal += tmp.at(i); } cyLrcVal = ~cyLrcVal; cyLrcVal += 1; return (cyLrcVal); } void Line::F3send(unsigned char *buff, int size) { QByteArray send_buf; unsigned char buf[128]; int crc; int i; uint8_t lrc; QByteArray lrcbyte; if(ui.CJF3checkBox->isChecked()) send_buf.append(':'); for(i=0;i>8)&0xff); if(ui.CJF3checkBox->isChecked()){ lrc=MODBUS_ASCII_GetLrc(send_buf); lrcbyte.append(lrc); send_buf.append(lrcbyte.toHex()); send_buf.append("\r\n"); } SerialSend(send_buf); } void Line::CJReadVersion() { QByteArray buf; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0220"); //寄存器 buf.append("0000"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::RebootCollect() { QByteArray buf; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0010"); //寄存器 buf.append("0006"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadStore() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0074"); //寄存器 buf.append("0006"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetStore() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0074"); //寄存器 buf.append("0006"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJStoreNum->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleSmallCoverNum->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottonValveNum->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadOilUnload() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0076"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetOilUnload() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0076"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.OilUnloadType->currentIndex(); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<3;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_1->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_2->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_3->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_4->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_5->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_6->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_7->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJOilUnloadingValveNum_8->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadBottomValve() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0077"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetBottomValve() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0077"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJBottonValveType->currentIndex(); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_1->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_2->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_3->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_4->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_5->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_6->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_7->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJBottomValveNum_8->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadManHoleCover() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0075"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetManHoleCover() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0075"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJManHoleCoverType->currentIndex(); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<3;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_1->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_2->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_3->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_4->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_5->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_6->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_7->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } i_val=ui.CJManHoleCoverNum_8->text().toInt(&ok,16); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJTransparentTransmition() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("017E"); //寄存器 buf.append("0009"); //寄存器个数 buf.append("00000000"); //保留位 buf.append("0000"); unsigned short i_val=ui.CJTransparentChannelNo->currentIndex(); sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } if(ui.CJTransparentTx->text().length()<2) { return; } i_val = ui.CJTransparentTx->text().length()/2; sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf.append(ui.CJTransparentTx->text()); buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadLevelType() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0078"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetLevelType() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0078"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJLevelType->currentIndex(); sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadAttitudeType() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0079"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetAttitudeType() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0079"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJAttitudeType->currentIndex(); sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadTemperatureType() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("007A"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetTemperatureType() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("007A"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJTemperatureType->currentIndex(); sprintf(buf_tmp,"%02X",i_val); for(i=0;i<2;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadManHoleCoverThreshold() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0072"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetManHoleCoverThreshold() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0072"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJManHoleCoverThreshold->text().toUInt(); sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJReadLevelZero() { QByteArray buf; uint8_t lrc; buf.append("390195500001"); buf.append("0003"); //控制码 buf.append("0190"); //寄存器 buf.append("0012"); //寄存器个数 buf.append("00000000"); //保留位 buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetLevelZero() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0190"); //寄存器 buf.append("0012"); //寄存器个数 buf.append("00000000"); //保留位 float f_val=ui.CJLevelZero_1->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_2->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_3->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_4->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_5->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_6->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_7->text().toFloat(); buf.append(FloattoHex(f_val)); f_val=ui.CJLevelZero_8->text().toFloat(); buf.append(FloattoHex(f_val)); buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetOilUnloadZero() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0050"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJOilUnloadZeroStoreNum->currentIndex()+0x11; sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } void Line::CJSetManHoleZero() { QByteArray buf; QByteArray tmp; bool ok; int i; char buf_tmp[32]; uint8_t lrc; buf.append("390195500001"); buf.append("0006"); //控制码 buf.append("0052"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 unsigned short i_val=ui.CJManHoleZeroStoreNum->currentIndex()+0x31; sprintf(buf_tmp,"%04X",i_val); for(i=0;i<4;++i) { buf.append(buf_tmp[i]); } buf=buf.fromHex(buf); F3send((unsigned char *)buf.data(),buf.size()); } QByteArray Line::FloattoHex(float f_val) { unsigned char *p_tr = (unsigned char*)&f_val; QByteArray buf; for(int i=0;i<4;++i) { buf.append(*(p_tr+3-i)); } buf = buf.toHex(); return buf; } void Line::ReadStore() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("00A4"); //寄存器 buf.append("0000"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetStore() { QByteArray buf; QByteArray tmp; bool ok; uint8_t lrc; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("00A4"); //寄存器 buf.append("0014"); //寄存器个数 buf.append("00000000"); //保留位 float f_val=ui.StoreNum->text().toInt(&ok,16); buf.append(FloattoHex(f_val)); f_val=ui.ManHoleCoverNum->text().toInt(&ok,16); buf.append(FloattoHex(f_val)); f_val=ui.ManHoleSmallCoverNum->text().toInt(&ok,16); buf.append(FloattoHex(f_val)); f_val=ui.OilUnloadingValveNum->text().toInt(&ok,16); buf.append(FloattoHex(f_val)); f_val=ui.BottonValveNum->text().toInt(&ok,16); buf.append(FloattoHex(f_val)); lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::RebootControl() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("020C"); //寄存器 buf.append("0000"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadTankCapicity() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("031C"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetTankCapicity() { QByteArray buf; uint8_t lrc; QByteArray lrcbyte; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("031C"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc = 0; if(ui.TankCapicity->checkState()==Qt::CheckState::Checked) { lrc=1; } lrcbyte.clear(); lrcbyte.append(lrc); //buf.append(lrcbyte.toHex()); lrc=MODBUS_ASCII_GetLrc(buf); lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadBlankSeal() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("07A4"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetBlankSeal() { QByteArray buf; uint8_t lrc; QByteArray lrcbyte; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("07A4"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc = 0; if(ui.EnableBlankSeal->checkState()==Qt::CheckState::Checked) { lrc=1; } lrcbyte.clear(); lrcbyte.append(lrc); //buf.append(lrcbyte.toHex()); lrc=MODBUS_ASCII_GetLrc(buf); lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadAutoSealTime() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("0024"); //寄存器 buf.append("0002"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadControlSoftwareVer() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("0220"); //寄存器 buf.append("0008"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetAutoSealTime() { QByteArray buf; uint32_t SealTime; uint8_t lrc; char tmp_buf[8]; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("0024"); //寄存器 buf.append("0002"); //寄存器个数 buf.append("00000000"); //保留位 SealTime = ui.AutoSealTime->text().toUInt(); sprintf(tmp_buf,"%04X",SealTime); buf.append(QString(tmp_buf)); lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadUart1TimeOut() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("0318"); //寄存器 buf.append("0004"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetUart1TimeOut() { QByteArray buf; uint8_t lrc; float f_val; char *ptr; int i; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("0318"); //寄存器 buf.append("0004"); //寄存器个数 buf.append("00000000"); //保留位 f_val=ui.Uart1_TimeOut->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadCoefExp() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("00E4"); //寄存器 buf.append("0032"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetCoefExp() { QByteArray buf; uint8_t lrc; float f_val; char *ptr; int i; QByteArray f_array; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("00E4"); //寄存器 buf.append("0032"); //寄存器个数 buf.append("00000000"); //保留位 f_val=ui.CoefExp1->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp2->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp3->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp4->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp5->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp6->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp7->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } f_val=ui.CoefExp8->text().toFloat(); ptr = (char *)&f_val; for(i=0;i<4;++i) { QByteArray arry; arry.append(ptr[3-i]); buf.append(arry.toHex()); } lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::ReadConfig() { QByteArray buf; uint8_t lrc; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("4000"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetConfig() { QByteArray buf; uint8_t lrc; QByteArray lrcbyte; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("4000"); //寄存器 buf.append("0001"); //寄存器个数 buf.append("00000000"); //保留位 lrc = 0; if(ui.Level->checkState()==Qt::CheckState::Checked) { lrc|=0x80; } if(ui.Pressure->checkState()==Qt::CheckState::Checked) { lrc|=0x40; } if(ui.PoweroffSave->checkState()==Qt::CheckState::Checked) { lrc|=0x20; } if(ui.DoubleOil->checkState()==Qt::CheckState::Checked) { lrc|=0x10; } if(ui.ReSeal->checkState()==Qt::CheckState::Checked) { lrc|=0x8; } if(ui.lcd5->checkState()==Qt::CheckState::Checked) { lrc|=0x4; } if(ui.Reserved->checkState()==Qt::CheckState::Checked) { lrc|=0x2; } if(ui.AutoSeal->checkState()==Qt::CheckState::Checked) { lrc|=0x1; } lrcbyte.clear(); lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); lrc=MODBUS_ASCII_GetLrc(buf); lrcbyte.clear(); lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::GetControlDateTime() { QByteArray buf; QByteArray tmp; bool ok; uint8_t lrc; QDateTime qtime; buf.append(":390100000000"); buf.append("0003"); //控制码 buf.append("01CC"); //寄存器 buf.append("0006"); //寄存器个数 buf.append("00000000"); //保留位 lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); } void Line::SetControlDateTime() { QByteArray buf; QByteArray tmp; bool ok; uint8_t lrc; QDateTime qtime; buf.append(":390100000000"); buf.append("0006"); //控制码 buf.append("01CC"); //寄存器 buf.append("0006"); //寄存器个数 buf.append("00000000"); //保留位 //qtime.setDate(QDateTime::currentDateTime().date()); //qtime.setTime(QDateTime::currentDateTime().time()); qtime = QDateTime::currentDateTime(); tmp.clear(); tmp.append(qtime.date().year()-2000); tmp=tmp.toHex(); buf.append(tmp); tmp.clear(); tmp.append(qtime.date().month()); tmp=tmp.toHex(); buf.append(tmp); tmp.clear(); tmp.append(qtime.date().day()); tmp=tmp.toHex(); buf.append(tmp); tmp.clear(); tmp.append(qtime.time().hour()); tmp=tmp.toHex(); buf.append(tmp); tmp.clear(); tmp.append(qtime.time().minute()); tmp=tmp.toHex(); buf.append(tmp); tmp.clear(); tmp.append(qtime.time().second()); tmp=tmp.toHex(); buf.append(tmp); lrc=MODBUS_ASCII_GetLrc(buf); QByteArray lrcbyte; lrcbyte.append(lrc); buf.append(lrcbyte.toHex()); buf.append("\r\n"); SerialSend(buf); qDebug("%s",qtime.toString("yyyy-MM-dd hh:mm:ss").toUtf8().data()); } void Line::timerEvent_old(QTimerEvent *event) { int i; unsigned int int_val; float f_val; QString str; QByteArray tt; QString send_buf; char buf[16]; //qDebug("TIME"); ui.dateTimeEdit->setDateTime(QDateTime::currentDateTime()); if (myserial == NULL) { sendflag = 0; return; } /*if (down >= 3) { myserial->close(); killTimer(timerid); timerid = startTimer(100); portopen(); down = 0; }*/ if (down==1 && sendflag) { xmodemTransmit((unsigned char*)s.data(), s.length()); sendflag = 0; return; } if (!myserial->isOpen()) { sendflag = 0; return; } /*if (down) { xmodemTransmit((unsigned char*)s.data(), s.length()); return; }*/ if(sendflag) { if(down) { xmodemTransmit((unsigned char*)s.data(), s.length()); sendflag=0; return; } if (myserial->isOpen()) { #if 1 switch(sendflag) { case 1: ReadStore(); break; case 2: GetControlDateTime(); break; case 3: ReadAutoSealTime(); break; case 4: ReadConfig(); break; case 5: ReadCoefExp(); break; case 6: ReadUart1TimeOut(); break; case 7: ReadTankCapicity(); break; case 8: ReadBlankSeal(); break; case 9: ReadControlSoftwareVer(); break; default: sendflag=0; return; } ++sendflag; #else sendflag=0; #endif } return; } } void Line::timerEvent(QTimerEvent *event) { if(event->timerId() == timer_id_searil) { //label2 每隔1秒+1 Receive_Data(); } else { timerEvent_old(event); } } void Line::readver() { int retry; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x75,0x87,0x16 }; memcpy(keyvalue, buf, 14); recvflag = 0; sendflag = 14; retry = 0; } void Line::read_line() { int retry; unsigned char buf[32] = {0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x68,0x7A,0x16}; memcpy(keyvalue, buf, 14); recvflag = 0; sendflag = 14; retry = 0; #if 0 do { Sleep(200); if (recvflag == 14) { if (keyvalue[11] & 0x1) { ui.radioButton12->setChecked(TRUE); } else { ui.radioButton11->setChecked(TRUE); } if (keyvalue[11] & 0x2) { ui.radioButton_22->setChecked(TRUE); } else { ui.radioButton_21->setChecked(TRUE); } if (keyvalue[11] & 0x4) { ui.radioButton_32->setChecked(TRUE); } else { ui.radioButton_31->setChecked(TRUE); } if (keyvalue[11] & 0x8) { ui.radioButton_42->setChecked(TRUE); } else { ui.radioButton_41->setChecked(TRUE); } if (keyvalue[11] & 0x10) { ui.radioButton_52->setChecked(TRUE); } else { ui.radioButton_51->setChecked(TRUE); } if (keyvalue[11] & 0x20) { ui.radioButton_62->setChecked(TRUE); } else { ui.radioButton_61->setChecked(TRUE); } if (keyvalue[11] & 0x40) { ui.radioButton_72->setChecked(TRUE); } else { ui.radioButton_71->setChecked(TRUE); } if (keyvalue[11] & 0x80) { ui.radioButton_82->setChecked(TRUE); } else { ui.radioButton_81->setChecked(TRUE); } recvflag = 0; break; } } while (++retry < 30); #endif } void Line::change_update() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x7D,0xAA,0x55,0x93,0x16 }; memcpy(keyvalue, buf, 16); sendflag = 16; } void Line::reboot_dev() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x7D,0x55,0xAA,0x93,0x16 }; memcpy(keyvalue, buf, 16); sendflag = 16; } void Line::Clear_dev() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x01,0x79,0x8e,0x16 }; memcpy(keyvalue, buf, 14); sendflag = 14; } void Line::sendaddr() { #if 0 unsigned short addr; int i; unsigned char buf[32] = {0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x67 }; memcpy(keyvalue, buf, 12); addr = ui.lineEdit->text().toInt(); keyvalue[12] = addr & 0xff; keyvalue[13] = (addr>>8) & 0xff; keyvalue[14] = 0; for (i = 1; i < 14; ++i) keyvalue[14] += keyvalue[i]; keyvalue[15] = 0x16; sendflag = 16; #endif } void Line::sendconnect() { #if 0 unsigned short addr; int i; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x73 }; memcpy(keyvalue, buf, 12); if(ui.comboBox->currentIndex()) { keyvalue[12] = 0x34; } else { keyvalue[12] = 0x33; } keyvalue[13] = 0; for (i = 1; i < 13; ++i) keyvalue[13] += keyvalue[i]; keyvalue[14] = 0x16; sendflag = 15; #endif } void Line::readconnect() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x73,0x85,0x16 }; memcpy(keyvalue, buf, 14); sendflag = 14; } void Line::sendCT() { #if 0 unsigned short addr; int i; float val; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x66 }; memcpy(keyvalue, buf, 12); val=ui.CTEdit->text().toFloat(); memcpy(keyvalue+12,&val,4); keyvalue[16] = 0; for (i = 1; i < 16; ++i) keyvalue[16] += keyvalue[i]; keyvalue[17] = 0x16; sendflag = 18; #endif } void Line::ReadCT() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x66,0x85,0x16 }; int i; memcpy(keyvalue, buf, 14); keyvalue[12] = 0; for (i = 1; i < 12; ++i) keyvalue[12] += keyvalue[i]; keyvalue[13] = 0x16; sendflag = 14; } void Line::sendPT() { #if 0 unsigned short addr; int i; float val; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x65 }; memcpy(keyvalue, buf, 12); val=ui.PT_Edit->text().toFloat(); memcpy(keyvalue+12,&val,4); keyvalue[16] = 0; for (i = 1; i < 16; ++i) keyvalue[16] += keyvalue[i]; keyvalue[17] = 0x16; sendflag = 18; #endif } void Line::ReadPT() { #if 0 unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x65,0x85,0x16 }; int i; memcpy(keyvalue, buf, 14); keyvalue[12] = 0; for (i = 1; i < 12; ++i) keyvalue[12] += keyvalue[i]; keyvalue[13] = 0x16; sendflag = 14; #endif } void Line::into_cali() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x78,0x3d,0xcb,0x16 }; memcpy(keyvalue, buf, 15); sendflag = 15; } void Line::quit_cali() { unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x78,0x00,0x8e,0x16 }; memcpy(keyvalue, buf, 15); sendflag = 15; } void Line::sendvol() { #if 0 unsigned short addr; int i; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x68 }; memcpy(keyvalue, buf, 12); keyvalue[12] = 0; if (ui.radioButton12->isChecked()) keyvalue[12] = 1; if (ui.radioButton_22->isChecked()) keyvalue[12] |= 0x2; if (ui.radioButton_32->isChecked()) keyvalue[12] |= 0x4; if (ui.radioButton_42->isChecked()) keyvalue[12] |= 0x8; if (ui.radioButton_52->isChecked()) keyvalue[12] |= 0x10; if (ui.radioButton_62->isChecked()) keyvalue[12] |= 0x20; if (ui.radioButton_72->isChecked()) keyvalue[12] |= 0x40; if (ui.radioButton_82->isChecked()) keyvalue[12] |= 0x80; keyvalue[13] = 0; for (i = 1; i < 13; ++i) keyvalue[13] += keyvalue[i]; keyvalue[14] = 0x16; sendflag = 15; #endif } void Line::Read_RegVal() { #if 0 unsigned short addr; int i; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x04,0x7A,0x01,0x04,0xF8,0x00,0x68 }; memcpy(keyvalue, buf, 17); buf[12] = ui.chan_box->currentIndex(); switch(ui.reg_box->currentIndex()) { case 0: case 1: case 2: buf[13] = ui.reg_box->currentIndex()+0x1a; break; case 3: case 4: case 5: buf[13] = ui.reg_box->currentIndex()+0x17-3; break; case 6: case 7: case 8: buf[13] = ui.reg_box->currentIndex()+0x4-6; break; default: break; } memcpy(keyvalue,buf,17); keyvalue[15] = 0; for (i = 1; i < 15; ++i) keyvalue[15] += keyvalue[i]; keyvalue[16] = 0x16; sendflag = 17; #endif } void Line::Write_RegVal() { #if 0 unsigned short addr; int i; unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x7A,0x01,0x04,0xF8,0x00,0x68 }; memcpy(keyvalue, buf, 12); buf[12] = ui.chan_box->currentIndex(); switch(ui.reg_box->currentIndex()) { case 0: case 1: case 2: buf[13] = ui.reg_box->currentIndex()+0x1a; break; case 3: case 4: case 5: buf[13] = ui.reg_box->currentIndex()+0x17-3; break; case 6: case 7: case 8: buf[13] = ui.reg_box->currentIndex()+0x4-6; break; default: break; } addr = ui.reg_edit->text().toUInt(Q_NULLPTR, 16); buf[14] = addr&0xff; buf[15] = (addr>>8)&0xff; memcpy(keyvalue,buf,17); keyvalue[16] = 0; for (i = 1; i < 16; ++i) keyvalue[16] += keyvalue[i]; keyvalue[17] = 0x16; sendflag = 18; #endif } void Line::portopen() { if(myserial==NULL) { myserial = new QSerialPort(); connect(myserial,SIGNAL(readyRead()),this,SLOT(Receive_Data())); } if (portui.comboBox == NULL) return; if (!portui.comboBox->count()) return; if (myserial->isOpen()) { myserial->close(); //ui.menuBar->actions().at(1)->setText(QString::fromLocal8Bit("打开")); ui.menuBar->actions().at(1)->setText("打开"); return; } myserial->close(); myserial->setPortName(portui.comboBox->currentText()); qDebug("%s",portui.comboBox->currentText().toUtf8().data()); myserial->setBaudRate(portui.comboBox_2->currentText().toInt(), QSerialPort::AllDirections); qDebug("%s", portui.comboBox_2->currentText().toUtf8().data()); qDebug("%s", portui.comboBox_3->currentText().toUtf8().data()); qDebug("%s", portui.comboBox_4->currentText().toUtf8().data()); qDebug("%s", portui.comboBox_5->currentText().toUtf8().data()); switch (portui.comboBox_3->currentIndex()) { case 0: myserial->setDataBits(QSerialPort::Data7); break; case 1: default: myserial->setDataBits(QSerialPort::Data8); break; } switch (portui.comboBox_4->currentIndex()) { case 1: myserial->setStopBits(QSerialPort::TwoStop); break; case 0: default: myserial->setStopBits(QSerialPort::OneStop); break; } switch (portui.comboBox_5->currentIndex()) { case 1: myserial->setParity(QSerialPort::OddParity); break; case 2: myserial->setParity(QSerialPort::EvenParity); break; case 0: default: myserial->setParity(QSerialPort::NoParity); break; } if (myserial->open(QIODevice::ReadWrite)==FALSE) { qDebug("open error"); textEdit_append("串口打开错误!\r\n"); } else { //ui.menuBar->activeAction()->setIconText("xx"); //ui.menuBar->actions().at(1)->setText(QString::fromLocal8Bit("关闭")); ui.menuBar->actions().at(1)->setText("关闭"); } sendflag=1; } void Line::on_openfile() { QString fileName = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("选择文件"), "D:\\", tr("*.bin")); int n; if (!fileName.isEmpty()) { QFile qfile(fileName); fileName.toUtf8(); //qDebug("%s", fileName.toUtf8()); if (!qfile.open(QIODevice::ReadOnly)) { return; } s.clear(); s=qfile.readAll(); // ui.textEdit->clear(); //QDataStream in(&qfile); //in.setVersion(QDataStream::Qt_5_7); //in.device()->seek(0); //in >> s; qfile.close(); ui.FileNameEdit->setText(fileName); //ui.textEdit->append(QString::fromLocal8Bit("打开文件:")); //ui.textEdit->append(fileName); // ui.textEdit->append(QString::fromLocal8Bit("成功:")); down = 0; //qDebug("%d", n); //QDebug<=0x11 && command.at(0)<=0x1F) { int crc; QString str; send_buf.clear(); send_buf.append(command.at(0)); send_buf.append(command.at(1)); send_buf.append(2); // str.prepend(command.toHex()); // qDebug(str.toLatin1()); switch(command.at(0)) { case 0x11: send_buf.append(ui.OilUnloadOpen_1->isChecked()); send_buf.append(ui.OilUnloadHave_1->isChecked()); break; case 0x12: send_buf.append(ui.OilUnloadOpen_2->isChecked()); send_buf.append(ui.OilUnloadHave_2->isChecked()); break; case 0x13: send_buf.append(ui.OilUnloadOpen_3->isChecked()); send_buf.append(ui.OilUnloadHave_3->isChecked()); break; case 0x14: send_buf.append(ui.OilUnloadOpen_4->isChecked()); send_buf.append(ui.OilUnloadHave_4->isChecked()); break; case 0x15: send_buf.append(ui.OilUnloadOpen_5->isChecked()); send_buf.append(ui.OilUnloadHave_5->isChecked()); break; case 0x16: send_buf.append(ui.OilUnloadOpen_6->isChecked()); send_buf.append(ui.OilUnloadHave_6->isChecked()); break; case 0x17: send_buf.append(ui.OilUnloadOpen_7->isChecked()); send_buf.append(ui.OilUnloadHave_7->isChecked()); break; case 0x18: send_buf.append(ui.OilUnloadOpen_8->isChecked()); send_buf.append(ui.OilUnloadHave_8->isChecked()); break; default: break; } crc=calcrc((const unsigned char*)send_buf.data(),send_buf.length()); send_buf.append((crc>>8)&0xff); send_buf.append(crc&0xff); myserial->write(send_buf); //str.prepend(send_buf.toHex()); // qDebug(str.toLatin1()); } } void Line::Simulation_AngleSend(QByteArray command) { QByteArray send_buf; if(command.at(0)>=0x30 && command.at(0)<=0x3F) { int crc; QString str; unsigned int f_angle; send_buf.clear(); send_buf.append(command.at(0)); send_buf.append(command.at(1)); send_buf.append(4); switch(command.at(0)) { case 0x30: f_angle = ui.BaseAngle->text().toUInt(); break; case 0x31: f_angle = ui.Angle_1->text().toUInt(); break; case 0x32: f_angle = ui.Angle_2->text().toUInt(); break; case 0x33: f_angle = ui.Angle_3->text().toUInt(); break; case 0x34: f_angle = ui.Angle_4->text().toUInt(); break; case 0x35: f_angle = ui.Angle_5->text().toUInt(); break; case 0x36: f_angle = ui.Angle_6->text().toUInt(); break; case 0x37: f_angle = ui.Angle_7->text().toUInt(); break; case 0x38: f_angle = ui.Angle_8->text().toUInt(); break; default: break; } send_buf.append(f_angle&0xff); send_buf.append((f_angle>>8)&0xff); send_buf.append((f_angle>>16)&0xff); send_buf.append((f_angle>>24)&0xff); crc=calcrc((const unsigned char*)send_buf.data(),send_buf.length()); send_buf.append((crc>>8)&0xff); send_buf.append(crc&0xff); myserial->write(send_buf); } } #define ONE_PACKET 512 //256 void Line::Receive_Data() { int i; unsigned int int_val; float f_val; char *p_f; //QString str; QByteArray tt; QString send_buf; unsigned char message_type=0; QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); char buf[16]; static char recv_buffer[512]; static int recv_datalen = 0; if(myserial && myserial->isOpen()) { tt = myserial->readAll(); q = q+tt; if(tt.isEmpty()) { } else { if( timer_id_searil != 0) { killTimer(timer_id_searil); } timer_id_searil = startTimer(50); return; } //qDebug("avans received: %x", str2)); } { if(recv_datalen == 0) { if(q.isEmpty()) { return; } if((q.at(0)==0x39) && (q.at(1)==0x01)) //远程标定 { memcpy(recv_buffer+recv_datalen, q.data(), q.length()); recv_datalen += q.length(); qDebug("avans 111 received: %d", q.length()); if(recv_datalen >= 64){ q.clear(); QByteArray q1(recv_buffer, 64); q.append(q1); recv_datalen=0; }else{ q.clear(); return; } } }else{ memcpy(recv_buffer+recv_datalen, q.data(), q.length()); recv_datalen += q.length(); qDebug("avans 222 received: %d", q.length()); if(recv_datalen >= 64){ q.clear(); QByteArray q1(recv_buffer, 64); q.append(q1); recv_datalen=0; }else{ q.clear(); return; } } } if (q.count()) { #if 0 if(q.count()<2 || q.at(q.count()-1)!=0x0a || q.at(q.count()-2)!=0x0d) { if(q.count()>=8) { if(q.at(0)>=0x11 && q.at(0)<=0x1F && q.at(1)==0x03) { Simulation_OilUnloadSend(q); q.clear(); } else if(q.at(0)>=0x30 && q.at(0)<=0x3F && q.at(1)==0x03) { Simulation_AngleSend(q); q.clear(); } if(q.size()>200) q.clear(); } return; } #endif //str = QString::fromUtf8("RX: "); QDateTime current_date_time = QDateTime::currentDateTime(); QString str = current_date_time.toString("yyyy-MM-dd hh:mm:ss.zzz "); str.append("RX : "); #if 0 for (i = 0; i < q.count(); ++i) { int_val = q.at(i); int_val &= 0xff; keyvalue[i] = int_val; /*if (i && (i % 32 == 0)) * { sprintf(buf, "\n%c", int_val); } else*/ { sprintf(buf, "%c", int_val); } str.append(buf); } recvflag = q.count(); #else str.append(q.toHex().toUpper()); #endif // QByteArray m_array = str.toLatin1().data(); // str = QString::fromLocal8Bit(m_array); ui.textEdit->append(str); //qDebug("111 %d , %d, %d ", q.count(), q.length(), q.size()); if(q.at(0)==':') { uint32_t regName; uint32_t regNum; uint8_t q8,q9; QDateTime q_datetime; QDate q_date; QTime q_time; q=q.remove(0,1); q=q.fromHex(q); if(q.length()>10) { if((q.at(0)==0x39) && (q.at(1)==0x01)) //远程标定 { if(((unsigned char)q.at(2)==0x95) && (q.at(3)==0x50)) // { message_type = 1; //采集器 } else { message_type = 2; //控制器 } } q8 = q.at(8); q9 = q.at(9); regName = (unsigned int)q8*256+(unsigned int)q9; } else { regName=0; } if(message_type==2) switch(regName) { case 0x00A4: tt.clear(); tt.append(q.at(16)); ui.StoreNum->setText(QString(tt.toHex())); tt.clear(); tt.append(q.at(17)); ui.ManHoleCoverNum->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.ManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(20)); ui.BottonValveNum->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(19)); ui.OilUnloadingValveNum->setText(QString(tt.toHex(q.at(19)))); break; case 0x01cc: q_date.setDate(2000+q.at(16),q.at(17),q.at(18)); q_datetime.setDate(q_date); q_time.setHMS(q.at(19),q.at(20),q.at(21)); q_datetime.setTime(q_time); ui.controldateTime->setDateTime(q_datetime); break; case 0x0024: int_val = (unsigned char)q.at(16); int_val = int_val*256+(unsigned char)q.at(17); ui.AutoSealTime->setText(QString::number(int_val)); break; case 0x4000: if(q.at(16)&0x80) { ui.Level->setCheckState(Qt::CheckState::Checked); } else { ui.Level->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x40) { ui.Pressure->setCheckState(Qt::CheckState::Checked); } else { ui.Pressure->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x20) { ui.PoweroffSave->setCheckState(Qt::CheckState::Checked); } else { ui.PoweroffSave->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x10) { ui.DoubleOil->setCheckState(Qt::CheckState::Checked); } else { ui.DoubleOil->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x8) { ui.ReSeal->setCheckState(Qt::CheckState::Checked); } else { ui.ReSeal->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x4) { ui.lcd5->setCheckState(Qt::CheckState::Checked); } else { ui.lcd5->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x2) { ui.Reserved->setCheckState(Qt::CheckState::Checked); } else { ui.Reserved->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x1) { ui.AutoSeal->setCheckState(Qt::CheckState::Checked); } else { ui.AutoSeal->setCheckState(Qt::CheckState::Unchecked); } break; case 0x00E4: p_f = (char *)&f_val; for(i=0;i<4;++i) { p_f[i] = q.at(19-i); } ui.CoefExp1->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(23-i); } ui.CoefExp2->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(27-i); } ui.CoefExp3->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(31-i); } ui.CoefExp4->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(35-i); } ui.CoefExp5->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(39-i); } ui.CoefExp6->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(43-i); } ui.CoefExp7->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(47-i); } ui.CoefExp8->setText(QString::number(f_val)); break; case 0x0220: p_f = (char *)&int_val; send_buf.clear(); for(int j=0;j<8;++j) { for(i=0;i<4;++i) { p_f[i] = q.at(19+j*4-i); } send_buf += QString("%1.").arg(int_val); } ui.ControlSoftVersion->setText(send_buf); break; case 0x318: p_f = (char *)&f_val; for(i=0;i<4;++i) { p_f[i] = q.at(19-i); } ui.Uart1_TimeOut->setText(QString::number(f_val)); break; case 0x31c: if(q.at(16)) { ui.TankCapicity->setCheckState(Qt::CheckState::Checked); } else { ui.TankCapicity->setCheckState(Qt::CheckState::Unchecked); } break; case 0x7A4: if(q.at(16)) { ui.EnableBlankSeal->setCheckState(Qt::CheckState::Checked); } else { ui.EnableBlankSeal->setCheckState(Qt::CheckState::Unchecked); } break; default: break; } if(message_type==1) { switch(regName) { case 0x0072: int_val=0; p_f = (char *)&int_val; for(i=0;i<2;++i) { p_f[i] = q.at(17-i); } ui.CJManHoleCoverThreshold->setText(QString::number(int_val)); break; case 0x0074: tt.clear(); tt.append(q.at(16)); ui.CJStoreNum->setText(QString(tt.toHex())); tt.clear(); tt.append(q.at(17)); ui.CJManHoleCoverNum->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(20)); ui.CJBottonValveNum->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(19)); ui.CJOilUnloadingValveNum->setText(QString(tt.toHex(q.at(19)))); break; case 0x0075: ui.CJManHoleCoverType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJManHoleCoverNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJManHoleCoverNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJManHoleCoverNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJManHoleCoverNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJManHoleCoverNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJManHoleCoverNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJManHoleCoverNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJManHoleCoverNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0076: ui.OilUnloadType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJOilUnloadingValveNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJOilUnloadingValveNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJOilUnloadingValveNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJOilUnloadingValveNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJOilUnloadingValveNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJOilUnloadingValveNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJOilUnloadingValveNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJOilUnloadingValveNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0077: ui.CJBottonValveType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJBottomValveNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJBottomValveNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJBottomValveNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJBottomValveNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJBottomValveNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJBottomValveNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJBottomValveNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJBottomValveNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0078: ui.CJLevelType->setCurrentIndex(q.at(17)); break; case 0x0079: ui.CJAttitudeType->setCurrentIndex(q.at(17)); break; case 0x007A: ui.CJTemperatureType->setCurrentIndex(q.at(16)); break; case 0x017e: tt.clear(); int_val = q.at(20)*256+q.at(21); if(int_val+22>q.size()) { int_val = q.size()-22; } for(i=0;isetText(QString(tt.toHex())); break; case 0x0190: if(q.size()>19) { ((char *)&f_val)[0] = q.at(19); ((char *)&f_val)[1] = q.at(18); ((char *)&f_val)[2] = q.at(17); ((char *)&f_val)[3] = q.at(16); ui.CJLevelZero_1->setText(QString("%1").arg(f_val)); } if(q.size()>23) { ((char *)&f_val)[0] = q.at(23); ((char *)&f_val)[1] = q.at(22); ((char *)&f_val)[2] = q.at(21); ((char *)&f_val)[3] = q.at(20); ui.CJLevelZero_2->setText(QString("%1").arg(f_val)); } if(q.size()>27) { ((char *)&f_val)[0] = q.at(27); ((char *)&f_val)[1] = q.at(26); ((char *)&f_val)[2] = q.at(25); ((char *)&f_val)[3] = q.at(24); ui.CJLevelZero_3->setText(QString("%1").arg(f_val)); } if(q.size()>31) { ((char *)&f_val)[0] = q.at(31); ((char *)&f_val)[1] = q.at(30); ((char *)&f_val)[2] = q.at(29); ((char *)&f_val)[3] = q.at(28); ui.CJLevelZero_4->setText(QString("%1").arg(f_val)); } break; default: break; } } } else { QString m_String(q); if(m_String.contains(QString("file="))==true) { QString m_packet=m_String.section(QString("file="),1); qDebug("%s",m_packet.data()); packetno=m_packet.toInt(); down=2; sendflag=1; if((s.size()/ONE_PACKET)clear(); ui.textEdit->append("file down load ok"); } // xmodemTransmit((unsigned char*)s.data(), s.length()); } else if(m_String.contains(QString("acknowlege"))==true) { QString m_packet=m_String.section(QString("acknowlege="),1); //qDebug("%s",m_packet.data()); if(ui.textEdit->toPlainText().size()>4096) ui.textEdit->clear(); packetno=m_packet.toInt(); if((s.size()/ONE_PACKET)clear(); ui.textEdit->append("file down load ok"); } else sendflag=1; // xmodemTransmit((unsigned char*)s.data(), s.length()); }else{ qDebug("enter avnas:"); uint32_t regName; uint32_t regNum; uint8_t q8,q9; QDateTime q_datetime; QDate q_date; QTime q_time; //qDebug("enter avnas111:q.length = %d", q.length()); //q=q.fromHex(q); qDebug("enter avnas:q.length = %d", q.length()); if(q.length()>10) { qDebug("enter avnas111: q[0] = %x q[1] = %x", q.at(0), q.at(1)); if((q.at(0)==0x39) && (q.at(1)==0x01)) //远程标定 { qDebug("enter avnas111:"); if(((unsigned char)q.at(2)==0x95) && (q.at(3)==0x50)) // { message_type = 1; //采集器 } else { message_type = 2; //控制器 } } q8 = q.at(8); q9 = q.at(9); regName = (unsigned int)q8*256+(unsigned int)q9; } else { regName=0; } if(message_type==2) switch(regName) { case 0x00A4: tt.clear(); tt.append(q.at(16)); ui.StoreNum->setText(QString(tt.toHex())); tt.clear(); tt.append(q.at(17)); ui.ManHoleCoverNum->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.ManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(20)); ui.BottonValveNum->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(19)); ui.OilUnloadingValveNum->setText(QString(tt.toHex(q.at(19)))); break; case 0x01cc: q_date.setDate(2000+q.at(16),q.at(17),q.at(18)); q_datetime.setDate(q_date); q_time.setHMS(q.at(19),q.at(20),q.at(21)); q_datetime.setTime(q_time); ui.controldateTime->setDateTime(q_datetime); break; case 0x0024: int_val = (unsigned char)q.at(16); int_val = int_val*256+(unsigned char)q.at(17); ui.AutoSealTime->setText(QString::number(int_val)); break; case 0x4000: if(q.at(16)&0x80) { ui.Level->setCheckState(Qt::CheckState::Checked); } else { ui.Level->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x40) { ui.Pressure->setCheckState(Qt::CheckState::Checked); } else { ui.Pressure->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x20) { ui.PoweroffSave->setCheckState(Qt::CheckState::Checked); } else { ui.PoweroffSave->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x10) { ui.DoubleOil->setCheckState(Qt::CheckState::Checked); } else { ui.DoubleOil->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x8) { ui.ReSeal->setCheckState(Qt::CheckState::Checked); } else { ui.ReSeal->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x4) { ui.lcd5->setCheckState(Qt::CheckState::Checked); } else { ui.lcd5->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x2) { ui.Reserved->setCheckState(Qt::CheckState::Checked); } else { ui.Reserved->setCheckState(Qt::CheckState::Unchecked); } if(q.at(16)&0x1) { ui.AutoSeal->setCheckState(Qt::CheckState::Checked); } else { ui.AutoSeal->setCheckState(Qt::CheckState::Unchecked); } break; case 0x00E4: p_f = (char *)&f_val; for(i=0;i<4;++i) { p_f[i] = q.at(19-i); } ui.CoefExp1->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(23-i); } ui.CoefExp2->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(27-i); } ui.CoefExp3->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(31-i); } ui.CoefExp4->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(35-i); } ui.CoefExp5->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(39-i); } ui.CoefExp6->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(43-i); } ui.CoefExp7->setText(QString::number(f_val)); for(i=0;i<4;++i) { p_f[i] = q.at(47-i); } ui.CoefExp8->setText(QString::number(f_val)); break; case 0x0220: p_f = (char *)&int_val; send_buf.clear(); for(int j=0;j<8;++j) { for(i=0;i<4;++i) { p_f[i] = q.at(19+j*4-i); } send_buf += QString("%1.").arg(int_val); } ui.ControlSoftVersion->setText(send_buf); break; case 0x318: p_f = (char *)&f_val; for(i=0;i<4;++i) { p_f[i] = q.at(19-i); } ui.Uart1_TimeOut->setText(QString::number(f_val)); break; case 0x31c: if(q.at(16)) { ui.TankCapicity->setCheckState(Qt::CheckState::Checked); } else { ui.TankCapicity->setCheckState(Qt::CheckState::Unchecked); } break; case 0x7A4: if(q.at(16)) { ui.EnableBlankSeal->setCheckState(Qt::CheckState::Checked); } else { ui.EnableBlankSeal->setCheckState(Qt::CheckState::Unchecked); } break; default: break; } if(message_type==1) { qDebug("enter avnas: collector "); switch(regName) { case 0x0220: { p_f = (char *)&int_val; send_buf.clear(); send_buf += "V"; for(int j=0;j<8;++j) { for(i=0;i<4;++i) { p_f[i] = q.at(19+j*4-i); } //int_val = ntohl(int_val); send_buf += QString("%1.").arg(int_val); } //ui.ControlSoftVersion->setText(send_buf); ui.CJlabel_version->setText(send_buf); } break; case 0x0072: int_val=0; p_f = (char *)&int_val; for(i=0;i<2;++i) { p_f[i] = q.at(17-i); } ui.CJManHoleCoverThreshold->setText(QString::number(int_val)); break; case 0x0074: tt.clear(); tt.append(q.at(16)); ui.CJStoreNum->setText(QString(tt.toHex())); tt.clear(); tt.append(q.at(17)); ui.CJManHoleCoverNum->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(20)); ui.CJBottonValveNum->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(19)); ui.CJOilUnloadingValveNum->setText(QString(tt.toHex(q.at(19)))); break; case 0x0075: ui.CJManHoleCoverType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJManHoleCoverNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJManHoleCoverNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJManHoleCoverNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJManHoleCoverNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJManHoleCoverNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJManHoleCoverNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJManHoleCoverNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJManHoleCoverNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0076: ui.OilUnloadType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJOilUnloadingValveNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJOilUnloadingValveNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJOilUnloadingValveNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJOilUnloadingValveNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJOilUnloadingValveNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJOilUnloadingValveNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJOilUnloadingValveNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJOilUnloadingValveNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0077: ui.CJBottonValveType->setCurrentIndex(q.at(16)); tt.clear(); tt.append(q.at(17)); ui.CJBottomValveNum_1->setText(QString(tt.toHex(q.at(17)))); tt.clear(); tt.append(q.at(18)); ui.CJBottomValveNum_2->setText(QString(tt.toHex(q.at(18)))); tt.clear(); tt.append(q.at(19)); ui.CJBottomValveNum_3->setText(QString(tt.toHex(q.at(19)))); tt.clear(); tt.append(q.at(20)); ui.CJBottomValveNum_4->setText(QString(tt.toHex(q.at(20)))); tt.clear(); tt.append(q.at(21)); ui.CJBottomValveNum_5->setText(QString(tt.toHex(q.at(21)))); tt.clear(); tt.append(q.at(22)); ui.CJBottomValveNum_6->setText(QString(tt.toHex(q.at(22)))); tt.clear(); tt.append(q.at(23)); ui.CJBottomValveNum_7->setText(QString(tt.toHex(q.at(23)))); tt.clear(); tt.append(q.at(24)); ui.CJBottomValveNum_8->setText(QString(tt.toHex(q.at(24)))); break; case 0x0078: ui.CJLevelType->setCurrentIndex(q.at(17)); break; case 0x0079: ui.CJAttitudeType->setCurrentIndex(q.at(17)); break; case 0x007A: ui.CJTemperatureType->setCurrentIndex(q.at(16)); break; case 0x017e: tt.clear(); int_val = q.at(20)*256+q.at(21); if(int_val+22>q.size()) { int_val = q.size()-22; } for(i=0;isetText(QString(tt.toHex())); break; case 0x0190: if(q.size()>19) { ((char *)&f_val)[0] = q.at(19); ((char *)&f_val)[1] = q.at(18); ((char *)&f_val)[2] = q.at(17); ((char *)&f_val)[3] = q.at(16); ui.CJLevelZero_1->setText(QString("%1").arg(f_val)); } if(q.size()>23) { ((char *)&f_val)[0] = q.at(23); ((char *)&f_val)[1] = q.at(22); ((char *)&f_val)[2] = q.at(21); ((char *)&f_val)[3] = q.at(20); ui.CJLevelZero_2->setText(QString("%1").arg(f_val)); } if(q.size()>27) { ((char *)&f_val)[0] = q.at(27); ((char *)&f_val)[1] = q.at(26); ((char *)&f_val)[2] = q.at(25); ((char *)&f_val)[3] = q.at(24); ui.CJLevelZero_3->setText(QString("%1").arg(f_val)); } if(q.size()>31) { ((char *)&f_val)[0] = q.at(31); ((char *)&f_val)[1] = q.at(30); ((char *)&f_val)[2] = q.at(29); ((char *)&f_val)[3] = q.at(28); ui.CJLevelZero_4->setText(QString("%1").arg(f_val)); } break; default: break; } } } //qDebug("%s",m_String.data()); } //qDebug("%s",q.data()); q.clear(); } } void Line::downfile() { if (!myserial->isOpen()) { return; } if (s.length() == 0) return; /*myserial->close(); myserial->setPortName(portui.comboBox->currentText()); myserial->setBaudRate(115200, QSerialPort::AllDirections); myserial->setDataBits(QSerialPort::Data8); myserial->setParity(QSerialPort::NoParity); myserial->setStopBits(QSerialPort::OneStop); if (myserial->open(QIODevice::ReadWrite) == FALSE) qDebug("open error"); else*/ { connect(myserial,SIGNAL(readyRead()),this,SLOT(Receive_Data())); killTimer(timerid); timerid = startTimer(300); sendflag=1; down = 1; len = 0; retry = 0; packetno = 1; } } void Line::StopUpGrade() { down=0; killTimer(timerid); timerid = startTimer(1000); } void Line::down_file() { //xmodemTransmit((unsigned char*)s.data(), s.length()); // timerid = startTimer(100); } void Line::portclose() { if (myserial) myserial->close(); } void Line::portclick() { QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\"; QSettings * settings = new QSettings(path, QSettings::NativeFormat); QStringList key = settings->allKeys(); int num = (int)key.size(); QString value; int j; j = portui.comboBox->currentIndex(); portui.comboBox->clear(); for (int i = 0; icount(); ++j) //{ // if (portui.comboBox->itemText(j)==value) // { // break; // } //} //if(j==portui.comboBox->count()) portui.comboBox->addItem(value); } if (j >= portui.comboBox->count() || j<0) j = 0; portui.comboBox->setCurrentIndex(j); portdialog->show(); } QString Line::getcomm(int index, QString keyorvalue) { QString commresult; //int indexnum,keysize,valuesize; if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0) { QString error = "Cannotopenregedit!";//无法打开注册表时返回error return error; }//if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0) QString keymessage;//键名 QString message; QString valuemessage;//键值 indexnum = index;//要读取键值的索引号 keysize = sizeof(keyname); valuesize = sizeof(keyvalue); if (::RegEnumValue(hKey, indexnum, keyname, (LPDWORD)&keysize, 0, &type, (BYTE*)keyvalue, &valuesize) == 0)//列举键名和值 { for (DWORD i = 0; i>8)&0xff); send_buf.append(0xA5); send_buf.append(0x5A); send_buf.append(0x55); send_buf.append(0xAA); myserial->write(send_buf); // qDebug("%s",send_buf.toHex().data()); } int Line::in_buff(unsigned char *buff, int time_out) { int arg = 0; int qSize = 0; int readSize = 0; last_error = 0; #if 0 sysXmodemUartArg.timeout = time_out; if (RETURN_RESULT_ERROR_NOERR == ctrlSysUart(uart, DEVICE_CONTROL_WAIT_EVENT, (UART_ARG)(&sysXmodemUartArg))) { qSize = uart->recvDQ.q.curSize; if (qSize > 0) { readSize = readSysUart(uart, buff, qSize, &arg); } } #else //QByteArray q; //int retry=0; //do //{ // q=myserial->readAll(); // if (q.length()) // { // memcpy(buff, q.data(), q.length()); // readSize = q.length(); // break; // } readSize = myserial->read((char*)buff, 140); //if (readSize > 0) // break; // Sleep(100); //} while (++retry < time_out); #endif if (readSize == 0) last_error = 1; return (readSize); } void InvertUint8(unsigned char *dBuf, unsigned char *srcBuf) { int i; unsigned char tmp[4]; tmp[0] = 0; for(i = 0; i < 8; i++) { if(srcBuf[0] & (1 << i)) tmp[0] |= 1 << (7 - i); } dBuf[0] = tmp[0]; } void InvertUint16(unsigned short *dBuf, unsigned short *srcBuf) { int i; unsigned short tmp[4]; tmp[0] = 0; for (i = 0; i < 16; i++) { if(srcBuf[0] & (1 << i)) tmp[0] |= 1 << (15 - i); } dBuf[0] = tmp[0]; } unsigned short CRC16_MODBUS(unsigned char *puchMsg, unsigned int usDataLen) { int i; unsigned short temp; unsigned short temp1; unsigned short wCRCin = 0xFFFF; unsigned short wCPoly = 0x8005; unsigned char wChar = 0; while(usDataLen--) { wChar = *(puchMsg++); InvertUint8(&wChar, &wChar); wCRCin ^= (wChar << 8); for(i = 0; i < 8; i++) { if(wCRCin & 0x8000) wCRCin = (wCRCin << 1)^wCPoly; else wCRCin = wCRCin << 1; } } InvertUint16(&wCRCin, &wCRCin); temp1=wCRCin>>8&0x00ff; temp=(temp1)+(wCRCin<<8); return(temp); } int Line::calcrc(const unsigned char *ptr, int count) { unsigned short crc; crc=CRC16_MODBUS((unsigned char *)ptr,count); return (crc); } int Line::check(int crc, const unsigned char *buf, int sz) { if (crc) { unsigned short crc = calcrc(buf, sz); unsigned short tcrc = (buf[sz] << 8) + buf[sz + 1]; if (crc == tcrc) return 1; } else { int i = 0; unsigned char cks = 0; for (i = 0; i < sz; i++) { cks += buf[i]; } if (cks == buf[sz]) return 1; } return 0; } //send_buff_size == 140 int Line::xmodemTransmit(unsigned char *src, int srcsz) { unsigned char xbuff[1024]; int bufsz = 0; //unsigned char packetno = 1; int i = 0; int c = 0; QString out_mess; //int len = 0; //int retry = 0; // for (;;) { // for (retry = 0; retry < 16; ++retry) if(down==1) { QByteArray ba = QCryptographicHash::hash(s, QCryptographicHash::Md5); xbuff[0] = SOH; //YmodemID xbuff[1] = 0; xbuff[2] = 1; //packIndex xbuff[3] = (s.size()/ONE_PACKET) >> 8; xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum out_mess = ui.FileNameEdit->text().section('/',-1); memset(xbuff+5,0,128); memcpy(xbuff+5,out_mess.toLatin1().data(),out_mess.size()); xbuff[69]=s.size()>>24; xbuff[70]=s.size()>>16; xbuff[71]=s.size()>>8; xbuff[72]=s.size(); memcpy(xbuff+73,ba.data(),16); out_buff(xbuff,133); retry++; if (retry>10) { out_mess = QString::fromLocal8Bit("超时,退出文件传输"); down=0; return -2; } } else if(down==2) { start_trans: xbuff[0] = 2; //YmodemID xbuff[1] = (packetno+1)/256; xbuff[2] = (packetno+1)&0xff; //packIndex xbuff[3] = (s.size()/ONE_PACKET) >> 8; xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum if(s.size()<(packetno+1)*ONE_PACKET) bufsz=s.size()-(packetno)*ONE_PACKET; else bufsz=ONE_PACKET; memcpy(xbuff+5,src+packetno*ONE_PACKET,bufsz); out_buff(xbuff,5+bufsz); } else if(down==3) { down=0; sendflag = 0; out_mess = QString::fromLocal8Bit("文件传输完成,等待重启完成升级工作"); ui.textEdit->append(out_mess); xbuff[0] = 3; //YmodemID xbuff[1] = 0; xbuff[2] = 1; //packIndex xbuff[3] = (s.size()/ONE_PACKET) >> 8; xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum out_mess = ui.FileNameEdit->text().section('/',-1); memset(xbuff+5,0,128); memcpy(xbuff+5,out_mess.toLatin1().data(),out_mess.size()); xbuff[69]=s.size()>>24; xbuff[70]=s.size()>>16; xbuff[71]=s.size()>>8; xbuff[72]=s.size(); out_buff(xbuff,133); } } } void Line::on_pushButton_clicked() { ui.textEdit->clear(); } void Line::on_pushButton_2_clicked() { //ui.file_name_Edit QString fileName = QFileDialog::getOpenFileName(this, tr("选择文件"), "D:\\", tr("*.bin")); //int n; if (!fileName.isEmpty()) { ui.file_name_Edit->setText(fileName); } } void Line::on_pushButton_md5_clicked() { QString fileName = ui.file_name_Edit->text(); file_md5(fileName); textEdit_append("文件转换完成\r\n"); } void Line::on_pushButton_decode_clicked() { QString in_frame = ui.textEdit_frame->toPlainText(); QString out_frame; //in_frame.trimmed(); in_frame.replace("0X", ""); in_frame.replace("0x", ""); in_frame.replace("\t", ""); in_frame.replace("\n", ""); in_frame.replace(" ", ""); out_frame.append("\r\n转换原始数据:\r\n"); out_frame.append(in_frame); frame_decode_recognize(in_frame,&out_frame); textEdit_append(out_frame); } void Line::on_pushButton_A2HEX_clicked() { QString in_frame = ui.textEdit_frame->toPlainText(); QString out_frame; in_frame.replace("0X", ""); in_frame.replace("0x", ""); in_frame.replace("\t", ""); in_frame.replace("\n", ""); in_frame.replace(" ", ""); out_frame.append("\r\n转换原始数据:\r\n"); out_frame.append(in_frame); frame_to_ascii(in_frame,&out_frame); textEdit_append(out_frame); }