@@ -52,24 +52,24 @@ bool cbRtuTrans(Modbus::ResultCode event, uint16_t transactionId, void* data) {
52
52
Modbus::ResultCode cbTcpRaw (uint8_t * data, uint8_t len, void * custom) {
53
53
auto src = (Modbus::frame_arg_t *) custom;
54
54
55
- Serial.print (" TCP IP: " );
55
+ Serial.print (" TCP IP in - " );
56
56
Serial.print (IPAddress (src->ipaddr ));
57
57
Serial.printf (" Fn: %02X, len: %d \n\r " , data[0 ], len);
58
58
59
59
if (transRunning) { // Note that we can't process new requests from TCP-side while waiting for responce from RTU-side.
60
- tcp.setTransactionId (transRunning ); // Set transaction id as per incoming request
60
+ tcp.setTransactionId (src-> transactionId ); // Set transaction id as per incoming request
61
61
tcp.errorResponce (IPAddress ((src->ipaddr ), (Modbus::FunctionCode)data[0 ], Modbus::EX_SLAVE_DEVICE_BUSY);
62
62
return Modbus::EX_SLAVE_DEVICE_BUSY;
63
63
}
64
64
65
65
rtu.rawRequest (src->unitId , data, len, cbRtuTrans);
66
66
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
72
69
tcp.errorResponce (IPAddress (src->ipaddr ), (Modbus::FunctionCode)data[0 ], Modbus::EX_ACKNOWLEDGE);
70
+
71
+ transRunning = 0 ;
72
+ slaveRunning = 0 ;
73
73
return Modbus::EX_ACKNOWLEDGE;
74
74
}
75
75
@@ -87,10 +87,12 @@ Modbus::ResultCode cbTcpRaw(uint8_t* data, uint8_t len, void* custom) {
87
87
// Callback receives raw data from ModbusTCP and sends it on behalf of slave (slaveRunning) to master
88
88
Modbus::ResultCode cbRtuRaw (uint8_t * data, uint8_t len, void * custom) {
89
89
auto src = (Modbus::frame_arg_t *) custom;
90
+ if (!transRunning) // Unexpected incoming data
91
+ return Modbus::EX_PASSTHROUGH;
90
92
tcp.setTransactionId (transRunning); // Set transaction id as per incoming request
91
93
uint16_t succeed = tcp.rawResponce (srcIp, data, len, slaveRunning);
92
94
if (!succeed){
93
- Serial.print (" fail " );
95
+ Serial.print (" TCP IP out - failed " );
94
96
}
95
97
Serial.printf (" RTU Slave: %d, Fn: %02X, len: %d, " , src->slaveId , data[0 ], len);
96
98
Serial.print (" Response TCP IP: " );
0 commit comments