Skip to content

Commit e470c2a

Browse files
committed
Improved mbridge output info
1 parent 0bf98fc commit e470c2a

File tree

3 files changed

+80
-16
lines changed

3 files changed

+80
-16
lines changed

README.md

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
## Overview
44

5-
ModbusBridge (`mbridge`) is a simple single-thread Modbus bridge application written in C++.
5+
ModbusBridge (`mbridge`) is a simple single-thread Modbus bridge application that
6+
provides convertion between different types of Modbus protocol: `TCP`, `RTU`, `ASC`.
67

7-
It provides convertion between different types of Modbus protocol: `TCP`, `RTU`, `ASC`.
8+
It can be used, for instance, in Raspberry Pi computer to act as Modbus converter.
89

910
It's free and open source software based on `ModbusLib` project:
1011

@@ -54,14 +55,38 @@ Params <param> for client (-c) and server (-s):
5455
* tib <timeout> - timeout inter byte for RTU or ASC (millisec, default is 50)
5556
```
5657

57-
Next example make Modbus bridge with TCP client part and RTU server part:
58+
Next example make Modbus bridge with RTU client part and TCP server part wich works on 502 TCP port:
5859
```console
59-
> mbridge -ctype TCP -stype RTU -sserial COM5
60-
```
61-
62-
Next example make Modbus bridge with ASC client part and TCP server part wich works on 503 TCP port:
63-
```console
64-
> mbridge -ctype ASC -cserial COM5 -stype TCP -sport 503
60+
> mbridge -stype TCP -ctype RTU -cserial COM6
61+
RTU:Client parameters:
62+
----------------------
63+
port = COM6
64+
baud = 9600
65+
data = 8
66+
parity = No
67+
stop = 1
68+
flow = No
69+
tfb = 1000
70+
tib = 50
71+
72+
TCP:Server parameters:
73+
----------------------
74+
port = 502
75+
timeout = 3000
76+
77+
mbridge starts ...
78+
New connection: DESKTOP-TNLLA10:7512
79+
DESKTOP-TNLLA10:7512 Rx: 00 01 00 00 00 06 01 04 00 00 00 04
80+
RTU:Client Tx: 01 04 00 00 00 04 F1 C9
81+
RTU:Client Rx: 01 04 08 00 00 00 00 00 00 00 00 24 0D
82+
DESKTOP-TNLLA10:7512 Tx: 00 01 00 00 00 0B 01 04 08 00 00 00 00 00 00 00 00
83+
...
84+
DESKTOP-TNLLA10:7512 Rx: 00 05 00 00 00 06 01 04 00 00 00 04
85+
RTU:Client Tx: 01 04 00 00 00 04 F1 C9
86+
RTU:Client Rx: 01 04 08 00 00 00 00 00 00 00 00 24 0D
87+
DESKTOP-TNLLA10:7512 Tx: 00 05 00 00 00 0B 01 04 08 00 00 00 00 00 00 00 00
88+
Close connection: DESKTOP-TNLLA10:7512
89+
mbridge stopped
6590
```
6691

6792
## Build using CMake

src/mbridge.cpp

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,29 @@ void parseOptions(int argc, char **argv)
292292
}
293293
}
294294

295+
void printPort(ModbusPort *port)
296+
{
297+
switch (port->type())
298+
{
299+
case Modbus::RTU:
300+
case Modbus::ASC:
301+
std::cout << "port = " << static_cast<ModbusSerialPort*>(port)->portName() << std::endl <<
302+
"baud = " << static_cast<ModbusSerialPort*>(port)->baudRate() << std::endl <<
303+
"data = " << (int)static_cast<ModbusSerialPort*>(port)->dataBits() << std::endl <<
304+
"parity = " << Modbus::sparity(static_cast<ModbusSerialPort*>(port)->parity()) << std::endl <<
305+
"stop = " << Modbus::sstopBits(static_cast<ModbusSerialPort*>(port)->stopBits()) << std::endl <<
306+
"flow = " << Modbus::sflowControl(static_cast<ModbusSerialPort*>(port)->flowControl()) << std::endl <<
307+
"tfb = " << static_cast<ModbusSerialPort*>(port)->timeoutFirstByte() << std::endl <<
308+
"tib = " << static_cast<ModbusSerialPort*>(port)->timeoutInterByte() << std::endl;
309+
break;
310+
default:
311+
std::cout << "host = " << static_cast<ModbusTcpPort*>(port)->host() << std::endl <<
312+
"port = " << static_cast<ModbusTcpPort*>(port)->port() << std::endl <<
313+
"timeout = " << static_cast<ModbusTcpPort*>(port)->timeout() << std::endl;
314+
break;
315+
}
316+
}
317+
295318
volatile bool fRun = true;
296319

297320
void signal_handler(int /*signal*/)
@@ -316,21 +339,18 @@ int main(int argc, char **argv)
316339
cli->setObjectName("RTU:Client");
317340
cli->connect(&ModbusClientPort::signalTx, printTx);
318341
cli->connect(&ModbusClientPort::signalRx, printRx);
319-
std::cout << cli->objectName() << ": " << cliOptions.ser.portName << std::endl;
320342
break;
321343
case Modbus::ASC:
322344
cli = Modbus::createClientPort(Modbus::ASC, &cliOptions.ser, blocking);
323345
cli->setObjectName("ASC:Client");
324346
cli->connect(&ModbusClientPort::signalTx, printTxAsc);
325347
cli->connect(&ModbusClientPort::signalRx, printRxAsc);
326-
std::cout << cli->objectName() << ": " << cliOptions.ser.portName << std::endl;
327348
break;
328349
default:
329350
cli = Modbus::createClientPort(Modbus::TCP, &cliOptions.tcp, blocking);
330351
cli->setObjectName("TCP:Client");
331352
cli->connect(&ModbusClientPort::signalTx, printTx);
332353
cli->connect(&ModbusClientPort::signalRx, printRx);
333-
std::cout << cli->objectName() << ": " << cliOptions.tcp.host << ":" << cliOptions.tcp.port << std::endl;
334354
break;
335355
}
336356

@@ -341,14 +361,12 @@ int main(int argc, char **argv)
341361
srv->setObjectName("RTU:Server");
342362
srv->connect(&ModbusServerPort::signalTx, printTx);
343363
srv->connect(&ModbusServerPort::signalRx, printRx);
344-
std::cout << srv->objectName() << ": " << cliOptions.ser.portName << std::endl;
345364
break;
346365
case Modbus::ASC:
347366
srv = Modbus::createServerPort(cli, Modbus::ASC, &srvOptions.ser, blocking);
348367
srv->setObjectName("ASC:Server");
349368
srv->connect(&ModbusServerPort::signalTx, printTxAsc);
350369
srv->connect(&ModbusServerPort::signalRx, printRxAsc);
351-
std::cout << srv->objectName() << ": " << cliOptions.ser.portName << std::endl;
352370
break;
353371
default:
354372
{
@@ -361,11 +379,32 @@ int main(int argc, char **argv)
361379
srv->connect(&ModbusServerPort::signalRx, printRx);
362380
srv->connect(&ModbusTcpServer::signalNewConnection, printNewConnection);
363381
srv->connect(&ModbusTcpServer::signalCloseConnection, printCloseConnection);
364-
std::cout << srv->objectName() << ": " << cliOptions.tcp.port << std::endl;
365382
}
366383
break;
367384
}
368385

386+
// Print Client params
387+
std::cout << cli->objectName() << " parameters:" << std::endl
388+
<< "----------------------" << std::endl;
389+
printPort(cli->port());
390+
std::cout << std::endl;
391+
392+
// Print Server params
393+
std::cout << srv->objectName() << " parameters:" << std::endl
394+
<< "----------------------" << std::endl;
395+
switch (srv->type())
396+
{
397+
case Modbus::RTU:
398+
case Modbus::ASC:
399+
printPort(static_cast<ModbusServerResource*>(srv)->port());
400+
break;
401+
default:
402+
std::cout << "port = " << static_cast<ModbusTcpServer*>(srv)->port() << std::endl <<
403+
"timeout = " << static_cast<ModbusTcpServer*>(srv)->timeout() << std::endl;
404+
break;
405+
}
406+
std::cout << std::endl;
407+
369408
std::signal(SIGINT, signal_handler);
370409
std::cout << "mbridge starts ..." << std::endl;
371410
while (fRun)

0 commit comments

Comments
 (0)