Skip to content

Commit 8a73fbf

Browse files
authored
Merge pull request #14 from paulorb/MultDivOperation
feat(ISSUE-13): Add support for Mult, Div, IfLess and ifGreater
2 parents bbd7cae + 30705e4 commit 8a73fbf

File tree

8 files changed

+532
-3
lines changed

8 files changed

+532
-3
lines changed

.github/badges/branches.svg

Lines changed: 1 addition & 1 deletion
Loading

.github/badges/jacoco.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/getting-started/operations.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,36 @@ Supported registers: **HOLDING_REGISTER**, **INPUT_REGISTER**
4545
*For **INPUT_REGISTER** type *FLOAT32* is not supported!*
4646

4747

48+
## Mult
49+
Mult (as the name implies) multiplies a certain value of a variable, like the example below:
50+
51+
```xml
52+
<mult symbol="MOTOR_SPEED1">1.12</mult>
53+
```
54+
55+
Both **symbol** and **value** are mandatory fields. **value** can be of type *FLOAT32* , *INT16* which must
56+
follow the same type of the specified **symbol** definition.
57+
58+
Supported registers: **HOLDING_REGISTER**, **INPUT_REGISTER**
59+
60+
*For **INPUT_REGISTER** type *FLOAT32* is not supported!*
61+
62+
63+
## Div
64+
Div (as the name implies) divides a certain value of a variable, like the example below:
65+
66+
```xml
67+
<div symbol="MOTOR_SPEED1">1.12</div>
68+
```
69+
70+
Both **symbol** and **value** are mandatory fields. **value** can be of type *FLOAT32* , *INT16* which must
71+
follow the same type of the specified **symbol** definition.
72+
73+
Supported registers: **HOLDING_REGISTER**, **INPUT_REGISTER**
74+
75+
*For **INPUT_REGISTER** type *FLOAT32* is not supported!*
76+
77+
4878
## Random
4979
Random generates new random values each time it executes
5080

examples/configuration_simulation.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,20 @@
4848
<set symbol="RPM_MOTOR">100</set>
4949
<set symbol="MOTOR_SPEED1">100.5</set>
5050
<random symbol="TEMPERATURE1" valueMin="-50.0" valueMax="10.0"/>
51+
<trace symbol="TEMPERATURE1" />
5152
<delay>500</delay>
5253
<set symbol="RPM">60</set>
5354
<set symbol="MOTOR_SPEED1">190.5</set>
55+
<mult symbol="MOTOR_SPEED1">2.5</mult>
56+
<trace symbol="MOTOR_SPEED1" />
57+
<ifGreater symbol="MOTOR_SPEED1" value="470.0">
58+
<trace symbol="MOTOR_SPEED1" />
59+
</ifGreater>
60+
<div symbol="MOTOR_SPEED1">3.5</div>
61+
<ifLess symbol="MOTOR_SPEED1" value="470.0">
62+
<trace symbol="MOTOR_SPEED1" />
63+
</ifLess>
64+
<trace symbol="MOTOR_SPEED1" />
5465
<ifEqual symbol="RPM_MOTOR1" value="1">
5566
<set symbol="RPM_MOTOR1">777</set>
5667
<ifEqual symbol="RPM_MOTOR1" value="777">
@@ -74,9 +85,11 @@
7485
</ifEqual>
7586
<linear symbol="TEMPERATURE_MOTOR1" a="3" b="2" startX="0" endX="12" replay="true" step="1.5"/>
7687
<linear symbol="TEMPERATURE_MOTOR2" a="3" b="2" startX="12" endX="0" replay="true" step="1.5"/>
88+
<trace symbol="TEMPERATURE_MOTOR2" />
7789
<csv symbol="TEMPERATURE_MOTOR3" file="test_data.csv" column="1" replay="true"/>
7890
<csv symbol="TEMPERATURE_MOTOR4" file="test_data.csv" column="2" step="2" startRow="2" endRow="5" replay="true"/>
7991
<set symbol="RELAYON">1</set>
92+
<trace symbol="RELAYON" />
8093
<set symbol="RELAY_STATUS">1</set>
8194
<trace symbol="RPM_MOTOR" />
8295
<set symbol="RPM_MOTOR">400</set>

