#include "mainwindow.h" #include "ui_mainwindow.h" #include "dialogsetport.h" #include #include #include #include #include #include #include #include #include //单次读取 void MainWindow::on_pushButton_readonce_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; int addr =ui->spinBox_addr->text().toInt(&ok,10); b[0]=addr; //485地址 b[1]=0x03; //功能位 b[2]=0x00; b[3]=0x01; //寄存器起始地址 b[4]=0x00; b[5]=13; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { time3->stop(); ui->checkBox->setChecked(false); QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } //自动读取 void MainWindow::on_checkBox_clicked(bool checked) { if(checked == true) { if(time2->isActive() == true) { QMessageBox::information(this,"","通道被占用"); return; } time3->setInterval(ui->spinBox_timer_2->text().toInt()); time3->start(); } else { time3->stop(); } } //清除发送接收缓冲区 void MainWindow::on_pushButton_clear2_clicked() { ui->textEdit_RxTx->clear(); } void MainWindow::dataTreating(QByteArray array) { uint8_t *b = (uint8_t*)array.data(); QString string; int16_t data[13]; for(int i =0;i %1").arg(str1); ui->textEdit_RxTx->append(str1); uint8_t cnt =0; if(b[cnt++] <= 255 && b[cnt++] == 0x03 && b[cnt++] == 26) { for(uint8_t i =0;i<13;i++,cnt+=2) { data[i] = b[cnt]<<8 | b[cnt+1]; } cnt =0; ui->lineEdit_r2->setText(QString::number(data[cnt++],10)); //传感器数据 // ui->lineEdit_r3->setText(QString::number(data[cnt++],10)); //投退状态 uint16_t temp = data[cnt++]; ui->lineEdit_r3->setStyleSheet("QLineEdit { color: black; }"); if(temp ==0) { ui->lineEdit_r3->setText("退"); } else if(temp ==1) { ui->lineEdit_r3->setText("投"); } else if(temp ==2) { ui->lineEdit_r3->setStyleSheet("QLineEdit { color: red; }"); ui->lineEdit_r3->setText("异常"); } // ui->lineEdit_r4->setText(QString::number(data[cnt++,10)); //电机状态 temp = data[cnt++]; if(temp ==0) { ui->lineEdit_r4->setStyleSheet("QLineEdit { color: black; }"); ui->lineEdit_r4->setText("正常"); } if(temp ==1) { ui->lineEdit_r4->setStyleSheet("QLineEdit { color: red; }"); ui->lineEdit_r4->setText("异常"); } ui->lineEdit_r5->setText(QString::number(data[cnt++],10)); //占空比 ui->lineEdit_r6->setText(QString::number(data[cnt++],10)); //缩放系数 ui->lineEdit_r7->setText(QString::number(data[cnt++],10)); //加减系数 ui->lineEdit_r8->setText(QString::number(data[cnt++],10)); //电机运行时间 ui->lineEdit_r9->setText(QString::number(data[cnt++],10)); //波特率 ui->lineEdit_r10->setText(QString::number(data[cnt]&0xFF,10));//温度 ui->lineEdit_r11->setText(QString::number(data[cnt++]>>8,10));//湿度 ui->lineEdit_r12->setText(QString::number(data[cnt++],10)); //方波判断阈值 ui->lineEdit_r13->setText(QString::number(data[cnt++],10)); //原始数据下限阈值 ui->lineEdit_r14->setText(QString::number(data[cnt++],10)); //电压读取校准 ui->lineEdit_r15->setText(QString::number(data[cnt++],10)); //电压下限阈值 //绘制曲线 *currentzAxis = QDateTime::currentDateTime(); QList list= chart2->axes(Qt::Horizontal); list[0]->setMin(currentzAxis->addSecs(Xmin2)); list[0]->setMax(currentzAxis->addSecs(Xmax2)); if(ui->checkBox_data->isChecked()) //数据 { lineSeries2[0]->append(currentzAxis->toMSecsSinceEpoch(),data[0]); } if(ui->checkBox_state->isChecked()) //投退状态 { lineSeries2[1]->append(currentzAxis->toMSecsSinceEpoch(),data[1]); } if(ui->checkBox_temp->isChecked()) { lineSeries2[2]->append(currentzAxis->toMSecsSinceEpoch(),data[8]&0xFF); } if(ui->checkBox_humi->isChecked()) { lineSeries2[3]->append(currentzAxis->toMSecsSinceEpoch(),data[8]>>8); } if(ui->checkBox_voltage->isChecked()) { lineSeries2[4]->append(currentzAxis->toMSecsSinceEpoch(),data[11]); } } } //设置占空比 void MainWindow::on_pushButton_setPWM_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; uint16_t data = ui->lineEdit_r5->text().toInt(&ok,10); b[0]=ui->spinBox_addr->text().toInt(&ok,10);//485地址 b[1]=0x06; //功能位 b[2]=0x00; b[3]=0x04; //寄存器地址 b[4]=data>>8; b[5]=data & 0x00FF; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } //设置方波阈值 void MainWindow::on_pushButton_estimate_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; uint16_t data = ui->lineEdit_r12->text().toInt(&ok,10); b[0]=ui->spinBox_addr->text().toInt(&ok,10);//485地址 b[1]=0x06; //功能位 b[2]=0x00; b[3]=0x0A; //寄存器地址 b[4]=data>>8; b[5]=data & 0x00FF; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } //传感器数据下限值 void MainWindow::on_pushButton_17_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; uint16_t data = ui->lineEdit_r13->text().toInt(&ok,10); b[0]=ui->spinBox_addr->text().toInt(&ok,10);//485地址 b[1]=0x06; //功能位 b[2]=0x00; b[3]=0x0B; //寄存器地址 b[4]=data>>8; b[5]=data & 0x00FF; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } //电压校准 void MainWindow::on_pushButton_18_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; uint16_t data = ui->lineEdit_r14->text().toInt(&ok,10); b[0]=ui->spinBox_addr->text().toInt(&ok,10);//485地址 b[1]=0x06; //功能位 b[2]=0x00; b[3]=0x0C; //寄存器地址 b[4]=data>>8; b[5]=data & 0x00FF; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } //设置电压阈值 void MainWindow::on_pushButton_20_clicked() { QString byte; uint16_t crcValue; uint8_t b[8]; bool ok; state = readAll; uint16_t data = ui->lineEdit_r15->text().toInt(&ok,10); b[0]=ui->spinBox_addr->text().toInt(&ok,10);//485地址 b[1]=0x06; //功能位 b[2]=0x00; b[3]=0x0D; //寄存器地址 b[4]=data>>8; b[5]=data & 0x00FF; //寄存器个数 crcValue= crc->crc16_modbus(b,6); b[6] = crcValue&0x00FF; b[7] =crcValue>>8; for(int i=0;i<8;i++) { byte.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper()); byte.append(" "); } if(port==NULL || !port->mSerialPort.isOpen()) { QMessageBox::information(this,"","串口未打开或不存在"); } else { QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" -->"+byte; QString str2 = QString(" %1").arg(str1); ui->textEdit_RxTx->append(str2); port->mSerialPort.write((const char*)(b),8); } } void MainWindow::on_pushButton_chartclear_clicked() { for(int i = 0;i<5;i++) { lineSeries2[i]->clear(); } } void MainWindow::on_pushButton_Ysmall_clicked() { if(Ymax2<200) { Ymin2 -= 20 ; Ymax2 += 20 ; } else { Ymin2 -= 200 ; Ymax2 += 200 ; } chart2->axes(Qt::Vertical).at(0)->setRange(Ymin2,Ymax2); } void MainWindow::on_pushButton_Ylargr_clicked() { if(Ymax2>=400) { Ymin2 += 200 ; Ymax2 -= 200 ; } else if(Ymax2>=40) { Ymin2 += 20 ; Ymax2 -= 20 ; } chart2->axes(Qt::Vertical).at(0)->setRange(Ymin2,Ymax2); } void MainWindow::on_pushButton_Xsmall_clicked() { Xmin2 = Xmin2*2; Xmax2 = Xmax2*2; QList list= chart2->axes(Qt::Horizontal); list[0]->setMin(currentzAxis->addSecs(Xmin2)); list[0]->setMax(currentzAxis->addSecs(Xmax2)); int a = axisX2->max().toSecsSinceEpoch()-axisX2->min().toSecsSinceEpoch(); axisX2->setTitleText(QString::asprintf("时间(分:秒) %ds/格",a/10)); } void MainWindow::on_pushButton_Xlargr_clicked() { if(Xmax2>2) { Xmin2 = Xmin2/2; Xmax2 = Xmax2/2; } QList list= chart2->axes(Qt::Horizontal); list[0]->setMin(currentzAxis->addSecs(Xmin2)); list[0]->setMax(currentzAxis->addSecs(Xmax2)); int a = axisX2->max().toSecsSinceEpoch()-axisX2->min().toSecsSinceEpoch(); axisX2->setTitleText(QString::asprintf("时间(分:秒) %ds/格",a/10)); }