Revert "hlp:荆州版本"

This reverts commit 065b146998.
This commit is contained in:
kite_lucs
2026-10-19 17:48:03 +08:00
parent 065b146998
commit baa8882d09
438 changed files with 185387 additions and 163143 deletions
+391 -391
View File
@@ -1,391 +1,391 @@
#include "DlgVoltePara25Dots.h"
#include "DevOp.h"
#include <QFile>
#include <LogInfo.h>
DlgVoltePara25Dots::DlgVoltePara25Dots(DevOp *devOp, QWidget *parent)
: QDialog(parent)
, m_devOp(devOp)
{
memset(editContinuous, 0, sizeof(editContinuous));
memset(editRowDelay, 0, sizeof(editRowDelay));
memset(editHead1RowDelay, 0, sizeof(editHead1RowDelay));
memset(editSingleDot, 0, sizeof(editSingleDot));
memset(edit1Dot, 0, sizeof(edit1Dot));
memset(edit2Dots, 0, sizeof(edit2Dots));
memset(edit3Dots, 0, sizeof(edit3Dots));
memset(edit4Dots, 0, sizeof(edit4Dots));
memset(edit5Dots, 0, sizeof(edit5Dots));
memset(editDiff, 0, sizeof(editDiff));
memset(editGiant, 0, sizeof(editGiant));
memset(editAdjustPara, 0, sizeof(editAdjustPara));
setupUI();
}
DlgVoltePara25Dots::~DlgVoltePara25Dots()
{
}
// 创建4列×16行网格布局的tab页(竖排: v0~v15第1列, v16~v31第2列, ...)
QWidget* DlgVoltePara25Dots::createGridTab(int count, QLineEdit* edits[], int numCols)
{
QWidget *page = new QWidget(this);
QGridLayout *grid = new QGridLayout(page);
grid->setSpacing(2);
grid->setContentsMargins(4, 4, 4, 4);
int rowsPerCol = (count + numCols - 1) / numCols;
for (int i = 0; i < count; i++) {
int col = i / rowsPerCol;
int row = i % rowsPerCol;
QLabel *label = new QLabel(QString("v%1").arg(i), page);
label->setFixedWidth(28);
label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
QLineEdit *edit = new QLineEdit("0", page);
edit->setAlignment(Qt::AlignCenter);
edits[i] = edit;
grid->addWidget(label, row, col * 2);
grid->addWidget(edit, row, col * 2 + 1);
}
for (int c = 0; c < numCols; c++) {
grid->setColumnStretch(c * 2, 0);
grid->setColumnStretch(c * 2 + 1, 1);
}
return page;
}
void DlgVoltePara25Dots::setupUI()
{
setWindowTitle(QString("25点阵充电参数编辑"));
//setFixedSize(750, 500);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(4, 4, 4, 4);
mainLayout->setSpacing(4);
tabWidget = new QTabWidget(this);
// 基本tab
tabWidget->addTab(createGridTab(64, editContinuous), QString("连续电压"));
tabWidget->addTab(createGridTab(64, editRowDelay), QString("点延迟"));
tabWidget->addTab(createGridTab(64, editHead1RowDelay), QString("首1点延迟"));
// 通用参数
tabWidget->addTab(createGridTab(8, editAdjustPara), QString("通用参数"));
tabWidget->addTab(createGridTab(64, editSingleDot), QString("单点"));
tabWidget->addTab(createGridTab(64, edit1Dot), QString("一点"));
tabWidget->addTab(createGridTab(64, edit2Dots), QString("两点"));
tabWidget->addTab(createGridTab(64, edit3Dots), QString("三点"));
tabWidget->addTab(createGridTab(64, edit4Dots), QString("四点"));
tabWidget->addTab(createGridTab(64, edit5Dots), QString("五点"));
// 巨点补偿:16组,分4个tab(5,5,5,1组)
// 前3个tab:流式切分[5][64]=320值÷5=64个lineEdit
// 第4个tab:流式切分[1][64]=64值÷5=13个lineEdit(最后一个放4个值)
int giantEditCount[4] = {64, 64, 64, 13};
for (int t = 0; t < 4; t++) {
tabWidget->addTab(createGridTab(giantEditCount[t], editGiant[t]),
QString("巨点补偿%1").arg(t + 1));
}
// 差分补偿:50组÷5=10个tab,每个tab 64通道,每个lineEdit放5个逗号分隔值
static const char* diffTabNames[10] = {
"1点隔1-5点差", "1点隔6-10点差",
"2点隔1-5点差", "2点隔6-10点差",
"3点隔1-5点差", "3点隔6-10点差",
"4点隔1-5点差", "4点隔6-10点差",
"5点隔1-5点差", "5点隔6-10点差"
};
for (int t = 0; t < 10; t++) {
tabWidget->addTab(createGridTab(64, editDiff[t], 5),
QString(diffTabNames[t]));
}
mainLayout->addWidget(tabWidget);
// 底部按钮栏
QHBoxLayout *btnLayout = new QHBoxLayout();
btnLoad = new QPushButton(QString("读取当前值"), this);
btnSave = new QPushButton(QString("保存并推送FPGA"), this);
btnLoad->setMinimumHeight(40);
btnSave->setMinimumHeight(40);
btnLayout->addWidget(btnLoad);
btnLayout->addStretch();
btnLayout->addWidget(btnSave);
mainLayout->addLayout(btnLayout);
connect(btnLoad, SIGNAL(clicked()), this, SLOT(onBtnLoadClicked()));
connect(btnSave, SIGNAL(clicked()), this, SLOT(onBtnSaveClicked()));
}
// ========== 数据加载:结构体 → UI ==========
void DlgVoltePara25Dots::loadDataToUI()
{
if (!sysPara) return;
voltePara_t_25Dots &data = sysPara->voltePara_25Dots;
// 连续电压(单值)
for (int i = 0; i < 64; i++)
editContinuous[i]->setText(QString::number(data.matchContinousDACArray[i]));
// 点延迟(单值)
for (int i = 0; i < 64; i++)
editRowDelay[i]->setText(QString::number(data.matchExtraLineDACArray[i]));
// 首1点延迟(有符号)
for (int i = 0; i < 64; i++)
editHead1RowDelay[i]->setText(QString::number((qint8)data.matchFirstOnePointExtraLineDACArray[i]));
// 单点(首1)
for (int i = 0; i < 64; i++)
editSingleDot[i]->setText(QString::number(data.matchTotalTableDACArrayFirst1[i]));
// 一点
for (int i = 0; i < 64; i++)
edit1Dot[i]->setText(QString::number(data.matchTotalTableDACArray1[i]));
// 两点(2值逗号分隔)
for (int i = 0; i < 64; i++) {
edit2Dots[i]->setText(QString("%1,%2")
.arg(data.matchTotalTableDACArray2[i][0])
.arg(data.matchTotalTableDACArray2[i][1]));
}
// 三点(3值逗号分隔)
for (int i = 0; i < 64; i++) {
edit3Dots[i]->setText(QString("%1,%2,%3")
.arg(data.matchTotalTableDACArray3[i][0])
.arg(data.matchTotalTableDACArray3[i][1])
.arg(data.matchTotalTableDACArray3[i][2]));
}
// 四点(4值逗号分隔)
for (int i = 0; i < 64; i++) {
edit4Dots[i]->setText(QString("%1,%2,%3,%4")
.arg(data.matchTotalTableDACArray4[i][0])
.arg(data.matchTotalTableDACArray4[i][1])
.arg(data.matchTotalTableDACArray4[i][2])
.arg(data.matchTotalTableDACArray4[i][3]));
}
// 五点(5值逗号分隔)
for (int i = 0; i < 64; i++) {
edit5Dots[i]->setText(QString("%1,%2,%3,%4,%5")
.arg(data.matchTotalTableDACArray5[i][0])
.arg(data.matchTotalTableDACArray5[i][1])
.arg(data.matchTotalTableDACArray5[i][2])
.arg(data.matchTotalTableDACArray5[i][3])
.arg(data.matchTotalTableDACArray5[i][4]));
}
// 差分补偿:matchTotalDiffVoltageValue[50][64]
// 每5组一个tab,把[5][64]=320个值按内存顺序展平,每5个连续值放一个lineEdit,共64个lineEdit
// 与oldProject的Load_voltage_diff逻辑一致
for (int t = 0; t < 10; t++) {
int k = 0; // 当前lineEdit内已累积的值计数(1~5)
int num = 0; // 当前lineEdit序号
QString strTemp;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 64; j++) {
k++;
if (k < 5) {
strTemp += QString::number((qint8)data.matchTotalDiffVoltageValue[t * 5 + i][j]);
strTemp += ",";
} else {
strTemp += QString::number((qint8)data.matchTotalDiffVoltageValue[t * 5 + i][j]);
editDiff[t][num]->setText(strTemp);
strTemp = "";
k = 0;
num++;
}
}
}
}
// 巨点补偿:matchGiantPointVoltageValue[16][64]
// 与oldProject一致:流式切分,前3个tab用Load_voltage_diff逻辑,第4个tab用Load_voltage_giant逻辑
{
int giantGroupsPerTab[4] = {5, 5, 5, 1};
int giantOffset = 0;
for (int t = 0; t < 4; t++) {
int groups = giantGroupsPerTab[t];
int k = 0;
int num = 0;
QString strTemp;
for (int i = 0; i < groups; i++) {
for (int j = 0; j < 64; j++) {
k++;
if (k < 5) {
strTemp += QString::number((qint8)data.matchGiantPointVoltageValue[giantOffset + i][j]);
strTemp += ",";
// 第4个tab特殊处理:最后一个值时不足5个也要输出
if (t == 3 && i == groups - 1 && j == 63) {
strTemp.chop(1); // 去掉末尾逗号
editGiant[t][num]->setText(strTemp);
}
} else {
strTemp += QString::number((qint8)data.matchGiantPointVoltageValue[giantOffset + i][j]);
editGiant[t][num]->setText(strTemp);
strTemp = "";
k = 0;
num++;
}
}
}
giantOffset += groups;
}
}
// 通用参数
for (int i = 0; i < 8; i++)
editAdjustPara[i]->setText(QString::number((qint8)data.matchAdjustParaDACArray[i]));
}
// ========== 数据保存:UI → 结构体 ==========
void DlgVoltePara25Dots::saveDataFromUI()
{
if (!sysPara) return;
voltePara_t_25Dots &data = sysPara->voltePara_25Dots;
// 连续电压
for (int i = 0; i < 64; i++)
data.matchContinousDACArray[i] = (quint16)editContinuous[i]->text().toUInt();
// 点延迟
for (int i = 0; i < 64; i++)
data.matchExtraLineDACArray[i] = (quint8)editRowDelay[i]->text().toUInt();
// 首1点延迟
for (int i = 0; i < 64; i++)
data.matchFirstOnePointExtraLineDACArray[i] = (qint8)editHead1RowDelay[i]->text().toInt();
// 单点(首1)
for (int i = 0; i < 64; i++)
data.matchTotalTableDACArrayFirst1[i] = (quint16)editSingleDot[i]->text().toUInt();
// 一点
for (int i = 0; i < 64; i++)
data.matchTotalTableDACArray1[i] = (quint16)edit1Dot[i]->text().toUInt();
// 两点
for (int i = 0; i < 64; i++) {
QStringList parts = edit2Dots[i]->text().split(",");
for (int j = 0; j < 2; j++)
data.matchTotalTableDACArray2[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 三点
for (int i = 0; i < 64; i++) {
QStringList parts = edit3Dots[i]->text().split(",");
for (int j = 0; j < 3; j++)
data.matchTotalTableDACArray3[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 四点
for (int i = 0; i < 64; i++) {
QStringList parts = edit4Dots[i]->text().split(",");
for (int j = 0; j < 4; j++)
data.matchTotalTableDACArray4[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 五点
for (int i = 0; i < 64; i++) {
QStringList parts = edit5Dots[i]->text().split(",");
for (int j = 0; j < 5; j++)
data.matchTotalTableDACArray5[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 差分补偿:与oldProject的Save_voltage_diff逻辑一致
// 每个tab的64个lineEdit各含5个逗号分隔值,展平后按内存顺序写回[5][64]
for (int t = 0; t < 10; t++) {
// 先把64个lineEdit的值全部拼成一个大列表(320个值)
QStringList allValues;
for (int num = 0; num < 64; num++) {
QStringList parts = editDiff[t][num]->text().split(",");
allValues.append(parts);
}
// 按内存顺序写回 [5][64]
int idx = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 64; j++) {
data.matchTotalDiffVoltageValue[t * 5 + i][j] =
idx < allValues.size() ? (qint8)allValues[idx].toInt() : 0;
idx++;
}
}
}
// 巨点补偿:与oldProject一致,流式反解析
{
int giantGroupsPerTab[4] = {5, 5, 5, 1};
int giantEditCount[4] = {64, 64, 64, 13};
int giantOffset = 0;
for (int t = 0; t < 4; t++) {
int groups = giantGroupsPerTab[t];
// 把所有lineEdit的值拼成一个大列表
QStringList allValues;
for (int num = 0; num < giantEditCount[t]; num++) {
QStringList parts = editGiant[t][num]->text().split(",");
allValues.append(parts);
}
// 按内存顺序写回 [groups][64]
int idx = 0;
for (int i = 0; i < groups; i++) {
for (int j = 0; j < 64; j++) {
data.matchGiantPointVoltageValue[giantOffset + i][j] =
idx < allValues.size() ? (qint8)allValues[idx].toInt() : 0;
idx++;
}
}
giantOffset += groups;
}
}
// 通用参数
for (int i = 0; i < 8; i++)
data.matchAdjustParaDACArray[i] = (qint8)editAdjustPara[i]->text().toInt();
}
// ========== 按钮槽函数 ==========
void DlgVoltePara25Dots::onBtnLoadClicked()
{
loadDataToUI();
}
void DlgVoltePara25Dots::onBtnSaveClicked()
{
saveDataFromUI();
if (m_devOp) {
m_devOp->writeDacValue2Fpga_No72NewVoltData();
}
QFile file(DOC_ROOT_DIR"VoltDataStd25.bin");
if(!file.open(QIODevice::WriteOnly)) {
QMessageBox::information(this, QString("注意"), QString("充电数据已经写入FPGA, 但是没有保存到文件。"));
return;
}
int written = file.write((const char*)&(sysPara->voltePara_25Dots), sizeof(voltePara_t_25Dots));
file.close();
if(written != sizeof(voltePara_t_25Dots)) {
LogInfo::setRunStatusText("写入文件VoltDataStd25.bin失败");
}
QMessageBox::information(this, QString("完成"), QString("充电参数已保存并推送至FPGA。"));
}
#include "DlgVoltePara25Dots.h"
#include "DevOp.h"
#include <QFile>
#include <LogInfo.h>
DlgVoltePara25Dots::DlgVoltePara25Dots(DevOp *devOp, QWidget *parent)
: QDialog(parent)
, m_devOp(devOp)
{
memset(editContinuous, 0, sizeof(editContinuous));
memset(editRowDelay, 0, sizeof(editRowDelay));
memset(editHead1RowDelay, 0, sizeof(editHead1RowDelay));
memset(editSingleDot, 0, sizeof(editSingleDot));
memset(edit1Dot, 0, sizeof(edit1Dot));
memset(edit2Dots, 0, sizeof(edit2Dots));
memset(edit3Dots, 0, sizeof(edit3Dots));
memset(edit4Dots, 0, sizeof(edit4Dots));
memset(edit5Dots, 0, sizeof(edit5Dots));
memset(editDiff, 0, sizeof(editDiff));
memset(editGiant, 0, sizeof(editGiant));
memset(editAdjustPara, 0, sizeof(editAdjustPara));
setupUI();
}
DlgVoltePara25Dots::~DlgVoltePara25Dots()
{
}
// 创建4列×16行网格布局的tab页(竖排: v0~v15第1列, v16~v31第2列, ...)
QWidget* DlgVoltePara25Dots::createGridTab(int count, QLineEdit* edits[], int numCols)
{
QWidget *page = new QWidget(this);
QGridLayout *grid = new QGridLayout(page);
grid->setSpacing(2);
grid->setContentsMargins(4, 4, 4, 4);
int rowsPerCol = (count + numCols - 1) / numCols;
for (int i = 0; i < count; i++) {
int col = i / rowsPerCol;
int row = i % rowsPerCol;
QLabel *label = new QLabel(QString("v%1").arg(i), page);
label->setFixedWidth(28);
label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
QLineEdit *edit = new QLineEdit("0", page);
edit->setAlignment(Qt::AlignCenter);
edits[i] = edit;
grid->addWidget(label, row, col * 2);
grid->addWidget(edit, row, col * 2 + 1);
}
for (int c = 0; c < numCols; c++) {
grid->setColumnStretch(c * 2, 0);
grid->setColumnStretch(c * 2 + 1, 1);
}
return page;
}
void DlgVoltePara25Dots::setupUI()
{
setWindowTitle(QString("25点阵充电参数编辑"));
//setFixedSize(750, 500);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(4, 4, 4, 4);
mainLayout->setSpacing(4);
tabWidget = new QTabWidget(this);
// 基本tab
tabWidget->addTab(createGridTab(64, editContinuous), QString("连续电压"));
tabWidget->addTab(createGridTab(64, editRowDelay), QString("点延迟"));
tabWidget->addTab(createGridTab(64, editHead1RowDelay), QString("首1点延迟"));
// 通用参数
tabWidget->addTab(createGridTab(8, editAdjustPara), QString("通用参数"));
tabWidget->addTab(createGridTab(64, editSingleDot), QString("单点"));
tabWidget->addTab(createGridTab(64, edit1Dot), QString("一点"));
tabWidget->addTab(createGridTab(64, edit2Dots), QString("两点"));
tabWidget->addTab(createGridTab(64, edit3Dots), QString("三点"));
tabWidget->addTab(createGridTab(64, edit4Dots), QString("四点"));
tabWidget->addTab(createGridTab(64, edit5Dots), QString("五点"));
// 巨点补偿:16组,分4个tab(5,5,5,1组)
// 前3个tab:流式切分[5][64]=320值÷5=64个lineEdit
// 第4个tab:流式切分[1][64]=64值÷5=13个lineEdit(最后一个放4个值)
int giantEditCount[4] = {64, 64, 64, 13};
for (int t = 0; t < 4; t++) {
tabWidget->addTab(createGridTab(giantEditCount[t], editGiant[t]),
QString("巨点补偿%1").arg(t + 1));
}
// 差分补偿:50组÷5=10个tab,每个tab 64通道,每个lineEdit放5个逗号分隔值
static const char* diffTabNames[10] = {
"1点隔1-5点差", "1点隔6-10点差",
"2点隔1-5点差", "2点隔6-10点差",
"3点隔1-5点差", "3点隔6-10点差",
"4点隔1-5点差", "4点隔6-10点差",
"5点隔1-5点差", "5点隔6-10点差"
};
for (int t = 0; t < 10; t++) {
tabWidget->addTab(createGridTab(64, editDiff[t], 5),
QString(diffTabNames[t]));
}
mainLayout->addWidget(tabWidget);
// 底部按钮栏
QHBoxLayout *btnLayout = new QHBoxLayout();
btnLoad = new QPushButton(QString("读取当前值"), this);
btnSave = new QPushButton(QString("保存并推送FPGA"), this);
btnLoad->setMinimumHeight(40);
btnSave->setMinimumHeight(40);
btnLayout->addWidget(btnLoad);
btnLayout->addStretch();
btnLayout->addWidget(btnSave);
mainLayout->addLayout(btnLayout);
connect(btnLoad, SIGNAL(clicked()), this, SLOT(onBtnLoadClicked()));
connect(btnSave, SIGNAL(clicked()), this, SLOT(onBtnSaveClicked()));
}
// ========== 数据加载:结构体 → UI ==========
void DlgVoltePara25Dots::loadDataToUI()
{
if (!sysPara) return;
voltePara_t_25Dots &data = sysPara->voltePara_25Dots;
// 连续电压(单值)
for (int i = 0; i < 64; i++)
editContinuous[i]->setText(QString::number(data.matchContinousDACArray[i]));
// 点延迟(单值)
for (int i = 0; i < 64; i++)
editRowDelay[i]->setText(QString::number(data.matchExtraLineDACArray[i]));
// 首1点延迟(有符号)
for (int i = 0; i < 64; i++)
editHead1RowDelay[i]->setText(QString::number((qint8)data.matchFirstOnePointExtraLineDACArray[i]));
// 单点(首1)
for (int i = 0; i < 64; i++)
editSingleDot[i]->setText(QString::number(data.matchTotalTableDACArrayFirst1[i]));
// 一点
for (int i = 0; i < 64; i++)
edit1Dot[i]->setText(QString::number(data.matchTotalTableDACArray1[i]));
// 两点(2值逗号分隔)
for (int i = 0; i < 64; i++) {
edit2Dots[i]->setText(QString("%1,%2")
.arg(data.matchTotalTableDACArray2[i][0])
.arg(data.matchTotalTableDACArray2[i][1]));
}
// 三点(3值逗号分隔)
for (int i = 0; i < 64; i++) {
edit3Dots[i]->setText(QString("%1,%2,%3")
.arg(data.matchTotalTableDACArray3[i][0])
.arg(data.matchTotalTableDACArray3[i][1])
.arg(data.matchTotalTableDACArray3[i][2]));
}
// 四点(4值逗号分隔)
for (int i = 0; i < 64; i++) {
edit4Dots[i]->setText(QString("%1,%2,%3,%4")
.arg(data.matchTotalTableDACArray4[i][0])
.arg(data.matchTotalTableDACArray4[i][1])
.arg(data.matchTotalTableDACArray4[i][2])
.arg(data.matchTotalTableDACArray4[i][3]));
}
// 五点(5值逗号分隔)
for (int i = 0; i < 64; i++) {
edit5Dots[i]->setText(QString("%1,%2,%3,%4,%5")
.arg(data.matchTotalTableDACArray5[i][0])
.arg(data.matchTotalTableDACArray5[i][1])
.arg(data.matchTotalTableDACArray5[i][2])
.arg(data.matchTotalTableDACArray5[i][3])
.arg(data.matchTotalTableDACArray5[i][4]));
}
// 差分补偿:matchTotalDiffVoltageValue[50][64]
// 每5组一个tab,把[5][64]=320个值按内存顺序展平,每5个连续值放一个lineEdit,共64个lineEdit
// 与oldProject的Load_voltage_diff逻辑一致
for (int t = 0; t < 10; t++) {
int k = 0; // 当前lineEdit内已累积的值计数(1~5)
int num = 0; // 当前lineEdit序号
QString strTemp;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 64; j++) {
k++;
if (k < 5) {
strTemp += QString::number((qint8)data.matchTotalDiffVoltageValue[t * 5 + i][j]);
strTemp += ",";
} else {
strTemp += QString::number((qint8)data.matchTotalDiffVoltageValue[t * 5 + i][j]);
editDiff[t][num]->setText(strTemp);
strTemp = "";
k = 0;
num++;
}
}
}
}
// 巨点补偿:matchGiantPointVoltageValue[16][64]
// 与oldProject一致:流式切分,前3个tab用Load_voltage_diff逻辑,第4个tab用Load_voltage_giant逻辑
{
int giantGroupsPerTab[4] = {5, 5, 5, 1};
int giantOffset = 0;
for (int t = 0; t < 4; t++) {
int groups = giantGroupsPerTab[t];
int k = 0;
int num = 0;
QString strTemp;
for (int i = 0; i < groups; i++) {
for (int j = 0; j < 64; j++) {
k++;
if (k < 5) {
strTemp += QString::number((qint8)data.matchGiantPointVoltageValue[giantOffset + i][j]);
strTemp += ",";
// 第4个tab特殊处理:最后一个值时不足5个也要输出
if (t == 3 && i == groups - 1 && j == 63) {
strTemp.chop(1); // 去掉末尾逗号
editGiant[t][num]->setText(strTemp);
}
} else {
strTemp += QString::number((qint8)data.matchGiantPointVoltageValue[giantOffset + i][j]);
editGiant[t][num]->setText(strTemp);
strTemp = "";
k = 0;
num++;
}
}
}
giantOffset += groups;
}
}
// 通用参数
for (int i = 0; i < 8; i++)
editAdjustPara[i]->setText(QString::number((qint8)data.matchAdjustParaDACArray[i]));
}
// ========== 数据保存:UI → 结构体 ==========
void DlgVoltePara25Dots::saveDataFromUI()
{
if (!sysPara) return;
voltePara_t_25Dots &data = sysPara->voltePara_25Dots;
// 连续电压
for (int i = 0; i < 64; i++)
data.matchContinousDACArray[i] = (quint16)editContinuous[i]->text().toUInt();
// 点延迟
for (int i = 0; i < 64; i++)
data.matchExtraLineDACArray[i] = (quint8)editRowDelay[i]->text().toUInt();
// 首1点延迟
for (int i = 0; i < 64; i++)
data.matchFirstOnePointExtraLineDACArray[i] = (qint8)editHead1RowDelay[i]->text().toInt();
// 单点(首1)
for (int i = 0; i < 64; i++)
data.matchTotalTableDACArrayFirst1[i] = (quint16)editSingleDot[i]->text().toUInt();
// 一点
for (int i = 0; i < 64; i++)
data.matchTotalTableDACArray1[i] = (quint16)edit1Dot[i]->text().toUInt();
// 两点
for (int i = 0; i < 64; i++) {
QStringList parts = edit2Dots[i]->text().split(",");
for (int j = 0; j < 2; j++)
data.matchTotalTableDACArray2[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 三点
for (int i = 0; i < 64; i++) {
QStringList parts = edit3Dots[i]->text().split(",");
for (int j = 0; j < 3; j++)
data.matchTotalTableDACArray3[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 四点
for (int i = 0; i < 64; i++) {
QStringList parts = edit4Dots[i]->text().split(",");
for (int j = 0; j < 4; j++)
data.matchTotalTableDACArray4[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 五点
for (int i = 0; i < 64; i++) {
QStringList parts = edit5Dots[i]->text().split(",");
for (int j = 0; j < 5; j++)
data.matchTotalTableDACArray5[i][j] = parts.size() > j ? (quint16)parts[j].toUInt() : 0;
}
// 差分补偿:与oldProject的Save_voltage_diff逻辑一致
// 每个tab的64个lineEdit各含5个逗号分隔值,展平后按内存顺序写回[5][64]
for (int t = 0; t < 10; t++) {
// 先把64个lineEdit的值全部拼成一个大列表(320个值)
QStringList allValues;
for (int num = 0; num < 64; num++) {
QStringList parts = editDiff[t][num]->text().split(",");
allValues.append(parts);
}
// 按内存顺序写回 [5][64]
int idx = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 64; j++) {
data.matchTotalDiffVoltageValue[t * 5 + i][j] =
idx < allValues.size() ? (qint8)allValues[idx].toInt() : 0;
idx++;
}
}
}
// 巨点补偿:与oldProject一致,流式反解析
{
int giantGroupsPerTab[4] = {5, 5, 5, 1};
int giantEditCount[4] = {64, 64, 64, 13};
int giantOffset = 0;
for (int t = 0; t < 4; t++) {
int groups = giantGroupsPerTab[t];
// 把所有lineEdit的值拼成一个大列表
QStringList allValues;
for (int num = 0; num < giantEditCount[t]; num++) {
QStringList parts = editGiant[t][num]->text().split(",");
allValues.append(parts);
}
// 按内存顺序写回 [groups][64]
int idx = 0;
for (int i = 0; i < groups; i++) {
for (int j = 0; j < 64; j++) {
data.matchGiantPointVoltageValue[giantOffset + i][j] =
idx < allValues.size() ? (qint8)allValues[idx].toInt() : 0;
idx++;
}
}
giantOffset += groups;
}
}
// 通用参数
for (int i = 0; i < 8; i++)
data.matchAdjustParaDACArray[i] = (qint8)editAdjustPara[i]->text().toInt();
}
// ========== 按钮槽函数 ==========
void DlgVoltePara25Dots::onBtnLoadClicked()
{
loadDataToUI();
}
void DlgVoltePara25Dots::onBtnSaveClicked()
{
saveDataFromUI();
if (m_devOp) {
m_devOp->writeDacValue2Fpga_No72NewVoltData();
}
QFile file(DOC_ROOT_DIR"VoltDataStd25.bin");
if(!file.open(QIODevice::WriteOnly)) {
QMessageBox::information(this, QString("注意"), QString("充电数据已经写入FPGA, 但是没有保存到文件。"));
return;
}
int written = file.write((const char*)&(sysPara->voltePara_25Dots), sizeof(voltePara_t_25Dots));
file.close();
if(written != sizeof(voltePara_t_25Dots)) {
LogInfo::setRunStatusText("写入文件VoltDataStd25.bin失败");
}
QMessageBox::information(this, QString("完成"), QString("充电参数已保存并推送至FPGA。"));
}