From a90d694928b55f6cae51dac4ed6af97955ee118f Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 24 Oct 2024 11:04:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.=20=D0=91=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=20=D0=B4=D0=BB=D1=8F=20=D1=83=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 1 + scripts/spt25.gd | 14 +++++--------- scripts/tcp5p28.gd | 19 +++++-------------- scripts/unit.gd | 18 ++++++++++++++++++ scripts/yau07.gd | 19 +++++-------------- 5 files changed, 34 insertions(+), 37 deletions(-) create mode 100644 scripts/unit.gd diff --git a/project.godot b/project.godot index d42a388..1abc629 100644 --- a/project.godot +++ b/project.godot @@ -45,6 +45,7 @@ config/unit_rr_request_period=1.0 commit="*res://scripts/commit.gd" log="*res://addons/godot-logger/scripts/logger.gd" +unit="*res://scripts/unit.gd" tools="*res://scripts/tools.gd" signaller="*res://scripts/signaller.gd" repsettings="*res://scripts/settings.gd" diff --git a/scripts/spt25.gd b/scripts/spt25.gd index 5ef00ae..6616f05 100644 --- a/scripts/spt25.gd +++ b/scripts/spt25.gd @@ -1,14 +1,10 @@ -extends Node +class_name spt25_unit extends Node -class SPT25: - signal line_changed(unit: SPT25) ## Вызывается при изменение состояния связи - signal command_done(unit: SPT25) ## Вызывается после выполнения команды. - signal command_fail(unit: SPT25) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена. - signal parse_failed(unit: SPT25) ## Вызывается при обнаружении ошибки во входных данных - signal data_received(unit: SPT25) ## Вызывается по приёму данных - var online: bool - var name: String +class SPT25 extends unit.Unit: + + var tx_tick: int = 0 + func _init(nm) -> void: self.name = nm func _to_string() -> String: return String('СПТ-25: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) diff --git a/scripts/tcp5p28.gd b/scripts/tcp5p28.gd index 63fca15..9da29d3 100644 --- a/scripts/tcp5p28.gd +++ b/scripts/tcp5p28.gd @@ -34,28 +34,20 @@ const CU_STATE: Dictionary = { 4:9, # Неисправность } -class TCP5P28: +class TCP5P28 extends unit.Unit: const PACK_TYPE_CMD: int = 1 const PACK_TYPE_RES: int = 2 const CMD_TYPE_STATE: int = 1 const CMD_TYPE_TH: int = 2 const CMD_TYPE_IN: int = 3 - signal line_changed(unit: TCP5P28) ## Сигнал состояние связи изменилось. - signal data_received(unit: TCP5P28) ## Сигнал данные приняты. - signal command_fail(unit: TCP5P28) ## Сигнал при не выполнении команды. - signal parse_error(unit: TCP5P28, msg: String) ## Сигнал ошибки разбора сообщения. signal get_threats(unit: TCP5P28) ## Сигнал запрос целей. signal get_interfers(unit: TCP5P28) ## Запрос состояния выполнения целеуказания. - var online: = false ## Состояние связи с источником сообщений. - var name: String ## Имя экземпляра. var rx_tick: = 0 ## Тик время последнего приёма, мс. - var tx_data: = PackedByteArray() ## Пакет для отправки. var tx_stack: Array ## Массив пакетов для отправки. func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) - func _init(nm): self.name = nm func parse(data: PackedByteArray, now_tick: int): rx_tick = now_tick @@ -87,12 +79,12 @@ class TCP5P28: func pack_threats(ths): var data = PackedByteArray() var data_len = 4 + len(ths) * 80 # длинна блока данных в байтах - var tick = Time.get_ticks_msec() + var tick0 = Time.get_ticks_msec() data.resize(4) data.encode_u16(0, 0) # Код ошибки data.encode_u16(2, len(ths)) # Количество целей for th in ths.values(): - data.append_array(get_threats_data(th, int(tick))) + data.append_array(get_threats_data(th, int(tick0))) var data_to_send: PackedByteArray = create_header(data_len) data_to_send.append_array(data) tx_stack.append(data_to_send) @@ -131,10 +123,10 @@ class TCP5P28: head_data.encode_u32(4, data_len) # Длинна пакета данных return head_data - func get_threats_data(th, tick): + func get_threats_data(th, tick0): var th_data = PackedByteArray() th_data.resize(80) # Количество байт в массиве - th_data.encode_u64(0, tick) + th_data.encode_u64(0, tick0) var flags: int = 0 # с 0 по 7 бит рекомендованная помеха flags |= 0 << 8 # Флаг рекомендуемой помехи flags |= int(th.fflags['aoa']) << 9 # Флаг доставерности пеленга @@ -190,4 +182,3 @@ class TCP5P28: var data_to_send: PackedByteArray = create_header(data_len) data_to_send.append_array(data_tx) tx_stack.append(data_to_send) - diff --git a/scripts/unit.gd b/scripts/unit.gd new file mode 100644 index 0000000..3e46652 --- /dev/null +++ b/scripts/unit.gd @@ -0,0 +1,18 @@ +class_name base_unit extends Node + +## Базовый класс для управления подключаемыми устройствами + +class Unit: + signal line_changed(unit) ## Вызывается при изменение состояния связи + signal command_done(unit) ## Вызывается после выполнения команды. + signal command_fail(unit) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена. + signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных + signal data_received(unit) ## Вызывается по приёму данных + + var tick = 0.0 ## Текущее тик-время в мс. + var tx_data: = PackedByteArray() ## Буфер отправленный. + var tx_len = 0 ## Длина последнего отправленного пакета. + var online: bool + var name: String + func _init(nm) -> void: self.name = nm + func _to_string() -> String: return String('устройство: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index b4b6e2f..470fbfe 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -9,13 +9,13 @@ const BUFFER_SIZE = 2048 ## Размер буфера для приёма д ## Ячейка ЯУ-07. -class YaU07: +class YaU07 extends unit.Unit: ## Коды выполняемых команд. enum CmdCode { - READ_ISA = 0, ## Код команды "читать порт ISA" ячейки ЯУ-07. - WRITE_ISA = 1, ## Код команды "записать порт ISA" ячейки ЯУ-07. - WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07. + READ_ISA = 0, ## Код команды "читать порт ISA" ячейки ЯУ-07. + WRITE_ISA = 1, ## Код команды "записать порт ISA" ячейки ЯУ-07. + WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07. READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07. } @@ -28,27 +28,18 @@ class YaU07: FAIL ## Команда не выполнена. } - signal line_changed(unit: YaU07) ## Вызывается когда меняется состояние связи с ячейкой. - signal command_done(unit: YaU07) ## Вызывается после выполнения команды. - signal command_fail(unit: YaU07) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена. - signal parse_failed(unit: YaU07) - - var name: = String() var cmd_num_rx: = 0 ## Номер команды принятый. var cmd_num_tx: = 0 ## Номер команды переданный. var cmd_state = CmdState.UNCK ## Состояние выполнения команды. var cmd_result: = 1 ## Результат выполнения команды. Устанавливается в ЯУ-07. var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07. var cmd_retry = 0 ## Счётчик оставшихся попыток выполнить команду. - var tick = 0.0 ## Текущее тик-время в мс. var cmd_tick_tx = 0.0 ## Время последней отправки команды. var cmd_tick_rx = 0.0 ## Время последнего приёма команды. var status: = PackedByteArray() ## Поле "состояние прибора". - var tx_data: = PackedByteArray() ## Буфер отправленный. - var tx_len = 0 ## Длина последнего отправленного пакета. var isa_ports = {} ## Результат выполнения команды "читать порт". var isa_block = {} ## Результат выполнения команды "читать массив из порта". - var online = false ## Состояние связи с ячейкой. + func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])