diff --git a/scripts/network.gd b/scripts/network.gd index 7578b7ca..9979a342 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -147,6 +147,9 @@ func _ready() -> void: send_sockets['уарэп-яу07-3н'] = sock_unicast send_sockets['уарэп-яу07-3к'] = sock_unicast + var bind_serials: = [] + var bind_modbuses: = [] + for unit_name in settings.UnitProfiles: var st = settings.UnitProfiles[unit_name] var proto = st[0] @@ -176,6 +179,7 @@ func _ready() -> void: var unit_key = settings.get_unit_key(unit_name) units_modbus[unit_key] = unit_modbus units[unit_key] = unit_modbus + bind_modbuses.append([unit_modbus, unit_name]) if proto in SERIAL_PROTO: var unit_serial = SERIAL_PROTO[proto].new(unit_name) @@ -184,11 +188,10 @@ func _ready() -> void: units_serial[unit_key] = unit_serial units[unit_key] = unit_serial serials[unit_key] = serial - var rc = serial.try_open(on_serial_data.bind(unit_serial)) - if rc != Error.OK: - log.message(log.ERROR, 'невозможно открыть %s для \"%s\"' % [serial, unit_name]) - else: - log.message(log.INFO, '%s для \"%s\"' % [serial, unit_name]) + bind_serials.append([serial, unit_serial, unit_name]) + + ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_modbus').bind(bind_modbuses)) + ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_serial').bind(bind_serials)) tcp_sockets.append([create_tcpsocket('уарэп-5п28'), units_tcp[settings.get_unit_key('уарэп-5п28')]]) for key in dst_ports: @@ -200,6 +203,28 @@ func _ready() -> void: u.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(key)) +func _on_settings_changed_modbus(bind_modbuses: Array): + var external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false) + for bm in bind_modbuses: + var unit_modbus = bm[0] + var unit_name = bm[1] + + +func _on_settings_changed_serial(bind_serials: Array): + var external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false) + for bs in bind_serials: + var serial = bs[0] + var unit_serial = bs[1] + var unit_name = bs[2] + serial.try_close() + if not external_ctl: + var rc = serial.try_open(on_serial_data.bind(unit_serial)) + if rc != Error.OK: + log.message(log.ERROR, 'невозможно открыть %s для \"%s\"' % [serial, unit_name]) + else: + log.message(log.INFO, '%s для \"%s\"' % [serial, unit_name]) + + func poll_receive_udp(sock: Socket) -> bool: while sock.get_available_packet_count() > 0: var data: = sock.get_packet()