Pre-release.

Added:
1) Added check for transition to new speed and parity.
2) Added the ability to stop scanning before polling all addresses.
3) A window has been added that allows you to set the value of multiple registers at once. Supports both simple saving on the device and the saved-sent mode.
4) Added check for parity and speed changes.
5) Added output of current voltage to the table.
6) Now, when you click on an indicator in the table, the corresponding element will be highlighted.

Minor updates:
1) Now the device settings take into account the number of boards found during scanning.
2) When you close the main window, the device turns off.
This commit is contained in:
Вячеслав Штейбезандт 2024-12-18 14:58:33 +03:00
parent 49083ca06d
commit fc01a6c06d
15 changed files with 8628 additions and 7951 deletions

View File

@ -25,18 +25,21 @@ SOURCES += \
devicesettingsdialog.cpp \ devicesettingsdialog.cpp \
main.cpp \ main.cpp \
m3kte.cpp \ m3kte.cpp \
multiplesettings.cpp \
settingsdialog.cpp \ settingsdialog.cpp \
writeregistermodel.cpp writeregistermodel.cpp
HEADERS += \ HEADERS += \
devicesettingsdialog.h \ devicesettingsdialog.h \
m3kte.h \ m3kte.h \
multiplesettings.h \
settingsdialog.h \ settingsdialog.h \
writeregistermodel.h writeregistermodel.h
FORMS += \ FORMS += \
devicesettingsdialog.ui \ devicesettingsdialog.ui \
m3kte.ui \ m3kte.ui \
multiplesettings.ui \
settingsdialog.ui settingsdialog.ui
# Default rules for deployment. # Default rules for deployment.

View File

