110VCGQ/485SWJ/CGQ485V2/CGQ485/table2.cpp
2024-11-18 10:09:39 +08:00

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));
}