фиксы графика и статической компиляции
This commit is contained in:
parent
93b4a24b8b
commit
5b3faa798b
@ -85,6 +85,10 @@ AdcGraphDialog::AdcGraphDialog(QModbusClient *modbusDevice, QWidget *parent) :
|
||||
this, &AdcGraphDialog::on_registerCountChanged);
|
||||
connect(ui->rangeApplyButton, &QPushButton::clicked,
|
||||
this, &AdcGraphDialog::on_rangeApplyClicked);
|
||||
connect(ui->teNumberSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &AdcGraphDialog::on_teNumberChanged);
|
||||
connect(ui->teApplyButton, &QPushButton::clicked,
|
||||
this, &AdcGraphDialog::on_teApplyClicked);
|
||||
|
||||
connect(m_updateTimer, &QTimer::timeout, this, &AdcGraphDialog::onUpdateTimer);
|
||||
connect(ui->closeBtn, &QPushButton::clicked, this, &AdcGraphDialog::on_closeBtn_clicked);
|
||||
@ -105,6 +109,54 @@ void AdcGraphDialog::setModbusDevice(QModbusClient *device)
|
||||
m_modbusDevice = device;
|
||||
}
|
||||
|
||||
void AdcGraphDialog::on_teNumberChanged(int value)
|
||||
{
|
||||
// Можно сохранить значение, но не применять сразу
|
||||
m_pendingTeNumber = value;
|
||||
}
|
||||
|
||||
void AdcGraphDialog::on_teApplyClicked()
|
||||
{
|
||||
setTENumber(ui->teNumberSpinBox->value());
|
||||
}
|
||||
|
||||
void AdcGraphDialog::setTENumber(int teNumber)
|
||||
{
|
||||
if (m_boardAddress == -1) return;
|
||||
|
||||
m_teNumber = teNumber;
|
||||
|
||||
// Обновляем заголовок окна
|
||||
setWindowTitle(QString("График АЦП - Плата %1, ТЭ %2 (адр %3-%4)")
|
||||
.arg(m_boardId + 1)
|
||||
.arg(m_teNumber)
|
||||
.arg(m_startAddress)
|
||||
.arg(m_startAddress + m_registerCount - 1));
|
||||
|
||||
// Записываем новый номер ТЭ в устройство
|
||||
if (m_modbusDevice) {
|
||||
QModbusDataUnit unit(QModbusDataUnit::HoldingRegisters, REG_TE_NUMBER, 1);
|
||||
unit.setValue(0, teNumber);
|
||||
|
||||
if (auto *reply = m_modbusDevice->sendWriteRequest(unit, m_boardAddress)) {
|
||||
if (!reply->isFinished()) {
|
||||
connect(reply, &QModbusReply::finished, this, [this, reply, teNumber]() {
|
||||
if (reply->error() == QModbusDevice::NoError) {
|
||||
qDebug() << "TE number changed to:" << teNumber;
|
||||
// Можно обновить данные сразу после смены ТЭ
|
||||
readAdcDataAndIndices();
|
||||
} else {
|
||||
qDebug() << "Error writing TE number:" << reply->errorString();
|
||||
}
|
||||
reply->deleteLater();
|
||||
});
|
||||
} else {
|
||||
reply->deleteLater();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AdcGraphDialog::readCalibrationValues()
|
||||
{
|
||||
if (!m_modbusDevice || m_boardAddress == -1) return;
|
||||
@ -120,10 +172,10 @@ void AdcGraphDialog::readCalibrationValues()
|
||||
if (result.valueCount() >= 2) {
|
||||
m_adcZero = result.value(0);
|
||||
m_adcOneVolt = result.value(1);
|
||||
qDebug() << "Calibration values - Zero:" << m_adcZero << "1V:" << m_adcOneVolt;
|
||||
//qDebug() << "Calibration values - Zero:" << m_adcZero << "1V:" << m_adcOneVolt;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Error reading calibration:" << reply->errorString();
|
||||
//qDebug() << "Error reading calibration:" << reply->errorString();
|
||||
}
|
||||
reply->deleteLater();
|
||||
});
|
||||
@ -159,14 +211,14 @@ void AdcGraphDialog::onStableIndicesReady()
|
||||
if (result.valueCount() >= 2) {
|
||||
m_stableStartIndex = result.value(0);
|
||||
m_stableEndIndex = result.value(1);
|
||||
qDebug() << "Stable indices updated - Start:" << m_stableStartIndex << "End:" << m_stableEndIndex;
|
||||
//qDebug() << "Stable indices updated - Start:" << m_stableStartIndex << "End:" << m_stableEndIndex;
|
||||
updateStableLines();
|
||||
|
||||
// Обновляем статистику с новыми индексами
|
||||
updateStatisticsWithStableInfo();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Error reading stable indices:" << reply->errorString();
|
||||
//qDebug() << "Error reading stable indices:" << reply->errorString();
|
||||
}
|
||||
|
||||
reply->deleteLater();
|
||||
@ -272,7 +324,7 @@ void AdcGraphDialog::readAdcDataAndIndices()
|
||||
QModbusDataUnit unit(QModbusDataUnit::InputRegisters, REG_STABLE_START,
|
||||
count + (start - REG_STABLE_START));
|
||||
|
||||
qDebug() << "Reading combined data from address" << REG_STABLE_START << "count:" << unit.valueCount();
|
||||
//qDebug() << "Reading combined data from address" << REG_STABLE_START << "count:" << unit.valueCount();
|
||||
|
||||
if (auto *reply = m_modbusDevice->sendReadRequest(unit, m_boardAddress)) {
|
||||
if (!reply->isFinished()) {
|
||||
@ -281,7 +333,7 @@ void AdcGraphDialog::readAdcDataAndIndices()
|
||||
reply->deleteLater();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Failed to send combined data read request";
|
||||
//qDebug() << "Failed to send combined data read request";
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,7 +350,7 @@ void AdcGraphDialog::onCombinedDataReady()
|
||||
if (result.valueCount() >= 2) {
|
||||
m_stableStartIndex = result.value(0);
|
||||
m_stableEndIndex = result.value(1);
|
||||
qDebug() << "Stable indices - Start:" << m_stableStartIndex << "End:" << m_stableEndIndex;
|
||||
//qDebug() << "Stable indices - Start:" << m_stableStartIndex << "End:" << m_stableEndIndex;
|
||||
}
|
||||
|
||||
// Обрабатываем данные АЦП (остальные регистры)
|
||||
@ -326,7 +378,7 @@ void AdcGraphDialog::onCombinedDataReady()
|
||||
updateStatistics();
|
||||
|
||||
} else {
|
||||
qDebug() << "Error reading combined data:" << reply->errorString();
|
||||
// qDebug() << "Error reading combined data:" << reply->errorString();
|
||||
}
|
||||
|
||||
reply->deleteLater();
|
||||
@ -340,7 +392,7 @@ void AdcGraphDialog::readAdcBuffer()
|
||||
// Читаем выбранный диапазон буфера АЦП
|
||||
QModbusDataUnit unit(QModbusDataUnit::InputRegisters, m_startAddress+REG_ADC_BUFFER_START, m_registerCount);
|
||||
|
||||
qDebug() << "Reading ADC buffer from address" << m_startAddress << "count:" << m_registerCount;
|
||||
// qDebug() << "Reading ADC buffer from address" << m_startAddress << "count:" << m_registerCount;
|
||||
|
||||
if (auto *reply = m_modbusDevice->sendReadRequest(unit, m_boardAddress)) {
|
||||
if (!reply->isFinished()) {
|
||||
@ -349,7 +401,7 @@ void AdcGraphDialog::readAdcBuffer()
|
||||
reply->deleteLater();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Failed to send ADC buffer read request";
|
||||
// qDebug() << "Failed to send ADC buffer read request";
|
||||
}
|
||||
}
|
||||
|
||||
@ -359,6 +411,9 @@ void AdcGraphDialog::startGraph(int boardId, int teNumber)
|
||||
m_teNumber = teNumber;
|
||||
m_boardAddress = boardId + 1;
|
||||
|
||||
// Устанавливаем начальное значение в спинбокс
|
||||
ui->teNumberSpinBox->setValue(teNumber);
|
||||
|
||||
setWindowTitle(QString("График АЦП - Плата %1, ТЭ %2 (адр %3-%4)")
|
||||
.arg(boardId + 1)
|
||||
.arg(teNumber)
|
||||
@ -373,11 +428,16 @@ void AdcGraphDialog::startGraph(int boardId, int teNumber)
|
||||
// Обновляем диапазон графика
|
||||
updateGraphRange();
|
||||
|
||||
readCalibrationValues(); // Калибровку оставляем отдельно (она редко меняется)
|
||||
m_updateTimer->start(m_timeout); // Запускаем обновление
|
||||
readCalibrationValues();
|
||||
|
||||
// Записываем начальный номер ТЭ
|
||||
setTENumber(teNumber);
|
||||
|
||||
m_updateTimer->start(m_timeout);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AdcGraphDialog::setTimeout(int timeout)
|
||||
{
|
||||
m_timeout = timeout;
|
||||
@ -450,7 +510,7 @@ void AdcGraphDialog::onReadReady()
|
||||
}
|
||||
|
||||
} else {
|
||||
qDebug() << "Error reading ADC buffer:" << reply->errorString();
|
||||
// qDebug() << "Error reading ADC buffer:" << reply->errorString();
|
||||
}
|
||||
|
||||
reply->deleteLater();
|
||||
@ -475,7 +535,7 @@ void AdcGraphDialog::updateYAxisRange(double minVoltage, double maxVoltage)
|
||||
yMin = -0.1;
|
||||
yMax = 1.5;
|
||||
}
|
||||
else if(maxVoltage < 0.5)
|
||||
else if(minVoltage < -0.5)
|
||||
{
|
||||
yMin = -1.5;
|
||||
yMax =0.1;
|
||||
@ -507,18 +567,18 @@ double AdcGraphDialog::convertAdcToVoltage(quint16 adcValue)
|
||||
void AdcGraphDialog::on_startAddressChanged(int value)
|
||||
{
|
||||
m_startAddress = value;
|
||||
qDebug() << "Start address changed to:" << value;
|
||||
// qDebug() << "Start address changed to:" << value;
|
||||
}
|
||||
|
||||
void AdcGraphDialog::on_registerCountChanged(int value)
|
||||
{
|
||||
m_registerCount = value;
|
||||
qDebug() << "Register count changed to:" << value;
|
||||
// qDebug() << "Register count changed to:" << value;
|
||||
}
|
||||
|
||||
void AdcGraphDialog::on_rangeApplyClicked()
|
||||
{
|
||||
qDebug() << "Applying new range - Start:" << m_startAddress << "Count:" << m_registerCount;
|
||||
// qDebug() << "Applying new range - Start:" << m_startAddress << "Count:" << m_registerCount;
|
||||
updateGraphRange();
|
||||
|
||||
// Немедленно обновляем данные
|
||||
|
@ -34,6 +34,9 @@ protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
private slots:
|
||||
void on_teNumberChanged(int value);
|
||||
void on_teApplyClicked();
|
||||
void setTENumber(int teNumber);
|
||||
void onUpdateTimer();
|
||||
void onReadReady();
|
||||
void onStableIndicesReady();
|
||||
@ -68,6 +71,7 @@ private:
|
||||
QChart *m_chart; // Добавить указатель на chart
|
||||
|
||||
// Управление диапазоном регистров
|
||||
int m_pendingTeNumber;
|
||||
int m_startAddress;
|
||||
int m_registerCount;
|
||||
|
||||
|
@ -14,7 +14,6 @@
|
||||
<string>График АЦП</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<!-- Панель управления диапазоном -->
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="rangeLayout">
|
||||
<item>
|
||||
@ -77,13 +76,32 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Номер ТЭ</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="teNumberSpinBox">
|
||||
<property name="maximum">
|
||||
<number>85</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="teApplyButton">
|
||||
<property name="text">
|
||||
<string>Применить</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<widget class="QWidget" name="plotWidget" native="true"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
@ -168,4 +186,4 @@
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
</ui>
|
||||
|
@ -1532,6 +1532,7 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status)
|
||||
const QModbusDataUnit unit = reply->result();
|
||||
bool W_Flag = false;
|
||||
bool A_Flag = false;
|
||||
|
||||
if(unit.startAddress() != 0 || unit.valueCount() != 85) {
|
||||
logError(tr("Плата %1 (ID %2)").arg(boardID+1).arg(Boards[boardID].adr),
|
||||
"Ошибка при приёме.", ++Boards[boardID].error_RX,
|
||||
@ -1595,7 +1596,16 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status)
|
||||
|
||||
QString W_Adr;
|
||||
QString A_Adr;
|
||||
for(int i = unit.startAddress(), total = int(unit.valueCount()); i < total; ++i) {
|
||||
int total_qnt;
|
||||
if(boardID == 3)
|
||||
{
|
||||
total_qnt = 65;
|
||||
}
|
||||
else
|
||||
{
|
||||
total_qnt = 85;
|
||||
}
|
||||
for(int i = unit.startAddress(), total = total_qnt; i < total; ++i) {
|
||||
if(Boards[boardID].coil[i]==true) {
|
||||
int j = 0;
|
||||
if(Boards[boardID].HR[i+85] > unit.value(i)) {
|
||||
@ -1635,9 +1645,9 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status)
|
||||
Boards[boardID].ModbusModelHoldingReg->set_currentU(unit.value(i), i);
|
||||
}
|
||||
Boards[boardID].ModbusModelCoil->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 2),
|
||||
ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 2));
|
||||
ui->writeValueTable->model()->index(unit.startAddress() + total_qnt -1, 2));
|
||||
Boards[boardID].ModbusModelHoldingReg->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 3),
|
||||
ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 3));
|
||||
ui->writeValueTable->model()->index(unit.startAddress() + total_qnt -1, 3));
|
||||
if(A_Flag && !A_Adr.isEmpty()) {
|
||||
statusM3KTE.Accidents[boardID] = true;
|
||||
logError(tr("Плата %1 (ID %2)").arg(boardID+1).arg(Boards[boardID].adr),
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user