Skip to content

Commit fefe28d

Browse files
committed
[feat] add parameter logger to ModbusTcpClient and GcodeClient
1 parent 6776c07 commit fefe28d

File tree

2 files changed

+54
-31
lines changed

2 files changed

+54
-31
lines changed

xarm/tools/gcode.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,49 @@
1313
import logging
1414
import threading
1515

16-
logger = logging.Logger('gcode')
17-
logger_fmt = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - - %(message)s'
18-
logger_date_fmt = '%Y-%m-%d %H:%M:%S'
19-
stream_handler = logging.StreamHandler(sys.stdout)
20-
stream_handler.setLevel(logging.DEBUG)
21-
stream_handler.setFormatter(logging.Formatter(logger_fmt, logger_date_fmt))
22-
logger.addHandler(stream_handler)
23-
logger.setLevel(logging.INFO)
16+
def create_logger(name):
17+
logger = logging.Logger(name)
18+
logger_fmt = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - - %(message)s'
19+
logger_date_fmt = '%Y-%m-%d %H:%M:%S'
20+
stream_handler = logging.StreamHandler(sys.stdout)
21+
stream_handler.setLevel(logging.DEBUG)
22+
stream_handler.setFormatter(logging.Formatter(logger_fmt, logger_date_fmt))
23+
logger.handlers.clear()
24+
logger.addHandler(stream_handler)
25+
logger.setLevel(logging.INFO)
26+
return logger
27+
2428

2529
GCODE_PATTERN = r'([A-Z])([-+]?[0-9.]+)'
2630
CLEAN_PATTERN = r'\s+|\(.*?\)|;.*'
2731

2832

2933
class GcodeClient(object):
30-
def __init__(self, robot_ip):
34+
def __init__(self, robot_ip, logger=None):
35+
if isinstance(logger, logging.Logger):
36+
self.logger = logger
37+
else:
38+
self.logger = create_logger('gcode')
3139
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3240
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
3341
self.sock.setblocking(True)
3442
self.sock.connect((robot_ip, 504))
43+
self.logger.info('Connetc to GcodeServer({}) success'.format(robot_ip))
3544
self._lock = threading.Lock()
3645

46+
def close(self):
47+
self.sock.close()
48+
3749
def execute(self, cmd):
3850
data = re.sub(CLEAN_PATTERN, '', cmd.strip().upper())
3951
if not data:
40-
# logger.warning('[E] null after clean {}'.format(cmd))
52+
# self.logger.warning('[E] null after clean {}'.format(cmd))
4153
return -1, []
4254
if data[0] == '%':
43-
# logger.warning('[E] starts with % ({})'.format(cmd))
55+
# self.logger.warning('[E] starts with % ({})'.format(cmd))
4456
return -2, []
4557
if not re.findall(GCODE_PATTERN, data):
46-
# logger.warning('[E] not found {}'.format(cmd))
58+
# self.logger.warning('[E] not found {}'.format(cmd))
4759
return -3, []
4860
data = data.encode('utf-8', 'replace')
4961
with self._lock:
@@ -53,9 +65,9 @@ def execute(self, cmd):
5365
state, mode = mode_state & 0x0F, mode_state >> 4
5466
cmdnum = ret[3] << 8 | ret[4]
5567
if code != 0 or err != 0:
56-
logger.error('[{}], code={}, err={}, mode={}, state={}, cmdnum={}'.format(cmd, code, err, mode, state, cmdnum))
68+
self.logger.error('[{}], code={}, err={}, mode={}, state={}, cmdnum={}'.format(cmd, code, err, mode, state, cmdnum))
5769
elif state >= 4:
58-
logger.warning('[{}], code={}, err={}, mode={}, state={}, cmdnum={}'.format(cmd, code, err, mode, state, cmdnum))
70+
self.logger.warning('[{}], code={}, err={}, mode={}, state={}, cmdnum={}'.format(cmd, code, err, mode, state, cmdnum))
5971
return code, [mode, state, err, cmdnum]
6072

6173
def execute_file(self, filepath):
@@ -73,6 +85,6 @@ def execute_file(self, filepath):
7385
if code != 1 and code != 2:
7486
return code
7587
if cmd in ['M2', 'M02', 'M30']:
76-
logger.info('[{}] Program End'.format(cmd))
88+
self.logger.info('[{}] Program End'.format(cmd))
7789
break
7890
return 0

xarm/tools/modbus_tcp.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,39 @@
1313
import logging
1414
import threading
1515

