Skip to content

Commit dc1a79a

Browse files
committed
TCP-to-RTU example: Fix cbTcpRaw
1 parent 336d56c commit dc1a79a

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

examples/Bridge/TCP-to-RTU-Simulator/TCP-to-RTU-Simulator.ino

+10-8
Original file line numberDiff line numberDiff line change
@@ -52,24 +52,24 @@ bool cbRtuTrans(Modbus::ResultCode event, uint16_t transactionId, void* data) {
5252
Modbus::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

5959
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
6161
tcp.errorResponce(IPAddress((src->ipaddr), (Modbus::FunctionCode)data[0], Modbus::EX_SLAVE_DEVICE_BUSY);
6262
return Modbus::EX_SLAVE_DEVICE_BUSY;
6363
}
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
8888
Modbus::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

Comments
 (0)