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