@@ -52,7 +52,7 @@ bool cbRtuTrans(Modbus::ResultCode event, uint16_t transactionId, void* data) {
5252Modbus::ResultCode cbTcpRaw (uint8_t * data, uint8_t len, void * custom) {
5353 auto src = (Modbus::frame_arg_t *) custom;
5454
55- Serial.print (" TCP IP: " );
55+ Serial.print (" TCP IP in - " );
5656 Serial.print (IPAddress (src->ipaddr ));
5757 Serial.printf (" Fn: %02X, len: %d \n\r " , data[0 ], len);
5858
@@ -64,12 +64,12 @@ Modbus::ResultCode cbTcpRaw(uint8_t* data, uint8_t len, void* custom) {
6464
6565 rtu.rawRequest (src->unitId , data, len, cbRtuTrans);
6666
67- if (src->unitId ) {
68- tcp.setTransactionId (transRunning); // Set transaction id as per incoming request
69-
70- // uint16_t succeed = tcp.rawResponce(src->ipaddr, data, len, slaveRunning);
71-
67+ if (!src->unitId ) { // If broadcast request (no responce from slave is expected)
68+ tcp.setTransactionId (src->transactionId ); // Set transaction id as per incoming request
7269 tcp.errorResponce (IPAddress (src->ipaddr ), (Modbus::FunctionCode)data[0 ], Modbus::EX_ACKNOWLEDGE);
70+
71+ transRunning = 0 ;
72+ slaveRunning = 0 ;
7373 return Modbus::EX_ACKNOWLEDGE;
7474 }
7575
@@ -87,10 +87,12 @@ Modbus::ResultCode cbTcpRaw(uint8_t* data, uint8_t len, void* custom) {
8787// Callback receives raw data from ModbusTCP and sends it on behalf of slave (slaveRunning) to master
8888Modbus::ResultCode cbRtuRaw (uint8_t * data, uint8_t len, void * custom) {
8989 auto src = (Modbus::frame_arg_t *) custom;
90+ if (!transRunning) // Unexpected incoming data
91+ return Modbus::EX_PASSTHROUGH;
9092 tcp.setTransactionId (transRunning); // Set transaction id as per incoming request
9193 uint16_t succeed = tcp.rawResponce (srcIp, data, len, slaveRunning);
9294 if (!succeed){
93- Serial.print (" fail " );
95+ Serial.print (" TCP IP out - failed " );
9496 }
9597 Serial.printf (" RTU Slave: %d, Fn: %02X, len: %d, " , src->slaveId , data[0 ], len);
9698 Serial.print (" Response TCP IP: " );
0 commit comments