Рефактор. Совместимость

This commit is contained in:
sasha80
2024-10-10 14:15:46 +03:00
parent 9d75b60f69
commit ca581df5f8
2 changed files with 18 additions and 21 deletions

View File

@@ -27,12 +27,12 @@ EXCEPT_MSGS = {
def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-modbus-unit', default=1, type=int, help='Номер устройства Modbus')
parser.add_argument('-serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
parser.add_argument('-serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения к Modbus серверу')
parser.add_argument('-udp-addr', default='localhost', type=str, help='Адрес для отправки сообщений приложению')
parser.add_argument('-udp-port-rx', default=44100, type=int, help='Порт для приёма сообщений от приложения')
parser.add_argument('-udp-port-tx', default=48000, type=int, help='Порт для отправки сообщений приложению')
parser.add_argument('--modbus-unit', default=1, type=int, help='Номер устройства Modbus')
parser.add_argument('--serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
parser.add_argument('--serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения к Modbus серверу')
parser.add_argument('--udp-addr', default='localhost', type=str, help='Адрес для отправки сообщений приложению')
parser.add_argument('--udp-port-rx', default=44100, type=int, help='Порт для приёма сообщений от приложения')
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)
@@ -41,7 +41,7 @@ def main():
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.debug(f'привязан к адресу {udp_addr}:{udp_port_rx}')
log.info('привязан к адресу %s:%d' % (udp_addr, udp_port_rx))
json_decoder = json.JSONDecoder()
json_encoder = json.JSONEncoder()
@@ -50,7 +50,7 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud
while not client.connect(): # Ждать подключения к серверу
time.sleep(3)
log.debug(f'подключен к серверу через {serial_port} на скорости {serial_baud} бод')
log.info('подключен к серверу через \"%s\" на скорости %d бод' % (serial_port, serial_baud))
while True:
udp_data = sock.recv(2048) # Ждать команду от приложения
@@ -91,14 +91,14 @@ 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})
sock.sendto(bytes(tx_data), (udp_addr, udp_port_tx))
log.debug(
log.error(
'ошибка при выполнении команды: \"%s\". данные: \"%s\", порт: \"%s\", скорость: %s'
% (code, data, serial_port, serial_baud))
% (code, data, serial_port, serial_baud))
def print_opts_error(opts: list) -> None:
for opt in opts:
log.debug('внимание: неизвестный аргумент: \"%s\"\n' % opt)
log.warning('внимание: неизвестный аргумент: \"%s\"' % opt)
if __name__ == '__main__':

View File

@@ -37,7 +37,7 @@ class CallbackModbusSlaveContext(ModbusSlaveContext):
"""
super(CallbackModbusSlaveContext, self).setValues(fx, address, values)
fx = FX_CODES[fx] if fx in FX_CODES else '**error**'
log.debug(f'setValues() fx:{fx} address:{address} values:{values}')
log.debug('setValues() fx:%s address:%s values:%s' % (fx, address, values))
def getValues(self, fx, address, count=1):
""" Устанавливает требуемые значения хранилища данных.
@@ -47,24 +47,21 @@ class CallbackModbusSlaveContext(ModbusSlaveContext):
"""
values = super(CallbackModbusSlaveContext, self).getValues(fx, address, count)
fx = FX_CODES[fx] if fx in FX_CODES else '**error**'
log.debug(f'getValues() fx:{fx} address:{address} values:{values}')
log.debug('getValues() fx:%s address:%s values:%s' % (fx, address, values))
return values
def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
parser.add_argument('-serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения клиента Modbus ')
parser.add_argument('--serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
parser.add_argument('--serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения клиента')
parser.add_argument('--timeout', default=0.005, type=str, help='Таймаут последовательного порта')
opts, opts_unk = parser.parse_known_args()
print_opts_error(opts_unk)
run_server(opts.serial_port, opts.serial_baud)
def run_server(serial_port, serial_baud):
store = CallbackModbusSlaveContext()
context = ModbusServerContext(slaves=store, single=True)
# timeout=.005 - нужно обязательно указать, иначе не работает
StartSerialServer(context=context, framer=ModbusRtuFramer, port=serial_port, timeout=.005, baudrate=serial_baud)
log.info("серевер-заглушка Modbus serial работает: %s:%d" % (opts.serial_port, opts.serial_baud))
StartSerialServer(context=context, framer=ModbusRtuFramer, port=opts.serial_port, timeout=opts.timeout, baudrate=opts.serial_baud)
def print_opts_error(opts: list) -> None: