126 lines
8.5 KiB
GDScript
126 lines
8.5 KiB
GDScript
@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-rx', [ '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')
|