diff --git a/scripts/network.gd b/scripts/network.gd index 0275b908..01313955 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -8,14 +8,17 @@ const SERIAL_PROTO: = {'uart': spt25.SPT25 } class Serial extends SerialPort: - func send_to(data: PackedByteArray): - return write_raw(data) + func send_to(data: PackedByteArray): return write_raw(data) + func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт'] + func try_open(parsing_proc: Callable): - if not is_open(): - open(port) - if is_open(): - data_received.connect(parsing_proc) - start_monitoring(timeout) + if is_open(): + return Error.OK + var rc = open(port) + if rc == Error.OK: + data_received.connect(parsing_proc) + start_monitoring(timeout) + return rc class Socket extends PacketPeerUDP: @@ -83,13 +86,9 @@ func create_serial(nm) -> Serial: var port = repsettings.UnitProfiles[nm][1] var baud = repsettings.UnitProfiles[nm][2][0] var sp: = Serial.new() + sp.port = port sp.baudrate = baud sp.timeout = 20000 - var rc = sp.open(port) - if rc != Error.OK: - log.message(log.ERROR, 'Невозможно открыть порт \"%s\" для \"%s\"' % [port, nm]) - else: - log.message(log.INFO, 'Последовательный порт \"%s\"@%d открыт для \"%s\"' % [port, baud, nm]) return sp @@ -136,7 +135,11 @@ func _ready() -> void: units_serial[unit_key] = unit units[unit_key] = unit serials[unit_key] = serial - serial.try_open(unit.parse) + var rc = serial.try_open(unit.parse) + if rc != Error.OK: + log.message(log.ERROR, 'Невозможно открыть %s для \"%s\"' % [serial, unit_name]) + else: + log.message(log.INFO, '%s для \"%s\"' % [serial, unit_name]) tcp_sockets.append([create_tcpsocket('уарэп-5п28'), units_tcp[repsettings.get_unit_key('уарэп-5п28')]]) diff --git a/scripts/spt25.gd b/scripts/spt25.gd index f9c492b3..2804eb80 100644 --- a/scripts/spt25.gd +++ b/scripts/spt25.gd @@ -4,7 +4,7 @@ class_name spt25_unit extends Node class SPT25 extends unit.Unit: var tx_tick: int = 0 - var req_period = 3.0 + var req_period = 3000.0 ## Переиод запроса, мс func _to_string() -> String: return String('СПТ-25: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) func _init(nm) -> void: @@ -25,8 +25,7 @@ class SPT25 extends unit.Unit: emit_signal('line_changed', self) emit_signal('data_received', rx_data) - func process(delta: float): - tick += delta + func process(tick: float): if (tick - tx_tick) > req_period: tx_tick = tick return Error.OK diff --git a/scripts/unit.gd b/scripts/unit.gd index 099722c0..714df005 100644 --- a/scripts/unit.gd +++ b/scripts/unit.gd @@ -8,7 +8,6 @@ class Unit: signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных signal data_received(unit) ## Вызывается по приёму данных - var tick = 0.0 ## Текущее тик-время в мс. var tx_data: = PackedByteArray() ## Буфер отправленный. var tx_len = 0 ## Длина последнего отправленного пакета. var online: bool diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 470fbfe3..881ea97b 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -48,11 +48,9 @@ class YaU07 extends unit.Unit: self.name = nm tx_data.resize(BUFFER_SIZE) tx_data.fill(0) - tick = 0.0 - func process(delta: float): - tick += delta + func process(tick): if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) @@ -181,7 +179,7 @@ class YaU07 extends unit.Unit: ## [param rx_data] - Принятые данные.[br] ## Возвращает [b]true[/b] - Данные обработаны успешно.[br] ## Возвращает [b]false[/b] - Данные не обработаны из за ошибки.[br] - func parse(rx_data: PackedByteArray) -> bool: + func parse(rx_data: PackedByteArray, tick: float) -> bool: cmd_tick_rx = tick