Обновление отображения значений регистров с 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);
|
Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Unchecked, Qt::CheckStateRole);
|
||||||
} else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) {
|
} else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) {
|
||||||
Boards[Adr].HR[i + unit.startAddress()] = unit.value(i);
|
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()) {
|
switch(unit.registerType()) {
|
||||||
@ -969,12 +969,10 @@ void M3KTE::checkAdrChange(QModbusReply *reply, unsigned boardNum)
|
|||||||
void M3KTE::checkBoards()
|
void M3KTE::checkBoards()
|
||||||
{
|
{
|
||||||
QModbusDataUnit unitCheck(QModbusDataUnit::InputRegisters, 85, 1);
|
QModbusDataUnit unitCheck(QModbusDataUnit::InputRegisters, 85, 1);
|
||||||
|
|
||||||
// Используем shared pointers вместо ссылок на стековые переменные
|
// Используем shared pointers вместо ссылок на стековые переменные
|
||||||
auto totalActiveBoards = QSharedPointer<int>::create(0);
|
auto totalActiveBoards = QSharedPointer<int>::create(0);
|
||||||
auto confirmedBoards = QSharedPointer<int>::create(0);
|
auto confirmedBoards = QSharedPointer<int>::create(0);
|
||||||
auto pendingBoards = QSharedPointer<QSet<int>>::create();
|
auto pendingBoards = QSharedPointer<QSet<int>>::create();
|
||||||
|
|
||||||
for(int i = 0; i < 4; ++i) {
|
for(int i = 0; i < 4; ++i) {
|
||||||
if(!Boards[i].isActive)
|
if(!Boards[i].isActive)
|
||||||
continue;
|
continue;
|
||||||
@ -986,7 +984,6 @@ void M3KTE::checkBoards()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pendingBoards->insert(slaveAddress);
|
pendingBoards->insert(slaveAddress);
|
||||||
|
|
||||||
connect(reply, &QModbusReply::finished, this,
|
connect(reply, &QModbusReply::finished, this,
|
||||||
[this, i, reply, slaveAddress, totalActiveBoards, confirmedBoards, pendingBoards]() {
|
[this, i, reply, slaveAddress, totalActiveBoards, confirmedBoards, pendingBoards]() {
|
||||||
if(reply->error() == QModbusDevice::NoError) {
|
if(reply->error() == QModbusDevice::NoError) {
|
||||||
@ -998,7 +995,6 @@ void M3KTE::checkBoards()
|
|||||||
}
|
}
|
||||||
pendingBoards->remove(slaveAddress);
|
pendingBoards->remove(slaveAddress);
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
if(pendingBoards->isEmpty()) {
|
if(pendingBoards->isEmpty()) {
|
||||||
if(*confirmedBoards != *totalActiveBoards) {
|
if(*confirmedBoards != *totalActiveBoards) {
|
||||||
emit errorAtCheckBoards();
|
emit errorAtCheckBoards();
|
||||||
@ -1739,7 +1735,7 @@ void M3KTE::applySettingsFromScan(QModbusReply *reply)
|
|||||||
}
|
}
|
||||||
} else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) {
|
} else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) {
|
||||||
Boards[Adr].HR[i + unit.startAddress()] = unit.value(i);
|
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) {
|
} else if(reply->error() == QModbusDevice::ProtocolError) {
|
||||||
@ -1890,7 +1886,8 @@ QModbusReply* M3KTE::readSingleCoil(int boardID, int coilAddress)
|
|||||||
void M3KTE::selectPositionOnTree(unsigned int index)
|
void M3KTE::selectPositionOnTree(unsigned int index)
|
||||||
{
|
{
|
||||||
ui->boardSelectBox->setCurrentIndex(index/85);
|
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->selectionModel()->select(selected, QItemSelectionModel::ClearAndSelect |QItemSelectionModel::Rows);
|
||||||
ui->writeValueTable->scrollTo(selected);
|
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
|
if (index.column() == CoilsColumn && role == Qt::CheckStateRole) // coils
|
||||||
return m_coils.at(index.row()) ? Qt::Checked : Qt::Unchecked;
|
return m_coils.at(index.row()) ? Qt::Checked : Qt::Unchecked;
|
||||||
if (index.column() == HoldingColumn && role == Qt::DisplayRole) // holding registers
|
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)
|
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 QString("%1 В").arg(QString::number((double)((double)m_currentU.at(index.row())/(double)1000), 'f', 3));
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -77,7 +77,7 @@ bool WriteRegisterModel::setData(const QModelIndex &index, const QVariant &value
|
|||||||
}
|
}
|
||||||
if (index.column() == HoldingColumn && role == Qt::EditRole) { // holding registers
|
if (index.column() == HoldingColumn && role == Qt::EditRole) { // holding registers
|
||||||
bool result = false;
|
bool result = false;
|
||||||
quint16 newValue = value.toString().toUShort(&result, 16);
|
quint16 newValue = value.toString().toUShort(&result, 10);
|
||||||
if (result)
|
if (result)
|
||||||
m_holdingRegisters[index.row()] = newValue;
|
m_holdingRegisters[index.row()] = newValue;
|
||||||
emit dataChanged(index, index);
|
emit dataChanged(index, index);
|
||||||
|
Loading…
Reference in New Issue
Block a user