You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.6 KiB
121 lines
3.6 KiB
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include "qdebug.h"
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
ui->writeTable->addItem(tr("Coils"), 0);
|
|
ui->writeTable->addItem(tr("Discrete Inputs"), 1);
|
|
ui->writeTable->addItem(tr("Input Registers"), 2);
|
|
ui->writeTable->addItem(tr("Holding Registers"), 3);
|
|
connect(&modBusObj, &modBusMaster::modbusConnectionState, this, &MainWindow::connectionState);
|
|
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
delete ui;
|
|
|
|
}
|
|
|
|
void MainWindow::on_connectButton_clicked()
|
|
{
|
|
if( ui->connectButton->text()==tr("Disconnect"))
|
|
{
|
|
modBusObj.stop();
|
|
}
|
|
else
|
|
{
|
|
modBusObj.init();
|
|
modBusObj.open(ui->portEdit->text(),ui->serverEdit->value());
|
|
}
|
|
|
|
|
|
|
|
}
|
|
void MainWindow::on_readButton_clicked()
|
|
{
|
|
int startAddress = ui->readAddress->value();
|
|
// do not go beyond 10 entries
|
|
int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 10 - startAddress);
|
|
switch (ui->writeTable->currentData().toInt()) {
|
|
case 0: printCoilsDataFromSlave(modBusObj.getCoil(startAddress,static_cast<quint16>(numberOfEntries)));
|
|
break;
|
|
case 1: printCoilsDataFromSlave(modBusObj.getInputCoil(startAddress,static_cast<quint16>(numberOfEntries)));
|
|
break;
|
|
case 2: printRegisterDataFromSlave(modBusObj.getInputRegister(startAddress,static_cast<quint16>(numberOfEntries)));
|
|
break;
|
|
case 3: printRegisterDataFromSlave(modBusObj.getHoldingRegister(startAddress,static_cast<quint16>(numberOfEntries)));
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
void MainWindow::printRegisterDataFromSlave(QVector<quint16> uiHoldingRegisters)
|
|
{
|
|
QString readedData;
|
|
for (int i = 0; i < uiHoldingRegisters.count(); i++) {
|
|
const QString entry = tr("Number: %1, Value: %2").arg(i)
|
|
.arg(QString::number(uiCoils[i]));
|
|
readedData += (entry + "\n" );
|
|
}
|
|
ui->textEditRead->setText(readedData);
|
|
}
|
|
|
|
void MainWindow::printCoilsDataFromSlave(QBitArray uiCoils)
|
|
{
|
|
QString readedData;
|
|
for (int i = 0; i < uiCoils.count(); i++) {
|
|
const QString entry = tr("Number: %1, Value: %2").arg(i)
|
|
.arg(QString::number(uiCoils[i]));
|
|
readedData += (entry + "\n" );
|
|
}
|
|
ui->textEditRead->setText(readedData);
|
|
}
|
|
|
|
void MainWindow::connectionState(bool state)
|
|
{
|
|
if (state)
|
|
ui->connectButton->setText(tr("Disconnect"));
|
|
else
|
|
ui->connectButton->setText(tr("Connect"));
|
|
}
|
|
|
|
void MainWindow::on_writeButton_clicked()
|
|
{
|
|
uiCoils.resize(2);
|
|
uiholdingRegisters.resize(2);
|
|
int startAddress = ui->writeAddress->value();
|
|
// do not go beyond 10 entries
|
|
int numberOfEntries = qMin(ui->writeSize->currentText().toInt(), 10 - startAddress);
|
|
switch (ui->writeTable->currentData().toInt()) {
|
|
case 0:
|
|
if(numberOfEntries>1)
|
|
{
|
|
uiCoils.setBit(0,ui->coilData1->isChecked());
|
|
uiCoils.setBit(1,ui->coilData2->isChecked());
|
|
modBusObj.setMultipleCoil(startAddress, numberOfEntries, uiCoils);
|
|
}
|
|
else if (numberOfEntries==1)
|
|
{
|
|
modBusObj.setSingleCoil(startAddress, ui->coilData1->isChecked());
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if(numberOfEntries>1)
|
|
{
|
|
uiholdingRegisters[0]=ui->textEdit1->toPlainText().toUInt();
|
|
uiholdingRegisters[1]=ui->textEdit2->toPlainText().toUInt();
|
|
modBusObj.setMultipleRegister(startAddress, numberOfEntries, uiholdingRegisters);
|
|
}
|
|
else if (numberOfEntries==1)
|
|
{
|
|
modBusObj.setSingleRegister(startAddress, ui->textEdit1->toPlainText().toUInt());
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
|