DSCAnalysisTool/YT_TANGOUS_Release/mainwidget.cpp

241 lines
7.4 KiB
C++
Raw Normal View History

2025-03-06 07:25:37 +00:00
#include "mainwidget.h"
#include "plotwidget.h"
#include "ctlwidget.h"
#include "anawidget.h"
#include <QVBoxLayout>
#include <QComboBox>
#include <QtWidgets/QWidget>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QStackedLayout>
#include <QPushButton>
#include <QLabel>
#include <QTextEdit>
#include <QLineEdit>
#include <QGroupBox>
MainWidget::MainWidget(QWidget *parent) : QWidget(parent)
{
createUI();
}
MainWidget::~MainWidget()
{
}
void MainWidget::createUI()
{
m_customPlotWidget = new PlotWidget(this);
m_customRealWidget = new RealWidget(this);
m_stackLayout = new QStackedLayout();
m_stackLayout->addWidget(m_customPlotWidget);
m_stackLayout->addWidget(m_customRealWidget);
CtlWidget *ctlWidget = new CtlWidget(this);
///ctlWidget->setStyleSheet("background-color:rgba(50, 50, 50, 50)");
///anaWidget->setGeometry(200,200,800,800);
ctlWidget->resize(400, 400);
/*QTreeView *m_treeView = new QTreeView(this);
m_treeView->resize(400, 400);
QFileSystemModel *m_model=new QFileSystemModel(this);
// 设置根目录
m_model->setRootPath(QDir::currentPath());
// 设置过滤器,只过滤出.ana
QStringList filter;
filter << ".ana";
// 使用过滤器
m_model->setNameFilters(filter);
m_model->setNameFilterDisables(false);
// 设置数据模型
m_treeView->setModel(m_model);*/
AnaWidget *anaWidget = new AnaWidget(this);
///anaWidget->setStyleSheet("background-color:rgba(0, 0, 100, 100)");
///anaWidget->setGeometry(200,200,800,800);
anaWidget->resize(400, 400);
///anaWidget->hide();
QGridLayout *baseLayout = new QGridLayout();
baseLayout->addWidget(ctlWidget, 0, 0, 1, 5);
baseLayout->addWidget(anaWidget, 1, 0, 10, 1);
baseLayout->addLayout(m_stackLayout, 1, 1, 10, 1);
///baseLayout->addWidget(m_customPlotWidget, 1, 1, 10, 1 );
//列比 第0列与第1列1:7
baseLayout -> setColumnStretch(0, 1);
baseLayout -> setColumnStretch(1, 6);;
baseLayout -> setRowStretch(0, 1);
baseLayout -> setRowStretch(1, 8);
setLayout(baseLayout);
connect(ctlWidget->m_pushbutton, SIGNAL(clicked()), m_customPlotWidget, SLOT(replot_xlsx_data()));
connect(ctlWidget->m_pushbutton, SIGNAL(clicked()), ctlWidget, SLOT(disable_load_button()));
connect(m_customPlotWidget, SIGNAL(calcu_button_enable()), anaWidget, SLOT(enable_calcu_button()));
connect(anaWidget->m_realbutton, SIGNAL(clicked()), this, SLOT(showStackCPRealWidget()));
connect(anaWidget->m_anabutton, SIGNAL(clicked()), this, SLOT(showStackCPAnaWidget()));
connect(anaWidget->m_startbutton, SIGNAL(clicked()), m_customRealWidget, SLOT(start_plot_real_line()));
connect(anaWidget->m_stopbutton, SIGNAL(clicked()), m_customRealWidget, SLOT(stop_plot_real_line()));
///connect(ctlWidget->m_openbutton, SIGNAL(clicked()), SLOT(refresh_));
connect(anaWidget->m_calcubutton, SIGNAL(clicked()), m_customPlotWidget, SLOT(get_coordinate_calcu()));
connect(anaWidget->m_choosebutton, SIGNAL(clicked()), m_customPlotWidget, SLOT(show_line_cursor()));
connect(anaWidget->m_cancelbutton, SIGNAL(clicked()), m_customPlotWidget, SLOT(hide_line_cursor()));
connect(m_customPlotWidget, SIGNAL(show_area()), anaWidget, SLOT(show_area_edit()));
connect(m_customPlotWidget, SIGNAL(show_tang()), anaWidget, SLOT(show_tang_edit()));
}
void MainWidget::showStackCPRealWidget()
{
m_stackLayout->setCurrentIndex(1);
// uint16_t crcres = 0x1606;
// ///m_stackLayout->setCurrentIndex(0);
// QByteArray sendArray;
// sendArray.resize(9);
// sendArray[0] = 0x5A; //帧头
// sendArray[1] = 0xA5;
// sendArray[2] = 0x06; //数据总长度
// sendArray[3] = 0x83;
// sendArray[4] = 0x00;
// sendArray[5] = 0x28;
// sendArray[6] = 0x01;
// sendArray[7] = crcres>>8;
// sendArray[8] = crcres;
// unsigned char *objbuf = NULL;
// int lenbuf = sendArray.size();
// objbuf = (unsigned char*)std::malloc(lenbuf);
// std::memcpy(objbuf, (unsigned char*)sendArray.data(), lenbuf);
// for(int i=0; i<lenbuf; i++)
// {
// // if((objbuf[0]==0x5A)&&(objbuf[1]==0xA5))
// // qDebug()<<"16进制"<<QString("%1").arg(objbuf[i],0,16,QLatin1Char('0'));
// }
// free(objbuf);
// objbuf = NULL;
// unsigned char *crcdataBuf;
// crcdataBuf = (unsigned char*)std::malloc(7); //CRC校验
// ///std::memcpy(crcdataBuf, validBuf+3, (m_data_len+1));
// crcdataBuf[0] = 0x5A;
// crcdataBuf[1] = 0xA5;
// crcdataBuf[2] = 0x06;
// crcdataBuf[3] = 0x83;
// crcdataBuf[4] = 0x00;
// crcdataBuf[5] = 0x28;
// crcdataBuf[6] = 0x01;
// uint16_t res = CRC16_MODBUS(crcdataBuf, 7);
// /*// 转化
// QByteArray array;
// array.resize(sizeof(crcdataBuf));//重置数据大小
// int len = sizeof(crcdataBuf);
// array = QByteArray::fromRawData(reinterpret_cast<const char*>(crcdataBuf), len);
// ///std::memcpy((unsigned char*)array.data(), crcdataBuf, len);//复制数据
// uint16_t crcrec = ModbusCRC16(array); */ //转化数据错误导致计算错误
// QByteArray crcArray;
// crcArray.resize(7);
// crcArray[0] = 0x5A; //帧头
// crcArray[1] = 0xA5;
// crcArray[2] = 0x06; //数据总长度
// crcArray[3] = 0x83;
// crcArray[4] = 0x00;
// crcArray[5] = 0x28;
// crcArray[6] = 0x01;
// uint16_t crcret = ModbusCRC16(crcArray);
// for(int i=0; i<crcArray.size(); i++)
// {
// ///qDebug()<<"16进制"<<crcArray.at(i)<<Qt::endl;
// qDebug() << QString("%1").arg(crcArray.at(i), 0, 16, QLatin1Char('0'))<<Qt::endl;
// ///qDebug("%02x", crcArray.at(i));
// }
// qDebug()<<"ModbusCRC16 "<<crcret<<Qt::endl;
// qDebug()<<"ModbusCRCres "<<res<<Qt::endl;
// ///qDebug()<<"ModbusCRCrec "<<crcrec<<Qt::endl;
}
void MainWidget::showStackCPAnaWidget()
{
m_stackLayout->setCurrentIndex(0);
}
uint16_t MainWidget::ModbusCRC16(QByteArray senddata)
{
int len=senddata.size();
uint16_t wcrc=0XFFFF;//预置16位crc寄存器初值全部为1
uint8_t temp;//定义中间变量
int i=0,j=0;//定义计数
for(i=0;i<len;i++)//循环计算每个数据
{
temp=senddata.at(i);
wcrc^=temp;
for(j=0;j<8;j++){
//判断右移出的是不是1如果是1则与多项式进行异或。
if(wcrc&0X0001){
wcrc>>=1;//先将数据右移一位
wcrc^=0XA001;//与上面的多项式进行异或
}
else//如果不是1则直接移出
wcrc>>=1;//直接移出
}
}
temp=wcrc;//crc的值
return wcrc;
}
uint16_t MainWidget::CRC16_MODBUS(unsigned char *data, unsigned int datalen)
{
unsigned short wCRCin = 0xFFFF;
unsigned short wCPoly = 0x8005;
InvertUint16(&wCPoly,&wCPoly);
while (datalen--)
{
wCRCin ^= *(data++);
for(int i = 0;i < 8;i++)
{
if(wCRCin & 0x01)
wCRCin = (wCRCin >> 1) ^ wCPoly;
else
wCRCin = wCRCin >> 1;
}
}
return (wCRCin);
}
void MainWidget::InvertUint16(unsigned short *dBuf,unsigned short *srcBuf)
{
int i;
unsigned short tmp[4]={0};
for(i=0;i< 16;i++)
{
if(srcBuf[0]& (1 << i))
tmp[0]|=1<<(15 - i);
}
dBuf[0] = tmp[0];
}