458 lines
13 KiB
C++
458 lines
13 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include "dialogsetport.h"
|
|
#include <QMessageBox>
|
|
#include <QByteArray>
|
|
#include <QTimer>
|
|
#include <QGraphicsView>
|
|
#include <QGraphicsScene>
|
|
#include <QGraphicsItem>
|
|
#include <QChartView>
|
|
#include <QLineSeries>
|
|
#include <QtMath>
|
|
|
|
//单次读取
|
|
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("<span style='color: red;'> %1</span>").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<array.size();i++)
|
|
{
|
|
string.append(QString("%1").arg(b[i],2,16,QLatin1Char('0')).toUpper());
|
|
string.append(" ");
|
|
}
|
|
QString str1 = QDateTime::currentDateTime().toString("mm:ss")+" <--"+string;
|
|
QString str2 = QString("<span style='color: red;'> %1</span>").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<QAbstractAxis*> 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("<span style='color: red;'> %1</span>").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("<span style='color: red;'> %1</span>").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("<span style='color: red;'> %1</span>").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("<span style='color: red;'> %1</span>").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("<span style='color: red;'> %1</span>").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<QAbstractAxis*> 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<QAbstractAxis*> 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));
|
|
}
|
|
|
|
|