Commit Graph

56 Commits

Author SHA1 Message Date
Damian Wrobel bf0f7316b9
Avoid sending more then one Modbus TCP response (#22223)
Prevent from sending more then one Modbus TCP response
for a single request.

This might happen in the following scenario where,
shortly after the first response has been sent (4),
the second one will be send (8) (note the same
'TransactionId') triggered by the response to the
'ModbusSend' request issued by Berry (5).

The log excerpt from such a situation:

(1) 21:13:20.510 MBS: MBRTCP to Modbus TransactionId:520, deviceAddress:4, functionCode:3, startAddress:8193, count:1, recvCount:1, recvBytes:2
(2) 21:13:20.523 MBS: Serial Send: 04 03 20 01 00 01 DE 5F
(3) 21:13:20.647 MBS: Serial Received: 04 03 02 0A 28 72 FA
(4) 21:13:20.652 MBS: MBRTCP from Modbus TransactionId:520, deviceAddress:4, writing:11 bytes to client (error:0)
(5) 21:13:20.724 CMD: Grp 0, Cmd 'MODBUSSEND', Idx 1, Len 89, Pld -99, Data '{"deviceAddress":4, "functionCode":6, "startAddress":8192, "type":"uint16", "Values":[6]}'
(6) 21:13:20.743 MBS: Serial Send: 04 06 20 00 00 06 02 5D
(7) 21:13:21.009 MBS: Serial Received: 04 06 20 00 00 06 02 5D
(8) 21:13:21.014 MBS: MBRTCP from Modbus TransactionId:520, deviceAddress:4, writing:12 bytes to client (error:0)

Use 'tcp_transaction_id' field to denote that we already
sent a response.

Signed-off-by: Damian Wrobel <dwrobel@ertelnet.rybnik.pl>
2024-10-02 21:34:48 +02:00
Damian Wrobel 6650dee578
Fix ModbusBridge request/response logic (#22075)
- Fix cases where the subsequent Modbus packet
  can be send to the serial port (triggered either by
  'ModbusSend' command or request from TCP bridge)
  before an answer was received to the previous packet.

  This can happen in a setup where simultaneously:
  - two (or more) modbus TCP clients are sending requests
    through the modbus-proxy [1] to Tasmota,
  - ModbusSend commands are executed (e.g. using Berry).

  Log excerpt (from build with TASMOTAMODBUSDEBUG enabled):
  14:51:18.940 MBS: Serial Send: 04 03 01 00 00 09 84 65
  14:51:19.054 MBS: Serial Send: 04 03 10 0A 00 05 A1 5E
  14:51:19.136 MBS: Serial Received: 04 03 0A 00 00 00 D0 00 00 01 AB 00 00 89 62

  Fix adds 'waitingForAnswerFromSerial' flag which is set after
  we send data to the serial port and prevents sending another
  requests before we receive an answer or timeout happened.

  Fix stores temporarily a 'ModbusSend' command data and tries
  to execute it after Modbus response has been received or
  timeout has happened.

- Add 'ModbusSerialTimeout' command which sets timeout in [ms]
  for how long we will be waiting for an answer from the client device.
  Default value is 1000 [ms] and it is not restored after reboot.

- Sends error 11 (0xB) (as TCP response) when no answer was received
  from the serial port within the timeout set by 'ModbusSerialTimeout'
  command.

- Add Modbus 'TransactionId' to the logging.

[1] https://github.com/tiagocoutinho/modbus-proxy

Signed-off-by: Damian Wrobel <dwrobel@ertelnet.rybnik.pl>
2024-09-09 10:26:20 +02:00
Theo Arends adcc50ac6e Revert "Fix network flushes"
This reverts commit b88ec44d15.
2024-05-29 16:44:50 +02:00
Theo Arends b88ec44d15 Fix network flushes 2024-05-29 14:09:54 +02:00
Fulvio Spelta c93d6676b9
Fix SetOption158 publish/suppress ModbusReceived MQTT messages (#20733)
Fixed a bug that let some mqtt messages be published anyway
2024-02-16 15:06:11 +01:00
Fulvio Spelta ab8676d865
SetOption158 publish/suppress ModbusReceived MQTT messages (#20678) 2024-02-07 15:57:09 +01:00
Theo Arends d5a4f8441b Fix Berry claiming UART0 if needed (#20324) 2023-12-28 17:25:01 +01:00
Theo Arends 21c7edcb50 Add display of active drivers using command ``status 4`` 2023-12-27 22:03:56 +01:00
Theo Arends 433d69d4bc Fix serial resource checks
Fix serial resource checks (#20053)
2023-11-20 12:35:06 +01:00
Norbert a04995a3f4
Update xdrv_63_modbus_bridge.ino, brackets not needed. (#19759) 2023-10-16 09:42:55 +02:00
JeroenSt 91ba05ac3b
ModbusBridge write memleak fix (19733) (#19758)
Co-authored-by: JeroenSt <nospam@nospam.org>
2023-10-16 08:26:26 +02:00
chefpro 9fbb4a8b0b
Fix modbus receive handling for float types (#19697)
Co-authored-by: Peter Rustler <peter@rustlerit.de>
2023-10-08 13:14:53 +02:00
Jeroen f860722eba
Added Endianess Parameter (#18650)
https://github.com/arendst/Tasmota/discussions/18244

Co-authored-by: JeroenSt <nospam@nospam.org>
2023-05-14 14:18:45 +02:00
f-reiling 3a6cd9b63c
start modus tcp bridge automatically (#18634)
* added default port for modbus tcp bridge to start automatically

* updated ifdef style

* renamed define for modbus default port
2023-05-10 14:38:52 +02:00
Jeroen c5612a50fb
Fix for https://github.com/arendst/Tasmota/discussions/15703#discussioncomment-5713294 (#18534)
Added and fixed comments

Co-authored-by: JeroenSt <nospam@nospam.org>
2023-04-29 14:46:38 +02:00
Jeroen ee9d086aba
Solved: ModbusBridge reading int16 returns uint16 (#18524)
https://github.com/arendst/Tasmota/issues/18522

Co-authored-by: JeroenSt <nospam@nospam.org>
2023-04-26 22:27:53 +02:00
Jeroen a68bc49cab
Added option to output TCP requested modbus data to MQTT (#18231)
https://github.com/arendst/Tasmota/discussions/17369

Co-authored-by: JeroenSt <nospam@nospam.org>
2023-03-21 09:39:32 +01:00
Jeroen fbbb4eaf84
Fix for issue: https://github.com/arendst/Tasmota/issues/18088 (#18228)
Co-authored-by: JeroenSt <nospam@nospam.org>
2023-03-20 21:26:38 +01:00
Theo Arends bbde894628 Add serial Modbus transmit enable GPIOs
Add serial Modbus transmit enable GPIOs to all modbus energy drivers and modbus bridge (#17247)
2022-12-03 12:33:42 +01:00
Theo Arends c1ea8953cb Refactor uint8_t to uint32_t 2022-11-11 10:44:56 +01:00
Norbert Richter 050f2e7e61
Fix ModbusBridge buffer overflow (#16979) 2022-11-06 12:32:30 +01:00
Norbert Richter f76bed338b
Localize ModbusBridge global func/var names 2022-11-06 12:32:30 +01:00
Norbert Richter 31516f2d34
Add ModbusBridge malloc error notes 2022-11-06 12:32:30 +01:00
JeroenSt 728c108294 Removed logging and changed maximum number of coils/inputs 2022-08-27 10:54:41 +02:00
JeroenSt f57acac48b Fixed Modbus TCP function 1 & 2 not working 2022-08-27 10:40:02 +02:00
JeroenSt a19edd4983 Solved endian on uint16 2022-08-27 09:11:36 +02:00
JeroenSt 1ac5b6fd7f Rework in progress
ModbusTCP fully tested OK
Modbus via Commands:
function 1..5 tested ok
function 6 fail
function 15 & 16 not tested
2022-08-27 09:11:36 +02:00
JeroenSt 9c11eb41d4 Changed Modbus to also support nr of bytes
for functioncode 1,2 & 15.
https://ozeki.hu/p_5876-mobdbus-function-code-1-read-coils.html
2022-08-27 09:11:36 +02:00
JeroenSt 5bd28954fa Fixed reading functioncode 1 & 2 for ModbusTCP
Returned bytes need to be even (limitation of TasmotaModbus.cpp)
https://github.com/arendst/Tasmota/issues/9586
2022-08-27 09:11:36 +02:00
JeroenSt ffcdce6041 Fixed FC16
https://github.com/arendst/Tasmota/issues/9586#issuecomment-1226120239
2022-08-27 09:11:36 +02:00
JeroenSt d333948816 Solved ModbusTCP writing wrong registers 2022-08-27 09:11:36 +02:00
JeroenSt fea41407ac changed wrong copying of tcp data to writedata 2022-08-27 09:11:36 +02:00
JeroenSt a5782f2ca0 Added usefull url to comments 2022-08-27 09:11:36 +02:00
JeroenSt 2926a66fe0 Added returning of modbus error codes to TCP client
https://github.com/arendst/Tasmota/issues/9586#issuecomment-1225437630
2022-08-27 09:11:36 +02:00
JeroenSt 5f86569a9f Solved Issues mentioned in
https://github.com/arendst/Tasmota/issues/9586
2022-08-27 09:11:36 +02:00
JeroenSt a832af4dd2 added linefeed 2022-08-17 21:14:50 +02:00
JeroenSt 995b669f28 Removed debug logging 2022-08-17 20:12:26 +02:00
JeroenSt b8000fa788 Update for functioncode 5 and 6 and 15 2022-08-17 19:55:42 +02:00
JeroenSt 812fbff683 Fixed reading discrete inputs and coils
https://github.com/arendst/Tasmota/issues/9586#issuecomment-1217574286
2022-08-17 19:55:42 +02:00
JeroenSt cc2c219aa2 Modified reading of bits according to coil and input register specification 2022-08-17 19:55:42 +02:00
JeroenSt aabf188afb (u)int8 and (u)int32 are now also working 2022-08-17 19:55:42 +02:00
JeroenSt 1d4ff834ab Solved error in reading (u)int32 value and removed logging 2022-08-17 19:55:42 +02:00
JeroenSt fa3802cd67 Changed int and uint types 2022-08-17 19:55:42 +02:00
JeroenSt 3470a5d4cd Added Bit and Hex reading https://github.com/arendst/Tasmota/issues/9586#issuecomment-1216313774 2022-08-17 19:55:41 +02:00
JeroenSt a04a446654 work in progress 2022-08-17 19:55:41 +02:00
JeroenSt 96a1eb3ae5 In the first serie of tests this seems to work right. 2022-08-17 19:55:41 +02:00
JeroenSt 355e31ff2e Work in progress... 2022-08-17 19:55:41 +02:00
JeroenSt 92319eedd2 Work in progress... 2022-08-17 19:55:41 +02:00
JeroenSt 2c2a73506d Work in progress. 2022-08-17 19:55:41 +02:00
JeroenSt 9881183726 In progess: Developping modbus write functionality 2022-08-17 19:55:41 +02:00