Доработка. Переподключение к uart-портам при изменении настроек

This commit is contained in:
sasha80
2025-05-28 09:21:39 +03:00
parent 12a8215256
commit 262851f41a

View File

@@ -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()