Skip to content

Modbus slave transaction handling on open connection becomes mangled when multiple transactions are handled concurrently (EPROT-55) #161

Description

@blank-lgtm

Checklist

  • Checked the issue tracker for similar issues to ensure this is not a duplicate
  • Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
  • Tested with the latest version to ensure the issue hasn't been fixed

How often does this bug occurs?

rarely

Expected behavior

When device running modbus receives multiple transactions between multiple open connections each transaction should be processed in its entirety.

Actual behavior (suspected bug)

When a device receives a modbus request while in a specific section of processing a previous transaction, the device may abandon processing the original transaction in favor of the new request. This partially processed transaction will finish and a reply is generated only on next transaction receive where the newly received transaction will become suspended in the same way. This corrupted state persists until the affected connection socket is closed by peer.

Error logs or terminal output

D (42951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_open: fd: 1
D (42951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_connect: fd: 1
D (43001) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (43001) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (43001) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x001d, frame: 0x3fcba618, 12
D (43021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001d, start transaction.
D (43031) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001d.
D (43041) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 1
D (43041) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56) [192.168.100.1], receive data ready.
D (43051) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), received packet TID: 0x0001, frame: 0x3fcba638, 12
D (43071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43081) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43081) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43091) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x001d, 0x3fcb5764.
D (43101) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (43111) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x001d:0x001d, 0x3fcb5764, len: 23, 
D (43121) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), sent packet TID: 0x001d, 0x3fcb9774.
D (43131) mb_port.tcp.slave: Remove the message TID:0x001d
I (43141) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (43106297 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (43181) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43181) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43231) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43231) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43281) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43281) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43331) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43331) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43381) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43381) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43431) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43431) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43481) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43481) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43531) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43531) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43581) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43581) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43631) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43631) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43681) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43681) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43731) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43731) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43781) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43781) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43831) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43831) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43881) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43881) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43931) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43931) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (43981) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (43981) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44031) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44031) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44081) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44081) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44131) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (44131) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (44131) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x001e, frame: 0x3fcba618, 12
D (44141) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), acknowledged packet TID: 0x0001, start transaction.
D (44161) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), acknowledged packet TID: 0x0001.
D (44171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44181) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44191) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44191) mb_port.tcp.slave: 0x3fcb59d8, node #1, socket(#56)(192.168.100.1), read packet, TID: 0x0001, 0x3fcb5764.
D (44201) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 1
D (44211) mb_port.tcp.slave: 0x3fcb5c14, node: #1, socket(#56)[192.168.100.1], send packet TID: 0x0001:0x0001, 0x3fcb5764, len: 23, 
D (44221) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), sent packet TID: 0x0001, 0x3fcb9774.
D (44231) mb_port.tcp.slave: Remove the message TID:0x0001
I (44241) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (44208515 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (44291) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44291) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44341) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44341) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44391) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44391) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44441) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44441) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44491) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44491) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44541) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44541) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44591) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44591) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44641) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44641) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44691) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44691) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44741) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44741) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44791) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (44791) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44841) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
E (44841) mb_port.tcp.slave: 0x3fcb59d8, node #2, socket(#57)(192.168.100.1), communication fail, err= -11
D (44841) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44901) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (44951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45001) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45051) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45101) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45151) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45201) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45251) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45251) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45301) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45301) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45351) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45351) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45401) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45401) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45451) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45451) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45501) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45501) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45551) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45551) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45601) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45601) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45651) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45651) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45701) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45701) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45751) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45751) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45801) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45801) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45851) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45851) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45901) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45901) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (45951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (45951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46001) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46001) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46051) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46051) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46101) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46101) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46151) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46151) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46201) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46201) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46251) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46251) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46301) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46301) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46351) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46351) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46401) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46401) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46451) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46451) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46501) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46501) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46551) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46551) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46601) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46601) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46651) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46651) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46701) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46701) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46751) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46751) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46801) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46801) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46851) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_open: fd: 2
D (46851) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_connect: fd: 2
D (46901) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46901) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 2
D (46901) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57) [192.168.100.1], receive data ready.
D (46911) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57)(192.168.100.1), received packet TID: 0x0001, frame: 0x3fcba96c, 12
D (46921) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001e, start transaction.
D (46931) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001e.
D (46941) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46951) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (46961) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (46961) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x001e, 0x3fcb5764.
D (46971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (46981) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x001e:0x001e, 0x3fcb5764, len: 23, 
D (46991) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), sent packet TID: 0x001e, 0x3fcbb938.
D (47001) mb_port.tcp.slave: Remove the message TID:0x001e
I (47011) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (46978483 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (47061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
D (47611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 3
E (47611) mb_port.tcp.slave: 0x3fcb59d8, node #3, socket(#58)(192.168.100.1), communication fail, err= -11
D (47671) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47721) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47771) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47821) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47871) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47921) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (47971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (48021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (48021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x001f, frame: 0x3fcba95c, 12
D (48031) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57)(192.168.100.1), acknowledged packet TID: 0x0001, start transaction.
D (48051) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57)(192.168.100.1), acknowledged packet TID: 0x0001.
D (48061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48061) mb_port.tcp.slave: 0x3fcb59d8, node #2, socket(#57)(192.168.100.1), read packet, TID: 0x0001, 0x3fcb5764.
D (48071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 2
D (48081) mb_port.tcp.slave: 0x3fcb5c14, node: #2, socket(#57)[192.168.100.1], send packet TID: 0x0001:0x0001, 0x3fcb5764, len: 23, 
D (48091) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57)(192.168.100.1), sent packet TID: 0x0001, 0x3fcb9774.
D (48101) mb_port.tcp.slave: Remove the message TID:0x0001
I (48111) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (48079751 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (48161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48661) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48711) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48761) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48811) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48861) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48911) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (48961) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49011) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49661) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49661) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49711) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49711) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49761) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49761) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49811) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49811) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49861) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49861) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49911) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49911) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (49961) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (49961) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50011) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50011) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50111) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50161) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50211) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50261) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50311) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50361) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50411) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50461) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50511) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50561) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
D (50611) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50661) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 1
E (50661) mb_port.tcp.slave: 0x3fcb59d8, node #1, socket(#56)(192.168.100.1), communication fail, err= -11
D (50661) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50721) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50771) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50821) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50871) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50921) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (50971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51121) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51221) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51271) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51321) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51371) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51421) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51471) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51521) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51571) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51621) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51671) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51721) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51771) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51821) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51871) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51921) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (51971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52121) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52221) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52271) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52321) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52371) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52421) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52471) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52521) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52571) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52621) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52671) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52721) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52771) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52821) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52871) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52921) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (52971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53121) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53221) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53271) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53321) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53371) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53421) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53471) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53521) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53571) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53621) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53671) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53721) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53771) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53821) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53871) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53921) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (53971) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (54021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (54021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x0020, frame: 0x3fcba608, 12
D (54031) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001f, start transaction.
D (54051) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001f.
D (54061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54061) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x0020, 0x3fcb5764.
D (54071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (54081) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x001f:0x001f, 0x3fcb5764, len: 23, 
D (54091) mb_port.tcp.slave: Remove the message TID:0x001f
D (54101) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), frame TID:0x0020!=0x001f, slave is busy.
W (54111) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), handling time [ms]: 6062, exceeds slave response time in master.
I (54121) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (54079700 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (54171) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54221) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54271) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54321) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54371) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54421) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54471) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54521) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
D (54571) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_error: fd: 2
E (54571) mb_port.tcp.slave: 0x3fcb59d8, node #2, socket(#57)(192.168.100.1), communication fail, err= -11
D (54831) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (55091) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (55351) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (55611) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (55871) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (56131) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (56391) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (56651) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (56911) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (57171) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (57431) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (57691) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (57951) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (58211) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (58471) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (58731) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (58991) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (59251) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (59511) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (59771) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (60011) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (60011) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (60021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x0021, frame: 0x3fcba95c, 12
D (60031) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0020, start transaction.
D (60041) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0020.
D (60051) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x0021, 0x3fcb5764.
D (60061) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (60071) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x0020:0x0020, 0x3fcb5764, len: 23, 
D (60081) mb_port.tcp.slave: Remove the message TID:0x0020
D (60081) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), frame TID:0x0021!=0x0020, slave is busy.
W (60091) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), handling time [ms]: 6049, exceeds slave response time in master.
I (60111) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (60066425 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (60371) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (60631) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (60891) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (61151) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (61411) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (61671) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (61931) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (62191) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (62451) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (62711) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (62971) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (63231) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (63491) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (63751) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (64011) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (64271) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (64531) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (64791) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (65051) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (65311) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (65571) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (65831) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (66021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (66021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (66021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x0022, frame: 0x3fcba608, 12
D (66031) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0021, start transaction.
D (66051) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0021.
D (66061) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x0022, 0x3fcb5764.
D (66071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (66071) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x0021:0x0021, 0x3fcb5764, len: 23, 
D (66091) mb_port.tcp.slave: Remove the message TID:0x0021
D (66091) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), frame TID:0x0022!=0x0021, slave is busy.
W (66101) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), handling time [ms]: 6064, exceeds slave response time in master.
I (66121) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (66073882 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (66381) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (66641) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (66901) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (67161) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (67421) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (67681) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (67941) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (68201) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (68461) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (68721) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (68981) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (69241) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (69501) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (69761) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (70021) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (70281) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (70541) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (70801) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (71061) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (71321) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (71581) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (71841) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (72021) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (72021) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (72031) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x0023, frame: 0x3fcba95c, 12
D (72041) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0022, start transaction.
D (72051) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0022.
D (72061) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x0023, 0x3fcb5764.
D (72071) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (72081) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x0022:0x0022, 0x3fcb5764, len: 23, 
D (72091) mb_port.tcp.slave: Remove the message TID:0x0022
D (72101) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), frame TID:0x0023!=0x0022, slave is busy.
W (72111) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), handling time [ms]: 6062, exceeds slave response time in master.
I (72121) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (72079974 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (72381) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (72641) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (72901) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (73161) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (73421) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (73681) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (73941) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (74201) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (74461) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (74721) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (74981) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (75241) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (75501) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (75761) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (76021) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (76281) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (76541) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (76801) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (77061) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (77321) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (77581) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (77841) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (78041) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_recv_data: fd: 0
D (78041) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (78051) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x0024, frame: 0x3fcba608, 12
D (78061) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0023, start transaction.
D (78071) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x0023.
D (78081) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x0024, 0x3fcb5764.
D (78091) mb_port.tcp.slave: loop:0x3fcb5c14  mbs_on_send_data: fd: 0
D (78101) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x0023:0x0023, 0x3fcb5764, len: 23, 
D (78111) mb_port.tcp.slave: Remove the message TID:0x0023
D (78111) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), frame TID:0x0024!=0x0023, slave is busy.
W (78121) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), handling time [ms]: 6072, exceeds slave response time in master.
I (78141) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (78095594 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7
D (78401) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (78661) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (78921) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (79181) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (79441) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (79701) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (79961) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (80221) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (80481) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1
D (80741) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_timeout: fd: 0, count: 1

Steps to reproduce the behavior

  1. build modbus_tcp_slave example
  2. run example
  3. using a modbus client, open a socket and periodically send a modbus register read request
  4. create a second modbus client, send identical register read request with a random period and closing the tcp connection between attempts until requests from both clients align in such a way to generate transaction mangling

Project release version

esp_modbus 2.1.2, esp-idf 5.2.5

System architecture

Intel/AMD 64-bit (modern PC, older Mac)

Operating system

Windows

Operating system version

Windows 11

Shell

PowerShell

Additional context

The state modbus slave enters after the occurrence of the bug is effectively such that it always tries to reply to the previous transaction ID when a new transaction is received. A continuously running modbus server polling the device will start timeouting transactions as the reply will be received only after a new transaction is initiated upon a timeout of the original one.

The log I provided is from the modbus example with only mb_port.tcp.slave tag set to debug to be more concise.

Bug presents itself in log section:

D (44131) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_recv_data: fd: 0
D (44131) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55) [192.168.100.1], receive data ready.
D (44131) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), received packet TID: 0x001e, frame: 0x3fcba618, 12
D (44141) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), acknowledged packet TID: 0x0001, start transaction.
D (44161) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), acknowledged packet TID: 0x0001.
D (44171) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 2
D (44171) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 3
D (44181) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 2
D (44191) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 3
D (44191) mb_port.tcp.slave: 0x3fcb59d8, node #1, socket(#56)(192.168.100.1), read packet, TID: 0x0001, 0x3fcb5764.
D (44201) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_send_data: fd: 1
D (44211) mb_port.tcp.slave: 0x3fcb5c14, node: #1, socket(#56)[192.168.100.1], send packet TID: 0x0001:0x0001, 0x3fcb5764, len: 23,
D (44221) mb_port.tcp.slave: 0x3fcb5c14, node #1, socket(#56)(192.168.100.1), sent packet TID: 0x0001, 0x3fcb9774.
D (44231) mb_port.tcp.slave: Remove the message TID:0x0001
I (44241) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (44208515 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7

In the log fragment above I believe I see a transaction being received on socket 56 in the middle of transaction handling on socket 55. The socket 56 transaction affectively hijacks handling of the transaction from socket 55 which is never processed and enters limbo until next transaction is received. Upon that time the old transaction will be processed but the newly received on becomes stuck and so on... This can be seen in the following log fragment:

D (46901) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_recv_data: fd: 2
D (46901) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57) [192.168.100.1], receive data ready.
D (46911) mb_port.tcp.slave: 0x3fcb5c14, node #2, socket(#57)(192.168.100.1), received packet TID: 0x0001, frame: 0x3fcba96c, 12
D (46921) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001e, start transaction.
D (46931) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), acknowledged packet TID: 0x001e.
D (46941) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 3
D (46951) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 1
D (46961) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_error: fd: 3
D (46961) mb_port.tcp.slave: 0x3fcb59d8, node #0, socket(#55)(192.168.100.1), read packet, TID: 0x001e, 0x3fcb5764.
D (46971) mb_port.tcp.slave: loop:0x3fcb5c14 mbs_on_send_data: fd: 0
D (46981) mb_port.tcp.slave: 0x3fcb5c14, node: #0, socket(#55)[192.168.100.1], send packet TID: 0x001e:0x001e, 0x3fcb5764, len: 23,
D (46991) mb_port.tcp.slave: 0x3fcb5c14, node #0, socket(#55)(192.168.100.1), sent packet TID: 0x001e, 0x3fcbb938.
D (47001) mb_port.tcp.slave: Remove the message TID:0x001e
I (47011) SLAVE_TEST: OBJ 0x3fcb4224, HOLDING READ (46978483 us), ADDR:12, TYPE:2, INST_ADDR:0x3fc9f34c, SIZE:7

I've checked the issue #140 and applied the fix mentioned there, this does not seem to help in this case, though the description is similar enough that maybe both observed behaviors may stem from the same underlying issue.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions