Обновление отображения значений регистров с HEX на значения порогов.
Для быстроты ввода дробной части новые значения записывать с учётом последующего деления на 1000. (Ввод 500, Запись 0.500)
This commit is contained in:
parent
5ae694d254
commit
a9f3d13b5f
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user