You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2020/10/30 09:02:55 UTC
[plc4x] branch feature/plc4go updated: OPC UA Client write fix,
static of Add passthrough in valueHandler for OPCUA client as it
doesn't specify a data type. changed of to static method in ValueHandler
This is an automated email from the ASF dual-hosted git repository.
hutcheb pushed a commit to branch feature/plc4go
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/plc4go by this push:
new 6583eb2 OPC UA Client write fix, static of Add passthrough in valueHandler for OPCUA client as it doesn't specify a data type. changed of to static method in ValueHandler
6583eb2 is described below
commit 6583eb24fb8ac75c7a631638e50444eb44abb237
Author: hutcheb <be...@gmail.com>
AuthorDate: Fri Oct 30 04:55:32 2020 -0400
OPC UA Client write fix, static of
Add passthrough in valueHandler for OPCUA client as it doesn't specify a
data type.
changed of to static method in ValueHandler
---
.../resources/templates/java/data-io-template.ftlh | 2 +-
.../plc4x/java/api/value/PlcValueHandler.java | 6 ++-
.../java/abeth/protocol/AbEthProtocolLogic.java | 14 +++---
.../java/abeth/protocol/Plc4xAbEthProtocol.java | 14 +++---
.../plc4x/java/ads/protocol/AdsProtocolLogic.java | 2 +-
.../plc4x/java/mock/field/MockValueHandler.java | 15 +++++-
.../apache/plc4x/java/modbus/ModbusEncodeTest.java | 30 ++++++------
.../s7/readwrite/protocol/S7ProtocolLogic.java | 2 +-
.../java/simulated/connection/SimulatedDevice.java | 16 +++----
.../java/spi/messages/DefaultPlcWriteRequest.java | 2 +-
.../java/spi/values/IEC61131ValueHandler.java | 35 ++++++++------
.../java/opm/PlcEntityManagerComplexTest.java | 54 +++++++++++++---------
.../bacnetip/protocol/BacNetIpProtocolLogic.java | 8 ++--
13 files changed, 115 insertions(+), 85 deletions(-)
diff --git a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
index 218393a..358e587 100644
--- a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
@@ -217,7 +217,7 @@ public class ${type.name}IO {
<#if case.name == "Struct">
Map<String, PlcValue> _map = new HashMap<>();
<#list case.fields as field>
- _map.put("${field.name}", IEC61131ValueHandler.newPlcValue(${field.name}));
+ _map.put("${field.name}", IEC61131ValueHandler.of(${field.name}));
</#list>
</#if>
<#if !skipReturn>
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValueHandler.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValueHandler.java
index a5f5893..67d6055 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValueHandler.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValueHandler.java
@@ -38,7 +38,9 @@ import java.util.Set;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public interface PlcValueHandler {
- public PlcValue of(Object value);
- public PlcValue of(Object[] values);
+ public PlcValue newPlcValue(Object value);
+ public PlcValue newPlcValue(Object[] values);
+ public PlcValue newPlcValue(PlcField field, Object value);
+ public PlcValue newPlcValue(PlcField field, Object[] values);
}
diff --git a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
index d57fcfb..eca3a23 100644
--- a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
+++ b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
@@ -157,7 +157,7 @@ public class AbEthProtocolLogic extends Plc4xProtocolBase<CIPEncapsulationPacket
if(data.length == 1) {
plcValue = new PlcINT(data[0]);
} else {
- plcValue = IEC61131ValueHandler.newPlcValue(data);
+ plcValue = IEC61131ValueHandler.of(data);
}
}
break;
@@ -166,9 +166,9 @@ public class AbEthProtocolLogic extends Plc4xProtocolBase<CIPEncapsulationPacket
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (((data[1]>> 7) & 1) == 0) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[1] << 8) + data[0]); // positive number
+ plcValue = IEC61131ValueHandler.of((data[1] << 8) + data[0]); // positive number
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((((~data[1] & 0b01111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
+ plcValue = IEC61131ValueHandler.of((((~data[1] & 0b01111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
}
}
break;
@@ -177,9 +177,9 @@ public class AbEthProtocolLogic extends Plc4xProtocolBase<CIPEncapsulationPacket
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (((data[3]>> 7) & 1) == 0) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]); // positive number
+ plcValue = IEC61131ValueHandler.of((data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]); // positive number
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((((~data[3] & 0b01111111) << 24) + ((~(data[2]-1) & 0b11111111) << 16)+ ((~(data[1]-1) & 0b11111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
+ plcValue = IEC61131ValueHandler.of((((~data[3] & 0b01111111) << 24) + ((~(data[2]-1) & 0b11111111) << 16)+ ((~(data[1]-1) & 0b11111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
}
}
break;
@@ -188,9 +188,9 @@ public class AbEthProtocolLogic extends Plc4xProtocolBase<CIPEncapsulationPacket
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (field.getBitNumber() < 8) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[0] & (1 << field.getBitNumber())) != 0); // read from first byte
+ plcValue = IEC61131ValueHandler.of((data[0] & (1 << field.getBitNumber())) != 0); // read from first byte
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((data[1] & (1 << (field.getBitNumber() - 8) )) != 0); // read from second byte
+ plcValue = IEC61131ValueHandler.of((data[1] & (1 << (field.getBitNumber() - 8) )) != 0); // read from second byte
}
}
break;
diff --git a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
index de60b11..75dfacb 100644
--- a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
+++ b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
@@ -180,7 +180,7 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
if(data.length == 1) {
plcValue = new PlcINT(data[0]);
} else {
- plcValue = IEC61131ValueHandler.newPlcValue(data);
+ plcValue = IEC61131ValueHandler.of(data);
}
}
break;
@@ -189,9 +189,9 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (((data[1]>> 7) & 1) == 0) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[1] << 8) + data[0]); // positive number
+ plcValue = IEC61131ValueHandler.of((data[1] << 8) + data[0]); // positive number
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((((~data[1] & 0b01111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
+ plcValue = IEC61131ValueHandler.of((((~data[1] & 0b01111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
}
}
break;
@@ -200,9 +200,9 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (((data[3]>> 7) & 1) == 0) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]); // positive number
+ plcValue = IEC61131ValueHandler.of((data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]); // positive number
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((((~data[3] & 0b01111111) << 24) + ((~(data[2]-1) & 0b11111111) << 16)+ ((~(data[1]-1) & 0b11111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
+ plcValue = IEC61131ValueHandler.of((((~data[3] & 0b01111111) << 24) + ((~(data[2]-1) & 0b11111111) << 16)+ ((~(data[1]-1) & 0b11111111) << 8) + (~(data[0]-1) & 0b11111111)) * -1); // negative number
}
}
break;
@@ -211,9 +211,9 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
short[] data = df1PTLR.getData();
if (field.getBitNumber() < 8) {
- plcValue = IEC61131ValueHandler.newPlcValue((data[0] & (1 << field.getBitNumber())) != 0); // read from first byte
+ plcValue = IEC61131ValueHandler.of((data[0] & (1 << field.getBitNumber())) != 0); // read from first byte
} else {
- plcValue = IEC61131ValueHandler.newPlcValue((data[1] & (1 << (field.getBitNumber() - 8) )) != 0); // read from second byte
+ plcValue = IEC61131ValueHandler.of((data[1] & (1 << (field.getBitNumber() - 8) )) != 0); // read from second byte
}
}
break;
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
index 21215cd..45e6b24 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
@@ -313,7 +313,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
}
return null;
}).toArray(PlcValue[]::new);
- return new ResponseItem<>(PlcResponseCode.OK, IEC61131ValueHandler.newPlcValue(resultItems));
+ return new ResponseItem<>(PlcResponseCode.OK, IEC61131ValueHandler.of(resultItems));
}
} catch (Exception e) {
LOGGER.warn(String.format("Error parsing field item of type: '%s'", field.getAdsDataType()), e);
diff --git a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockValueHandler.java b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockValueHandler.java
index fc47f33..adaeb2d 100644
--- a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockValueHandler.java
+++ b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockValueHandler.java
@@ -19,18 +19,29 @@ under the License.
package org.apache.plc4x.java.mock.field;
import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.api.value.PlcValueHandler;
public class MockValueHandler implements PlcValueHandler {
@Override
- public PlcValue of(Object value) {
+ public PlcValue newPlcValue(Object value) {
return new MockPlcValue(value);
}
@Override
- public PlcValue of(Object[] values) {
+ public PlcValue newPlcValue(Object[] values) {
return new MockPlcValue(values);
}
+ @Override
+ public PlcValue newPlcValue(PlcField field, Object value) {
+ return newPlcValue(value);
+ }
+
+ @Override
+ public PlcValue newPlcValue(PlcField field, Object[] values) {
+ return newPlcValue(values);
+ }
+
}
diff --git a/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java b/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
index 59ee99c..db56f31 100644
--- a/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
+++ b/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
@@ -33,7 +33,7 @@ public class ModbusEncodeTest {
public void testEncodeBooleanBOOL() {
Boolean[] object = {true,false,true,false,true,false,true,true,false};
ModbusFieldCoil coils = ModbusFieldCoil.of("coil:8:BOOL");
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(coils, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(coils, object);
Assertions.assertEquals("[true,false,true,false,true,false,true,true,false]", list.toString());
}
@@ -42,7 +42,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,-1,127,-128,5,6,7,8};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:8:SINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,-1,127,-128,5,6,7,8]", list.toString());
}
@@ -51,7 +51,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,255,0,4,5,6,7,8};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:8:USINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,255,0,4,5,6,7,8]", list.toString());
}
@@ -60,7 +60,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,255,0,4,5,6,7,8};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:8:BYTE");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,255,0,4,5,6,7,8]", list.toString());
}
@@ -69,7 +69,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,-1,32000,-32000,5,6,7};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:INT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,-1,32000,-32000,5,6,7]", list.toString());
}
@@ -78,7 +78,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,65535,10,55000,5,6,7};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:UINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,65535,10,55000,5,6,7]", list.toString());
}
@@ -87,7 +87,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,65535,10,55000,5,6,7};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:WORD");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,65535,10,55000,5,6,7]", list.toString());
}
@@ -96,7 +96,7 @@ public class ModbusEncodeTest {
Integer[] object = {1,655354775,-2147483648,2147483647,5,6,7};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:DINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,-2147483648,2147483647,5,6,7]", list.toString());
}
@@ -105,7 +105,7 @@ public class ModbusEncodeTest {
Long[] object = {1L,655354775L,0L,4294967295L,5L,6L,7L};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:UDINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,0,4294967295,5,6,7]", list.toString());
}
@@ -114,7 +114,7 @@ public class ModbusEncodeTest {
Long[] object = {1L,655354775L,0L,4294967295L,5L,6L,7L};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:DWORD");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,0,4294967295,5,6,7]", list.toString());
}
@@ -123,7 +123,7 @@ public class ModbusEncodeTest {
Long[] object = {1L,655354775L,-9223372036854775808L,9223372036854775807L,5L,6L,7L};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:LINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,-9223372036854775808,9223372036854775807,5,6,7]", list.toString());
}
@@ -132,7 +132,7 @@ public class ModbusEncodeTest {
BigInteger[] object = {BigInteger.valueOf(1L),BigInteger.valueOf(655354775L),BigInteger.valueOf(0),new BigInteger("18446744073709551615"),BigInteger.valueOf(5L),BigInteger.valueOf(6L),BigInteger.valueOf(7L)};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:ULINT");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,0,18446744073709551615,5,6,7]", list.toString());
}
@@ -141,7 +141,7 @@ public class ModbusEncodeTest {
BigInteger[] object = {BigInteger.valueOf(1L),BigInteger.valueOf(655354775L),BigInteger.valueOf(0),new BigInteger("18446744073709551615"),BigInteger.valueOf(5L),BigInteger.valueOf(6L),BigInteger.valueOf(7L)};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:LWORD");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1,655354775,0,18446744073709551615,5,6,7]", list.toString());
}
@@ -150,7 +150,7 @@ public class ModbusEncodeTest {
Float[] object = {1.1f,1000.1f,100000.1f,3.4028232E38f,-3.4028232E38f,-1f,10384759934840.0f};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:REAL");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1.1,1000.1,100000.1,3.4028233E38,-3.4028233E38,-1.0,1.03847601E13]", list.toString());
}
@@ -159,7 +159,7 @@ public class ModbusEncodeTest {
Double[] object = {1.1,1000.1,100000.1,1.7E308,-1.7E308,-1d,10384759934840.0};
ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:LREAL");
ModbusFieldHandler handler = new ModbusFieldHandler();
- PlcList list = (PlcList) IEC61131ValueHandler.newPlcValue(holdingregister, object);
+ PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
Assertions.assertEquals("[1.1,1000.1,100000.1,1.7E308,-1.7E308,-1.0,1.038475993484E13]", list.toString());
}
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
index d0c4683..ee19b08 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
@@ -525,7 +525,7 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
}
return null;
}).toArray(PlcValue[]::new);
- return IEC61131ValueHandler.newPlcValue(resultItems);
+ return IEC61131ValueHandler.of(resultItems);
}
} catch (ParseException e) {
LOGGER.warn(String.format("Error parsing field item of type: '%s'", field.getDataType().name()), e);
diff --git a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedDevice.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedDevice.java
index a8ed034..4d2ccda 100644
--- a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedDevice.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedDevice.java
@@ -95,31 +95,31 @@ public class SimulatedDevice {
Object result = null;
if (type.equals(Byte.class)) {
- return IEC61131ValueHandler.newPlcValue((byte) random.nextInt(1 << 8));
+ return IEC61131ValueHandler.of((byte) random.nextInt(1 << 8));
}
if (type.equals(Short.class)) {
- return IEC61131ValueHandler.newPlcValue((short) random.nextInt(1 << 16));
+ return IEC61131ValueHandler.of((short) random.nextInt(1 << 16));
}
if (type.equals(Integer.class)) {
- return IEC61131ValueHandler.newPlcValue(random.nextInt());
+ return IEC61131ValueHandler.of(random.nextInt());
}
if (type.equals(Long.class)) {
- return IEC61131ValueHandler.newPlcValue(random.nextLong());
+ return IEC61131ValueHandler.of(random.nextLong());
}
if (type.equals(Float.class)) {
- return IEC61131ValueHandler.newPlcValue(random.nextFloat());
+ return IEC61131ValueHandler.of(random.nextFloat());
}
if (type.equals(Double.class)) {
- return IEC61131ValueHandler.newPlcValue(random.nextDouble());
+ return IEC61131ValueHandler.of(random.nextDouble());
}
if (type.equals(Boolean.class)) {
- return IEC61131ValueHandler.newPlcValue(random.nextBoolean());
+ return IEC61131ValueHandler.of(random.nextBoolean());
}
if (type.equals(String.class)) {
@@ -129,7 +129,7 @@ public class SimulatedDevice {
char c = (char) ('a' + random.nextInt(26));
sb.append(c);
}
- return IEC61131ValueHandler.newPlcValue(sb.toString());
+ return IEC61131ValueHandler.of(sb.toString());
}
return null;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
index cbe4bf2..34b7ac7 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
@@ -173,7 +173,7 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable
String fieldQuery = fieldValues.getLeft();
PlcField field = fieldHandler.createField(fieldQuery);
Object[] value = fieldValues.getRight();
- PlcValue plcValue = valueHandler.of(value);
+ PlcValue plcValue = valueHandler.newPlcValue(field, value);
parsedFields.put(name, new FieldValueItem(field, plcValue));
});
return new DefaultPlcWriteRequest(writer, parsedFields);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
index c8c9e3b..278f79e 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
@@ -33,19 +33,27 @@ import java.time.LocalTime;
public class IEC61131ValueHandler implements PlcValueHandler {
- public PlcValue of(Object value) {
- return newPlcValue(new Object[] {value});
+ public PlcValue newPlcValue(Object value) {
+ return of(new Object[] {value});
}
- public PlcValue of(Object[] values) {
- return newPlcValue(values);
+ public PlcValue newPlcValue(Object[] values) {
+ return of(values);
}
- public static PlcValue newPlcValue(Object value) {
- return newPlcValue(new Object[] {value});
+ public PlcValue newPlcValue(PlcField field, Object value) {
+ return of(field, new Object[] {value});
}
- public static PlcValue newPlcValue(Object[] values) {
+ public PlcValue newPlcValue(PlcField field, Object[] values) {
+ return of(field, values);
+ }
+
+ public static PlcValue of(Object value) {
+ return of(new Object[] {value});
+ }
+
+ public static PlcValue of(Object[] values) {
if (values.length == 1) {
Object value = values[0];
if (value instanceof Boolean) {
@@ -81,19 +89,19 @@ public class IEC61131ValueHandler implements PlcValueHandler {
} else {
PlcList list = new PlcList();
for (Object value : values) {
- list.add(newPlcValue(new Object[] {value}));
+ list.add(of(new Object[] {value}));
}
return list;
}
}
- public static PlcValue newPlcValue(PlcField field, Object value) {
- return newPlcValue(field, new Object[] {value});
+ public static PlcValue of(PlcField field, Object value) {
+ return of(field, new Object[] {value});
}
- public static PlcValue newPlcValue(PlcField field, Object[] values) {
+ public static PlcValue of(PlcField field, Object[] values) {
if(values.length == 1) {
Object value = values[0];
switch (field.getPlcDataType().toUpperCase()) {
@@ -158,14 +166,13 @@ public class IEC61131ValueHandler implements PlcValueHandler {
} else {
PlcList list = new PlcList();
for (Object value : values) {
- list.add(newPlcValue(field, new Object[] {value}));
+ list.add(of(field, new Object[] {value}));
}
return list;
}
}
public static PlcValue customDataType(PlcField field, Object[] values) {
- throw new PlcUnsupportedDataTypeException("Data Type " + field.getPlcDataType()
- + "Is not supported");
+ return of(values);
}
}
diff --git a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
index 5957380..4a16732 100644
--- a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
+++ b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
@@ -128,26 +128,26 @@ public class PlcEntityManagerComplexTest implements WithAssertions {
private PlcEntityManager getInitializedEntityManager() throws PlcConnectionException {
Map<String, PlcValue> map = new HashMap<>();
String prefix = ConnectedEntity.class.getName() + ".";
- map.put(prefix + "boolVar", IEC61131ValueHandler.newPlcValue(true));
- map.put(prefix + "byteVar", IEC61131ValueHandler.newPlcValue((byte) 1));
- map.put(prefix + "shortVar", IEC61131ValueHandler.newPlcValue((short) 1));
- map.put(prefix + "intVar", IEC61131ValueHandler.newPlcValue(1));
- map.put(prefix + "longVar", IEC61131ValueHandler.newPlcValue(1L));
- map.put(prefix + "boxedBoolVar", IEC61131ValueHandler.newPlcValue(1L));
- map.put(prefix + "boxedByteVar", IEC61131ValueHandler.newPlcValue((byte) 1));
- map.put(prefix + "boxedShortVar", IEC61131ValueHandler.newPlcValue((short) 1));
- map.put(prefix + "boxedIntegerVar", IEC61131ValueHandler.newPlcValue(1));
- map.put(prefix + "boxedLongVar", IEC61131ValueHandler.newPlcValue(1L));
- map.put(prefix + "bigIntegerVar", IEC61131ValueHandler.newPlcValue(BigInteger.ONE));
- map.put(prefix + "floatVar", IEC61131ValueHandler.newPlcValue(1f));
- map.put(prefix + "doubleVar", IEC61131ValueHandler.newPlcValue(1d));
- map.put(prefix + "bigDecimalVar", IEC61131ValueHandler.newPlcValue(BigDecimal.ONE));
- map.put(prefix + "localTimeVar", IEC61131ValueHandler.newPlcValue(LocalTime.of(1, 1)));
- map.put(prefix + "localDateVar", IEC61131ValueHandler.newPlcValue(LocalDate.of(1, 1, 1)));
- map.put(prefix + "localDateTimeVar", IEC61131ValueHandler.newPlcValue(LocalDateTime.of(1, 1, 1, 1, 1)));
- map.put(prefix + "byteArrayVar", IEC61131ValueHandler.newPlcValue(new Byte[]{0x0, 0x1}));
- map.put(prefix + "bigByteArrayVar", IEC61131ValueHandler.newPlcValue(new Byte[]{0x0, 0x1}));
- map.put(prefix + "stringVar", IEC61131ValueHandler.newPlcValue("Hallo"));
+ map.put(prefix + "boolVar", IEC61131ValueHandler.of(true));
+ map.put(prefix + "byteVar", IEC61131ValueHandler.of((byte) 1));
+ map.put(prefix + "shortVar", IEC61131ValueHandler.of((short) 1));
+ map.put(prefix + "intVar", IEC61131ValueHandler.of(1));
+ map.put(prefix + "longVar", IEC61131ValueHandler.of(1L));
+ map.put(prefix + "boxedBoolVar", IEC61131ValueHandler.of(1L));
+ map.put(prefix + "boxedByteVar", IEC61131ValueHandler.of((byte) 1));
+ map.put(prefix + "boxedShortVar", IEC61131ValueHandler.of((short) 1));
+ map.put(prefix + "boxedIntegerVar", IEC61131ValueHandler.of(1));
+ map.put(prefix + "boxedLongVar", IEC61131ValueHandler.of(1L));
+ map.put(prefix + "bigIntegerVar", IEC61131ValueHandler.of(BigInteger.ONE));
+ map.put(prefix + "floatVar", IEC61131ValueHandler.of(1f));
+ map.put(prefix + "doubleVar", IEC61131ValueHandler.of(1d));
+ map.put(prefix + "bigDecimalVar", IEC61131ValueHandler.of(BigDecimal.ONE));
+ map.put(prefix + "localTimeVar", IEC61131ValueHandler.of(LocalTime.of(1, 1)));
+ map.put(prefix + "localDateVar", IEC61131ValueHandler.of(LocalDate.of(1, 1, 1)));
+ map.put(prefix + "localDateTimeVar", IEC61131ValueHandler.of(LocalDateTime.of(1, 1, 1, 1, 1)));
+ map.put(prefix + "byteArrayVar", IEC61131ValueHandler.of(new Byte[]{0x0, 0x1}));
+ map.put(prefix + "bigByteArrayVar", IEC61131ValueHandler.of(new Byte[]{0x0, 0x1}));
+ map.put(prefix + "stringVar", IEC61131ValueHandler.of("Hallo"));
return getPlcEntityManager(map);
}
@@ -260,12 +260,22 @@ public class PlcEntityManagerComplexTest implements WithAssertions {
private static class NoOpPlcValueHandler implements PlcValueHandler {
@Override
- public PlcValue of(Object value) {
+ public PlcValue newPlcValue(Object value) {
throw new RuntimeException("Data Type " + value.getClass().getSimpleName() + "Is not supported");
}
@Override
- public PlcValue of(Object[] values) {
+ public PlcValue newPlcValue(Object[] values) {
+ throw new RuntimeException("Data Type " + values.getClass().getSimpleName() + "Is not supported");
+ }
+
+ @Override
+ public PlcValue newPlcValue(org.apache.plc4x.java.api.model.PlcField field, Object value) {
+ throw new RuntimeException("Data Type " + value.getClass().getSimpleName() + "Is not supported");
+ }
+
+ @Override
+ public PlcValue newPlcValue(org.apache.plc4x.java.api.model.PlcField field, Object[] values) {
throw new RuntimeException("Data Type " + values.getClass().getSimpleName() + "Is not supported");
}
}
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
index 5284d9d..cc7da50 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
@@ -144,15 +144,15 @@ public class BacNetIpProtocolLogic extends Plc4xProtocolBase<BVLC> implements Ha
enrichedPlcValue.put("address", new PlcSTRING(toString(curField)));
// From the original BACNet tag
- enrichedPlcValue.put("typeOrTagNumber", IEC61131ValueHandler.newPlcValue(baCnetTag.getTypeOrTagNumber()));
- enrichedPlcValue.put("lengthValueType", IEC61131ValueHandler.newPlcValue(baCnetTag.getLengthValueType()));
+ enrichedPlcValue.put("typeOrTagNumber", IEC61131ValueHandler.of(baCnetTag.getTypeOrTagNumber()));
+ enrichedPlcValue.put("lengthValueType", IEC61131ValueHandler.of(baCnetTag.getLengthValueType()));
if(baCnetTag.getExtTagNumber() != null) {
- enrichedPlcValue.put("extTagNumber", IEC61131ValueHandler.newPlcValue(baCnetTag.getExtTagNumber()));
+ enrichedPlcValue.put("extTagNumber", IEC61131ValueHandler.of(baCnetTag.getExtTagNumber()));
} else {
enrichedPlcValue.put("extTagNumber", new PlcNull());
}
if(baCnetTag.getExtLength() != null) {
- enrichedPlcValue.put("extLength", IEC61131ValueHandler.newPlcValue(baCnetTag.getExtLength()));
+ enrichedPlcValue.put("extLength", IEC61131ValueHandler.of(baCnetTag.getExtLength()));
} else {
enrichedPlcValue.put("extLength", new PlcNull());
}