diff --git a/README.md b/README.md
index f83920d..78daf6c 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,7 @@ Open ModScan is a free implimentation of modbus master (client) utility for modb
![image](https://github.com/sanny32/OpenModScan/assets/13627951/c2df0ea1-0f27-4d4b-8cc0-b6268caf8f11)
-
-![image](https://github.com/sanny32/OpenModScan/assets/13627951/2e24982e-3b32-4434-928e-6518505e48ae)
+![image](https://github.com/user-attachments/assets/aeae5869-b0a1-469f-9e30-3e68a85b23e1)
diff --git a/omodscan/connectiondetails.h b/omodscan/connectiondetails.h
index 8ee0f06..35f6708 100644
--- a/omodscan/connectiondetails.h
+++ b/omodscan/connectiondetails.h
@@ -102,7 +102,7 @@ struct SerialConnectionParams
void normalize()
{
- BaudRate = qBound(QSerialPort::Baud1200, BaudRate, QSerialPort::Baud115200);
+ BaudRate = qMax(QSerialPort::Baud1200, BaudRate);
WordLength = qBound(QSerialPort::Data5, WordLength, QSerialPort::Data8);
Parity = qBound(QSerialPort::NoParity, Parity, QSerialPort::MarkParity);
FlowControl = qBound(QSerialPort::NoFlowControl, FlowControl, QSerialPort::SoftwareControl);
diff --git a/omodscan/controls/modbusmessagewidget.cpp b/omodscan/controls/modbusmessagewidget.cpp
index e89df8d..d7d187e 100644
--- a/omodscan/controls/modbusmessagewidget.cpp
+++ b/omodscan/controls/modbusmessagewidget.cpp
@@ -176,7 +176,7 @@ void ModbusMessageWidget::update()
addItem(tr("Protocol ID: %1").arg(protocolId));
addItem(tr("Length: %1").arg(length));
}
-
+
addItem(tr("Device ID: %1").arg(formatUInt8Value(_dataDisplayMode, _mm->deviceId())));
if(_mm->isException())
@@ -193,6 +193,7 @@ void ModbusMessageWidget::update()
QString("%1 (%2)").arg(formatUInt8Value(_dataDisplayMode, func), func) :
formatUInt8Value(_dataDisplayMode, func);
addItem(tr("Function Code: %1").arg(function));
+ const auto addrBase = tr("(0-based)");
switch(_mm->function())
{
@@ -200,9 +201,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
+ const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
const auto length = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->length()): "??";
- addItem(tr("Start Address: %1").arg(startAddress));
+ addItem(tr("Start Address: %1 %2").arg(startAddress, addrBase));
addItem(tr("Length: %1").arg(length));
}
else
@@ -219,9 +220,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
+ const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
const auto length = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->length()): "??";
- addItem(tr("Start Address: %1").arg(startAddress));
+ addItem(tr("Start Address: %1 %2").arg(startAddress, addrBase));
addItem(tr("Length: %1").arg(length));
}
else
@@ -238,9 +239,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
+ const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
const auto length = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->length()): "??";
- addItem(tr("Start Address: %1").arg(startAddress));
+ addItem(tr("Start Address: %1 %2").arg(startAddress, addrBase));
addItem(tr("Length: %1").arg(length));
}
else
@@ -257,9 +258,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
+ const auto startAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->startAddress()) : "??";
const auto length = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->length()): "??";
- addItem(tr("Start Address: %1").arg(startAddress));
+ addItem(tr("Start Address: %1 %2").arg(startAddress, addrBase));
addItem(tr("Length: %1").arg(length));
}
else
@@ -276,9 +277,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto outputAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
+ const auto outputAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
const auto outputValue = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->value()) : "??";
- addItem(tr("Output Address: %1").arg(outputAddress));
+ addItem(tr("Output Address: %1 %2").arg(outputAddress, addrBase));
addItem(tr("Output Value: %1").arg(outputValue));
}
else
@@ -286,7 +287,7 @@ void ModbusMessageWidget::update()
auto resp = reinterpret_cast(_mm);
const auto outputAddress = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->address()) : "??";
const auto outputValue = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->value()) : "??";
- addItem(tr("Output Address: %1").arg(outputAddress));
+ addItem(tr("Output Address: %1 %2").arg(outputAddress, addrBase));
addItem(tr("Output Value: %1").arg(outputValue));
}
break;
@@ -295,9 +296,9 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto registerAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
+ const auto registerAddress = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
const auto registerValue = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->value()) : "??";
- addItem(tr("Register Address: %1").arg(registerAddress));
+ addItem(tr("Register Address: %1 %2").arg(registerAddress, addrBase));
addItem(tr("Register Value: %1").arg(registerValue));
}
else
@@ -305,7 +306,7 @@ void ModbusMessageWidget::update()
auto resp = reinterpret_cast(_mm);
const auto registerAddress = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->address()) : "??";
const auto registerValue = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->value()) : "??";
- addItem(tr("Register Address: %1").arg(registerAddress));
+ addItem(tr("Register Address: %1 %2").arg(registerAddress, addrBase));
addItem(tr("Register Value: %1").arg(registerValue));
}
break;
@@ -374,7 +375,7 @@ void ModbusMessageWidget::update()
const auto quantity = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->quantity()) : "??";
const auto byteCount = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->byteCount()) : "?";
const auto values = req->isValid() ? formatUInt8Array(_dataDisplayMode, req->values()) : "???";
- addItem(tr("Starting Address: %1").arg(startAddr));
+ addItem(tr("Starting Address: %1 %2").arg(startAddr, addrBase));
addItem(tr("Quantity of Outputs: %1").arg(quantity));
addItem(tr("Byte Count: %1").arg(byteCount));
addItem(tr("Output Value: %1").arg(values));
@@ -384,7 +385,7 @@ void ModbusMessageWidget::update()
auto resp = reinterpret_cast(_mm);
const auto startAddr = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->startAddress()) : "??";
const auto quantity = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->quantity()) : "??";
- addItem(tr("Starting Address: %1").arg(startAddr));
+ addItem(tr("Starting Address: %1 %2").arg(startAddr, addrBase));
addItem(tr("Quantity of Outputs: %1").arg(quantity));
}
break;
@@ -397,7 +398,7 @@ void ModbusMessageWidget::update()
const auto quantity = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->quantity()) : "??";
const auto byteCount = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->byteCount()) : "?";
const auto values = req->isValid() ? formatUInt16Array(_dataDisplayMode, req->values(), _byteOrder) : "???";
- addItem(tr("Starting Address: %1").arg(startAddr));
+ addItem(tr("Starting Address: %1 %2").arg(startAddr, addrBase));
addItem(tr("Quantity of Registers: %1").arg(quantity));
addItem(tr("Byte Count: %1").arg(byteCount));
addItem(tr("Registers Value: %1").arg(values));
@@ -407,7 +408,7 @@ void ModbusMessageWidget::update()
auto resp = reinterpret_cast(_mm);
const auto startAddr = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->startAddress()) : "??";
const auto quantity = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->quantity()) : "??";
- addItem(tr("Starting Address: %1").arg(startAddr));
+ addItem(tr("Starting Address: %1 %2").arg(startAddr, addrBase));
addItem(tr("Quantity of Registers: %1").arg(quantity));
}
break;
@@ -416,7 +417,7 @@ void ModbusMessageWidget::update()
if(!_mm->isRequest())
{
auto resp = reinterpret_cast(_mm);
- const auto byteCount = resp->isValid() ? formatUInt8Value(_dataDisplayMode, resp->byteCount()) : "?";
+ const auto byteCount = resp->isValid() ? formatUInt8Value(_dataDisplayMode, resp->byteCount()) : "?";
const auto data = resp->isValid() ? formatUInt8Array(_dataDisplayMode, resp->data()) : "?";
addItem(tr("Byte Count: %1").arg(byteCount));
addItem(tr("Data: %1").arg(data));
@@ -427,7 +428,7 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto byteCount = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->byteCount()) : "?";
+ const auto byteCount = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->byteCount()) : "?";
const auto data = req->isValid() ? formatUInt8Array(_dataDisplayMode, req->data()) : "?";
addItem(tr("Byte Count: %1").arg(byteCount));
addItem(tr("Data: %1").arg(data));
@@ -446,7 +447,7 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto length = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->length()) : "?";
+ const auto length = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->length()) : "?";
const auto data = req->isValid() ? formatUInt8Array(_dataDisplayMode, req->data()) : "???";
addItem(tr("Request Data Length: %1").arg(length));
addItem(tr("Data: %1").arg(data));
@@ -465,10 +466,10 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto address = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
+ const auto address = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->address()) : "??";
const auto andMask = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->andMask()) : "??";
- const auto orMask = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->orMask()) : "??";
- addItem(tr("Address: %1").arg(address));
+ const auto orMask = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->orMask()) : "??";
+ addItem(tr("Address: %1 %2").arg(address, addrBase));
addItem(tr("And Mask: %1").arg(andMask));
addItem(tr("Or Mask: %1").arg(orMask));
}
@@ -478,7 +479,7 @@ void ModbusMessageWidget::update()
const auto address = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->address()) : "??";
const auto andMask = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->andMask()) : "??";
const auto orMask = resp->isValid() ? formatUInt16Value(_dataDisplayMode, resp->orMask()) : "??";
- addItem(tr("Address: %1").arg(address));
+ addItem(tr("Address: %1 %2").arg(address, addrBase));
addItem(tr("And Mask: %1").arg(andMask));
addItem(tr("Or Mask: %1").arg(orMask));
}
@@ -488,15 +489,15 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto readStartAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->readStartAddress()) : "??";
+ const auto readStartAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->readStartAddress()) : "??";
const auto readLength = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->readLength()) : "??";
- const auto writeStartAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->writeStartAddress()) : "??";
+ const auto writeStartAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->writeStartAddress()) : "??";
const auto writeLength = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->writeLength()) : "??";
const auto writeByteCount = req->isValid() ? formatUInt8Value(_dataDisplayMode, req->writeByteCount()) : "?";
const auto writeValues = req->isValid() ? formatUInt16Array(_dataDisplayMode, req->writeValues(), _byteOrder) : "???";
- addItem(tr("Read Starting Address: %1").arg(readStartAddr));
+ addItem(tr("Read Starting Address: %1 %2").arg(readStartAddr, addrBase));
addItem(tr("Quantity to Read: %1").arg(readLength));
- addItem(tr("Write Starting Address: %1").arg(writeStartAddr));
+ addItem(tr("Write Starting Address: %1 %2").arg(writeStartAddr, addrBase));
addItem(tr("Quantity to Write: %1").arg(writeLength));
addItem(tr("Write Byte Count: %1").arg(writeByteCount));
addItem(tr("Write Registers Value: %1").arg(writeValues));
@@ -515,8 +516,8 @@ void ModbusMessageWidget::update()
if(_mm->isRequest())
{
auto req = reinterpret_cast(_mm);
- const auto fifoAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->fifoAddress()) : "??";
- addItem(tr("FIFO Point Address: %1").arg(fifoAddr));
+ const auto fifoAddr = req->isValid() ? formatUInt16Value(_dataDisplayMode, req->fifoAddress()) : "??";
+ addItem(tr("FIFO Point Address: %1 %2").arg(fifoAddr, addrBase));
}
else
{
diff --git a/omodscan/controls/numericcombobox.cpp b/omodscan/controls/numericcombobox.cpp
index b972986..1b12455 100644
--- a/omodscan/controls/numericcombobox.cpp
+++ b/omodscan/controls/numericcombobox.cpp
@@ -34,5 +34,12 @@ int NumericComboBox::currentValue() const
void NumericComboBox::setCurrentValue(int value)
{
const auto idx = findText(QString::number(value));
- setCurrentIndex(idx);
+ if(idx != -1)
+ {
+ setCurrentIndex(idx);
+ }
+ else if(isEditable())
+ {
+ setCurrentText(QString::number(value));
+ }
}
diff --git a/omodscan/dialogs/dialogabout.ui b/omodscan/dialogs/dialogabout.ui
index f887087..6fd7f26 100644
--- a/omodscan/dialogs/dialogabout.ui
+++ b/omodscan/dialogs/dialogabout.ui
@@ -138,7 +138,7 @@
-
- © Alexandr Ananev, 2024
+ © Alexandr Ananev, 2024
@@ -161,7 +161,7 @@
-
- <html><head/><body><p><a href="https://github.com/sanny32/OpenModScan"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/sanny32/OpenModScan</span></a></p></body></html>
+ <html><head/><body><p><a href="https://github.com/sanny32/OpenModScan"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/sanny32/OpenModScan</span></a></p></body></html>
true
diff --git a/omodscan/dialogs/dialogconnectiondetails.cpp b/omodscan/dialogs/dialogconnectiondetails.cpp
index 09aee4f..7e80c26 100644
--- a/omodscan/dialogs/dialogconnectiondetails.cpp
+++ b/omodscan/dialogs/dialogconnectiondetails.cpp
@@ -68,7 +68,7 @@ void DialogConnectionDetails::accept()
else
{
_connectionDetails.SerialParams.PortName = ui->comboBoxConnectUsing->currentPortName();
- _connectionDetails.SerialParams.BaudRate = (QSerialPort::BaudRate)ui->comboBoxBaudRate->currentValue();
+ _connectionDetails.SerialParams.BaudRate = qMax(QSerialPort::Baud1200, (QSerialPort::BaudRate)ui->comboBoxBaudRate->currentValue());
_connectionDetails.SerialParams.WordLength = (QSerialPort::DataBits)ui->comboBoxWordLength->currentValue();
_connectionDetails.SerialParams.Parity = ui->comboBoxParity->currentParity();
_connectionDetails.SerialParams.StopBits = (QSerialPort::StopBits)ui->comboBoxStopBits->currentValue();
diff --git a/omodscan/dialogs/dialogconnectiondetails.ui b/omodscan/dialogs/dialogconnectiondetails.ui
index e2c5d0f..b39404f 100644
--- a/omodscan/dialogs/dialogconnectiondetails.ui
+++ b/omodscan/dialogs/dialogconnectiondetails.ui
@@ -31,10 +31,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QSizePolicy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -57,10 +57,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QSizePolicy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -77,10 +77,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QSizePolicy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -93,7 +93,7 @@
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter
-
@@ -152,10 +152,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QSizePolicy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -190,10 +190,10 @@
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter
3
@@ -216,6 +216,9 @@
25
+
+ true
+
3
@@ -353,7 +356,7 @@
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter
-
@@ -432,7 +435,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -458,7 +461,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -473,10 +476,10 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
true
diff --git a/omodscan/dialogs/dialogdisplaydefinition.ui b/omodscan/dialogs/dialogdisplaydefinition.ui
index bde2209..9080979 100644
--- a/omodscan/dialogs/dialogdisplaydefinition.ui
+++ b/omodscan/dialogs/dialogdisplaydefinition.ui
@@ -7,7 +7,7 @@
0
0
350
- 277
+ 304
@@ -17,10 +17,10 @@
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter
- Qt::AlignHCenter|Qt::AlignTop
+ Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop
40
@@ -129,7 +129,7 @@
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter
12
@@ -196,36 +196,14 @@
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 25
-
-
-
-
- 60
- 16777215
-
-
-
-
- -
+
-
Length:
- -
+
-
@@ -247,16 +225,65 @@
+ -
+
+
+ 8
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+
+ 60
+ 16777215
+
+
+
+
+ -
+
+
+ (1-based)
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+ QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok
true
@@ -281,7 +308,6 @@
lineEditScanRate
lineEditSlaveAddress
comboBoxPointType
- lineEditPointAddress
lineEditLength
diff --git a/omodscan/omodscan.pro b/omodscan/omodscan.pro
index c01c2b8..b64c1c5 100644
--- a/omodscan/omodscan.pro
+++ b/omodscan/omodscan.pro
@@ -4,7 +4,7 @@ CONFIG += c++17
CONFIG -= debug_and_release
CONFIG -= debug_and_release_target
-VERSION = 1.7.0
+VERSION = 1.7.1
QMAKE_TARGET_PRODUCT = "Open ModScan"
QMAKE_TARGET_DESCRIPTION = "An Open Source Modbus Master (Client) Utility"
diff --git a/omodscan/translations/omodscan_ru.qm b/omodscan/translations/omodscan_ru.qm
index f38d3c4..1c1637c 100644
Binary files a/omodscan/translations/omodscan_ru.qm and b/omodscan/translations/omodscan_ru.qm differ
diff --git a/omodscan/translations/omodscan_ru.ts b/omodscan/translations/omodscan_ru.ts
index 43eb1be..d15a06d 100644
--- a/omodscan/translations/omodscan_ru.ts
+++ b/omodscan/translations/omodscan_ru.ts
@@ -90,16 +90,6 @@
Утилита Modbus Master (клиент) с открытым исходным кодом
-
-
-
-
-
-
-
-
-
-
@@ -781,7 +771,7 @@
Адрес: порт (Узел)
-
+
Очистить результаты предыдущего сканирования?
@@ -2002,10 +1992,10 @@ Valid Slave Responses: %2
-
-
-
-
+
+
+
+
<b>Длина:</b> %1
@@ -2030,211 +2020,248 @@ Valid Slave Responses: %2
<b>Код функции:</b> %1
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ <b>Адрес:</b> %1 %2
+
+
+
+
+
+ <b>Адрес:</b> %1 %2
+
+
+
+
+
+ <b>Адрес:</b> %1 %2
+
+
+
+
+
+
+
+ <b>Начальный адрес:</b> %1 %2
+
+
+
+
+
+ <b>Адрес:</b> %1 %2
+
+
+
+
+ <b>Адрес чтения регистров:</b> %1 %2
+
+
+
+
+ <b>Адрес записи регистров:</b> %1 %2
+
+
+
+
+ <b>Адрес точки FIFO:</b> %1 %2
+
+
- <b>Адрес:</b> %1
+ <b>Адрес:</b> %1
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
<b>Количество байт:</b> %1
-
+
<b>Статусы coil:</b> %1
-
+
<b>Статусы input:</b> %1
-
-
-
+
+
+
<b>Значения регистров:</b> %1
-
+
<b>Значения реистров:</b> %1
-
-
- <b>Адрес:</b> %1
+ <b>Адрес:</b> %1
-
-
-
+
+
+
<b>Значение:</b> %1
-
-
- <b>Адрес:</b> %1
+ <b>Адрес:</b> %1
-
+
<b>Данные:</b> %1
-
-
+
+
<b>Подфункция:</b> %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
<b>Данные:</b> %1
-
-
+
+
<b>Статус:</b> %1
-
-
+
+
<b>Количество событий:</b> %1
-
+
<b>Количество сообщений:</b> %1
-
+
<b>События:</b> %1
-
-
-
-
- <b>Начальный адрес:</b> %1
+ <b>Начальный адрес:</b> %1
-
-
+
+
<b>Количество:</b> %1
-
-
+
+
<b>Количество регистров:</b> %1
-
-
+
+
<b>Значения регистров:</b> %1
-
+
<b>Длина данных запроса:</b> %1
-
+
<b>Длина данных ответа:</b> %1
-
-
- <b>Адрес:</b> %1
+ <b>Адрес:</b> %1
-
-
+
+
<b>Маска «И»:</b> %1
-
-
+
+
<b>Маска «ИЛИ»:</b> %1
-
- <b>Адрес чтения регистров:</b> %1
+ <b>Адрес чтения регистров:</b> %1
-
+
<b>Количество регистров для чтения:</b> %1
-
- <b>Адрес записи регистров:</b> %1
+ <b>Адрес записи регистров:</b> %1
-
+
<b>Количество регистров для записи:</b> %1
-
+
<b>Количество байт записи:</b> %1
-
+
<b>Значения регистров записи:</b> %1
-
- <b>Адрес точки FIFO:</b> %1
+ <b>Адрес точки FIFO:</b> %1
-
+
<b>Количество FIFO:</b> %1
-
+
<b>Значения регистров FIFO:</b> %1
@@ -2247,7 +2274,7 @@ Valid Slave Responses: %2
%1: Введите описание
-
+
Данные не инициализированы