From d8183c186f85e528768f8df676caf5fa6fc636c5 Mon Sep 17 00:00:00 2001 From: Christofer Dutz Date: Thu, 10 Oct 2024 12:05:59 -0600 Subject: [PATCH] fix: Update the handling of PlcValues in the simulated driver. --- .../plc4x/java/simulated/connection/SimulatedDevice.java | 8 ++++---- .../org/apache/plc4x/java/simulated/tag/SimulatedTag.java | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) 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 0fc1199707d..3a6733479c1 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 @@ -103,9 +103,9 @@ public void set(SimulatedTag tag, PlcValue value) { break; default: try { - final int lengthInBits = DataItem.getLengthInBits(value, tag.getPlcValueType().name(), tag.getArrayInfo().get(0).getSize()); + final int lengthInBits = DataItem.getLengthInBits(value, tag.getPlcValueType().name(), (tag.getArrayInfo().isEmpty()) ? 1 : tag.getArrayInfo().get(0).getSize()); final WriteBufferByteBased writeBuffer = new WriteBufferByteBased((int) Math.ceil(((float) lengthInBits) / 8.0f)); - DataItem.staticSerialize(writeBuffer, value, tag.getPlcValueType().name(), tag.getArrayInfo().get(0).getSize(), ByteOrder.BIG_ENDIAN); + DataItem.staticSerialize(writeBuffer, value, tag.getPlcValueType().name(), (tag.getArrayInfo().isEmpty()) ? 1 : tag.getArrayInfo().get(0).getSize(), ByteOrder.BIG_ENDIAN); } catch (SerializationException e) { LOGGER.info("Write failed"); } @@ -120,12 +120,12 @@ private PlcValue randomValue(SimulatedTag tag) { short tagDataTypeSize = SimulatedDataTypeSizes.valueOf(tag.getPlcValueType().name()).getDataTypeSize(); - byte[] b = new byte[tagDataTypeSize * tag.getArrayInfo().get(0).getSize()]; + byte[] b = new byte[tagDataTypeSize * ((tag.getArrayInfo().isEmpty()) ? 1 : tag.getArrayInfo().get(0).getSize())]; random.nextBytes(b); ReadBuffer io = new ReadBufferByteBased(b); try { - return DataItem.staticParse(io, tag.getPlcValueType().name(), tag.getArrayInfo().get(0).getSize()); + return DataItem.staticParse(io, tag.getPlcValueType().name(), ((tag.getArrayInfo().isEmpty()) ? 1 : tag.getArrayInfo().get(0).getSize())); } catch (ParseException e) { return null; } diff --git a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/tag/SimulatedTag.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/tag/SimulatedTag.java index 71adb0f27f2..a78b2f420f5 100644 --- a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/tag/SimulatedTag.java +++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/tag/SimulatedTag.java @@ -93,7 +93,10 @@ public PlcValueType getPlcValueType() { @Override public List getArrayInfo() { - return Collections.singletonList(new DefaultArrayInfo(0, numElements - 1)); + if(numElements > 1) { + return Collections.singletonList(new DefaultArrayInfo(0, numElements - 1)); + } + return Collections.emptyList(); } public SimulatedTagType getType() {