@ -12,6 +12,11 @@ DeviceSettingsDialog::DeviceSettingsDialog(QWidget *parent) :
_currentBoardTimers[2] = ui->spinTimerBoard_3->value(); _currentBoardTimers[2] = ui->spinTimerBoard_3->value();
_currentBoardTimers[3] = ui->spinTimerBoard_4->value(); _currentBoardTimers[3] = ui->spinTimerBoard_4->value();
_m_timer[0] = ui->spinTimerBoard_1;
_m_timer[1] = ui->spinTimerBoard_2;
_m_timer[2] = ui->spinTimerBoard_3;
_m_timer[3] = ui->spinTimerBoard_4;
_currentSpeed = ui->speedBox->currentText().toUInt(); _currentSpeed = ui->speedBox->currentText().toUInt();
_currentParity = ui->parityBox->currentIndex(); _currentParity = ui->parityBox->currentIndex();
@ -38,13 +43,13 @@ void DeviceSettingsDialog::on_buttonApplyChangeTimer_clicked()
void DeviceSettingsDialog::on_buttonApplyChangeSpeed_clicked() void DeviceSettingsDialog::on_buttonApplyChangeSpeed_clicked()
{ {
_currentSpeed = ui->speedBox->currentText().toUInt(); _currentSpeed = ui->speedBox->currentIndex();
emit speedChanged(); emit speedChanged();
} }
void DeviceSettingsDialog::on_buttonApplyChangeParity_clicked() void DeviceSettingsDialog::on_buttonApplyChangeParity_clicked()
{ {
_currentParity = ui->parityBox->currentData().toUInt(); _currentParity = ui->parityBox->currentIndex();
emit parityChanged(); emit parityChanged();
} }
@ -52,6 +57,7 @@ void DeviceSettingsDialog::on_buttonApplyChangeAdr_clicked()
{ {
BoardIdHasBeenChanged* _boardIdHasBeenChanged = new BoardIdHasBeenChanged(ui->idComboBox->currentIndex(), ui->adrSpinBox->value()); BoardIdHasBeenChanged* _boardIdHasBeenChanged = new BoardIdHasBeenChanged(ui->idComboBox->currentIndex(), ui->adrSpinBox->value());
QCoreApplication::postEvent(parent(), _boardIdHasBeenChanged); QCoreApplication::postEvent(parent(), _boardIdHasBeenChanged);
close();
} }
unsigned DeviceSettingsDialog::currentBoardTimer(unsigned short _ID) unsigned DeviceSettingsDialog::currentBoardTimer(unsigned short _ID)
@ -69,16 +75,22 @@ unsigned short DeviceSettingsDialog::currentParity()
return _currentParity; return _currentParity;
} }
void DeviceSettingsDialog::updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr) void DeviceSettingsDialog::updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr, int CurrentConnectedDevice)
{ {
ui->speedBox->setCurrentText(QString::number(_currentSpeed=tmp_speed, 10)); ui->speedBox->setCurrentText(QString::number(_currentSpeed=tmp_speed, 10));
if(tmp_parity>0) if(tmp_parity>0)
tmp_parity--; tmp_parity--;
ui->parityBox->setCurrentIndex(_currentParity = tmp_parity); ui->parityBox->setCurrentIndex(_currentParity = tmp_parity);
for(int i = 0; i < 4; i++) for(int i = 0; i < CurrentConnectedDevice; i++)
{ {
_m_timer[i]->setEnabled(true);
ui->idComboBox->addItem(QString::number(i));
_currentAdrs[i] = tmp_adr[i]; _currentAdrs[i] = tmp_adr[i];
} }
for(int i = CurrentConnectedDevice; i < 4; i++)
{
_m_timer[i]->setEnabled(false);
}
on_idComboBox_currentIndexChanged(ui->idComboBox->currentIndex()); on_idComboBox_currentIndexChanged(ui->idComboBox->currentIndex());
} }
@ -86,3 +98,34 @@ void DeviceSettingsDialog::on_idComboBox_currentIndexChanged(int index)
{ {
ui->adrSpinBox->setValue(_currentAdrs[index]); ui->adrSpinBox->setValue(_currentAdrs[index]);
} }
void DeviceSettingsDialog::on_buttonBox_clicked(QAbstractButton *button)
{
switch (ui->buttonBox->buttonRole(button)) {
case QDialogButtonBox::ResetRole:
ui->spinTimerBoard_1->setValue(1000);
ui->spinTimerBoard_2->setValue(1000);
ui->spinTimerBoard_3->setValue(1000);
ui->spinTimerBoard_4->setValue(1000);
_currentBoardTimers[0] = ui->spinTimerBoard_1->value();
_currentBoardTimers[1] = ui->spinTimerBoard_2->value();
_currentBoardTimers[2] = ui->spinTimerBoard_3->value();
_currentBoardTimers[3] = ui->spinTimerBoard_4->value();
ui->speedBox->setCurrentText("31250");
_currentSpeed = ui->speedBox->currentText().toUInt();
ui->parityBox->setCurrentIndex(0);
_currentParity = ui->parityBox->currentIndex();
for(int i = 0; i < 4; i++)
{
_currentAdrs[i] = i+1;
}
ui->adrSpinBox->setValue(_currentAdrs[ui->idComboBox->currentIndex()]);
break;
case QDialogButtonBox::AcceptRole:
close();
break;
}
}

View File

@ -3,6 +3,9 @@
#include <QDialog> #include <QDialog>
#include <QEvent> #include <QEvent>
#include <QAbstractButton>
#include <QDialogButtonBox>
#include <QSpinBox>
class BoardIdHasBeenChanged : public QEvent class BoardIdHasBeenChanged : public QEvent
{ {
@ -33,7 +36,7 @@ public:
unsigned currentBoardTimer(unsigned short _ID); unsigned currentBoardTimer(unsigned short _ID);
unsigned currentSpeed(); unsigned currentSpeed();
unsigned short currentParity(); unsigned short currentParity();
void updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr); void updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr, int CurrentConnectedDevice);
signals: signals:
void parityChanged(); void parityChanged();
void speedChanged(); void speedChanged();
@ -54,7 +57,10 @@ private slots:
void on_idComboBox_currentIndexChanged(int index); void on_idComboBox_currentIndexChanged(int index);
void on_buttonBox_clicked(QAbstractButton *button);
private: private:
QSpinBox *_m_timer[4];
unsigned _currentBoardTimers[4]; unsigned _currentBoardTimers[4];
unsigned _currentSpeed; unsigned _currentSpeed;
unsigned short _currentParity; unsigned short _currentParity;

