This is an automated email from the ASF dual-hosted git repository.

hutcheb pushed a commit to branch feat/plc4py/modbus_write
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feat/plc4py/modbus_write by 
this push:
     new 2690b57933 feat(plc4py): clean up comparisons of PlcValues
2690b57933 is described below

commit 2690b579330b6bb1f8aadcc9d7e848c31c6acae8
Author: hutcheb <ben.hut...@gmail.com>
AuthorDate: Fri Aug 30 18:37:21 2024 +0800

    feat(plc4py): clean up comparisons of PlcValues
---
 plc4py/plc4py/api/value/PlcValue.py              |  3 ++
 plc4py/plc4py/drivers/modbus/ModbusConnection.py |  8 +++-
 plc4py/plc4py/drivers/modbus/ModbusDevice.py     | 49 ++++++++++++++++--------
 plc4py/plc4py/spi/values/PlcValues.py            | 34 +---------------
 4 files changed, 43 insertions(+), 51 deletions(-)

diff --git a/plc4py/plc4py/api/value/PlcValue.py 
b/plc4py/plc4py/api/value/PlcValue.py
index 972e689632..cd0082be3a 100644
--- a/plc4py/plc4py/api/value/PlcValue.py
+++ b/plc4py/plc4py/api/value/PlcValue.py
@@ -51,6 +51,9 @@ class PlcValue(Generic[T], ABC):
             return len(self.value)
         return 1
 
+    def __eq__(self, other):
+        return other == self.value
+
 
 class PlcResponseCode(Enum):
     OK = auto()
