Skip to content

Commit 431e167

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents 3d1aee0 + bab16df commit 431e167

11 files changed

Lines changed: 322 additions & 2 deletions

omodsim/datasimulator.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void DataSimulator::startSimulation(DataDisplayMode mode, QModbusDataUnit::Regis
3838
break;
3939

4040
case SimulationMode::Decrement:
41-
value = params.IncrementParams.Range.to();
41+
value = params.DecrementParams.Range.to();
4242
emit dataSimulated(mode, type, addr, value);
4343
break;
4444

@@ -206,6 +206,16 @@ void DataSimulator::randomSimulation(DataDisplayMode mode, QModbusDataUnit::Regi
206206
value = generateRandom<quint16>(params.Range.from(), params.Range.to() + 1);
207207
break;
208208

209+
case DataDisplayMode::LongInteger:
210+
case DataDisplayMode::SwappedLI:
211+
value = generateRandom<qint32>(params.Range);
212+
break;
213+
214+
case DataDisplayMode::UnsignedLongInteger:
215+
case DataDisplayMode::SwappedUnsignedLI:
216+
value = generateRandom<quint32>(params.Range);
217+
break;
218+
209219
case DataDisplayMode::FloatingPt:
210220
case DataDisplayMode::SwappedFP:
211221
value = generateRandom<float>(params.Range);
@@ -255,6 +265,16 @@ void DataSimulator::incrementSimulation(DataDisplayMode mode, QModbusDataUnit::R
255265
value = incrementValue<quint16>(value.toUInt(), params.Step, params.Range);
256266
break;
257267

268+
case DataDisplayMode::LongInteger:
269+
case DataDisplayMode::SwappedLI:
270+
value = incrementValue<qint32>(value.toInt(), params.Step, params.Range);
271+
break;
272+
273+
case DataDisplayMode::UnsignedLongInteger:
274+
case DataDisplayMode::SwappedUnsignedLI:
275+
value = incrementValue<quint32>(value.toUInt(), params.Step, params.Range);
276+
break;
277+
258278
case DataDisplayMode::FloatingPt:
259279
case DataDisplayMode::SwappedFP:
260280
value = incrementValue<float>(value.toFloat(), params.Step, params.Range);
@@ -299,6 +319,16 @@ void DataSimulator::decrementSimailation(DataDisplayMode mode, QModbusDataUnit::
299319
value = decrementValue<quint16>(value.toUInt(), params.Step, params.Range);
300320
break;
301321

322+
case DataDisplayMode::LongInteger:
323+
case DataDisplayMode::SwappedLI:
324+
value = decrementValue<qint32>(value.toInt(), params.Step, params.Range);
325+
break;
326+
327+
case DataDisplayMode::UnsignedLongInteger:
328+
case DataDisplayMode::SwappedUnsignedLI:
329+
value = decrementValue<quint32>(value.toUInt(), params.Step, params.Range);
330+
break;
331+
302332
case DataDisplayMode::FloatingPt:
303333
case DataDisplayMode::SwappedFP:
304334
value = decrementValue<float>(value.toFloat(), params.Step, params.Range);

omodsim/dialogs/dialogautosimulation.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,23 @@ DialogAutoSimulation::DialogAutoSimulation(DataDisplayMode mode, ModbusSimulatio
4343
ui->lineEditHighLimit->setInputRange(SHRT_MIN, SHRT_MAX);
4444
break;
4545

46+
case DataDisplayMode::LongInteger:
47+
case DataDisplayMode::SwappedLI:
48+
ui->lineEditStepValue->setInputRange(1, INT_MAX - 1);
49+
ui->lineEditLowLimit->setInputRange(INT_MIN, INT_MAX);
50+
ui->lineEditHighLimit->setInputRange(INT_MIN, INT_MAX);
51+
break;
52+
53+
case DataDisplayMode::UnsignedLongInteger:
54+
case DataDisplayMode::SwappedUnsignedLI:
55+
ui->lineEditStepValue->setInputRange(1U, UINT_MAX - 1);
56+
ui->lineEditStepValue->setInputMode(NumericLineEdit::UnsignedMode);
57+
ui->lineEditLowLimit->setInputRange(0U, UINT_MAX);
58+
ui->lineEditLowLimit->setInputMode(NumericLineEdit::UnsignedMode);
59+
ui->lineEditHighLimit->setInputRange(0U, UINT_MAX);
60+
ui->lineEditHighLimit->setInputMode(NumericLineEdit::UnsignedMode);
61+
break;
62+
4663
case DataDisplayMode::Hex:
4764
ui->lineEditStepValue->setInputRange(1, USHRT_MAX - 1);
4865
ui->lineEditLowLimit->setInputRange(0, USHRT_MAX);

omodsim/dialogs/dialogforcemultipleregisters.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,38 @@ void DialogForceMultipleRegisters::accept()
6565
}
6666
break;
6767

68+
case DataDisplayMode::LongInteger:
69+
if(!(idx % 2) && (idx + 1 < _data.size()))
70+
{
71+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
72+
breakLong(numEdit->value<qint32>(), _data[idx], _data[idx + 1], _writeParams.Order);
73+
}
74+
break;
75+
76+
case DataDisplayMode::SwappedLI:
77+
if(!(idx % 2) && (idx + 1 < _data.size()))
78+
{
79+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
80+
breakLong(numEdit->value<qint32>(), _data[idx + 1], _data[idx], _writeParams.Order);
81+
}
82+
break;
83+
84+
case DataDisplayMode::UnsignedLongInteger:
85+
if(!(idx % 2) && (idx + 1 < _data.size()))
86+
{
87+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
88+
breakULong(numEdit->value<quint32>(), _data[idx], _data[idx + 1], _writeParams.Order);
89+
}
90+
break;
91+
92+
case DataDisplayMode::SwappedUnsignedLI:
93+
if(!(idx % 2) && (idx + 1 < _data.size()))
94+
{
95+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
96+
breakULong(numEdit->value<quint32>(), _data[idx + 1], _data[idx], _writeParams.Order);
97+
}
98+
break;
99+
68100
case DataDisplayMode::FloatingPt:
69101
if(!(idx % 2) && (idx + 1 < _data.size()))
70102
{
@@ -136,6 +168,26 @@ void DialogForceMultipleRegisters::on_pushButtonRandom_clicked()
136168
_data[i] = QRandomGenerator::global()->bounded(SHRT_MIN, SHRT_MAX);
137169
break;
138170

171+
case DataDisplayMode::LongInteger:
172+
if(!(i % 2) && (i + 1 < _data.size()))
173+
breakLong(QRandomGenerator::global()->bounded(INT_MIN, INT_MAX), _data[i], _data[i + 1], _writeParams.Order);
174+
break;
175+
176+
case DataDisplayMode::SwappedLI:
177+
if(!(i % 2) && (i + 1 < _data.size()))
178+
breakLong(QRandomGenerator::global()->bounded(INT_MIN, INT_MAX), _data[i + 1], _data[i], _writeParams.Order);
179+
break;
180+
181+
case DataDisplayMode::UnsignedLongInteger:
182+
if(!(i % 2) && (i + 1 < _data.size()))
183+
breakULong(QRandomGenerator::global()->bounded(0U, UINT_MAX), _data[i], _data[i + 1], _writeParams.Order);
184+
break;
185+
186+
case DataDisplayMode::SwappedUnsignedLI:
187+
if(!(i % 2) && (i + 1 < _data.size()))
188+
breakULong(QRandomGenerator::global()->bounded(0U, UINT_MAX), _data[i + 1], _data[i], _writeParams.Order);
189+
break;
190+
139191
case DataDisplayMode::FloatingPt:
140192
if(!(i % 2) && (i + 1 < _data.size()))
141193
breakFloat(QRandomGenerator::global()->bounded(100.), _data[i], _data[i + 1], _writeParams.Order);
@@ -191,6 +243,38 @@ NumericLineEdit* DialogForceMultipleRegisters::createNumEdit(int idx)
191243
numEdit->setValue((qint16)toByteOrderValue(_data[idx], _writeParams.Order));
192244
break;
193245

246+
case DataDisplayMode::LongInteger:
247+
if(!(idx % 2) && (idx + 1 < _data.size()))
248+
{
249+
numEdit = new NumericLineEdit(NumericLineEdit::DecMode, ui->tableWidget);
250+
numEdit->setValue(makeLong(_data[idx], _data[idx + 1], _writeParams.Order));
251+
}
252+
break;
253+
254+
case DataDisplayMode::SwappedLI:
255+
if(!(idx % 2) && (idx + 1 < _data.size()))
256+
{
257+
numEdit = new NumericLineEdit(NumericLineEdit::DecMode, ui->tableWidget);
258+
numEdit->setValue(makeLong(_data[idx + 1], _data[idx], _writeParams.Order));
259+
}
260+
break;
261+
262+
case DataDisplayMode::UnsignedLongInteger:
263+
if(!(idx % 2) && (idx + 1 < _data.size()))
264+
{
265+
numEdit = new NumericLineEdit(NumericLineEdit::UnsignedMode, ui->tableWidget);
266+
numEdit->setValue(makeULong(_data[idx], _data[idx + 1], _writeParams.Order));
267+
}
268+
break;
269+
270+
case DataDisplayMode::SwappedUnsignedLI:
271+
if(!(idx % 2) && (idx + 1 < _data.size()))
272+
{
273+
numEdit = new NumericLineEdit(NumericLineEdit::UnsignedMode, ui->tableWidget);
274+
numEdit->setValue(makeULong(_data[idx + 1], _data[idx], _writeParams.Order));
275+
}
276+
break;
277+
194278
case DataDisplayMode::FloatingPt:
195279
if(!(idx % 2) && (idx + 1 < _data.size()))
196280
{

omodsim/docs/index.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,16 @@ <h1 class="title">JavaScript Help</h1>
139139
<li><a href="#server.readdiscrete">Server.readDiscrete</a></li>
140140
<li><a href="#server.readinput">Server.readInput</a></li>
141141
<li><a href="#server.readholding">Server.readHolding</a></li>
142+
<li><a href="#server.readlong">Server.readLong</a></li>
143+
<li><a href="#server.readunsignedlong">Server.readUnsignedLong</a></li>
142144
<li><a href="#server.readdouble">Server.readDouble</a></li>
143145
<li><a href="#server.readfloat">Server.readFloat</a></li>
144146
<li><a href="#server.writecoil">Server.writeCoil</a></li>
145147
<li><a href="#server.writediscrete">Server.writeDiscrete</a></li>
146148
<li><a href="#server.writeinput">Server.writeInput</a></li>
147149
<li><a href="#server.writeholding">Server.writeHolding</a></li>
150+
<li><a href="#server.writelong">Server.writeLong</a></li>
151+
<li><a href="#server.writeunsignedlong">Server.writeUnsignedLong</a></li>
148152
<li><a href="#server.writedouble">Server.writeDouble</a></li>
149153
<li><a href="#server.writefloat">Server.writeFloat</a></li>
150154
</ul>
@@ -630,6 +634,20 @@ <h1 id="server">Server</h1>
630634
<dd>
631635
<p>Returns a Holding register value at <code>address</code>.</p>
632636
</dd>
637+
<dt id="server.readlong"><code>Server.readLong(Register, address, swapped)</code></dt>
638+
<dd>
639+
<p>Returns a 32-bit long value from <code>address</code> to <code>address + 1</code> registers type <code>Register</code>. The <code>swapped</code> parameter change the registers order, when function convert set of registers to a long value.</p>
640+
<div class="notecard note">
641+
<p><strong>Note:</strong> This function is available only for <code>Register.Input</code> and <code>Register.Holding</code> registers.</p>
642+
</div>
643+
</dd>
644+
<dt id="server.readunsignedlong"><code>Server.readUnsignedLong(Register, address, swapped)</code></dt>
645+
<dd>
646+
<p>Returns a 32-bit unsigned long value from <code>address</code> to <code>address + 1</code> registers type <code>Register</code>. The <code>swapped</code> parameter change the registers order, when function convert set of registers to a unsigned long value.</p>
647+
<div class="notecard note">
648+
<p><strong>Note:</strong> This function is available only for <code>Register.Input</code> and <code>Register.Holding</code> registers.</p>
649+
</div>
650+
</dd>
633651
<dt id="server.readdouble"><code>Server.readDouble(Register, address, swapped)</code></dt>
634652
<dd>
635653
<p>Returns a double value from <code>address</code> to <code>address + 3</code> registers type <code>Register</code>. The <code>swapped</code> parameter change the registers order, when function convert set of registers to a double value.</p>
@@ -660,6 +678,20 @@ <h1 id="server">Server</h1>
660678
<dd>
661679
<p>Writes a <code>value</code> to the Holding register at <code>address</code>.</p>
662680
</dd>
681+
<dt id="server.writelong"><code>Server.writeLong(Register, address, value, swapped)</code></dt>
682+
<dd>
683+
<p>Writes a 32-bit long <code>value</code> to the <code>Register</code> addresses. The <code>swapped</code> parameter change the registers order, when function convert a long value to the set of registers.</p>
684+
<div class="notecard note">
685+
<p><strong>Note:</strong> This function is available only for <code>Register.Input</code> and <code>Register.Holding</code> registers.</p>
686+
</div>
687+
</dd>
688+
<dt id="server.writeunsignedlong"><code>Server.writeUnsignedLong(Register, address, value, swapped)</code></dt>
689+
<dd>
690+
<p>Writes a 32-bit unsigned long <code>value</code> to the <code>Register</code> addresses. The <code>swapped</code> parameter change the registers order, when function convert a unsigned long value to the set of registers.</p>
691+
<div class="notecard note">
692+
<p><strong>Note:</strong> This function is available only for <code>Register.Input</code> and <code>Register.Holding</code> registers.</p>
693+
</div>
694+
</dd>
663695
<dt id="server.writedouble"><code>Server.writeDouble(Register, address, value, swapped)</code></dt>
664696
<dd>
665697
<p>Writes a double <code>value</code> to the <code>Register</code> addresses. The <code>swapped</code> parameter change the registers order, when function convert a double value to the set of registers.</p>

omodsim/docs/index_ru.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,16 @@ <h1 class="title">Справка по JavaScript</h1>
139139
<li><a href="#server.readdiscrete">Server.readDiscrete</a></li>
140140
<li><a href="#server.readinput">Server.readInput</a></li>
141141
<li><a href="#server.readholding">Server.readHolding</a></li>
142+
<li><a href="#server.readlong">Server.readLong</a></li>
143+
<li><a href="#server.readunsignedlong">Server.readUnsignedLong</a></li>
142144
<li><a href="#server.readdouble">Server.readDouble</a></li>
143145
<li><a href="#server.readfloat">Server.readFloat</a></li>
144146
<li><a href="#server.writecoil">Server.writeCoil</a></li>
145147
<li><a href="#server.writediscrete">Server.writeDiscrete</a></li>
146148
<li><a href="#server.writeinput">Server.writeInput</a></li>
147149
<li><a href="#server.writeholding">Server.writeHolding</a></li>
150+
<li><a href="#server.writelong">Server.writeLong</a></li>
151+
<li><a href="#server.writeunsignedlong">Server.writeUnsignedLong</a></li>
148152
<li><a href="#server.writedouble">Server.writeDouble</a></li>
149153
<li><a href="#server.writefloat">Server.writeFloat</a></li>
150154
</ul>
@@ -630,6 +634,20 @@ <h1 id="server">Server</h1>
630634
<dd>
631635
<p>Возвращает значение регистра Holding по адресу <code>address</code>.</p>
632636
</dd>
637+
<dt id="server.readlong"><code>Server.readLong(Register, address, swapped)</code></dt>
638+
<dd>
639+
<p>Возвращает 32-битное целое значение (long) из регистров типа <code>Register</code> с адресами от <code>address</code> до <code>address + 1</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует набор регистров в длинное целое значение (long).</p>
640+
<div class="notecard note">
641+
<p><strong>Примечание.</strong> Эта функция доступна только для регистров типа <code>Register.Input</code> и <code>Register.Holding</code>.</p>
642+
</div>
643+
</dd>
644+
<dt id="server.readunsignedlong"><code>Server.readUnsignedLong(Register, address, swapped)</code></dt>
645+
<dd>
646+
<p>Возвращает беззнаковое 32-битное целое значение (unsigned long) из регистров типа <code>Register</code> с адресами от <code>address</code> до <code>address + 1</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует набор регистров в беззнаковое длинное целое значение (unsigned long).</p>
647+
<div class="notecard note">
648+
<p><strong>Примечание.</strong> Эта функция доступна только для регистров типа <code>Register.Input</code> и <code>Register.Holding</code>.</p>
649+
</div>
650+
</dd>
633651
<dt id="server.readdouble"><code>Server.readDouble(Register, address, swapped)</code></dt>
634652
<dd>
635653
<p>Возвращает значение двойной точности (double) из регистров типа <code>Register</code> c адресами от <code>address</code> до <code>address + 3</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует набор регистров в значение двойной точночти (double).</p>
@@ -660,6 +678,20 @@ <h1 id="server">Server</h1>
660678
<dd>
661679
<p>Записывает <code>value</code> в регистр Holding по адресу <code>address</code>.</p>
662680
</dd>
681+
<dt id="server.writelong"><code>Server.writeLong(Register, address, value, swapped)</code></dt>
682+
<dd>
683+
<p>Записывает 32-битное целое число (long) <code>value</code> в адреса регистров типа <code>Register</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует длинное целое значение (long) в набор регистров.</p>
684+
<div class="notecard note">
685+
<p><strong>Примечание.</strong> Эта функция доступна только для регистров типа <code>Register.Input</code> и <code>Register.Holding</code>.</p>
686+
</div>
687+
</dd>
688+
<dt id="server.writeunsignedlong"><code>Server.writeUnsignedLong(Register, address, value, swapped)</code></dt>
689+
<dd>
690+
<p>Записывает 32-битное беззнаковое целое число (unsigned long) <code>value</code> в адреса регистров типа <code>Register</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует беззнаковое длинное целое значение (unsigned long) в набор регистров.</p>
691+
<div class="notecard note">
692+
<p><strong>Примечание.</strong> Эта функция доступна только для регистров типа <code>Register.Input</code> и <code>Register.Holding</code>.</p>
693+
</div>
694+
</dd>
663695
<dt id="server.writedouble"><code>Server.writeDouble(Register, address, value, swapped)</code></dt>
664696
<dd>
665697
<p>Записывает значение <code>value</code> двойной точночности (double) в адреса регистров типа <code>Register</code>. Параметр <code>swapped</code> изменяет порядок регистров, когда функция преобразует значение двойной точности (double) в набор регистров.</p>

omodsim/floatutils.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ inline void breakLong(qint32 value, quint16& lo, quint16& hi, ByteOrder order)
4343
hi = toByteOrderValue(v.asUint16[1], order);
4444
}
4545

46+
///
47+
/// \brief breakULong
48+
/// \param value
49+
/// \param lo
50+
/// \param hi
51+
/// \param order
52+
///
53+
inline void breakULong(quint32 value, quint16& lo, quint16& hi, ByteOrder order)
54+
{
55+
breakLong((qint32)value, lo, hi, order);
56+
}
57+
4658
///
4759
/// \brief breakDouble
4860
/// \param value

0 commit comments

Comments
 (0)