View File

@ -30,28 +30,18 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QComboBox" name="speedBox"> <widget class="QComboBox" name="speedBox">
<property name="currentIndex"> <property name="currentIndex">
<number>5</number> <number>3</number>
</property> </property>
<item>
<property name="text">
<string>1200</string>
</property>
</item>
<item>
<property name="text">
<string>2400</string>
</property>
</item>
<item>
<property name="text">
<string>4800</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>9600</string> <string>9600</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>14400</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>19200</string> <string>19200</string>
@ -67,6 +57,11 @@
<string>38400</string> <string>38400</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>56000</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>57600</string> <string>57600</string>
@ -204,30 +199,17 @@
<property name="whatsThis"> <property name="whatsThis">
<string>Номер платы</string> <string>Номер платы</string>
</property> </property>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QSpinBox" name="adrSpinBox"/> <widget class="QSpinBox" name="adrSpinBox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>247</number>
</property>
</widget>
</item> </item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QPushButton" name="buttonApplyChangeAdr"> <widget class="QPushButton" name="buttonApplyChangeAdr">

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,7 @@
#include <QtSerialBus/QModbusDataUnit> #include <QtSerialBus/QModbusDataUnit>
#include "writeregistermodel.h" #include "writeregistermodel.h"
#include "devicesettingsdialog.h" #include "devicesettingsdialog.h"
#include "multiplesettings.h"
#include <QModbusTcpClient> #include <QModbusTcpClient>
#include <QModbusRtuSerialMaster> #include <QModbusRtuSerialMaster>
@ -16,6 +17,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QProgressDialog> #include <QProgressDialog>
#include <QErrorMessage> #include <QErrorMessage>
#include <QPushButton>
#include <QtSerialBus/qtserialbusglobal.h> #include <QtSerialBus/qtserialbusglobal.h>
@ -45,7 +47,16 @@ private:
void beginScanBoards(); void beginScanBoards();
void displayResultOfScan(QModbusReply *reply, int boardID); void displayResultOfScan(QModbusReply *reply, int boardID);
void stepForScanCurrentSettings(QModbusReply *reply); void stepForScanCurrentSettings(QModbusReply *reply);
void multipleRegWrite();
void multipleRegSend();
void selectPositionOnTree(unsigned index);
private slots: private slots:
void slotmultipleRegWrite();
void slotmultipleRegWriteAndSend();
void onConnectClicked(); void onConnectClicked();
void onReadButtonClicked(); void onReadButtonClicked();
@ -62,7 +73,6 @@ private slots:
void onSpeedUpdate(); void onSpeedUpdate();
void onParityUpdate(); void onParityUpdate();
void firstBoardScan(); void firstBoardScan();
void secondBoardScan(); void secondBoardScan();
void thirdBoardScan(); void thirdBoardScan();
@ -77,17 +87,17 @@ public:
~M3KTE(); ~M3KTE();
private: private:
bool timerForPingSignal = false;
Ui::M3KTE *ui; Ui::M3KTE *ui;
bool timerForPingSignal = false;
int CurrentConnectedDevice = 0;
//int DeviceOnNetwork[4]; //int DeviceOnNetwork[4];
QProgressBar *m[320]; QProgressBar *m_ProgressBar[320];
QPushButton *ThePhantomMenace[320];
QModbusReply *lastRequest = nullptr; QModbusReply *lastRequest = nullptr;
QModbusClient *modbusDevice = nullptr; QModbusClient *modbusDevice = nullptr;
DeviceSettingsDialog *m_deviceSettingsDialog = nullptr; DeviceSettingsDialog *m_deviceSettingsDialog = nullptr;
SettingsDialog *m_settingsDialog = nullptr; SettingsDialog *m_settingsDialog = nullptr;
MultipleSettings *m_regMultipleSettings = nullptr;
//WriteRegisterModel *writeModel = nullptr; //WriteRegisterModel *writeModel = nullptr;
struct StatusM3KTE{ struct StatusM3KTE{
@ -99,6 +109,10 @@ private:
{ {
int adr; int adr;
int _tmp_adr; int _tmp_adr;
bool coil[85];
unsigned HR[170];
WriteRegisterModel *ModbusModelCoil; WriteRegisterModel *ModbusModelCoil;
WriteRegisterModel *ModbusModelHoldingReg; WriteRegisterModel *ModbusModelHoldingReg;
QTimer *boardScanners; QTimer *boardScanners;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,75 @@
#include "multiplesettings.h"
#include "ui_multiplesettings.h"
MultipleSettings::MultipleSettings(QWidget *parent) :
QDialog(parent),
ui(new Ui::MultipleSettings)
{
ui->setupUi(this);
ui->buttonBox->button(QDialogButtonBox::Ok)->setText("Записать");
ui->buttonBox->button(QDialogButtonBox::SaveAll)->setText("Записать и установить");
}
MultipleSettings::~MultipleSettings()
{
delete ui;
}
void MultipleSettings::on_buttonBox_clicked(QAbstractButton *button)
{
if(button == ui->buttonBox->button(QDialogButtonBox::Ok))
{
newValue = ui->regValueLine->text().toInt(nullptr, 16);
typeReg = ui->regTypeBox->currentIndex();
startAdr = ui->adrBox->value();
countReg = ui->countBox->value();
boardId = ui->boardBox->currentIndex();
emit write();
}
else if (button == ui->buttonBox->button(QDialogButtonBox::SaveAll))
{
newValue = ui->regValueLine->text().toInt(nullptr, 16);
typeReg = ui->regTypeBox->currentIndex();
startAdr = ui->adrBox->value();
countReg = ui->countBox->value();
boardId = ui->boardBox->currentIndex();
emit writeAndSend();
}
else
{
}
}
void MultipleSettings::on_regTypeBox_currentIndexChanged(int index)
{
switch (index) {
case 0:
case 1:
ui->adrBox->setRange(0, 84);
ui->adrBox->setValue(0);
break;
case 2:
ui->adrBox->setRange(85, 170);
ui->adrBox->setValue(85);
break;
}
}
void MultipleSettings::on_boardBox_currentIndexChanged(int index)
{
switch (index) {
case 3:
ui->countBox->setRange(1, 65-ui->adrBox->value()+85*ui->regTypeBox->currentIndex()/2);
break;
default:
ui->countBox->setRange(1, 85-ui->adrBox->value()+85*ui->regTypeBox->currentIndex()/2);
}
}
void MultipleSettings::on_adrBox_valueChanged(int arg1)
{
ui->countBox->setRange(1, ((85-(20*(ui->boardBox->currentIndex()/3)))*(1+(ui->regTypeBox->currentIndex()/2))-arg1));
}

View File

@ -0,0 +1,45 @@
#ifndef MULTIPLESETTINGS_H
#define MULTIPLESETTINGS_H
#include <QDialog>
#include <QPushButton>
namespace Ui {
class MultipleSettings;
}
class MultipleSettings : public QDialog
{
Q_OBJECT
public:
explicit MultipleSettings(QWidget *parent = nullptr);
~MultipleSettings();
quint16 getNewValue() {return newValue;}
unsigned getStartAdr() {return startAdr;}
unsigned getCountReg() {return countReg;}
short getTypeReg() {return typeReg;}
short getBoardId() {return boardId;}
signals:
void write();
void writeAndSend();
private slots:
void on_buttonBox_clicked(QAbstractButton *button);
void on_regTypeBox_currentIndexChanged(int index);
void on_boardBox_currentIndexChanged(int index);
void on_adrBox_valueChanged(int arg1);
private:
Ui::MultipleSettings *ui;
quint16 newValue = 0;
unsigned startAdr;
unsigned countReg;
short typeReg;
short boardId;
};
#endif // MULTIPLESETTINGS_H

View File

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MultipleSettings</class>
<widget class="QDialog" name="MultipleSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>381</width>
<height>128</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Уставка</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="4">
<widget class="QLabel" name="countLabel">
<property name="text">
<string>Кол-во</string>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QLabel" name="adrLabel">
<property name="text">
<string>Стартовый</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="boardLabel">
<property name="text">
<string>Плата</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="adrBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>84</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="boardBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
</widget>
</item>
<item row="1" column="4">
<widget class="QSpinBox" name="countBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>85</number>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLineEdit" name="regValueLine"/>
</item>
<item row="0" column="5">
<widget class="QLabel" name="regValueLabel">
<property name="text">
<string>Значение (HEX)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="regTypeBox">
<item>
<property name="text">
<string>Coil</string>
</property>
</item>
<item>
<property name="text">
<string>Warning</string>
</property>
</item>
<item>
<property name="text">
<string>Accident</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="regTypeLabel">
<property name="text">
<string>Тип Регистра</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::SaveAll</set>
</property>
<property name="centerButtons">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>MultipleSettings</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MultipleSettings</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -45,8 +45,8 @@ SettingsDialog::Settings SettingsDialog::settings() const
int SettingsDialog::UpdateBaud(int baud) int SettingsDialog::UpdateBaud(int baud)
{ {
ui->baudCombo->setCurrentText(QString::number(baud, 10)); ui->baudCombo->setCurrentIndex(baud);
return (m_settings.baud = baud); return (m_settings.baud = ui->baudCombo->currentText().toInt());
} }
int SettingsDialog::UpdateParity(int parity) int SettingsDialog::UpdateParity(int parity)
@ -60,3 +60,13 @@ int SettingsDialog::UpdateParity(int parity)
return (m_settings.parity = parity); return (m_settings.parity = parity);
} }
} }
int SettingsDialog::curBaud()
{
return ui->baudCombo->currentIndex();
}
int SettingsDialog::curParity()
{
return ui->parityCombo->currentIndex();
}

