|
13 | 13 | """
|
14 | 14 |
|
15 | 15 | import argparse
|
| 16 | +import logging |
16 | 17 | import queue
|
17 | 18 | import struct
|
18 | 19 | from threading import Thread, Event
|
|
21 | 22 | from pyModbusTCP.utils import crc16
|
22 | 23 | from pyModbusTCP.constants import EXP_GATEWAY_PATH_UNAVAILABLE, EXP_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND
|
23 | 24 | # need sudo pip install pyserial==3.4
|
24 |
| -import serial |
| 25 | +from serial import Serial, serialutil |
25 | 26 |
|
26 | 27 |
|
27 | 28 | # some class
|
@@ -159,12 +160,26 @@ def srv_engine_entry(self, session_data):
|
159 | 160 | parser.add_argument('-b', '--baudrate', type=int, default=9600, help='serial rate (default is 9600)')
|
160 | 161 | parser.add_argument('-t', '--timeout', type=float, default=1.0, help='timeout delay (default is 1.0 s)')
|
161 | 162 | parser.add_argument('-e', '--eof', type=float, default=0.05, help='end of frame delay (default is 0.05 s)')
|
| 163 | + parser.add_argument('-d', '--debug', action='store_true', help='set debug mode') |
162 | 164 | args = parser.parse_args()
|
163 |
| - # init serial port |
164 |
| - serial_port = serial.Serial(port=args.device, baudrate=args.baudrate) |
165 |
| - # start serial worker thread |
166 |
| - serial_worker = ModbusSerialWorker(serial_port, args.timeout, args.eof) |
167 |
| - serial_worker.start() |
168 |
| - # start modbus server with custom engine |
169 |
| - srv = ModbusServer(host=args.host, port=args.port, ext_engine=serial_worker.srv_engine_entry) |
170 |
| - srv.start() |
| 165 | + # init logging |
| 166 | + logging.basicConfig(level=logging.DEBUG if args.debug else None) |
| 167 | + logger = logging.getLogger(__name__) |
| 168 | + try: |
| 169 | + # init serial port |
| 170 | + logger.debug('Open serial port %s at %d bauds', args.device, args.baudrate) |
| 171 | + serial_port = Serial(port=args.device, baudrate=args.baudrate) |
| 172 | + # start serial worker thread |
| 173 | + logger.debug('Start serial worker thread') |
| 174 | + serial_worker = ModbusSerialWorker(serial_port, args.timeout, args.eof) |
| 175 | + serial_worker.start() |
| 176 | + # start modbus server with custom engine |
| 177 | + logger.debug('Start modbus server (%s, %d)', args.host, args.port) |
| 178 | + srv = ModbusServer(host=args.host, port=args.port, ext_engine=serial_worker.srv_engine_entry) |
| 179 | + srv.start() |
| 180 | + except serialutil.SerialException as e: |
| 181 | + logger.critical('Serial device error: %r', e) |
| 182 | + exit(1) |
| 183 | + except ModbusServer.Error as e: |
| 184 | + logger.critical('Modbus server error: %r', e) |
| 185 | + exit(2) |
0 commit comments