105 lines
6.2 KiB
GDScript
105 lines
6.2 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'],
|
||
'уарэп-капсрпб': ['json-capsrpb', ['127.0.0.1', 42023, 42022, false, true], 'IP-адрес для приёма сообщений от службы \"МП550\"'],
|
||
'уарэп-эмс': ['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'],
|
||
'навигация': ['udprx', ['*', 60000, true, true ], '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)'],
|
||
}
|
||
|
||
## Параметры цели.
|
||
@export var ThreatParams = {
|
||
'time_lost': 5000 ## Время после последнего обновления в мс, через которое цель считается потерянной.
|
||
}
|
||
|
||
|
||
const FREQ_MAX: = 6000.0
|
||
const FREQ_MIN: = 400.0
|
||
const WIDTH_MAX: = 100.0
|
||
const WIDTH_MIN: = 0.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.info('Не удалось открыть файл настроек, будут использованы настройики по умолчанию')
|
||
return
|
||
var read = file.get_as_text()
|
||
file.close()
|
||
var json_conv: = JSON.new()
|
||
if Error.OK != json_conv.parse(read):
|
||
log.info('Не удалось разобрать файл настроек: ошибка в содержании, будут использованы значения по умолчанию')
|
||
return
|
||
var json_data = json_conv.get_data()
|
||
settings_program.merge(json_data)
|
||
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():
|
||
return ProjectSettings.get_setting(
|
||
'application/config/settings_path',
|
||
'user://settings.json')
|