Skip to content

Commit 5bea792

Browse files
committed
Added min/max params for simulation action of Increment
1 parent d86f0ab commit 5bea792

File tree

9 files changed

+77
-5
lines changed

9 files changed

+77
-5
lines changed

src/client/runtime/client_devicerunnable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ bool mbClientDeviceRunnable::hasReadMessageOnDuty()
227227
for (Messages_t::Iterator it = m_readMessages.begin(); it != m_readMessages.end(); ++it)
228228
{
229229
mbClientRunMessagePtr m = *it;
230-
if ((tm - m->timestamp()) >= m->period())
230+
if ((tm - m->beginTimestamp()) >= m->period())
231231
{
232232
m_readMessages.erase(it); // remove it from queue ...
233233
m_readMessages.enqueue(m); // and push it to back of queue

src/client/runtime/client_runmessage.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ mbClientRunMessage::mbClientRunMessage(mbClientRunItem *item, uint16_t maxCount,
3737
m_writeCount = 0;
3838
m_period = item->period();
3939
m_status = Modbus::Status_Uncertain;
40+
m_beginTimestamp = 0;
4041
m_timestamp = 0;
4142
addItemPrivate(item);
4243
m_deleteItems = false;
@@ -58,6 +59,7 @@ mbClientRunMessage::mbClientRunMessage(uint16_t offset, uint16_t count, uint16_t
5859
m_period = 0;
5960
m_maxCount = maxCount;
6061
m_status = Modbus::Status_Uncertain;
62+
m_beginTimestamp = 0;
6163
m_timestamp = 0;
6264
m_deleteItems = false;
6365
m_isCompleted = false;
@@ -117,6 +119,11 @@ Modbus::StatusCode mbClientRunMessage::status() const
117119
return m_status;
118120
}
119121

122+
mb::Timestamp_t mbClientRunMessage::beginTimestamp() const
123+
{
124+
return m_beginTimestamp;
125+
}
126+
120127
mb::Timestamp_t mbClientRunMessage::timestamp() const
121128
{
122129
return m_timestamp;
@@ -174,7 +181,7 @@ Modbus::StatusCode mbClientRunMessage::setData(uint16_t /*innerOffset*/, uint16_
174181

175182
void mbClientRunMessage::prepareToSend()
176183
{
177-
// base implementation does nothing
184+
m_beginTimestamp = mb::currentTimestamp();
178185
}
179186

180187
void mbClientRunMessage::setComplete(Modbus::StatusCode status, mb::Timestamp_t timestamp)
@@ -280,6 +287,7 @@ void mbClientRunMessageRead::setComplete(Modbus::StatusCode status, mb::Timestam
280287

281288
void mbClientRunMessageWrite::prepareToSend()
282289
{
290+
mbClientRunMessage::prepareToSend();
283291
for (Items_t::ConstIterator it = m_items.cbegin(); it != m_items.cend(); ++it)
284292
{
285293
mbClientRunItem *pItem = static_cast<mbClientRunItem*>(*it);

src/client/runtime/client_runmessage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class mbClientRunMessage : public QObject
5757
int innerBufferBitSize() const;
5858
int innerBufferRegSize() const;
5959
Modbus::StatusCode status() const;
60+
mb::Timestamp_t beginTimestamp() const;
6061
mb::Timestamp_t timestamp() const;
6162

6263
public:
@@ -111,6 +112,7 @@ class mbClientRunMessage : public QObject
111112
uint32_t m_period;
112113
uint16_t m_maxCount;
113114
Modbus::StatusCode m_status;
115+
mb::Timestamp_t m_beginTimestamp;
114116
mb::Timestamp_t m_timestamp;
115117
uint8_t m_buff[MB_MAX_BYTES];
116118

src/core/sdk/mbcore.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,8 @@ QString toString(Modbus::StatusCode status)
304304
case Modbus::Status_BadSerialOpen : return QStringLiteral("BadSerialOpen");
305305
case Modbus::Status_BadSerialWrite : return QStringLiteral("BadSerialWrite");
306306
case Modbus::Status_BadSerialRead : return QStringLiteral("BadSerialRead");
307-
case Modbus::Status_BadSerialReadTimeout : return QStringLiteral("Status_BadSerialReadTimeout");
307+
case Modbus::Status_BadSerialReadTimeout : return QStringLiteral("BadSerialReadTimeout");
308+
case Modbus::Status_BadSerialWriteTimeout : return QStringLiteral("BadSerialWriteTimeout");
308309
case Modbus::Status_BadAscMissColon : return QStringLiteral("BadAscMissColon");
309310
case Modbus::Status_BadAscMissCrLf : return QStringLiteral("BadAscMissCrLf");
310311
case Modbus::Status_BadAscChar : return QStringLiteral("BadAscChar");

src/server/gui/dialogs/server_dialogaction.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ mbServerDialogAction::mbServerDialogAction(QWidget *parent) :
101101

102102
// Action Increment
103103
ui->lnActionIncrement->setText(QString::number(d.incrementValue));
104+
ui->lnActionIncrementMin->setText(QString::number(d.incrementMin));
105+
ui->lnActionIncrementMax->setText(QString::number(d.incrementMax));
104106

105107
// Action Sine
106108
ui->lnActionSinePeriod->setText(QString::number(d.sinePeriod));
@@ -174,6 +176,8 @@ MBSETTINGS mbServerDialogAction::cachedSettings() const
174176
m[prefix+vs.dataType ] = ui->cmbDataType->currentText();
175177
m[prefix+vs.period ] = ui->spPeriod->value();
176178
m[prefix+vs.incrementValue ] = ui->lnActionIncrement->text();
179+
m[prefix+vs.incrementMin ] = ui->lnActionIncrementMin->text();
180+
m[prefix+vs.incrementMax ] = ui->lnActionIncrementMax->text();
177181
m[prefix+vs.sinePeriod ] = ui->lnActionSinePeriod->text();
178182
m[prefix+vs.sinePhaseShift ] = ui->lnActionSinePhaseShift->text();
179183
m[prefix+vs.sineAmplitude ] = ui->lnActionSineAmplitude->text();
@@ -220,6 +224,8 @@ void mbServerDialogAction::setCachedSettings(const MBSETTINGS &m)
220224
it = m.find(prefix+vs.dataType ); if (it != end) ui->cmbDataType->setCurrentText(it.value().toString());
221225
it = m.find(prefix+vs.period ); if (it != end) ui->spPeriod ->setValue (it.value().toInt() );
222226
it = m.find(prefix+vs.incrementValue ); if (it != end) ui->lnActionIncrement->setText(it.value().toString());
227+
it = m.find(prefix+vs.incrementMin ); if (it != end) ui->lnActionIncrementMin->setText(it.value().toString());
228+
it = m.find(prefix+vs.incrementMax ); if (it != end) ui->lnActionIncrementMax->setText(it.value().toString());
223229
it = m.find(prefix+vs.sinePeriod ); if (it != end) ui->lnActionSinePeriod->setText(it.value().toString());
224230
it = m.find(prefix+vs.sinePhaseShift ); if (it != end) ui->lnActionSinePhaseShift->setText(it.value().toString());
225231
it = m.find(prefix+vs.sineAmplitude ); if (it != end) ui->lnActionSineAmplitude->setText(it.value().toString());
@@ -339,6 +345,8 @@ void mbServerDialogAction::fillFormActionType(const MBSETTINGS &settings)
339345
{
340346
case mbServerAction::Increment:
341347
ui->lnActionIncrement->setText(settings.value(sItem.incrementValue).toString());
348+
ui->lnActionIncrementMin->setText(settings.value(sItem.incrementMin).toString());
349+
ui->lnActionIncrementMax->setText(settings.value(sItem.incrementMax).toString());
342350
break;
343351
case mbServerAction::Sine:
344352
it = settings.find(sItem.sinePeriod ); if (it != end) ui->lnActionSinePeriod ->setText(it.value().toString());
@@ -417,6 +425,8 @@ void mbServerDialogAction::fillDataActionType(MBSETTINGS &settings)
417425
{
418426
case mbServerAction::Increment:
419427
settings[sItem.incrementValue] = ui->lnActionIncrement->text();
428+
settings[sItem.incrementMin ] = ui->lnActionIncrementMin->text();
429+
settings[sItem.incrementMax ] = ui->lnActionIncrementMax->text();
420430
break;
421431
case mbServerAction::Sine:
422432
settings[sItem.sinePeriod ] = ui->lnActionSinePeriod->text();

src/server/gui/dialogs/server_dialogaction.ui

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>242</width>
10-
<height>450</height>
10+
<height>454</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -176,6 +176,26 @@
176176
<item row="0" column="1">
177177
<widget class="QLineEdit" name="lnActionIncrement"/>
178178
</item>
179+
<item row="1" column="0">
180+
<widget class="QLabel" name="label_19">
181+
<property name="text">
182+
<string>Minimum</string>
183+
</property>
184+
</widget>
185+
</item>
186+
<item row="1" column="1">
187+
<widget class="QLineEdit" name="lnActionIncrementMin"/>
188+
</item>
189+
<item row="2" column="0">
190+
<widget class="QLabel" name="label_18">
191+
<property name="text">
192+
<string>Maximum</string>
193+
</property>
194+
</widget>
195+
</item>
196+
<item row="2" column="1">
197+
<widget class="QLineEdit" name="lnActionIncrementMax"/>
198+
</item>
179199
</layout>
180200
</widget>
181201
<widget class="QWidget" name="pgSine">

src/server/project/server_action.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ mbServerAction::Strings::Strings() :
3333
registerOrder (QStringLiteral("registerOrder")),
3434
extended (QStringLiteral("extended")),
3535
incrementValue (QStringLiteral("incrementValue")),
36+
incrementMin (QStringLiteral("min")),
37+
incrementMax (QStringLiteral("max")),
3638
sinePeriod (QStringLiteral("sinePeriod")),
3739
sinePhaseShift (QStringLiteral("sinePhaseShift")),
3840
sineAmplitude (QStringLiteral("sineAmplitude")),
@@ -59,6 +61,8 @@ mbServerAction::Defaults::Defaults() :
5961
byteOrder (mb::LessSignifiedFirst),
6062
registerOrder (mb::LessSignifiedFirst),
6163
incrementValue (1),
64+
incrementMin (0),
65+
incrementMax (65535),
6266
sinePeriod (10000),
6367
sinePhaseShift (0),
6468
sineAmplitude (100),
@@ -349,6 +353,8 @@ MBSETTINGS mbServerAction::ActionIncrement::extendedSettings() const
349353
const Strings &s = Strings::instance();
350354
MBSETTINGS p;
351355
p[s.incrementValue] = value;
356+
p[s.incrementMin ] = min ;
357+
p[s.incrementMax ] = max ;
352358
return p;
353359
}
354360

@@ -357,15 +363,26 @@ void mbServerAction::ActionIncrement::setExtendedSettings(const MBSETTINGS &sett
357363
const Strings &s = Strings::instance();
358364

359365
auto end = settings.end();
366+
360367
auto it = settings.find(s.incrementValue);
361368
if (it != end)
362369
value = it.value();
370+
371+
it = settings.find(s.incrementMin);
372+
if (it != end)
373+
min = it.value();
374+
375+
it = settings.find(s.incrementMax);
376+
if (it != end)
377+
max = it.value();
363378
}
364379

365380
QString mbServerAction::ActionIncrement::extendedSettingsStr() const
366381
{
367382
const Strings &s = Strings::instance();
368-
return QString("%1=%2").arg(s.incrementValue, value.toString());
383+
return QString("%1=%2;%3=%4;%5=%6").arg(s.incrementValue, value.toString(),
384+
s.incrementMin, min.toString(),
385+
s.incrementMax, max.toString());
369386
}
370387

371388
// -----------------------------------------------------------------------------------------------------------------------

src/server/project/server_action.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class mbServerAction : public QObject
5353
const QString registerOrder ;
5454
const QString extended ;
5555
const QString incrementValue ;
56+
const QString incrementMin ;
57+
const QString incrementMax ;
5658
const QString sinePeriod ;
5759
const QString sinePhaseShift ;
5860
const QString sineAmplitude ;
@@ -76,6 +78,8 @@ class mbServerAction : public QObject
7678
const mb::DataOrder byteOrder ;
7779
const mb::DataOrder registerOrder ;
7880
const int incrementValue ;
81+
const int incrementMin ;
82+
const int incrementMax ;
7983
const int sinePeriod ;
8084
const int sinePhaseShift ;
8185
const int sineAmplitude ;
@@ -161,13 +165,17 @@ class mbServerAction : public QObject
161165
struct ActionIncrement : public ActionExtended
162166
{
163167
QVariant value;
168+
QVariant min;
169+
QVariant max;
164170
MBSETTINGS extendedSettings() const override;
165171
void setExtendedSettings(const MBSETTINGS &settings) override;
166172
QString extendedSettingsStr() const override;
167173
ActionIncrement()
168174
{
169175
Defaults d = Defaults::instance();
170176
value = d.incrementValue;
177+
min = d.incrementMin;
178+
max = d.incrementMax;
171179
}
172180
};
173181

src/server/runtime/server_runaction.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ class mbServerRunActionIncrement : public mbServerRunActionT<T>
7676
mbServerRunActionIncrement(const MBSETTINGS &settings) : mbServerRunActionT<T>(settings)
7777
{
7878
m_increment = settings.value(mbServerAction::Strings::instance().incrementValue).value<T>();
79+
m_min = settings.value(mbServerAction::Strings::instance().incrementMin).value<T>();
80+
m_max = settings.value(mbServerAction::Strings::instance().incrementMax).value<T>();
7981
}
8082

8183
public:
@@ -87,6 +89,8 @@ class mbServerRunActionIncrement : public mbServerRunActionT<T>
8789
T t = v.value<T>();
8890
mbServerRunAction::trySwap(&t, sizeof(t));
8991
t += m_increment;
92+
if ((t < m_min) || (t > m_max))
93+
t = m_min;
9094
mbServerRunAction::trySwap(&t, sizeof(t));
9195
this->setValue(t);
9296
this->m_last = time;
@@ -96,6 +100,8 @@ class mbServerRunActionIncrement : public mbServerRunActionT<T>
96100

97101
private:
98102
T m_increment;
103+
T m_min;
104+
T m_max;
99105
};
100106

101107
template <typename T>

0 commit comments

Comments
 (0)