Обновление отображения значений регистров с HEX на значения порогов.

Для быстроты ввода дробной части новые значения записывать с учётом последующего деления на 1000. (Ввод 500, Запись 0.500)
This commit is contained in:
Вячеслав Штейбезандт 2025-10-16 09:11:58 +03:00
parent 5ae694d254
commit a9f3d13b5f
2 changed files with 6 additions and 9 deletions

View File

@ -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<int>::create(0);
auto confirmedBoards = QSharedPointer<int>::create(0);
auto pendingBoards = QSharedPointer<QSet<int>>::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);
}

View File

@ -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);