@@ -16,18 +16,6 @@ class ReadCoilsRequest(ModbusPDU):
16
16
rtu_frame_size = 8
17
17
function_code = 1
18
18
19
- def __init__ (self ) -> None :
20
- """Initialize the read request."""
21
- super ().__init__ ()
22
- self .address : int = 0
23
- self .count : int = 0
24
-
25
- def setData (self , address : int , count : int , slave_id : int , transaction_id : int ) -> None :
26
- """Set data."""
27
- super ().setBaseData (slave_id , transaction_id )
28
- self .address = address
29
- self .count = count
30
-
31
19
def encode (self ) -> bytes :
32
20
"""Encode a request pdu."""
33
21
return struct .pack (">HH" , self .address , self .count )
@@ -54,15 +42,10 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
54
42
self .function_code , self .address , self .count
55
43
))
56
44
response = (ReadCoilsResponse if self .function_code == 1 else ReadDiscreteInputsResponse )()
57
- response .setData ( values , self . slave_id , self . transaction_id )
45
+ response .bits = values
58
46
return response
59
47
60
48
61
- def __str__ (self ) -> str :
62
- """Return a string representation of the instance."""
63
- return f"{ self .__class__ .__name__ } ({ self .address } ,{ self .count } )"
64
-
65
-
66
49
class ReadDiscreteInputsRequest (ReadCoilsRequest ):
67
50
"""ReadDiscreteInputsRequest."""
68
51
@@ -75,11 +58,6 @@ class ReadCoilsResponse(ModbusPDU):
75
58
function_code = 1
76
59
rtu_byte_count_pos = 2
77
60
78
- def setData (self , values : list [bool ], slave_id : int , transaction_id : int ) -> None :
79
- """Set data."""
80
- super ().setBaseData (slave_id , transaction_id )
81
- self .bits = values
82
-
83
61
def encode (self ) -> bytes :
84
62
"""Encode response pdu."""
85
63
result = pack_bitstring (self .bits )
@@ -90,10 +68,6 @@ def decode(self, data):
90
68
"""Decode response pdu."""
91
69
self .bits = unpack_bitstring (data [1 :])
92
70
93
- def __str__ (self ):
94
- """Return a string representation of the instance."""
95
- return f"{ self .__class__ .__name__ } ({ len (self .bits )} )"
96
-
97
71
98
72
class ReadDiscreteInputsResponse (ReadCoilsResponse ):
99
73
"""ReadDiscreteInputsResponse."""
@@ -107,31 +81,15 @@ class WriteSingleCoilResponse(ModbusPDU):
107
81
function_code = 5
108
82
rtu_frame_size = 8
109
83
110
- def __init__ (self ) -> None :
111
- """Instancitate object."""
112
- super ().__init__ ()
113
- self .address : int = 0
114
- self .value : bool = False
115
-
116
- def setData (self , address : int , value : bool , slave_id : int , transaction_id : int ) -> None :
117
- """Set data."""
118
- super ().setBaseData (slave_id , transaction_id )
119
- self .address = address
120
- self .value = value
121
-
122
84
def encode (self ) -> bytes :
123
85
"""Encode write coil request."""
124
- val = ModbusStatus .ON if self .value else ModbusStatus .OFF
86
+ val = ModbusStatus .ON if self .bits [ 0 ] else ModbusStatus .OFF
125
87
return struct .pack (">HH" , self .address , val )
126
88
127
89
def decode (self , data : bytes ) -> None :
128
90
"""Decode a write coil request."""
129
91
self .address , value = struct .unpack (">HH" , data )
130
- self .value = value == ModbusStatus .ON
131
-
132
- def __str__ (self ) -> str :
133
- """Return a string representation of the instance."""
134
- return f"{ self .__class__ .__name__ } ({ self .address } ) => { self .value } "
92
+ self .bits = [value == ModbusStatus .ON ]
135
93
136
94
137
95
class WriteSingleCoilRequest (WriteSingleCoilResponse ):
@@ -142,11 +100,9 @@ async def update_datastore(self, context: ModbusSlaveContext) -> ModbusPDU:
142
100
if not context .validate (self .function_code , self .address , 1 ):
143
101
return self .doException (merror .IllegalAddress )
144
102
145
- await context .async_setValues (self .function_code , self .address , [ self .value ] )
103
+ await context .async_setValues (self .function_code , self .address , self .bits )
146
104
values = cast (list [bool ], await context .async_getValues (self .function_code , self .address , 1 ))
147
- pdu = WriteSingleCoilResponse ()
148
- pdu .setData (self .address , values [0 ], self .slave_id , self .transaction_id )
149
- return pdu
105
+ return WriteSingleCoilResponse (address = self .address , bits = values , slave_id = self .slave_id , transaction_id = self .transaction_id )
150
106
151
107
def get_response_pdu_size (self ) -> int :
152
108
"""Get response pdu size.
@@ -162,50 +118,32 @@ class WriteMultipleCoilsRequest(ModbusPDU):
162
118
function_code = 15
163
119
rtu_byte_count_pos = 6
164
120
165
- def __init__ (self ) -> None :
166
- """Initialize a new instance."""
167
- super ().__init__ ()
168
- self .address : int = 0
169
- self .values : list [bool ] = []
170
-
171
- def setData (self , address : int , values : list [bool ], slave_id : int , transaction_id : int ) -> None :
172
- """Set data."""
173
- super ().setBaseData (slave_id , transaction_id )
174
- self .address = address
175
- self .values = values
176
-
177
121
def encode (self ) -> bytes :
178
122
"""Encode write coils request."""
179
- count = len (self .values )
123
+ count = len (self .bits )
180
124
byte_count = (count + 7 ) // 8
181
125
packet = struct .pack (">HHB" , self .address , count , byte_count )
182
- packet += pack_bitstring (self .values )
126
+ packet += pack_bitstring (self .bits )
183
127
return packet
184
128
185
129
def decode (self , data : bytes ) -> None :
186
130
"""Decode a write coils request."""
187
131
self .address , count , _ = struct .unpack (">HHB" , data [0 :5 ])
188
132
values = unpack_bitstring (data [5 :])
189
- self .values = values [:count ]
133
+ self .bits = values [:count ]
190
134
191
135
async def update_datastore (self , context : ModbusSlaveContext ) -> ModbusPDU :
192
136
"""Run a request against a datastore."""
193
- count = len (self .values )
137
+ count = len (self .bits )
194
138
if not 1 <= count <= 0x07B0 :
195
139
return self .doException (merror .IllegalValue )
196
140
if not context .validate (self .function_code , self .address , count ):
197
141
return self .doException (merror .IllegalAddress )
198
142
199
143
await context .async_setValues (
200
- self .function_code , self .address , self .values
144
+ self .function_code , self .address , self .bits
201
145
)
202
- pdu = WriteMultipleCoilsResponse ()
203
- pdu .setData (self .address , count , self .slave_id , self .transaction_id )
204
- return pdu
205
-
206
- def __str__ (self ) -> str :
207
- """Return a string representation of the instance."""
208
- return f"{ self .__class__ .__name__ } ({ self .address } ) => { len (self .values )} "
146
+ return WriteMultipleCoilsResponse (address = self .address , count = count , slave_id = self .slave_id , transaction_id = self .transaction_id )
209
147
210
148
def get_response_pdu_size (self ) -> int :
211
149
"""Get response pdu size.
@@ -222,26 +160,10 @@ class WriteMultipleCoilsResponse(ModbusPDU):
222
160
function_code = 15
223
161
rtu_frame_size = 8
224
162
225
- def __init__ (self ) -> None :
226
- """Initialize a new instance."""
227
- super ().__init__ ()
228
- self .address : int = 0
229
- self .count : int = 0
230
-
231
- def setData (self , address : int , count : int , slave_id : int , transaction_id : int ) -> None :
232
- """Set data."""
233
- super ().setBaseData (slave_id , transaction_id )
234
- self .address = address
235
- self .count = count
236
-
237
163
def encode (self ) -> bytes :
238
164
"""Encode write coils response."""
239
165
return struct .pack (">HH" , self .address , self .count )
240
166
241
167
def decode (self , data : bytes ) -> None :
242
168
"""Decode a write coils response."""
243
169
self .address , self .count = struct .unpack (">HH" , data )
244
-
245
- def __str__ (self ) -> str :
246
- """Return a string representation of the instance."""
247
- return f"{ self .__class__ .__name__ } ({ self .address } , { self .count } )"
0 commit comments