16-
logger = logging.Logger('modbus_tcp')
17-
logger_fmt = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - - %(message)s'
18-
logger_date_fmt = '%Y-%m-%d %H:%M:%S'
19-
stream_handler = logging.StreamHandler(sys.stdout)
20-
stream_handler.setLevel(logging.DEBUG)
21-
stream_handler.setFormatter(logging.Formatter(logger_fmt, logger_date_fmt))
22-
logger.addHandler(stream_handler)
23-
logger.setLevel(logging.INFO)
16+
def create_logger(name):
17+
logger = logging.Logger(name)
18+
logger_fmt = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - - %(message)s'
19+
logger_date_fmt = '%Y-%m-%d %H:%M:%S'
20+
stream_handler = logging.StreamHandler(sys.stdout)
21+
stream_handler.setLevel(logging.DEBUG)
22+
stream_handler.setFormatter(logging.Formatter(logger_fmt, logger_date_fmt))
23+
logger.handlers.clear()
24+
logger.addHandler(stream_handler)
25+
logger.setLevel(logging.INFO)
26+
return logger
2427

2528

2629
class ModbusTcpClient(object):
27-
def __init__(self, ip, port=502, unit_id=0x01):
30+
def __init__(self, ip, port=502, unit_id=0x01, logger=None):
31+
if isinstance(logger, logging.Logger):
32+
self.logger = logger
33+
else:
34+
self.logger = create_logger('modbus_tcp')
2835
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2936
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
3037
self.sock.setblocking(True)
3138
self.sock.connect((ip, port))
39+
self.logger.info('Connetc to ModbusTcpServer({}) success'.format(ip))
3240
self._transaction_id = 0
3341
self._protocol_id = 0x00
3442
self._unit_id = unit_id
3543
self._func_code = 0x00
3644
self._lock = threading.Lock()
37-
45+
46+
def close(self):
47+
self.sock.close()
48+
3849
def __wait_to_response(self, transaction_id=None, unit_id=None, func_code=None, timeout=3):
3950
expired = time.monotonic() + timeout
4051
recv_data = b''
@@ -59,33 +70,33 @@ def __wait_to_response(self, transaction_id=None, unit_id=None, func_code=None,
5970
unit_id = recv_data[6]
6071
func_code = recv_data[7]
6172
if transaction_id != send_transaction_id:
62-
logger.warning('Receive a reply with a mismatched transaction id (S: {}, R: {}), discard it and continue waiting.'.format(send_transaction_id, transaction_id))
73+
self.logger.warning('Receive a reply with a mismatched transaction id (S: {}, R: {}), discard it and continue waiting.'.format(send_transaction_id, transaction_id))
6374
length = 0
6475
recv_data = b''
6576
continue
6677
elif protocol_id != self._protocol_id:
67-
logger.warning('Receive a reply with a mismatched protocol id (S: {}, R: {}), discard it and continue waiting.'.format(self._protocol_id, protocol_id))
78+
self.logger.warning('Receive a reply with a mismatched protocol id (S: {}, R: {}), discard it and continue waiting.'.format(self._protocol_id, protocol_id))
6879
length = 0
6980
recv_data = b''
7081
continue
7182
elif unit_id != send_unit_id:
72-
logger.warning('Receive a reply with a mismatched unit id (S: {}, R: {}), discard it and continue waiting.'.format(send_unit_id, unit_id))
83+
self.logger.warning('Receive a reply with a mismatched unit id (S: {}, R: {}), discard it and continue waiting.'.format(send_unit_id, unit_id))
7384
length = 0
7485
recv_data = b''
7586
continue
7687
elif func_code != send_func_code and func_code != send_func_code + 0x80:
77-
logger.warning('Receive a reply with a mismatched func code (S: {}, R: {}), discard it and continue waiting.'.format(send_func_code, func_code))
88+
self.logger.warning('Receive a reply with a mismatched func code (S: {}, R: {}), discard it and continue waiting.'.format(send_func_code, func_code))
7889
length = 0
7990
recv_data = b''
8091
continue
8192
else:
8293
code = 0
8394
break
8495
if code == 0 and len(recv_data) == 9:
85-
logger.error('modbus tcp data exception, exp={}, res={}'.format(recv_data[8], recv_data))
96+
self.logger.error('modbus tcp data exception, exp={}, res={}'.format(recv_data[8], recv_data))
8697
return recv_data[8], recv_data
8798
elif code != 0:
88-
logger.error('recv timeout, len={}, res={}'.format(len(recv_data), recv_data))
99+
self.logger.error('recv timeout, len={}, res={}'.format(len(recv_data), recv_data))
89100
return code, recv_data
90101

91102
def __pack_to_send(self, pdu_data, unit_id=None):

0 commit comments

Comments
 (0)