Доработка. Переподключение к серверу если возникает ошибка
This commit is contained in:
@@ -25,16 +25,6 @@ EXCEPT_MSGS = {
|
||||
'<unknown>': 'ошибка: получена неверная команда'}
|
||||
|
||||
|
||||
def on_timer(*args):
|
||||
sock = args[0]
|
||||
json_encoder = args[1]
|
||||
udp_addr = args[2]
|
||||
udp_port_tx = args[3]
|
||||
tx_data = json_encoder.encode({'code': 'info', 'data': 'ok'})
|
||||
sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx))
|
||||
Timer(1, on_timer, args).start()
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--modbus-unit', default=1, type=int, help='Номер устройства Modbus')
|
||||
@@ -45,13 +35,16 @@ def main():
|
||||
parser.add_argument('--udp-port-tx', default=48000, type=int, help='Порт для отправки сообщений приложению')
|
||||
opts, opts_unk = parser.parse_known_args()
|
||||
print_opts_error(opts_unk)
|
||||
run_sync_client(opts.udp_addr, opts.udp_port_rx, opts.udp_port_tx, opts.serial_port, opts.serial_baud, opts.modbus_unit)
|
||||
while True:
|
||||
run_sync_client(opts.udp_addr, opts.udp_port_rx, opts.udp_port_tx, opts.serial_port, opts.serial_baud, opts.modbus_unit)
|
||||
time.sleep(3)
|
||||
log.warning('Переподключение к серверу')
|
||||
|
||||
|
||||
def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud, unit_num):
|
||||
sock = socket(AF_INET, SOCK_DGRAM)
|
||||
sock.bind((udp_addr, udp_port_rx))
|
||||
log.info('привязан к адресу %s:%d' % (udp_addr, udp_port_rx))
|
||||
log.info('Привязан к адресу %s:%d' % (udp_addr, udp_port_rx))
|
||||
|
||||
json_decoder = json.JSONDecoder()
|
||||
json_encoder = json.JSONEncoder()
|
||||
@@ -60,11 +53,14 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud
|
||||
while not client.connect(): # Ждать подключения к серверу
|
||||
time.sleep(3)
|
||||
|
||||
log.info('подключен к серверу через \"%s\" на скорости %d бод' % (serial_port, serial_baud))
|
||||
|
||||
Timer(1, on_timer, [sock, json_encoder, udp_addr, udp_port_tx]).start()
|
||||
log.info('Подключен к серверу через \"%s\" на скорости %d бод' % (serial_port, serial_baud))
|
||||
tx_data = json_encoder.encode({'code': 'info', 'data': 'ok'})
|
||||
sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx))
|
||||
while True:
|
||||
udp_data = sock.recv(2048) # Ждать команду от приложения
|
||||
try:
|
||||
udp_data = sock.recv(2048) # Ждать команду от приложения
|
||||
except:
|
||||
return
|
||||
udp_data = udp_data.decode('utf-8')
|
||||
message = json_decoder.decode(udp_data) # type: dict
|
||||
|
||||
@@ -108,14 +104,13 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud
|
||||
rc_msg = EXCEPT_MSGS[code]
|
||||
tx_data = json_encoder.encode({'code': 'exception', 'data': rc_msg, 'unit': message['unit']})
|
||||
sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx))
|
||||
log.error(
|
||||
'ошибка при выполнении команды: \"%s\". данные: \"%s\", порт: \"%s\", скорость: %s'
|
||||
log.error('Команда \"%s\" не выполнена. данные: \"%s\", порт: \"%s\", скорость: %s'
|
||||
% (code, data, serial_port, serial_baud))
|
||||
|
||||
|
||||
def print_opts_error(opts: list) -> None:
|
||||
for opt in opts:
|
||||
log.warning('внимание: неизвестный аргумент: \"%s\"' % opt)
|
||||
log.warning('Неизвестный аргумент: \"%s\"' % opt)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user