Files
uarep-ctl/scripts/settings.gd

126 lines
8.5 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@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')