src/main/kotlin/ConfigurationParser.kt

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ConfigurationParser {
2323
}
2424
private fun load(): Device? {
2525
try {
26-
val context = JAXBContext.newInstance(Device::class.java, Set::class.java, Random::class.java, Delay::class.java, Linear::class.java, Add::class.java, Sub::class.java, Csv::class.java, IfEqual::class.java, Parameters::class.java, Parameter::class.java, Trace::class.java)
26+
val context = JAXBContext.newInstance(Device::class.java, Set::class.java, Random::class.java, Delay::class.java, Linear::class.java, Add::class.java, Sub::class.java, Csv::class.java, IfEqual::class.java, Parameters::class.java, Parameter::class.java, Trace::class.java, Mult::class.java, Div::class.java, IfGreater::class.java, IfLess::class.java)
2727
val unmarshaller = context.createUnmarshaller()
2828
return if(fileName.isEmpty() ) {
2929
val reader = StringReader(this::class.java.classLoader.getResource("configuration.xml")!!.readText())
@@ -97,6 +97,40 @@ data class IfEqual(
9797
constructor() : this("","",mutableListOf())
9898
}
9999

100+
//<ifGreater symbol="TEMP" value="12.4">
101+
// <sub symbol="MOTOR_SPEED1">12</sub>
102+
// any other operation ...
103+
//</ifGreater>
104+
@XmlRootElement(name="ifGreater")
105+
data class IfGreater(
106+
@field:XmlAttribute(required = true)
107+
val symbol: String,
108+
@field:XmlAttribute(required = true)
109+
val value: String,
110+
@XmlAnyElement(lax = true)
111+
var randomElements: List<Any>
112+
){
113+
constructor() : this("","",mutableListOf())
114+
}
115+
116+
//<ifLess symbol="TEMP" value="12.4">
117+
// <sub symbol="MOTOR_SPEED1">12</sub>
118+
// any other operation ...
119+
//</ifLess>
120+
@XmlRootElement(name="ifLess")
121+
data class IfLess(
122+
@field:XmlAttribute(required = true)
123+
val symbol: String,
124+
@field:XmlAttribute(required = true)
125+
val value: String,
126+
@XmlAnyElement(lax = true)
127+
var randomElements: List<Any>
128+
){
129+
constructor() : this("","",mutableListOf())
130+
}
131+
132+
133+
100134
//<csv symbol="TEMPERATURE_MOTOR4" file="test.csv" column="0" step="2" startRow="2" endRow="100" replay="true"/>
101135
@XmlRootElement(name="csv")
102136
data class Csv(
@@ -173,6 +207,29 @@ data class Add(
173207
constructor(): this("", "0")
174208
}
175209

210+
//<mult symbol="MOTOR_SPEED1">RPM_MOTOR1</mult>
211+
@XmlRootElement(name="mult")
212+
data class Mult(
213+
@field:XmlAttribute(required = true)
214+
val symbol: String,
215+
@field:XmlValue
216+
val value: String,
217+
){
218+
constructor(): this("", "0")
219+
}
220+
221+
//<div symbol="MOTOR_SPEED1">RPM_MOTOR1</div>
222+
@XmlRootElement(name="div")
223+
data class Div(
224+
@field:XmlAttribute(required = true)
225+
val symbol: String,
226+
@field:XmlValue
227+
val value: String,
228+
){
229+
constructor(): this("", "0")
230+
}
231+
232+
176233
//<delay>100</delay>
177234
@XmlRootElement(name="delay")
178235
data class Delay(

0 commit comments

Comments
 (0)