Рефактор. Совместимость
This commit is contained in:
@@ -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__':
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user