diff --git a/plc4py/plc4py/drivers/modbus/ModbusConnection.py 
b/plc4py/plc4py/drivers/modbus/ModbusConnection.py
index ac964974b7..d12b437f6a 100644
--- a/plc4py/plc4py/drivers/modbus/ModbusConnection.py
+++ b/plc4py/plc4py/drivers/modbus/ModbusConnection.py
@@ -25,7 +25,8 @@ from plc4py.api.messages.PlcRequest import (
     PlcReadRequest,
     PlcRequest,
     PlcWriteRequest,
-    ReadRequestBuilder, WriteRequestBuilder,
+    ReadRequestBuilder,
+    WriteRequestBuilder,
 )
 from plc4py.api.messages.PlcResponse import (
     PlcResponse,
@@ -39,7 +40,10 @@ from plc4py.drivers.modbus.ModbusProtocol import 
ModbusProtocol
 from plc4py.drivers.modbus.ModbusTag import ModbusTagBuilder
 from plc4py.drivers.PlcDriverLoader import PlcDriverLoader
 from plc4py.spi.messages.PlcReader import DefaultPlcReader
-from plc4py.spi.messages.PlcRequest import DefaultReadRequestBuilder, 
DefaultWriteRequestBuilder
+from plc4py.spi.messages.PlcRequest import (
+    DefaultReadRequestBuilder,
+    DefaultWriteRequestBuilder,
+)
 from plc4py.spi.messages.PlcWriter import DefaultPlcWriter
 from plc4py.spi.transport.Plc4xBaseTransport import Plc4xBaseTransport
 from plc4py.spi.transport.TCPTransport import TCPTransport
diff --git a/plc4py/plc4py/drivers/modbus/ModbusDevice.py 
b/plc4py/plc4py/drivers/modbus/ModbusDevice.py
index 8cc11ee7f4..5263168585 100644
--- a/plc4py/plc4py/drivers/modbus/ModbusDevice.py
+++ b/plc4py/plc4py/drivers/modbus/ModbusDevice.py
@@ -53,13 +53,15 @@ from plc4py.protocols.modbus.readwrite.ModbusTcpADU import 
ModbusTcpADU
 from plc4py.spi.generation.ReadBuffer import ReadBuffer, ReadBufferByteBased
 from plc4py.spi.generation.WriteBuffer import WriteBufferByteBased
 from plc4py.spi.messages.utils.ResponseItem import ResponseItem
-from plc4py.spi.values.PlcValues import PlcList, PlcNull
+from plc4py.spi.values.PlcValues import PlcList, PlcNull, PlcBOOL
 from plc4py.utils.GenericTypes import AtomicInteger, ByteOrder
 
-from protocols.modbus.readwrite.ModbusPDUWriteMultipleCoilsRequest import 
ModbusPDUWriteMultipleCoilsRequest
-from protocols.modbus.readwrite.ModbusPDUWriteMultipleHoldingRegistersRequest 
import \
-    ModbusPDUWriteMultipleHoldingRegistersRequest, 
ModbusPDUWriteMultipleHoldingRegistersRequestBuilder
-from protocols.modbus.readwrite.ModbusPDUWriteSingleCoilRequest import 
ModbusPDUWriteSingleCoilRequest
+from plc4py.protocols.modbus.readwrite.ModbusPDUWriteMultipleCoilsRequest 
import (
+    ModbusPDUWriteMultipleCoilsRequest,
+)
+from 
plc4py.protocols.modbus.readwrite.ModbusPDUWriteMultipleHoldingRegistersRequest 
import (
+    ModbusPDUWriteMultipleHoldingRegistersRequestBuilder,
+)
 
 
 @dataclass
@@ -137,16 +139,23 @@ class ModbusDevice:
             a.frombytes(bytearray(result.value))
             a.bytereverse()
             read_buffer = ReadBufferByteBased(bytearray(a), 
ByteOrder.BIG_ENDIAN)
+            quantity = request.tags[request.tag_names[0]].quantity
+            if quantity == 1:
+                returned_value = PlcBOOL(read_buffer.read_bit(""))
+            else:
+                returned_value = []
+                for _ in range(quantity):
+                    returned_value.append(PlcBOOL(read_buffer.read_bit("")))
         else:
             read_buffer = ReadBufferByteBased(
                 bytearray(result.value), ByteOrder.BIG_ENDIAN
             )
-        returned_value = DataItem.static_parse(
-            read_buffer,
-            request.tags[request.tag_names[0]].data_type,
-            request.tags[request.tag_names[0]].quantity,
-            True,
-        )
+            returned_value = DataItem.static_parse(
+                read_buffer,
+                request.tags[request.tag_names[0]].data_type,
+                request.tags[request.tag_names[0]].quantity,
+                True,
+            )
 
         response_item = ResponseItem(PlcResponseCode.OK, returned_value)
 
@@ -175,13 +184,21 @@ class ModbusDevice:
         message_future = loop.create_future()
 
         if isinstance(tag, ModbusTagCoil):
-            pdu = ModbusPDUWriteMultipleCoilsRequest(tag.address, 
tag.quantity, [v for k, v in request.values])
+            pdu = ModbusPDUWriteMultipleCoilsRequest(
+                tag.address, tag.quantity, [v for k, v in request.values]
+            )
         elif isinstance(tag, ModbusTagDiscreteInput):
-            raise PlcRuntimeException("Modbus doesn't support writing to 
discrete inputs")
+            raise PlcRuntimeException(
+                "Modbus doesn't support writing to discrete inputs"
+            )
         elif isinstance(tag, ModbusTagInputRegister):
-            raise PlcRuntimeException("Modbus doesn't support writing to input 
registers")
+            raise PlcRuntimeException(
+                "Modbus doesn't support writing to input registers"
+            )
         elif isinstance(tag, ModbusTagHoldingRegister):
-            pdu = 
ModbusPDUWriteMultipleHoldingRegistersRequestBuilder(tag.address, tag.quantity, 
request.values).build()
+            pdu = ModbusPDUWriteMultipleHoldingRegistersRequestBuilder(
+                tag.address, tag.quantity, request.values
+            ).build()
         else:
             raise NotImplementedError(
                 "Modbus tag type not implemented " + str(tag.__class__)
@@ -206,4 +223,4 @@ class ModbusDevice:
 
         await message_future
         result = message_future.result()
-        pass
\ No newline at end of file
+        pass
diff --git a/plc4py/plc4py/spi/values/PlcValues.py 
b/plc4py/plc4py/spi/values/PlcValues.py
index d2c44e78c2..437c6a795f 100644
--- a/plc4py/plc4py/spi/values/PlcValues.py
+++ b/plc4py/plc4py/spi/values/PlcValues.py
@@ -19,164 +19,132 @@
 from dataclasses import dataclass
 from typing import Any, Dict, List
 
-from plc4py.api.value.PlcValue import PlcValue
+from ...api.value.PlcValue import PlcValue
 
 
-@dataclass
 class PlcINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcBYTE(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcCHAR(PlcValue[str]):
     pass
 
 
-@dataclass
 class PlcDATE(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcDATE_AND_TIME(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcDINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcDWORD(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcLDATE(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcLDATE_AND_TIME(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcLINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcList(PlcValue[List[Any]]):
     pass
 
 
-@dataclass
 class PlcLREAL(PlcValue[float]):
     pass
 
 
-@dataclass
 class PlcLTIME(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcLTIME_OF_DAY(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcLWORD(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcNull(PlcValue[None]):
     pass
 
 
-@dataclass
 class PlcRawByteArray(List[PlcValue[Any]]):
     pass
 
 
-@dataclass
 class PlcREAL(PlcValue[float]):
     pass
 
 
-@dataclass
 class PlcSINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcSTRING(PlcValue[str]):
     pass
 
 
-@dataclass
 class PlcStruct(PlcValue[Dict[str, PlcValue[str]]]):
     pass
 
 
-@dataclass
 class PlcTIME(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcTIME_OF_DAY(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcUBINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcUDINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcUINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcULINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcUSINT(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcWCHAR(PlcValue[str]):
     pass
 
 
-@dataclass
 class PlcWORD(PlcValue[int]):
     pass
 
 
-@dataclass
 class PlcWSTRING(PlcValue[str]):
     pass
 
 
-@dataclass
 class PlcBOOL(PlcValue[bool]):
     pass

Reply via email to