Pour le num d’esclave, je viens de comprendre, j’ai indiqué 10.
Exemple sur ce champ 652 :
→ 2 commandes identiques, 2 valeurs différentes!
Et côté logs :
0033|[2025-01-30 00:00:54] ERROR : Fatal error: protocol.data_received() call failed.
0034|protocol: <pymodbus.client.modbusclientprotocol.ModbusClientProtocol object at 0x7fd3399a3f10>
0035|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0036|Traceback (most recent call last):
0037|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/pdu/mei_message.py", line 127, in calculateRtuFrameSize
0038|_, object_length = struct.unpack(">BB", buffer[size : size + 2])
0039|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0040|struct.error: unpack requires a buffer of 2 bytes
0041|The above exception was the direct cause of the following exception:
0042|Traceback (most recent call last):
0043|File "/opt/pyenv/versions/3.11.11/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0044|self._protocol.data_received(data)
0045|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 297, in data_received
0046|self.datagram_received(data, None)
0047|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 331, in datagram_received
0048|cut = self.callback_data(self.recv_buffer, addr=addr)
0049|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0050|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/client/modbusclientprotocol.py", line 71, in callback_data
0051|used_len, pdu = self.framer.processIncomingFrame(data)
0052|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0053|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/base.py", line 77, in processIncomingFrame
0054|data_len, pdu = self._processIncomingFrame(data[used_len:])
0055|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0056|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/base.py", line 95, in _processIncomingFrame
0057|used_len, dev_id, tid, frame_data = self.decode(data)
0058|^^^^^^^^^^^^^^^^^
0059|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/framer/rtu.py", line 112, in decode
0060|if not (size := pdu_class.calculateRtuFrameSize(data[used_len:])):
0061|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0062|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/pdu/mei_message.py", line 132, in calculateRtuFrameSize
0063|raise IndexError from exc
0064|IndexError
0065|[2025-01-30 00:01:19] ERROR : No response received after 3.0 retries, continue with next request
0066|[2025-01-30 00:01:19] ERROR : Chaudiere/652_T_Hors_Gel1: error during read request on slave id 10, address 652 -> Exception Response(131, 3, None)
0067|[2025-01-30 00:02:41] ERROR : Chaudiere: 'process_read_response' 'cmd_decode' for command id = 10 raised an exception: 'WriteMultipleRegistersResponse' object has no attribute 'values'
Edit :
A force de faire des tests, je crois que je commence à comprendre le problème.
Si je lance plusieurs lectures de suite via Modbus Doctor, j’ai effectivement plusieurs valeurs possibles. Par exemple, je vais avoir :
- 80% du temps la bonne valeur qui est 50.
- 15% du temps des valeurs erronées (0, 110…) mais avec un Request OK.
- 5% du temps, une erreur Illegal Data Value.
Je ne sais pas comment l’ancienne version du plugin arrivait à gérer ça, mais elle prenait en compte uniquement la bonne valeur.
Je ne sais pas si tu as un avis @Michel_F stp ?