diff --git a/scenes/nine-patch-button.gd b/scenes/nine-patch-button.gd index f810563..28e964c 100644 --- a/scenes/nine-patch-button.gd +++ b/scenes/nine-patch-button.gd @@ -2,6 +2,8 @@ extends PanelContainer +## Кнопка текстурная на два состояния + @export var texture_state0: Texture2D = preload('res://data/кнопка-квадрат-0.png'): set(val): $state.set_texture(val) diff --git a/scripts/capsrpb.gd b/scripts/capsrpb.gd index 352fc0f..9d963ed 100644 --- a/scripts/capsrpb.gd +++ b/scripts/capsrpb.gd @@ -1,7 +1,10 @@ extends Node -const ONLINE_TIMEOUT = 5.0 # Время ожидания пакета от ячейки, секунды -const BUFFER_SIZE = 2048 +## Реализация "Протокол информационного сопряжения +## СПО АСУ изделия «МП‑550» с СПО «Управления КАПС РПБ»" + +const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды +const BUFFER_SIZE = 2048 ## Размер приёмного буфера для датаграмм class CapsRpb: diff --git a/scripts/repsettings.gd b/scripts/repsettings.gd index 866a78c..9f581b2 100644 --- a/scripts/repsettings.gd +++ b/scripts/repsettings.gd @@ -1,6 +1,8 @@ extends Node +## Параметры +## Профили внешних устройств @export var UnitProfiles: = { \ # Название Протокол Адрес Порт Широков. Привяз. Комментарий 'уарэп-яу07-частный': ['yau07rx', '127.0.0.1', 50079, false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], @@ -23,6 +25,7 @@ extends Node 'уарэп-щ3': ['uart', '/dev/stty0', 115200, 1, 1, false, 1000, 'Прибор Щ3'] } # скорость, стартовых, стоповых, чётность, таймаут в мкс +## Параметры цели @export var ThreatParams = { 'time_lost': [5.0, 'Время после последнего обновления в с, через которое цель считается потерянной'], 'freq_min': [200.0, 'Нижняя рабочая частота, МГЦ'], @@ -34,6 +37,7 @@ extends Node func _ready() -> void: Log.info('Модуль настроек готов') +## Возвращает ключ устройства func get_unit_key(unit_name: String) -> Array: assert(unit_name in UnitProfiles, 'ошибка: нет такого устройства "%s"' % unit_name) var item = UnitProfiles[unit_name] diff --git a/scripts/threats.gd b/scripts/threats.gd index bdfaa60..7c47881 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -1,28 +1,31 @@ extends Node +## + +## Цель class Threat: - var alt: float # Текущая высота, метры. - var aoa: float # Курсовой угол на источник сигнала, градусы. - var atick: float # Тик обнаружения. - var baud: float # Модуляционная скорость. - var fflags: Dictionary # Флаги достоверности полей. - var freq: float # Частота несущей или центральная частота, МГц. - var freqm: String # Режим смены частоты. - var lat: float # Текущие координаты, долгота в градусах. - var lon: float # Текущие координаты, широта в градусах. - var power: float # Уровень принимаемого сигнала, дБм. - var proto: String # Тип протокола источника сигнала. - var rkrp: String # Рекомендуемый режим помехи. - var rparams: String # Рекомендуемые параметры помехи. - var salt: float # Координаты старта, высота от уровня моря, м. - var slat: float # Координаты старта, широта в градусах. - var slon: float # Координаты старта, долгота в градусах. - var tick: int # Время приёма сигнала, мс. - var tmod: String # Тип модуляции. - var utime: Dictionary # Время крайнего обновления. - var width: float # Ширина занимаемого диапазона частот, МГц. - var id: int # Идентификатор цел. + var alt: float ## Текущая высота, метры. + var aoa: float ## Курсовой угол на источник сигнала, градусы. + var atick: float ## Тик обнаружения. + var baud: float ## Модуляционная скорость. + var fflags: Dictionary ## Флаги достоверности полей. + var freq: float ## Частота несущей или центральная частота, МГц. + var freqm: String ## Режим смены частоты. + var lat: float ## Текущие координаты, долгота в градусах. + var lon: float ## Текущие координаты, широта в градусах. + var power: float ## Уровень принимаемого сигнала, дБм. + var proto: String ## Тип протокола источника сигнала. + var rkrp: String ## Рекомендуемый режим помехи. + var rparams: String ## Рекомендуемые параметры помехи. + var salt: float ## Координаты старта, высота от уровня моря, м. + var slat: float ## Координаты старта, широта в градусах. + var slon: float ## Координаты старта, долгота в градусах. + var tick: int ## Время приёма сигнала, мс. + var tmod: String ## Тип модуляции. + var utime: Dictionary ## Время крайнего обновления. + var width: float ## Ширина занимаемого диапазона частот, МГц. + var id: int ## Идентификатор цели. func _init(): Tools.get_members_names(self).any(func(vn): fflags[vn] = false) func _to_string() -> String: return 'номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq] @@ -36,11 +39,7 @@ signal threat_new(threats: Dictionary, th: Threat) signal threat_lost(threats: Dictionary, th: Threat) signal threat_update(threats: Dictionary, th: Threat) -var threats = {} -""" -Список целей. Индекс - <источник цели>:<номер цели> -Источник цели может быть: 'RPB', 'SIGMA', 'RLKS', 'MP405' -""" +var threats = {} ## Список целей. Индекс - <источник цели>:<номер цели> Источник цели может быть: 'RPB', 'SIGMA', 'RLKS', 'MP405' func _ready() -> void: @@ -54,6 +53,7 @@ func _ready() -> void: timer_check_lost.start(REPSettings.ThreatParams.time_lost[0] / 2.0) +## Периодически проверяет приборы на связи func on_timer_check_lost(unit, time_lost: int): """ Периодически проверяет приборы на связи """ for th in threats.values(): @@ -62,6 +62,7 @@ func on_timer_check_lost(unit, time_lost: int): call_deferred('emit_signal', 'threat_lost', threats, th) +## Приём целей func on_data_capsrpb_received(unit: capsrpb.CapsRpb): if 'mis' not in unit.json_dic: return diff --git a/scripts/tools.gd b/scripts/tools.gd index f18fba3..0285d2e 100644 --- a/scripts/tools.gd +++ b/scripts/tools.gd @@ -2,6 +2,11 @@ extends Node ## Простые часто используемые функции + +## Возвращает true, если val число, false - если иначе +func type_is_num(val) -> bool: return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0)) + + ## Производит преобразование из угла в радианы func radians(val: float): return (val * PI) / 180.0 @@ -34,7 +39,7 @@ func clip_value(val, val_min, val_max): return val -## Возвращает массив с именами членов класса +## Возвращает массив с именами членов класса [param obj] func get_members_names(obj: Object) -> Array: var pl = obj.get_property_list() var names: = Array() @@ -42,16 +47,17 @@ func get_members_names(obj: Object) -> Array: return names -## Проверяет, что заданный массив похож на ip-адрес -func assert_array_ipaddr(val: Array): - """ Выкидывает исключение, если массив не содержит ip-адрес """ - assert(val.size() == 2) - assert(val[0] is String) - assert(val[1] is int) - assert((0 < val[1]) and (val[1] < 65536)) +## Проверяет, что заданный массив [param val] похож на ip-адрес +func is_array_ipaddr(val: Array): + return (val.size() == 2) \ + and (val[0] is String) \ + and (val[1] is int) \ + and (0 < val[1]) \ + and (val[1] < 65536) -## Преобразует декартовые координаты в полярные +## Преобразует декартовые координаты в полярные. [param pos0] +## - координаты центра, [param pos] - координаты точки func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2: var x1: float = pos.x - pos0.x var y1: float = pos.y - pos0.y @@ -64,11 +70,6 @@ func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float: return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0 -## Возвращает true, если val число, false - если иначе -func type_is_num(val) -> bool: - return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0)) - - ## Возвращает true, если точка внутри заданного полигона func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: var j: int = len(p) - 1 @@ -80,11 +81,8 @@ func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: return odd_nodes > 0 -## Устанавливает слово в байтовом массиве -## buf - Байтовый массив -## index - Индекс младшего байта слова в массиве -## val - Значение слова для записи в батовый массив -## return - Ничего -func set_wordi(buf: Array, index, val): +## Записывает слово [param val] в элемент байтовго массива [param buf] +## расположенный по индексу [param index]. Младшее слово +func set_wordi(buf: Array, index: int, val: int) -> void: buf[index] = val & 0xff buf[index + 1] = (val >> 8) & 0xff