From 5e0a6a3ef54c1c47f420dd710b9645c1b8ab01db Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 1 Apr 2025 11:06:04 +0300 Subject: [PATCH 1/2] =?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=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=B8=D0=B1=D0=BE=D1=80=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B8=20=D0=BB=D0=B8=D0=BD=D0=B8=D0=B9=20=D1=81=D0=B2=D1=8F?= =?UTF-8?q?=D0=B7=D0=B8=20=D0=B2=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/tcp5p28.gd | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/scripts/tcp5p28.gd b/scripts/tcp5p28.gd index 4cb5c9c0..82041111 100644 --- a/scripts/tcp5p28.gd +++ b/scripts/tcp5p28.gd @@ -41,15 +41,43 @@ class TCP5P28 extends unit.Unit: const CMD_TYPE_TH: int = 2 const CMD_TYPE_IN: int = 3 + const PR_STATE: Dictionary = { + 'уарэп-эмс': [1, 1], + 'уарэп-яу07-1н': [9, 8], + 'уарэп-яу07-1в': [5, 4], + 'уарэп-яу07-1к': [13, 12], + 'уарэп-яу07-2н': [10, 9], + 'уарэп-яу07-2в': [6, 5], + 'уарэп-яу07-2к': [14, 13], + 'уарэп-яу07-3н': [11, 10], + 'уарэп-яу07-3в': [7, 6], + 'уарэп-яу07-3к': [15, 14], + 'уарэп-яу07-4н': [12, 11], + 'уарэп-яу07-4в': [8, 7], + 'уарэп-яу07-4к': [16, 15], } + signal get_threats(unit: TCP5P28) ## Сигнал запрос целей. signal get_interfers(unit: TCP5P28) ## Запрос состояния выполнения целеуказания. var tx_stack: Array ## Массив пакетов для отправки. + var uarep_state: int = 1 ## Флаги состояния прибора, 0 бит, состояние ПО + var uarep_line: int = 3 ## Состояние линии связи с прибором var ext_cu = false func _init(nm) -> void: super._init(nm) ext_cu = ProjectSettings.get_setting('application/config/external_cu', false) ProjectSettings.connect('settings_changed', on_setting_changed) + init_state() + + func init_state(): + for key in PR_STATE.keys(): + var unit_key = settings.get_unit_key(key) + var unit_pribor = network.units[unit_key] + unit_pribor.connect('line_changed', Callable(self, 'pribor_line_changed').bind(key)) + + func pribor_line_changed(u, key): + uarep_state = tools.set_bit(uarep_state, PR_STATE[key][0], u.online) + uarep_line = tools.set_bit(uarep_state, PR_STATE[key][1], u.online) func _to_string() -> String: return String('5П-28: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) @@ -98,8 +126,8 @@ class TCP5P28 extends unit.Unit: data.resize(data_len) data.encode_u16(0, 0) # Код ошибки data.encode_u16(2, len(interfers)) # Количество целей - data.encode_u32(4, 0) # Состояние УА-РЕП - data.encode_u32(8, 0) # Состояние линий связи + data.encode_u32(4, uarep_state) # Состояние УА-РЕП + data.encode_u32(8, uarep_line) # Состояние линий связи for id in interfers.values(): var cu_data: PackedByteArray = [] cu_data.resize(4) From 065559b64cc1124bfc749ea76ac6d0d72ee6301f Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 3 Apr 2025 15:21:57 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=81=205=D0=9F-28=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=B8=D0=B0=D0=B3=D1=80=D0=B0=D0=BC=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/diagram/diagram.gd | 6 ++++-- scripts/tcp5p28.gd | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/scenes/diagram/diagram.gd b/scenes/diagram/diagram.gd index b173089d..7be13d4a 100644 --- a/scenes/diagram/diagram.gd +++ b/scenes/diagram/diagram.gd @@ -1,5 +1,7 @@ class_name Diagram extends Sprite2D +const NUM_OF_RANGE = 7 +const NUM_OF_DIRECTIONS = 4 var fs_default_colors: Array ## Цвета по умолчанию для блоков ФС. func _ready() -> void: @@ -36,8 +38,8 @@ func set_def_colors(): var color1: Vector3 = ProjectSettings.get_setting('application/interfer/default_color1', Vector3(0.39, 0.44, 0.50)) var col_arr: Array = [color0, color1] var col = false - for i in 7: - for j in 4: + for i in NUM_OF_RANGE: + for j in NUM_OF_DIRECTIONS: fs_default_colors.append(col_arr[int(col)]) col = not col col = not col diff --git a/scripts/tcp5p28.gd b/scripts/tcp5p28.gd index 82041111..a2a5e60c 100644 --- a/scripts/tcp5p28.gd +++ b/scripts/tcp5p28.gd @@ -62,7 +62,7 @@ class TCP5P28 extends unit.Unit: var tx_stack: Array ## Массив пакетов для отправки. var uarep_state: int = 1 ## Флаги состояния прибора, 0 бит, состояние ПО var uarep_line: int = 3 ## Состояние линии связи с прибором - var ext_cu = false + var ext_cu: bool = false func _init(nm) -> void: super._init(nm) ext_cu = ProjectSettings.get_setting('application/config/external_cu', false) @@ -107,7 +107,7 @@ class TCP5P28 extends unit.Unit: else: return Error.ERR_UNAVAILABLE - func pack_threats(ths): + func pack_threats(ths: Dictionary): var data = PackedByteArray() var data_len = 4 + len(ths) * 80 # длинна блока данных в байтах var tick0 = Time.get_ticks_msec() @@ -120,7 +120,7 @@ class TCP5P28 extends unit.Unit: data_to_send.append_array(data) tx_stack.append(data_to_send) - func pack_interfers(interfers, ecms): + func pack_interfers(interfers: Dictionary, ecms: Dictionary): var data = PackedByteArray() var data_len = 12 # длинна блока данных в байтах data.resize(data_len) @@ -128,9 +128,9 @@ class TCP5P28 extends unit.Unit: data.encode_u16(2, len(interfers)) # Количество целей data.encode_u32(4, uarep_state) # Состояние УА-РЕП data.encode_u32(8, uarep_line) # Состояние линий связи + var cu_data: PackedByteArray = [] + cu_data.resize(4) for id in interfers.values(): - var cu_data: PackedByteArray = [] - cu_data.resize(4) var cu = ecms[id] cu_data.encode_u16(0, cu.ispp) var state: int @@ -145,7 +145,7 @@ class TCP5P28 extends unit.Unit: data_to_send.append_array(data) tx_stack.append(data_to_send) - func create_header(data_len): + func create_header(data_len: int): var head_data = PackedByteArray() head_data.resize(8) # Размер заголовка head_data.encode_u16(0, 0) # Код ошибки @@ -154,7 +154,7 @@ class TCP5P28 extends unit.Unit: head_data.encode_u32(4, data_len) # Длинна пакета данных return head_data - func get_threats_data(th, tick0): + func get_threats_data(th: threats.Threat, tick0: int): var th_data = PackedByteArray() th_data.resize(80) # Количество байт в массиве th_data.encode_u64(0, tick0) @@ -189,13 +189,13 @@ class TCP5P28 extends unit.Unit: th_data.encode_s32(76, int(th.lat * c1)) return th_data - func to_cp866(proto: String, th_data): + func to_cp866(proto: String, th_data: PackedByteArray): var cp866_proto: PackedByteArray = proto.to_ascii_buffer() cp866_proto.resize(36) for i in len(cp866_proto): th_data[28 + i] = cp866_proto[i] - func set_interfer(data): + func set_interfer(data: PackedByteArray): var mode = data.decode_u8(9) var id = data.decode_u16(10) var aoa = float(data.decode_u16(12)) / 10