@tool class_name uarep_settings extends Node ## Настройки программы var settings_program: Dictionary var UnitProfiles: Dictionary[StringName, Array] = { \ # < Название: [Протокол, [Параметры], Комментарий] > # < Название: Протокол, [Адрес, <Порт>|[, Порт], Широковещательное, Привязывать], Комментарий > 'уарэп-яу07-частный': ['yau07rx', ['10.1.1.2', 50002, false, true], 'IP-адрес для приёма частных сообщений от ЯУ-07'], 'уарэп-яу07-общий': ['yau07rx', ['*', 50000, true, true], 'IP-адрес для приёма широковещательных сообщений от ЯУ-07'], 'уарэп-капсрпб': ['capsrpb', ['127.0.0.1', '127.0.0.1', 42023, 42022, false, true], 'IP-адрес для обмена сообщениями со службой \"МП550\" (СТЦ)'], 'уарэп-трасса': ['trassa', ['192.168.11.34', '192.168.11.105', 50200, 10004, false, true], 'IP-адрес для обмена сообщениями с \"Трассой\"'], 'уарэп-эмс': ['yau07tx', ['10.1.1.52', 50052, false, false], 'IP-адрес прибора УФ'], 'уарэп-яу07-2в': ['yau07tx', ['10.1.1.22', 50022, false, false], 'IP-адрес прибора ПРД-В2'], 'уарэп-яу07-2н': ['yau07tx', ['10.1.1.21', 50021, false, false], 'IP-адрес прибора ПРД-Н2'], 'уарэп-яу07-2к': ['yau07tx', ['10.1.1.23', 50023, false, false], 'IP-адрес прибора ПРД-К2'], 'уарэп-яу07-4в': ['yau07tx', ['10.1.1.42', 50042, false, false], 'IP-адрес прибора ПРД-В4'], 'уарэп-яу07-4н': ['yau07tx', ['10.1.1.41', 50041, false, false], 'IP-адрес прибора ПРД-Н4'], 'уарэп-яу07-4к': ['yau07tx', ['10.1.1.43', 50043, false, false], 'IP-адрес прибора ПРД-К4'], 'уарэп-яу07-1в': ['yau07tx', ['10.1.1.12', 50012, false, false], 'IP-адрес прибора ПРД-В1'], 'уарэп-яу07-1н': ['yau07tx', ['10.1.1.11', 50011, false, false], 'IP-адрес прибора ПРД-Н1'], 'уарэп-яу07-1к': ['yau07tx', ['10.1.1.13', 50013, false, false], 'IP-адрес прибора ПРД-К1'], 'уарэп-яу07-3в': ['yau07tx', ['10.1.1.32', 50032, false, false], 'IP-адрес прибора ПРД-В3'], 'уарэп-яу07-3н': ['yau07tx', ['10.1.1.31', 50031, false, false], 'IP-адрес прибора ПРД-Н3'], 'уарэп-яу07-3к': ['yau07tx', ['10.1.1.33', 50033, false, false], 'IP-адрес прибора ПРД-К3'], 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], # <Название: > 'ор-63': ['iyems-tx', [ '192.168.10.1', 60001 ], 'IP-адрес для приёма докладов от информационному ЭМС устройств'], '454': ['iyems-tx', ['192.168.10.2', 60002 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'го': ['iyems-tx', ['192.168.10.3', 60003 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'рлс1': ['iyems-tx', ['192.168.10.4', 60004 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'рлс2': ['iyems-tx', ['192.168.10.5', 60005 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'ннвс': ['iyems-tx', ['192.168.10.6', 60006 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'изделие7': ['iyems-tx', ['192.168.10.7', 60007 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'изделие8': ['iyems-tx', ['192.168.10.8', 60008 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], # < Название: Протокол, < Адрес, Порт получения >, Комментарий > 'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], # < Название: Протокол, < Имя порта, Адрес modbus, Скорость, Чётность, Бит на символ, Стоп битов, Время на ожидание ответа в мкс >, Комментарий > 'уарэп-щ3': ['mbcs', ['/dev/ttyUSB0', 7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'], # < Название: Протокол, < Имя порта, Адрес СПТ-25, Скорость, Чётность, Бит на символ, Стоп битов >, Комментарий > 'уарэп-спт25-1': ['spt25', ['/dev/ttyUSB1', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G1)'], 'уарэп-спт25-2': ['spt25', ['/dev/ttyUSB2', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G2)'], 'уарэп-афсп-левый': [null, [], 'Прибор АФСП левого борта'], 'уарэп-афсп-правый': [null, [], 'Прибор АФСП правого борта'], 'уарэп-бпо-1': [null, [], 'Прибор БПО 1'], 'уарэп-бпо-2': [null, [], 'Прибор БПО 2'], 'уарэп-карта': [null, [], 'Сервер карты'], } ## Параметры цели. @export var ThreatParams = { 'time_lost': 5000 ## Время после последнего обновления в мс, через которое цель считается потерянной. } const FREQ_MAX: = 6000.0 const FREQ_MIN: = 400.0 const WIDTH_MAX: = 120.0 const WIDTH_MIN: = 5.0 const DUR_MAX: = 1000000.0 const PERIOD_MAX: = 1000000.0 const UM_MIN: = -5.0 const UM_MAX: = 55.0 func _ready() -> void: if Engine.is_editor_hint(): return var settings_file = 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) if not file: log.error('Не удалось открыть файл настроек.') log.warning('Будут использованы настройики по умолчанию.') return var read: = file.get_as_text() file.close() var json_conv: = JSON.new() if Error.OK != json_conv.parse(read): var jse: = json_conv.get_error_message() var jsl: = json_conv.get_error_line() log.error('Не удалось разобрать файл настроек. Строка %d: \"%s\"' % [jsl, jse]) log.warning('Будут использованы настройики по умолчанию.') return var json_data = json_conv.get_data() settings_program.merge(json_data, true) for key in settings_program: ProjectSettings.set_setting('application/config/%s' % key, settings_program[key]) for key: StringName in UnitProfiles.keys(): if not json_data.has(key): continue var vj = json_data[key] var vp = UnitProfiles[key][1] if vp.size() != vj.size(): log.error('Не удалось прочитать настройки для \"%s\"' % key) continue var parse_ok: = true for i in vp.size(): if tools.type_is_num(vj[i]) and tools.type_is_num(vp[i]): if typeof(vp[i]) == TYPE_INT: vp[i] = int(vj[i]) elif typeof(vp[i]) == TYPE_FLOAT: vp[i] = float(vj[i]) elif typeof(vp[i]) == typeof(vj[i]): vp[i] = vj[i] else: var tp: = type_string(typeof(vp[i])) var tj: = type_string(typeof(vj[i])) log.error('%s: ожидается тип \"%s\", но получен тип \"%s\" [%d]' % [key, tp, tj, i]) parse_ok = false break if parse_ok: UnitProfiles[key][1].assign(vp) ## Возвращает полный путь к файлу с настройками func get_settings_file_path() -> String: return ProjectSettings.get_setting( 'application/config/settings_path', 'user://settings.json')