Skip to content

Commit f0a87bf

Browse files
authored
Merge pull request #16 from paulorb/ISSUE-15
fix(ISSUE-15): ifGreater not working as expected
2 parents d108e1c + f67bea6 commit f0a87bf

File tree

10 files changed

+55
-11
lines changed

10 files changed

+55
-11
lines changed

.github/badges/branches.svg

Lines changed: 1 addition & 1 deletion
Loading

.github/badges/jacoco.svg

Lines changed: 1 addition & 1 deletion
Loading

src/main/kotlin/PlcSimulation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class PlcSimulation(
1111
memory: PlcMemory,
1212
private val parameters: EnvironmentVariables,
1313
coroutineScope: CoroutineScope
14-
): BaseOperation(parameters,configurationParser.getConfiguredDevice().configuration ) {
14+
): BaseOperation(parameters,configurationParser.getConfiguredDevice().configuration, memory ) {
1515
val linearOperations = LinearOperation()
1616
val csvOperations = CsvOperation()
1717
var traceOperation = TraceOperation(configurationParser.getConfiguredDevice().configuration, memory, parameters)

src/main/kotlin/operations/AddOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.slf4j.LoggerFactory
99
import java.util.concurrent.CancellationException
1010

1111
class AddOperation(private val configuration: Configuration,private val memory: PlcMemory, environmentVariables: EnvironmentVariables
12-
) : BaseOperation(environmentVariables, configuration) {
12+
) : BaseOperation(environmentVariables, configuration, memory) {
1313

1414
companion object {
1515
val logger = LoggerFactory.getLogger("AddOperation")

src/main/kotlin/operations/BaseOperation.kt

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ package operations
22

33
import Configuration
44
import EnvironmentVariables
5+
import PlcMemory
6+
import Register
57
import isNumeric
68
import java.rmi.NotBoundException
9+
import java.util.concurrent.CancellationException
710

811
abstract class BaseOperation(
912
private val parameters: EnvironmentVariables,
10-
private val configuration: Configuration
13+
private val configuration: Configuration,
14+
private val memory: PlcMemory
1115
) {
1216
/**
1317
* processValue convert any variable name used as value to the actual value
@@ -27,9 +31,49 @@ abstract class BaseOperation(
2731
//value is a symbolic register
2832
var symbolicVariable = configuration.registers.getVarConfiguration(value)
2933
if (symbolicVariable != null) {
30-
return symbolicVariable.value
34+
return resolveSymbolicVariable(symbolicVariable)
3135
}
3236
throw NotBoundException("Invalid value, value is not numeric and also not a parameter nor a symbolic register")
37+
}
38+
39+
fun resolveSymbolicVariable(variable: Register) : String{
40+
when (variable.addressType) {
41+
42+
AddressType.HOLDING_REGISTER -> {
43+
//get the current value
44+
//Mult
45+
//set back the new value
3346

47+
if (variable.datatype == "FLOAT32") {
48+
var currentValue = memory.readHoldingRegister(variable.address.toInt(), 2)
49+
if(currentValue.isEmpty()){
50+
throw CancellationException("Error - Base Operation")
51+
}
52+
val intValue = (( currentValue[1].toInt() shl 16) or (currentValue[0].toInt() and 0xFFFF))
53+
return java.lang.Float.intBitsToFloat(intValue).toString()
54+
} else {
55+
var currentValue = memory.readHoldingRegister(variable.address.toInt(), 1)
56+
if(currentValue.isEmpty()){
57+
throw CancellationException("Error - Base Operation")
58+
}
59+
return currentValue.first().toInt().toString()
60+
}
61+
}
62+
AddressType.INPUT_REGISTER -> {
63+
val currentValue = memory.readInputRegister(variable.address.toInt(), 1)
64+
return currentValue.first().toShort().toString()
65+
}
66+
AddressType.COIL -> {
67+
var currentValue = memory.readCoilStatus(variable.address.toInt(), 2)
68+
if(currentValue.isEmpty()){
69+
throw CancellationException("Error - Base Operation")
70+
}
71+
return currentValue.first().toString()
72+
}
73+
74+
else -> {
75+
throw CancellationException("Error - Base Operation")
76+
}
77+
}
3478
}
3579
}

src/main/kotlin/operations/DivOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.slf4j.LoggerFactory
99
import java.util.concurrent.CancellationException
1010

1111
class DivOperation(private val configuration: Configuration,private val memory: PlcMemory, environmentVariables: EnvironmentVariables
12-
) : BaseOperation(environmentVariables, configuration) {
12+
) : BaseOperation(environmentVariables, configuration, memory) {
1313

1414
companion object {
1515
val logger = LoggerFactory.getLogger("DivOperation")

src/main/kotlin/operations/MultOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.slf4j.LoggerFactory
99
import java.util.concurrent.CancellationException
1010

1111
class MultOperation(private val configuration: Configuration,private val memory: PlcMemory, environmentVariables: EnvironmentVariables
12-
) : BaseOperation(environmentVariables, configuration) {
12+
) : BaseOperation(environmentVariables, configuration, memory) {
1313

1414
companion object {
1515
val logger = LoggerFactory.getLogger("MultOperation")

src/main/kotlin/operations/SetOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import toBooleanFromBinary
99
import java.util.concurrent.CancellationException
1010

1111
class SetOperation(private val configuration: Configuration,private val memory: PlcMemory, environmentVariables: EnvironmentVariables
12-
) : BaseOperation(environmentVariables, configuration) {
12+
) : BaseOperation(environmentVariables, configuration, memory) {
1313

1414
companion object {
1515
val logger = LoggerFactory.getLogger("SetOperation")

src/main/kotlin/operations/SubOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import java.util.concurrent.CancellationException
1111

1212

1313
class SubOperation(private val configuration: Configuration,private val memory: PlcMemory, environmentVariables: EnvironmentVariables
14-
) : BaseOperation(environmentVariables, configuration) {
14+
) : BaseOperation(environmentVariables, configuration, memory) {
1515

1616
companion object {
1717
val logger = LoggerFactory.getLogger("SubOperation")

src/main/kotlin/operations/TraceOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import java.util.concurrent.CancellationException
1010
class TraceOperation(
1111
private val configuration: Configuration, private val memory: PlcMemory, environmentVariables: EnvironmentVariables
1212

13-
) : BaseOperation(environmentVariables, configuration) {
13+
) : BaseOperation(environmentVariables, configuration, memory) {
1414
companion object {
1515
val logger = LoggerFactory.getLogger("TraceOperation")
1616
}

0 commit comments

Comments
 (0)