View File

@ -23,8 +23,8 @@ public:
int baud = 115200; int baud = 115200;
int dataBits = QSerialPort::Data8; int dataBits = QSerialPort::Data8;
int stopBits = QSerialPort::OneStop; int stopBits = QSerialPort::OneStop;
int responseTime = 1000; int responseTime = 500;
int numberOfRetries = 3; int numberOfRetries = 0;
}; };
explicit SettingsDialog(QWidget *parent = nullptr); explicit SettingsDialog(QWidget *parent = nullptr);
@ -35,7 +35,8 @@ public:
int UpdateBaud(int baud); int UpdateBaud(int baud);
int UpdateParity(int parity); int UpdateParity(int parity);
int curBaud();
int curParity();
private: private:
Settings m_settings; Settings m_settings;
Ui::SettingsDialog *ui; Ui::SettingsDialog *ui;

View File

@ -35,8 +35,11 @@
</item> </item>
<item row="2" column="1" rowspan="2" colspan="2"> <item row="2" column="1" rowspan="2" colspan="2">
<widget class="QSpinBox" name="retriesSpinner"> <widget class="QSpinBox" name="retriesSpinner">
<property name="enabled">
<bool>false</bool>
</property>
<property name="value"> <property name="value">
<number>3</number> <number>0</number>
</property> </property>
</widget> </widget>
</item> </item>
@ -112,28 +115,18 @@
<item row="2" column="1"> <item row="2" column="1">
<widget class="QComboBox" name="baudCombo"> <widget class="QComboBox" name="baudCombo">
<property name="currentIndex"> <property name="currentIndex">
<number>8</number> <number>7</number>
</property> </property>
<item>
<property name="text">
<string>1200</string>
</property>
</item>
<item>
<property name="text">
<string>2400</string>
</property>
</item>
<item>
<property name="text">
<string>4800</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>9600</string> <string>9600</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>14400</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>19200</string> <string>19200</string>
@ -149,6 +142,11 @@
<string>38400</string> <string>38400</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>56000</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>57600</string> <string>57600</string>

