From a9f3d13b5f2d29f2fd8828983acf075845d8eb54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A8?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=D0=B1=D0=B5=D0=B7=D0=B0=D0=BD=D0=B4=D1=82?= Date: Thu, 16 Oct 2025 09:11:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=81=20HEX=20=D0=BD=D0=B0=20=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D1=80=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для быстроты ввода дробной части новые значения записывать с учётом последующего деления на 1000. (Ввод 500, Запись 0.500) --- M3KTE_TERM/m3kte.cpp | 11 ++++------- M3KTE_TERM/writeregistermodel.cpp | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/M3KTE_TERM/m3kte.cpp b/M3KTE_TERM/m3kte.cpp index 720d3bf..41cf804 100644 --- a/M3KTE_TERM/m3kte.cpp +++ b/M3KTE_TERM/m3kte.cpp @@ -720,7 +720,7 @@ void M3KTE::onReadReady() Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Unchecked, Qt::CheckStateRole); } else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) { Boards[Adr].HR[i + unit.startAddress()] = unit.value(i); - Boards[Adr].ModbusModelHoldingReg->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 16), Qt::EditRole); + Boards[Adr].ModbusModelHoldingReg->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 10), Qt::EditRole); } } switch(unit.registerType()) { @@ -969,12 +969,10 @@ void M3KTE::checkAdrChange(QModbusReply *reply, unsigned boardNum) void M3KTE::checkBoards() { QModbusDataUnit unitCheck(QModbusDataUnit::InputRegisters, 85, 1); - // Используем shared pointers вместо ссылок на стековые переменные auto totalActiveBoards = QSharedPointer::create(0); auto confirmedBoards = QSharedPointer::create(0); auto pendingBoards = QSharedPointer>::create(); - for(int i = 0; i < 4; ++i) { if(!Boards[i].isActive) continue; @@ -986,7 +984,6 @@ void M3KTE::checkBoards() return; } pendingBoards->insert(slaveAddress); - connect(reply, &QModbusReply::finished, this, [this, i, reply, slaveAddress, totalActiveBoards, confirmedBoards, pendingBoards]() { if(reply->error() == QModbusDevice::NoError) { @@ -998,7 +995,6 @@ void M3KTE::checkBoards() } pendingBoards->remove(slaveAddress); reply->deleteLater(); - if(pendingBoards->isEmpty()) { if(*confirmedBoards != *totalActiveBoards) { emit errorAtCheckBoards(); @@ -1739,7 +1735,7 @@ void M3KTE::applySettingsFromScan(QModbusReply *reply) } } else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) { Boards[Adr].HR[i + unit.startAddress()] = unit.value(i); - Boards[Adr].ModbusModelHoldingReg->setData(Boards[Adr].ModbusModelHoldingReg->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 16), Qt::EditRole); + Boards[Adr].ModbusModelHoldingReg->setData(Boards[Adr].ModbusModelHoldingReg->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 10), Qt::EditRole); } } } else if(reply->error() == QModbusDevice::ProtocolError) { @@ -1890,7 +1886,8 @@ QModbusReply* M3KTE::readSingleCoil(int boardID, int coilAddress) void M3KTE::selectPositionOnTree(unsigned int index) { ui->boardSelectBox->setCurrentIndex(index/85); - QModelIndex selected = ui->writeValueTable->model()->index(index%85, 0); + int maxReg = 85 - (ui->boardSelectBox->currentIndex()/3*20); + QModelIndex selected = ui->writeValueTable->model()->index(index%maxReg + maxReg*(ui->writeTable->currentIndex()/2), 0); ui->writeValueTable->selectionModel()->select(selected, QItemSelectionModel::ClearAndSelect |QItemSelectionModel::Rows); ui->writeValueTable->scrollTo(selected); } diff --git a/M3KTE_TERM/writeregistermodel.cpp b/M3KTE_TERM/writeregistermodel.cpp index 98103f5..d7e2907 100644 --- a/M3KTE_TERM/writeregistermodel.cpp +++ b/M3KTE_TERM/writeregistermodel.cpp @@ -34,7 +34,7 @@ QVariant WriteRegisterModel::data(const QModelIndex &index, int role) const if (index.column() == CoilsColumn && role == Qt::CheckStateRole) // coils return m_coils.at(index.row()) ? Qt::Checked : Qt::Unchecked; if (index.column() == HoldingColumn && role == Qt::DisplayRole) // holding registers - return QString("0x%1").arg(QString::number(m_holdingRegisters.at(index.row()), 16)); + return QString("%1 В").arg(QString::number((double)((double)m_holdingRegisters.at(index.row())/(double)1000), 'f', 3)); if(index.column() == CurrentUColumn && role == Qt::DisplayRole) return QString("%1 В").arg(QString::number((double)((double)m_currentU.at(index.row())/(double)1000), 'f', 3)); return QVariant(); @@ -77,7 +77,7 @@ bool WriteRegisterModel::setData(const QModelIndex &index, const QVariant &value } if (index.column() == HoldingColumn && role == Qt::EditRole) { // holding registers bool result = false; - quint16 newValue = value.toString().toUShort(&result, 16); + quint16 newValue = value.toString().toUShort(&result, 10); if (result) m_holdingRegisters[index.row()] = newValue; emit dataChanged(index, index);