From 9b0ca3a729f844b90dc38127443e7cac71c11697 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 15 Oct 2025 16:43:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20UAR?= =?UTF-8?q?T-=D0=BF=D0=BE=D1=80=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/network.gd | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/scripts/network.gd b/scripts/network.gd index 43868ab5..a8950163 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -21,13 +21,14 @@ class SocketSerial extends SerialPort: 'E': SerialPort.PARITY_EVEN, 'O': SerialPort.PARITY_ODD } static var tick: int + var unit_instance: unit.Unit - func on_serial_data(data: PackedByteArray, unit_instance: unit.Unit): + func on_serial_data(data: PackedByteArray): unit_instance.parse(data, tick) - func on_settings_changed(unit_instance: unit.Unit): + func on_settings_changed(): try_close() - var rc = try_open(on_serial_data.bind(unit_instance)) + var rc = try_open() if rc != Error.OK: log.message(log.ERROR, 'невозможно открыть %s для \"%s\"' % [self, unit_instance.name]) else: @@ -51,14 +52,14 @@ class SocketSerial extends SerialPort: func send_to(data: PackedByteArray): if not is_open(): - ProjectSettings.emit_signal('settings_changed') + try_open() return # var buffer = format_buffer(data) # Не проверено, но должно работать # Эта последовательность для запроса состояния, получена от разработчиков СПТ-25 const tx_tula: = [0x7e, 0x01, 0x04, 0xbb, 0x50, 0x7e] var sz = write_raw(tx_tula) - if sz != tx_tula.size(): # TODO: Не совсем адекватное, но работает - ProjectSettings.emit_signal('settings_changed') + if sz != tx_tula.size(): + try_open() func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт'] @@ -79,12 +80,12 @@ class SocketSerial extends SerialPort: fcs = (fcs >> 1) ^ P_DIV if fcs & 1 else fcs >> 1 return (~fcs) & 0xffff - func try_open(parsing_proc: Callable) -> Error: + func try_open() -> Error: if is_open(): return Error.OK var rc: = open(port) if rc == Error.OK: - data_received.connect(parsing_proc) + data_received.connect(on_serial_data) start_monitoring(timeout) return rc @@ -191,8 +192,8 @@ func create_socket_tcp(unit_name: StringName) -> SocketTCP: ## [param unit_name] - Уникальное имя устройства[br] -func create_serial(unit_name: StringName) -> SocketSerial: - var st = settings.UnitProfiles[unit_name][1] +func create_serial(unit_instance: unit.Unit) -> SocketSerial: + var st = settings.UnitProfiles[unit_instance.name][1] var serial: = SocketSerial.new() serial.port = st[0] serial.baudrate = st[2] @@ -200,6 +201,7 @@ func create_serial(unit_name: StringName) -> SocketSerial: serial.timeout = 20000 serial.bytesize = st[4] serial.stopbits = st[5] + serial.unit_instance = unit_instance return serial @@ -283,9 +285,9 @@ func _ready() -> void: if proto in SERIAL_PROTO: var unit_instance = SERIAL_PROTO[proto].new(unit_name) - var serial: = create_serial(unit_name) + var serial: = create_serial(unit_instance) serial.connect('got_error', on_serial_got_error.bind(serial, unit_instance)) - ProjectSettings.connect('settings_changed', serial.on_settings_changed.bind(unit_instance)) + ProjectSettings.connect('settings_changed', serial.on_settings_changed) units_serial[unit_name] = unit_instance units[unit_name] = unit_instance serials[unit_name] = serial