View File

@ -2,11 +2,11 @@
#include "writeregistermodel.h" #include "writeregistermodel.h"
enum { NumColumn = 0, NameColumn = 1, CoilsColumn = 2, HoldingColumn = 3, ColumnCount = 4}; enum { NumColumn = 0, NameColumn = 1, CoilsColumn = 2, HoldingColumn = 3, ColumnCount = 5, CurrentUColumn = 4};
WriteRegisterModel::WriteRegisterModel(QObject *parent, int _tmpRC, bool _isHR) WriteRegisterModel::WriteRegisterModel(QObject *parent, int _tmpRC, bool _isHR)
: QAbstractTableModel(parent), : QAbstractTableModel(parent),
m_coils(RowCount=_tmpRC, false), m_holdingRegisters(RowCount=_tmpRC, 0u) m_coils(RowCount=_tmpRC, false), m_holdingRegisters(RowCount=_tmpRC, 0u), m_currentU(RowCount=_tmpRC)
{ {
isHR=_isHR; isHR=_isHR;
} }
@ -41,6 +41,9 @@ QVariant WriteRegisterModel::data(const QModelIndex &index, int role) const
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("0x%1").arg(QString::number(m_holdingRegisters.at(index.row()), 16));
if(index.column() == CurrentUColumn && role == Qt::DisplayRole)
return QString("%1 В").arg(QString::number((double)((double)m_currentU.at(index.row())/(double)1000)));
return QVariant(); return QVariant();
} }
@ -60,6 +63,8 @@ QVariant WriteRegisterModel::headerData(int section, Qt::Orientation orientation
return QStringLiteral("Coils"); return QStringLiteral("Coils");
case HoldingColumn: case HoldingColumn:
return QStringLiteral("Holding Registers"); return QStringLiteral("Holding Registers");
case CurrentUColumn:
return QStringLiteral("Current U");
default: default:
break; break;
} }
@ -133,3 +138,11 @@ uint WriteRegisterModel::get_holreg(const QModelIndex &index)
{ {
return m_holdingRegisters.at(index.row()); return m_holdingRegisters.at(index.row());
} }
bool WriteRegisterModel::set_currentU(unsigned _tmpU, unsigned index)
{
m_currentU[index] = _tmpU;
if(isHR)
m_currentU[index + m_number] = _tmpU;
return true;
}

View File

@ -24,6 +24,8 @@ public:
Qt::ItemFlags flags(const QModelIndex &index) const override; Qt::ItemFlags flags(const QModelIndex &index) const override;
bool set_currentU(unsigned _tmpU, unsigned index);
public slots: public slots:
void setStartAddress(int address); void setStartAddress(int address);
void setNumberOfValues(const QString &number); void setNumberOfValues(const QString &number);
@ -36,5 +38,6 @@ public:
int m_address = 0; int m_address = 0;
QBitArray m_coils; QBitArray m_coils;
QVector<quint16> m_holdingRegisters; QVector<quint16> m_holdingRegisters;
QVector<quint16> m_currentU;
}; };
#endif // WRITEREGISTERMODEL_H #endif // WRITEREGISTERMODEL_H