Merge remote-tracking branch 'sasha/master'

This commit is contained in:
MaD_CaT
2025-05-23 13:59:41 +03:00
11 changed files with 246 additions and 192 deletions

View File

@@ -2,7 +2,7 @@ class_name navigation extends Node
## "Протокол №120-11435-09.PDF"
const ONLINE_TIMEOUT: = 5000 ## Время ожидания пакета, милисекунды
const ONLINE_TIMEOUT: = 5000 ## Время ожидания пакета, миллисекунды
const pow_2_30: = pow(2.0, 30.0)
## Источник данных навигации

View File

@@ -153,10 +153,7 @@ func _ready() -> void:
var unit_key = settings.get_unit_key(unit_name)
units[unit_key] = new_unit
units_udp[unit_key] = new_unit
if len(st[2]) > 1:
dst_ports[unit_key] = st[2][1]
else:
dst_ports[unit_key] = st[2][0]
dst_ports[unit_key] = st[2][1] if len(st[2]) > 1 else st[2][0]
if proto in TCP_PROTO:
var unit_tcp = TCP_PROTO[proto].new(unit_name)

View File

@@ -1,9 +1,7 @@
@tool
class_name rep_settings extends Node
class_name uarep_settings extends Node
## Параметры.
var settings_file = ProjectSettings.get_setting('application/config/settings_path', 'user://settings.json') # Путь к файлу с настройками
## Настройки программы
var settings_program: Dictionary
@@ -57,6 +55,7 @@ const UM_MAX: = 55.0
func _ready() -> void:
if Engine.is_editor_hint():
return
var settings_file = settings.get_settings_file_path()
var abs_path = ProjectSettings.globalize_path(settings_file)
log.info('Путь к файлу настроек: \"%s\"' % abs_path)
var file = FileAccess.open(settings_file, FileAccess.READ)
@@ -103,6 +102,13 @@ func _ready() -> void:
log.info('Не удалось прочитать значение \"%s\" из файла настроек, будет использовано значение по умолчанию' % key)
## Возвращает полный путь к файлу с настройками
func get_settings_file_path():
return ProjectSettings.get_setting(
'application/config/settings_path',
'user://settings.json')
## Возвращает ключ устройства.
func get_unit_key(unit_name: String) -> Array:
var item = UnitProfiles[unit_name]

View File

@@ -1,30 +1,30 @@
class_name tcp5_p28 extends Node
## Реализация "Протокол информационного сопряжения.
## СПО АСУ изделия «МП550» с СПО 5П-28".
## СПО АСУ изделия МП-550 с СПО 5П-28
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от 5П-28, мс.
const BUFFER_SIZE = 2048 ## Размер приёмного буфера для датаграмм.
## Тип модуляции для запаковки в пакет для 5П-28.
const MOD_TYPES: Array = ['',
'am',
'ook',
'ask',
'fm',
'qpsk',
'oqpsk',
'pi4qpsk',
'qam16',
'qam32',
'qam64',
'qam128',
'qam256',
'qam512',
'cpfsk',
'psk',
'ofdm',]
const MOD_TYPES: Array = [
'',
'am',
'ook',
'ask',
'fm',
'qpsk',
'oqpsk',
'pi4qpsk',
'qam16',
'qam32',
'qam64',
'qam128',
'qam256',
'qam512',
'cpfsk',
'psk',
'ofdm' ]
const CU_STATE: Dictionary = {
0: 2, # Подготовка к выполнению
@@ -42,19 +42,19 @@ class TCP5P28 extends unit.Unit:
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], }
'уарэп-эмс': [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) ## Запрос состояния выполнения целеуказания.
@@ -125,7 +125,7 @@ class TCP5P28 extends unit.Unit:
var data_len = 12 # длинна блока данных в байтах
data.resize(data_len)
data.encode_u16(0, 0) # Код ошибки
data.encode_u16(2, len(interfers)) # Количество целей
data.encode_u16(2, interfers.size()) # Количество целей
data.encode_u32(4, uarep_state) # Состояние УА-РЕП
data.encode_u32(8, uarep_line) # Состояние линий связи
var cu_data: PackedByteArray = []
@@ -136,15 +136,11 @@ class TCP5P28 extends unit.Unit:
continue
var cu = ecms[id]
cu_data.encode_u16(0, cu.ispp)
var state: int
if CU_STATE.has(cu.svk):
state = CU_STATE[cu.svk]
else:
state = 9
var state: int = CU_STATE[cu.svk] if CU_STATE.has(cu.svk) else 9
cu_data.encode_u8(2, state) # Состояние выполнения команды
cu_data.encode_u8(3, 0xFF) # Эффективность работы помехи
data.append_array(cu_data)
var data_to_send: PackedByteArray = create_header(data_len + 4 * len(interfers))
var data_to_send: PackedByteArray = create_header(data_len + 4 * interfers.size())
data_to_send.append_array(data)
tx_stack.append(data_to_send)
@@ -195,7 +191,7 @@ class TCP5P28 extends unit.Unit:
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):
for i in cp866_proto.size():
th_data[28 + i] = cp866_proto[i]
func set_interfer(data: PackedByteArray):

View File

@@ -35,7 +35,7 @@ func allways(val: bool, msg: String = '<не указано>'):
get_tree().quit(Error.FAILED)
func _check_index(obj, index) -> bool:
func check_index(obj, index) -> bool:
if obj is Dictionary:
if obj.has(index):
return true
@@ -59,11 +59,11 @@ func get_value_by_path(obj, paths: Array, ret_val: Array):
var index = paths.pop_at(0)
ret_val[1] = false
if paths.size():
if _check_index(obj, index):
if check_index(obj, index):
ret_val[2] += 1
get_value_by_path(obj[index], paths, ret_val)
else:
if _check_index(obj, index):
if check_index(obj, index):
ret_val[0] = obj[index]
ret_val[1] = true