Skip to content

Commit

Permalink
fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
fosghen committed Jan 20, 2025
1 parent f11a300 commit 511e7b8
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 10 deletions.
4 changes: 2 additions & 2 deletions connectionmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ bool ConnectionManager::connectDevice(SettingsDialog::Settings settings) {
m_modbusDevice ->setConnectionParameter(QModbusDevice::SerialStopBitsParameter,
settings.stopBits);

m_modbusDevice ->setTimeout(1000);
m_modbusDevice ->setNumberOfRetries(3);
m_modbusDevice ->setTimeout(500);
m_modbusDevice ->setNumberOfRetries(5);
if (!m_modbusDevice ->connectDevice()) {
emit connectionFailed(tr("Подключение не выполнено: %1").arg(m_modbusDevice ->errorString()));
return false;
Expand Down
19 changes: 13 additions & 6 deletions registermanager.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "registermanager.h"

#include "tablemanager.h"
#include <QThread>

int current_register;

Expand All @@ -11,6 +12,8 @@ RegisterManager::RegisterManager(QObject *parent)
void RegisterManager::registersInit(TableManager* m_tableManager)
{
registers = &m_tableManager->registers;
numRegisterRead = &m_tableManager->numRegisterRead;
startRegAddress = &m_tableManager->startRegAddress;
regAddress = &m_tableManager->regAddress;
}

Expand Down Expand Up @@ -61,14 +64,16 @@ void RegisterManager::readRegisters(int slaveAddress, QModbusRtuSerialClient *mo
current_register = 0;
int a = 0;
for (int i = 0; i < (*regAddress).size(); i++){
if ((*registers)[(*regAddress)[i]].Access == 1) continue;

if (!(*registers)[(*regAddress)[i]].isRead) continue;
qDebug() << (*registers)[(*regAddress)[i]].Address;
QModbusDataUnit readRequest = QModbusDataUnit(QModbusDataUnit::HoldingRegisters,
(*regAddress)[i],
1);
if (auto *reply = modbusDevice->sendReadRequest(readRequest, slaveAddress)) {
qDebug() << slaveAddress << "slaveAddress";
if (!reply->isFinished()){
connect(reply, &QModbusReply::finished, this, &RegisterManager::onReadReady);
qDebug() << a;
a++;
}
else
Expand All @@ -87,9 +92,9 @@ void RegisterManager::onReadReady()

if (reply->error() == QModbusDevice::NoError) {
const QModbusDataUnit unit = reply->result();
qDebug() <<unit.value(0);
if ((*registers)[(*regAddress)[current_register]].Access == 1) current_register ++;
(*registers)[(*regAddress)[current_register]].Value = unit.value(0);
qDebug() <<current_register << "Reply";
// if ((*registers)[(*regAddress)[current_register]].Access == 1) current_register ++;
(*registers)[(*regAddress)[*startRegAddress + current_register]].Value = unit.value(0);
current_register++;

} else if (reply->error() == QModbusDevice::ProtocolError) {
Expand All @@ -104,9 +109,11 @@ void RegisterManager::onReadReady()

reply->deleteLater();

if (current_register == (*regAddress).size()){
qDebug() << *startRegAddress << "," << *numRegisterRead;
if (current_register == *numRegisterRead){
emit isFinished();
}
QThread::msleep(10);
}


3 changes: 2 additions & 1 deletion registermanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class RegisterManager : public QObject {
QModbusRtuSerialClient *modbusDevice;
QMap<int, TableManager::Register>* registers;
QVector<int>* regAddress;

int* numRegisterRead;
int* startRegAddress;
};

#endif // REGISTERMANAGER_H
35 changes: 34 additions & 1 deletion tablemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ QTableWidget* TableManager::configTab(QString tab, QWidget* newTab, QJsonObject
// Чтобы подключить шорткат для Enter надо создать лямбду функцию
connect(shortcut, &QShortcut::activated, this, [this, newTable]() {onEnterClicked(newTable);});
connect(m_tabWidget, &QTabWidget::currentChanged, this, &TableManager::clearTable);
connect(m_tabWidget, &QTabWidget::currentChanged, this, &TableManager::chooseAllRegInTab);

return newTable;
}
Expand All @@ -136,7 +137,7 @@ int TableManager::configTable(QJsonObject regInfo, QTableWidget* table, int row)

int access = regInfo.value("access").toInt();
QTableWidgetItem *value = new QTableWidgetItem(regInfo.value("").toString());
if (access == 0) configItem(value);
if (access == 1) configItem(value);

registersTalbeItem[address_] = *value;
table->setItem(row, 0, meaning);
Expand Down Expand Up @@ -175,6 +176,7 @@ void TableManager::pasteJsonData()
int row = 0;
for (int reg : keys)
{

struct Register register_;
QJsonObject regInfo = regObject.value(QString::number(reg)).toObject();
int address = configTable(regInfo, newTable, row);
Expand All @@ -188,6 +190,7 @@ void TableManager::pasteJsonData()
register_.Digits = digits;
register_.Multy = multy;
register_.isWrite = false;
register_.isRead = false;

registers[address] = register_;
regAddress.append(address);
Expand Down Expand Up @@ -217,6 +220,36 @@ void TableManager::clearTable()
}
}

void TableManager::chooseAllRegInTab(int index)
{
int pageCount = m_tabWidget->count();

for (int i = 0; i < pageCount; i++){
QWidget *tab = m_tabWidget->widget(i);
QVBoxLayout *layout = qobject_cast<QVBoxLayout*>(tab->layout());
QTableWidget *tableWidget = qobject_cast<QTableWidget*>(layout->itemAt(0)->widget());
for (int row = 0; row < tableWidget->rowCount(); row++){
QTableWidgetItem *item = tableWidget->item(row, 3);
int address = item->text().toInt();
registers[address].isRead = false;
numRegisterRead = 0;
}
}
startRegAddress = 0;

QWidget *tab = m_tabWidget->widget(index);
QVBoxLayout *layout = qobject_cast<QVBoxLayout*>(tab->layout());
QTableWidget *tableWidget = qobject_cast<QTableWidget*>(layout->itemAt(0)->widget());
for (int row = 0; row < tableWidget->rowCount(); row++){
QTableWidgetItem *item = tableWidget->item(row, 3);
int address = item->text().toInt();
registers[address].isRead = true;
numRegisterRead++;
}
startRegAddress = index * 50;
qDebug() << startRegAddress;
}

void TableManager::updateTable()
{
for (int i = 0; i < regAddress.size(); i++){
Expand Down
4 changes: 4 additions & 0 deletions tablemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class TableManager : public QObject {
explicit TableManager(QObject *parent = nullptr);

void readInitialize(QTabWidget* tabWidget_, QCheckBox *multyBox, QString registerPath);
void chooseAllRegInTab(int index);
void clearTable();
void updateTable();

Expand All @@ -26,9 +27,12 @@ class TableManager : public QObject {
int Digits;
float Multy;
bool isWrite;
bool isRead;
};

QMap<int, Register> registers;
int numRegisterRead;
int startRegAddress;
QMap<int, QTableWidgetItem> registersTalbeItem;
QVector<int> regAddress;

Expand Down

0 comments on commit 511e7b8

Please sign in to comment.