Merge remote-tracking branch 'sasha/master'
This commit is contained in:
@@ -60,6 +60,7 @@ spt25="*res://scripts/spt25.gd"
|
||||
astrakb="*res://scripts/astra-kb.gd"
|
||||
prd="*res://scripts/prd.gd"
|
||||
navi="*res://scripts/navigation.gd"
|
||||
trassa="*res://scripts/trassa.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
@tool
|
||||
class_name pribor_externals extends 'res://scenes/контроль/прибор.gd'
|
||||
var UnitPanel = load('res://scenes/контроль/элемент-ю.tscn')
|
||||
|
||||
|
||||
func on_line_changed(unit_inst: unit.Unit, unit_panel: Control): unit_panel.state = unit_inst.online
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
for unit_inst in network.units.values():
|
||||
var unit_panel = UnitPanel.instantiate()
|
||||
unit_panel.fname = unit_inst.name
|
||||
$grid.add_child(unit_panel)
|
||||
unit_inst.connect('line_changed', on_line_changed.bind(unit_panel))
|
||||
on_line_changed(unit_inst, unit_panel)
|
||||
@@ -1 +0,0 @@
|
||||
uid://beb41qdahkdp5
|
||||
@@ -1,16 +1,34 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dwgvv4b4a5t1"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://beb41qdahkdp5" path="res://scenes/pribor-externals/externals.gd" id="1_pacm1"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pacm1"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_dk54t"]
|
||||
script/source = "@tool
|
||||
class_name externals extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
var UnitPanel = load('res://scenes/контроль/элемент-ю.tscn')
|
||||
|
||||
func on_line_changed(unit_inst: unit.Unit, unit_panel: Control): unit_panel.state = unit_inst.online
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
for unit_inst in network.units.values():
|
||||
var unit_panel = UnitPanel.instantiate()
|
||||
unit_panel.fname = unit_inst.name
|
||||
$grid.add_child(unit_panel)
|
||||
unit_inst.connect('line_changed', on_line_changed.bind(unit_panel))
|
||||
on_line_changed(unit_inst, unit_panel)
|
||||
"
|
||||
|
||||
[node name="externals" type="PanelContainer"]
|
||||
offset_left = 71.0
|
||||
offset_top = 75.0
|
||||
offset_right = 756.0
|
||||
offset_bottom = 964.0
|
||||
theme_override_styles/panel = SubResource("StyleBoxEmpty_pacm1")
|
||||
script = ExtResource("1_pacm1")
|
||||
script = SubResource("GDScript_dk54t")
|
||||
|
||||
[node name="grid" type="GridContainer" parent="."]
|
||||
layout_mode = 2
|
||||
|
||||
@@ -69,7 +69,7 @@ func on_toggled_switch(val: bool, meta: Array, unit_sch3):
|
||||
func _enter_tree() -> void:
|
||||
super._enter_tree()
|
||||
if Engine.is_editor_hint(): return
|
||||
var unit_sch3 = network.get_unit_instance(unit_name)
|
||||
var unit_sch3: = network.get_unit_instance(unit_name)
|
||||
unit_sch3.base_holding_address = base_holding_address
|
||||
unit_sch3.regs_holding_count = regs_holding_count
|
||||
unit_sch3.base_input_address = base_input_address
|
||||
@@ -82,7 +82,7 @@ func _enter_tree() -> void:
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var unit_sch3 = network.get_unit_instance(unit_name)
|
||||
var unit_sch3: = network.get_unit_instance(unit_name)
|
||||
var items = get_tree().get_nodes_in_group('bits_items_switch')
|
||||
for item in items:
|
||||
var meta = item.get_meta('bits')
|
||||
|
||||
12
scenes/контроль/внешний.gd
Normal file
12
scenes/контроль/внешний.gd
Normal file
@@ -0,0 +1,12 @@
|
||||
extends TextureRect
|
||||
|
||||
@export var unit_name: StringName = ''
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var unit_instance = network.get_unit_instance(unit_name)
|
||||
unit_instance.connect('line_changed', on_line_changed)
|
||||
|
||||
|
||||
func on_line_changed(unit_instance: unit.Unit):
|
||||
$connect_pribor.set_val(unit_instance.online)
|
||||
1
scenes/контроль/внешний.gd.uid
Normal file
1
scenes/контроль/внешний.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://q3gmpsqspjfp
|
||||
@@ -5,7 +5,7 @@ extends Node
|
||||
@export var state_colors: Array
|
||||
|
||||
func _on_toggled(toggled_on): $frame.visible = toggled_on
|
||||
func _enter_tree() -> void: $label.self_modulate = state
|
||||
func _enter_tree() -> void: $label.self_modulate = state_colors[state]
|
||||
|
||||
|
||||
@export var state: int:
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
extends Panel
|
||||
|
||||
"""
|
||||
Режим контроль
|
||||
"""
|
||||
#TODO: рефактор: заменить подчёркивание на тире
|
||||
const PRIBORS_RES = \
|
||||
{
|
||||
'externals': ['res://scenes/pribor-externals/externals.tscn', 'Контроль подключения внешних систем'],
|
||||
'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'],
|
||||
'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'],
|
||||
'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'],
|
||||
'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'],
|
||||
'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'],
|
||||
'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'],
|
||||
'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'],
|
||||
'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'],
|
||||
'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'],
|
||||
'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'],
|
||||
'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'],
|
||||
'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'],
|
||||
'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'],
|
||||
'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'],
|
||||
'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'],
|
||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||
}
|
||||
|
||||
|
||||
func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online)
|
||||
|
||||
|
||||
func _ready():
|
||||
var group = ButtonGroup.new()
|
||||
for k in PRIBORS_RES:
|
||||
var pribor_node = get_node(k)
|
||||
var pribor_path = PRIBORS_RES[k][0]
|
||||
var header_text = PRIBORS_RES[k][1]
|
||||
pribor_node.set_button_group(group)
|
||||
pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node))
|
||||
var conn_node = pribor_node.get_node('connect_pribor')
|
||||
var pribor_meta = pribor_node.get_meta('unit_name', [])
|
||||
var pribor_proc = pribor_node.get_meta('online_proc', '')
|
||||
if pribor_proc == '':
|
||||
continue
|
||||
if pribor_meta.size():
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta))
|
||||
|
||||
|
||||
func online_change_arr(_u, conn_node, pribor_meta):
|
||||
var state_online = true
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
if not unit_pribor.online:
|
||||
state_online = false
|
||||
break
|
||||
conn_node.set_val(state_online)
|
||||
|
||||
|
||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
var items = get_tree().get_nodes_in_group('pribor_items')
|
||||
for item in items:
|
||||
remove_child(item)
|
||||
item.queue_free()
|
||||
var pribor_obj = load(pribor_path)
|
||||
if not pribor_obj:
|
||||
push_error('не загружено: \"%s\" (%s)' % [pribor_path, header_text])
|
||||
return
|
||||
var pribor = pribor_obj.instantiate()
|
||||
if not pribor:
|
||||
push_error('экземпляр не создан: \"%s\" (%s)' % [pribor_path, header_text])
|
||||
return
|
||||
$lbl_header.text = header_text
|
||||
var meta_list = pribor_node.get_meta_list()
|
||||
if meta_list.find('unit_name') > -1:
|
||||
var unit_name = pribor_node.get_meta('unit_name')
|
||||
pribor.set_meta('unit_name', unit_name)
|
||||
pribor.add_to_group('pribor_items')
|
||||
add_child(pribor)
|
||||
@@ -1 +0,0 @@
|
||||
uid://b0wcp76bbl2jx
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=17 format=3 uid="uid://lwmw4egynmd1"]
|
||||
[gd_scene load_steps=18 format=3 uid="uid://lwmw4egynmd1"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b0wcp76bbl2jx" path="res://scenes/контроль/контроль.gd" id="1_x5d6w"]
|
||||
[ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"]
|
||||
[ext_resource type="Script" uid="uid://q3gmpsqspjfp" path="res://scenes/контроль/внешний.gd" id="2_8r80x"]
|
||||
[ext_resource type="Texture2D" uid="uid://bb80aigvv648i" path="res://data/кнопка-внешние-0.png" id="2_oysma"]
|
||||
[ext_resource type="Script" uid="uid://bj4nndrurbunl" path="res://scenes/контроль/кнопка-прибора.gd" id="3_4pt7j"]
|
||||
[ext_resource type="Texture2D" uid="uid://dkqlvd750pplc" path="res://data/СПТ.png" id="3_hhadv"]
|
||||
@@ -16,6 +16,89 @@
|
||||
[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="9_ll0vs"]
|
||||
[ext_resource type="Script" uid="uid://bncy1x53jp73d" path="res://scenes/контроль/connect_pribor.gd" id="11_u7tym"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_iqgf5"]
|
||||
script/source = "extends Panel
|
||||
|
||||
\"\"\"
|
||||
Режим контроль
|
||||
\"\"\"
|
||||
#TODO: рефактор: заменить подчёркивание на тире
|
||||
const PRIBORS_RES = \\
|
||||
{
|
||||
'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'],
|
||||
'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'],
|
||||
'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'],
|
||||
'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'],
|
||||
'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'],
|
||||
'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'],
|
||||
'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'],
|
||||
'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'],
|
||||
'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'],
|
||||
'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'],
|
||||
'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'],
|
||||
'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'],
|
||||
'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'],
|
||||
'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'],
|
||||
'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'],
|
||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||
}
|
||||
|
||||
|
||||
func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online)
|
||||
|
||||
|
||||
func _ready():
|
||||
var group = ButtonGroup.new()
|
||||
for k in PRIBORS_RES:
|
||||
var pribor_node = get_node(k)
|
||||
var pribor_path = PRIBORS_RES[k][0]
|
||||
var header_text = PRIBORS_RES[k][1]
|
||||
pribor_node.set_button_group(group)
|
||||
pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node))
|
||||
var conn_node = pribor_node.get_node('connect_pribor')
|
||||
var pribor_meta = pribor_node.get_meta('unit_name', [])
|
||||
var pribor_proc = pribor_node.get_meta('online_proc', '')
|
||||
if pribor_proc == '':
|
||||
continue
|
||||
if pribor_meta.size():
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta))
|
||||
|
||||
|
||||
func online_change_arr(_u, conn_node, pribor_meta):
|
||||
var state_online = true
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
if not unit_pribor.online:
|
||||
state_online = false
|
||||
break
|
||||
conn_node.set_val(state_online)
|
||||
|
||||
|
||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
var items = get_tree().get_nodes_in_group('pribor_items')
|
||||
for item in items:
|
||||
remove_child(item)
|
||||
item.queue_free()
|
||||
var pribor_obj = load(pribor_path)
|
||||
if not pribor_obj:
|
||||
push_error('не загружено: \\\"%s\\\" (%s)' % [pribor_path, header_text])
|
||||
return
|
||||
var pribor = pribor_obj.instantiate()
|
||||
if not pribor:
|
||||
push_error('экземпляр не создан: \\\"%s\\\" (%s)' % [pribor_path, header_text])
|
||||
return
|
||||
$lbl_header.text = header_text
|
||||
var meta_list = pribor_node.get_meta_list()
|
||||
if meta_list.find('unit_name') > -1:
|
||||
var unit_name = pribor_node.get_meta('unit_name')
|
||||
pribor.set_meta('unit_name', unit_name)
|
||||
pribor.add_to_group('pribor_items')
|
||||
add_child(pribor)
|
||||
"
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_foasq"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
@@ -36,58 +119,174 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_x5d6w")
|
||||
script = SubResource("GDScript_iqgf5")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="externals" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
[node name="capsrpb" type="TextureRect" parent="."]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 1435.0
|
||||
offset_top = 32.0
|
||||
offset_right = 1691.0
|
||||
offset_bottom = 288.0
|
||||
scale = Vector2(0.5, 0.5)
|
||||
offset_left = 959.0
|
||||
offset_top = 1021.0
|
||||
offset_right = 1215.0
|
||||
offset_bottom = 1277.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
action_mode = 0
|
||||
texture_normal = ExtResource("2_oysma")
|
||||
stretch_mode = 0
|
||||
script = ExtResource("3_4pt7j")
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 0.74, 0.37, 1), Color(0.854902, 0.0705882, 0.0705882, 1)]
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-капсрпб"
|
||||
|
||||
[node name="label" type="Label" parent="externals"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
[node name="label" type="Label" parent="capsrpb"]
|
||||
layout_mode = 0
|
||||
offset_left = 58.0
|
||||
offset_top = -26.0
|
||||
offset_right = 219.0
|
||||
offset_bottom = -7.0
|
||||
text = "Внешние подключения"
|
||||
offset_left = -44.0
|
||||
offset_top = -128.0
|
||||
offset_right = 41.0
|
||||
offset_bottom = -109.0
|
||||
scale = Vector2(4, 4)
|
||||
text = "КАПС РПБ"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="externals"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
layout_mode = 0
|
||||
offset_left = -32.0
|
||||
offset_top = -12.0
|
||||
offset_right = 123.0
|
||||
offset_bottom = 111.0
|
||||
scale = Vector2(2, 2)
|
||||
texture = ExtResource("4_rasbe")
|
||||
region_rect = Rect2(-3, -3, 89, 89)
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="externals"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="capsrpb"]
|
||||
light_mask = 3
|
||||
position = Vector2(47.9999, 30)
|
||||
scale = Vector2(1.23077, 1.25)
|
||||
position = Vector2(56, -4)
|
||||
scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="5p28" type="TextureRect" parent="."]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 1088.0
|
||||
offset_top = 1021.0
|
||||
offset_right = 1344.0
|
||||
offset_bottom = 1277.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-5п28"
|
||||
|
||||
[node name="label" type="Label" parent="5p28"]
|
||||
layout_mode = 0
|
||||
offset_left = 16.0
|
||||
offset_top = -128.0
|
||||
offset_right = 68.0
|
||||
offset_bottom = -109.0
|
||||
scale = Vector2(4, 4)
|
||||
text = "5П28"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="5p28"]
|
||||
light_mask = 3
|
||||
position = Vector2(52, -4)
|
||||
scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="akng" type="TextureRect" parent="."]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 1216.0
|
||||
offset_top = 1021.0
|
||||
offset_right = 1472.0
|
||||
offset_bottom = 1277.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"навигация"
|
||||
|
||||
[node name="label" type="Label" parent="akng"]
|
||||
layout_mode = 0
|
||||
offset_left = 4.0
|
||||
offset_top = -128.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = -109.0
|
||||
scale = Vector2(4, 4)
|
||||
text = "АКНГ"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="akng"]
|
||||
light_mask = 3
|
||||
position = Vector2(47.9999, -4)
|
||||
scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="maps" type="TextureRect" parent="."]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 1344.0
|
||||
offset_top = 1021.0
|
||||
offset_right = 1600.0
|
||||
offset_bottom = 1277.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"навигация"
|
||||
|
||||
[node name="label" type="Label" parent="maps"]
|
||||
layout_mode = 0
|
||||
offset_left = 4.0
|
||||
offset_top = -128.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = -109.0
|
||||
scale = Vector2(4, 4)
|
||||
text = "Карты"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="maps"]
|
||||
light_mask = 3
|
||||
position = Vector2(47.9999, -4)
|
||||
scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="trassa" type="TextureRect" parent="."]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 1472.0
|
||||
offset_top = 1021.0
|
||||
offset_right = 1728.0
|
||||
offset_bottom = 1277.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-трасса"
|
||||
|
||||
[node name="label" type="Label" parent="trassa"]
|
||||
layout_mode = 0
|
||||
offset_left = 4.0
|
||||
offset_top = -128.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = -109.0
|
||||
scale = Vector2(4, 4)
|
||||
text = "Трасса"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="trassa"]
|
||||
light_mask = 3
|
||||
position = Vector2(47.9999, -4)
|
||||
scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
@@ -95,9 +294,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_uf" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1150.0
|
||||
offset_left = 1183.0
|
||||
offset_top = 565.0
|
||||
offset_right = 1261.0
|
||||
offset_right = 1294.0
|
||||
offset_bottom = 750.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -111,7 +310,6 @@ metadata/unit_name = ["уарэп-эмс"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_uf"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 15.0
|
||||
offset_top = -34.0
|
||||
@@ -123,7 +321,6 @@ vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_uf"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
layout_mode = 0
|
||||
offset_left = -14.0
|
||||
offset_top = -30.0
|
||||
@@ -137,7 +334,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uf"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(52, -6)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -148,9 +344,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_rtr" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1025.0
|
||||
offset_left = 1058.0
|
||||
offset_top = 595.0
|
||||
offset_right = 1131.0
|
||||
offset_right = 1164.0
|
||||
offset_bottom = 751.0
|
||||
pivot_offset = Vector2(-10, -65)
|
||||
size_flags_horizontal = 15
|
||||
@@ -162,6 +358,16 @@ stretch_mode = 0
|
||||
script = ExtResource("3_4pt7j")
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_rtr"]
|
||||
layout_mode = 0
|
||||
offset_left = 12.0
|
||||
offset_top = -54.0
|
||||
offset_right = 95.0
|
||||
offset_bottom = -35.0
|
||||
text = "РТР"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_rtr"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
@@ -177,8 +383,7 @@ patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="label" type="Label" parent="pribor_rtr"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
[node name="label2" type="Label" parent="pribor_rtr"]
|
||||
layout_mode = 0
|
||||
offset_left = 12.0
|
||||
offset_top = -54.0
|
||||
@@ -189,7 +394,6 @@ horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_rtr"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(55, -15)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -200,10 +404,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_afsp_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1020.0
|
||||
offset_top = 420.0
|
||||
offset_right = 1853.0
|
||||
offset_bottom = 1060.0
|
||||
offset_left = 1053.0
|
||||
offset_top = 432.0
|
||||
offset_right = 1886.0
|
||||
offset_bottom = 1072.0
|
||||
scale = Vector2(0.2, 0.2)
|
||||
pivot_offset = Vector2(-10, -65)
|
||||
size_flags_horizontal = 15
|
||||
@@ -215,6 +419,17 @@ stretch_mode = 0
|
||||
script = ExtResource("3_4pt7j")
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_1"]
|
||||
layout_mode = 0
|
||||
offset_left = 165.0
|
||||
offset_top = -245.0
|
||||
offset_right = 262.0
|
||||
offset_bottom = -225.0
|
||||
scale = Vector2(5, 5)
|
||||
text = "АФСП 1"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_afsp_1"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
@@ -231,8 +446,7 @@ patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_1"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
[node name="label2" type="Label" parent="pribor_afsp_1"]
|
||||
layout_mode = 0
|
||||
offset_left = 165.0
|
||||
offset_top = -245.0
|
||||
@@ -244,7 +458,6 @@ horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_1"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(415, -40)
|
||||
scale = Vector2(3, 3)
|
||||
@@ -255,10 +468,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_afsp_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1210.0
|
||||
offset_top = 420.0
|
||||
offset_right = 2043.0
|
||||
offset_bottom = 1060.0
|
||||
offset_left = 1243.0
|
||||
offset_top = 432.0
|
||||
offset_right = 2076.0
|
||||
offset_bottom = 1072.0
|
||||
scale = Vector2(0.2, 0.2)
|
||||
pivot_offset = Vector2(-10, -65)
|
||||
size_flags_horizontal = 15
|
||||
@@ -271,6 +484,17 @@ flip_h = true
|
||||
script = ExtResource("3_4pt7j")
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_2"]
|
||||
layout_mode = 0
|
||||
offset_left = 200.0
|
||||
offset_top = -240.0
|
||||
offset_right = 297.0
|
||||
offset_bottom = -220.0
|
||||
scale = Vector2(5, 5)
|
||||
text = "АФСП 2"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_afsp_2"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
@@ -287,8 +511,7 @@ patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_2"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
[node name="label2" type="Label" parent="pribor_afsp_2"]
|
||||
layout_mode = 0
|
||||
offset_left = 200.0
|
||||
offset_top = -240.0
|
||||
@@ -300,7 +523,6 @@ horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_2"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(425, -40)
|
||||
scale = Vector2(3, 3)
|
||||
@@ -311,9 +533,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_uyep" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1280.0
|
||||
offset_left = 1313.0
|
||||
offset_top = 565.0
|
||||
offset_right = 1374.0
|
||||
offset_right = 1407.0
|
||||
offset_bottom = 751.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -327,7 +549,6 @@ metadata/unit_name = ["уарэп-щ3", "уарэп-спт25-1", "уарэп-с
|
||||
metadata/online_proc = "online_change_arr"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_uyep"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 26.8566
|
||||
offset_top = -38.3276
|
||||
@@ -353,7 +574,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uyep"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(45, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -364,9 +584,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_v_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1435.0
|
||||
offset_left = 1440.0
|
||||
offset_top = 680.0
|
||||
offset_right = 1512.0
|
||||
offset_right = 1517.0
|
||||
offset_bottom = 796.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -381,7 +601,6 @@ metadata/unit_name = ["уарэп-яу07-2в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_2"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 14.0
|
||||
offset_top = -38.0
|
||||
@@ -407,7 +626,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_2"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(40, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -418,9 +636,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_n_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1435.0
|
||||
offset_left = 1440.0
|
||||
offset_top = 345.0
|
||||
offset_right = 1512.0
|
||||
offset_right = 1517.0
|
||||
offset_bottom = 461.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -435,7 +653,6 @@ metadata/unit_name = ["уарэп-яу07-2н"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_2"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 15.0
|
||||
offset_top = -38.0
|
||||
@@ -463,7 +680,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(40, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -474,9 +690,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_k_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1435.0
|
||||
offset_left = 1440.0
|
||||
offset_top = 515.0
|
||||
offset_right = 1512.0
|
||||
offset_right = 1517.0
|
||||
offset_bottom = 631.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -491,7 +707,6 @@ metadata/unit_name = ["уарэп-яу07-2к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_2"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 17.0
|
||||
offset_top = -38.0
|
||||
@@ -517,7 +732,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_2"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(43, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -528,10 +742,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_v_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1015.0
|
||||
offset_top = 865.0
|
||||
offset_right = 1092.0
|
||||
offset_bottom = 981.0
|
||||
offset_left = 1048.0
|
||||
offset_top = 802.0
|
||||
offset_right = 1125.0
|
||||
offset_bottom = 918.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -545,7 +759,6 @@ metadata/unit_name = ["уарэп-яу07-3в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_3"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 9.0
|
||||
offset_top = -38.0
|
||||
@@ -571,7 +784,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_3"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(34, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -582,10 +794,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_n_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1290.0
|
||||
offset_top = 865.0
|
||||
offset_right = 1367.0
|
||||
offset_bottom = 981.0
|
||||
offset_left = 1323.0
|
||||
offset_top = 802.0
|
||||
offset_right = 1400.0
|
||||
offset_bottom = 918.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -599,7 +811,6 @@ metadata/unit_name = ["уарэп-яу07-3н"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_3"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = -38.0
|
||||
@@ -625,7 +836,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_3"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(33, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -636,10 +846,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_k_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1155.0
|
||||
offset_top = 865.0
|
||||
offset_right = 1232.0
|
||||
offset_bottom = 981.0
|
||||
offset_left = 1188.0
|
||||
offset_top = 802.0
|
||||
offset_right = 1265.0
|
||||
offset_bottom = 918.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -653,7 +863,6 @@ metadata/unit_name = ["уарэп-яу07-3к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_3"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 9.0
|
||||
offset_top = -38.0
|
||||
@@ -679,7 +888,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_3"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -690,10 +898,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_v_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1295.0
|
||||
offset_top = 180.0
|
||||
offset_right = 1372.0
|
||||
offset_bottom = 296.0
|
||||
offset_left = 1328.0
|
||||
offset_top = 198.0
|
||||
offset_right = 1405.0
|
||||
offset_bottom = 314.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -707,7 +915,6 @@ metadata/unit_name = ["уарэп-яу07-1в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_1"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = -38.0
|
||||
@@ -733,7 +940,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_1"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(34, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -744,10 +950,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_n_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1015.0
|
||||
offset_top = 175.0
|
||||
offset_right = 1092.0
|
||||
offset_bottom = 291.0
|
||||
offset_left = 1048.0
|
||||
offset_top = 193.0
|
||||
offset_right = 1125.0
|
||||
offset_bottom = 309.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -761,7 +967,6 @@ metadata/online_proc = "on_line_changed"
|
||||
metadata/unit_name = ["уарэп-яу07-1н"]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_1"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = -38.0
|
||||
@@ -787,7 +992,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -798,10 +1002,10 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_k_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1150.0
|
||||
offset_top = 175.0
|
||||
offset_right = 1227.0
|
||||
offset_bottom = 291.0
|
||||
offset_left = 1183.0
|
||||
offset_top = 193.0
|
||||
offset_right = 1260.0
|
||||
offset_bottom = 309.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
@@ -815,7 +1019,6 @@ metadata/unit_name = ["уарэп-яу07-1к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_1"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 9.0
|
||||
offset_top = -38.0
|
||||
@@ -841,7 +1044,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_1"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -852,9 +1054,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_v_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 890.0
|
||||
offset_left = 946.0
|
||||
offset_top = 345.0
|
||||
offset_right = 967.0
|
||||
offset_right = 1023.0
|
||||
offset_bottom = 461.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -868,7 +1070,6 @@ metadata/unit_name = ["уарэп-яу07-4в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_4"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 17.0
|
||||
offset_top = -38.0
|
||||
@@ -894,7 +1095,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_4"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(41, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -905,9 +1105,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_n_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 885.0
|
||||
offset_left = 941.0
|
||||
offset_top = 685.0
|
||||
offset_right = 962.0
|
||||
offset_right = 1018.0
|
||||
offset_bottom = 801.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -921,7 +1121,6 @@ metadata/unit_name = ["уарэп-яу07-4н"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_4"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 14.0
|
||||
offset_top = -38.0
|
||||
@@ -947,7 +1146,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_4"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(40, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -958,9 +1156,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="pribor_prd_k_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 890.0
|
||||
offset_left = 946.0
|
||||
offset_top = 515.0
|
||||
offset_right = 967.0
|
||||
offset_right = 1023.0
|
||||
offset_bottom = 631.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
@@ -974,7 +1172,6 @@ metadata/unit_name = ["уарэп-яу07-4к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_4"]
|
||||
self_modulate = Color(0, 0, 0, 0)
|
||||
layout_mode = 0
|
||||
offset_left = 17.0
|
||||
offset_top = -38.0
|
||||
@@ -1000,7 +1197,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_4"]
|
||||
modulate = Color(0.498039, 0.498039, 0.498039, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(42, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -1011,9 +1207,9 @@ script = ExtResource("11_u7tym")
|
||||
[node name="txr_legend0" type="TextureRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 219.0
|
||||
offset_top = 1135.0
|
||||
offset_top = 1141.0
|
||||
offset_right = 443.0
|
||||
offset_bottom = 1359.0
|
||||
offset_bottom = 1365.0
|
||||
scale = Vector2(0.1, 0.1)
|
||||
texture = ExtResource("7_6j01w")
|
||||
|
||||
@@ -1021,9 +1217,9 @@ texture = ExtResource("7_6j01w")
|
||||
self_modulate = Color(1, 1, 1, 0.627451)
|
||||
layout_mode = 0
|
||||
offset_left = 247.0
|
||||
offset_top = 1136.0
|
||||
offset_top = 1142.0
|
||||
offset_right = 403.0
|
||||
offset_bottom = 1156.0
|
||||
offset_bottom = 1162.0
|
||||
theme_override_font_sizes/font_size = 17
|
||||
text = "Ожидание результата"
|
||||
|
||||
@@ -1031,27 +1227,27 @@ text = "Ожидание результата"
|
||||
self_modulate = Color(1, 1, 1, 0.627451)
|
||||
layout_mode = 0
|
||||
offset_left = 52.0
|
||||
offset_top = 1136.0
|
||||
offset_top = 1142.0
|
||||
offset_right = 125.0
|
||||
offset_bottom = 1156.0
|
||||
offset_bottom = 1162.0
|
||||
theme_override_font_sizes/font_size = 17
|
||||
text = "Исправно"
|
||||
|
||||
[node name="txr_legend1" type="TextureRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 26.0001
|
||||
offset_top = 1135.0
|
||||
offset_top = 1141.0
|
||||
offset_right = 250.0
|
||||
offset_bottom = 1359.0
|
||||
offset_bottom = 1365.0
|
||||
scale = Vector2(0.1, 0.1)
|
||||
texture = ExtResource("8_isjua")
|
||||
|
||||
[node name="txr_legend2" type="TextureRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 476.0
|
||||
offset_top = 1135.0
|
||||
offset_top = 1141.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 1359.0
|
||||
offset_bottom = 1365.0
|
||||
scale = Vector2(0.1, 0.1)
|
||||
texture = ExtResource("9_ll0vs")
|
||||
|
||||
@@ -1059,24 +1255,76 @@ texture = ExtResource("9_ll0vs")
|
||||
self_modulate = Color(1, 1, 1, 0.627451)
|
||||
layout_mode = 0
|
||||
offset_left = 504.0
|
||||
offset_top = 1136.0
|
||||
offset_top = 1142.0
|
||||
offset_right = 548.0
|
||||
offset_bottom = 1156.0
|
||||
offset_bottom = 1162.0
|
||||
theme_override_font_sizes/font_size = 17
|
||||
text = "Сбой"
|
||||
|
||||
[node name="lbl_header" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 75.0
|
||||
offset_top = 15.0
|
||||
offset_right = 653.0
|
||||
offset_bottom = 43.0
|
||||
offset_left = 78.0
|
||||
offset_top = 27.0
|
||||
offset_right = 656.0
|
||||
offset_bottom = 58.0
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Контроль исправности прибора"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[connection signal="toggled" from="externals" to="externals" method="_on_toggled"]
|
||||
[node name="connect_legend0" type="AnimatedSprite2D" parent="."]
|
||||
light_mask = 3
|
||||
position = Vector2(1219, 1151)
|
||||
scale = Vector2(0.65, 0.65)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="Label" type="Label" parent="connect_legend0"]
|
||||
offset_left = 36.9231
|
||||
offset_top = -15.3846
|
||||
offset_right = 103.923
|
||||
offset_bottom = 3.61538
|
||||
scale = Vector2(1.54, 1.54)
|
||||
text = "Отключен"
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="connect_legend1" type="AnimatedSprite2D" parent="."]
|
||||
self_modulate = Color(0, 1, 0, 1)
|
||||
light_mask = 3
|
||||
position = Vector2(975, 1152)
|
||||
scale = Vector2(0.65, 0.65)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame = 1
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="Label" type="Label" parent="connect_legend1"]
|
||||
offset_left = 36.9231
|
||||
offset_top = -13.8462
|
||||
offset_right = 99.9231
|
||||
offset_bottom = 5.15385
|
||||
scale = Vector2(1.54, 1.54)
|
||||
text = "На связи"
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="line0" type="Line2D" parent="."]
|
||||
position = Vector2(936, 950)
|
||||
points = PackedVector2Array(-8, 0, 608, 0)
|
||||
width = 2.0
|
||||
default_color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[node name="line1" type="Line2D" parent="."]
|
||||
position = Vector2(936, 1128)
|
||||
points = PackedVector2Array(-8, 0, 608, 0)
|
||||
width = 2.0
|
||||
default_color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[node name="line2" type="Line2D" parent="."]
|
||||
position = Vector2(32, 1128)
|
||||
points = PackedVector2Array(-8, 0, 608, 0)
|
||||
width = 2.0
|
||||
default_color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[connection signal="toggled" from="pribor_uf" to="pribor_uf" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_rtr" to="pribor_rtr" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_afsp_1" to="pribor_afsp_1" method="_on_toggled"]
|
||||
|
||||
@@ -1 +1 @@
|
||||
uid://cwurf51vh7ylm
|
||||
uid://blnakmwyvinxm
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=12 format=3 uid="uid://btpc78gucr57f"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cwurf51vh7ylm" path="res://scenes/контроль/элемент-я.gd" id="1_fwxi0"]
|
||||
[ext_resource type="Script" uid="uid://blnakmwyvinxm" path="res://scenes/контроль/элемент-я.gd" id="1_ajips"]
|
||||
[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="3_dktys"]
|
||||
[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="3_t4y6r"]
|
||||
[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="4_bdhnj"]
|
||||
@@ -48,7 +48,7 @@ layout_mode = 3
|
||||
anchors_preset = 0
|
||||
offset_right = 180.0
|
||||
offset_bottom = 155.0
|
||||
script = ExtResource("1_fwxi0")
|
||||
script = ExtResource("1_ajips")
|
||||
textures = [ExtResource("3_dktys"), ExtResource("3_t4y6r"), ExtResource("4_bdhnj")]
|
||||
|
||||
[node name="rect" type="NinePatchRect" parent="."]
|
||||
|
||||
@@ -1,269 +0,0 @@
|
||||
class_name setting extends Panel
|
||||
|
||||
const TableHeader = preload('res://table/header.tscn')
|
||||
const TableToggle = preload('res://table/settings-toggle.tscn')
|
||||
const TableEdit = preload('res://table/ячейка-2.tscn')
|
||||
|
||||
const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
const HEADER_ROW = [TableHeader, TableHeader]
|
||||
const HEADER_ROW_TEXT = ['Параметр', 'Значение']
|
||||
const SETTING_TABLE = [
|
||||
['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'],
|
||||
['Кнопка «ПД-М4»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «К1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «СВ-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'],
|
||||
['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'],
|
||||
['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \"ЭМС-2\"'],
|
||||
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'],
|
||||
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'],
|
||||
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'],
|
||||
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ'],
|
||||
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'],
|
||||
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'],
|
||||
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'],
|
||||
['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'],
|
||||
['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'],
|
||||
['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'],
|
||||
['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'],
|
||||
['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'],
|
||||
['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'],
|
||||
['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'],
|
||||
['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'],
|
||||
['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'],
|
||||
['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'],
|
||||
['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'],
|
||||
['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'],
|
||||
['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'],
|
||||
['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'],
|
||||
['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'],
|
||||
['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \"{x}\", \"{y}\", \"{z}\" для подстановки индекса плитки'],
|
||||
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
|
||||
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'] ]
|
||||
|
||||
const EXTERNAL_CU = 16 ## Внешнее целееуказание
|
||||
const SUPPRESS = 17 ## Строка - Подавление
|
||||
const KEYBOARD = 18 ## Строка - Виртуальная клавиатура
|
||||
const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2
|
||||
const COMMIT = 20 ## Строка - Версия УАРЭП
|
||||
|
||||
var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки
|
||||
|
||||
func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row)
|
||||
|
||||
|
||||
## Вызывается, когда узел впервые попадает в дерево сцены.
|
||||
func _ready() -> void:
|
||||
setting_tab()
|
||||
if not OS.get_cmdline_args().has('++ограниченный'):
|
||||
return
|
||||
$Label2.text = 'Текущий режим доступа: ограниченный'
|
||||
for node in $GridContainer.get_children().filter(func(b): return b is Button):
|
||||
node.disabled = true
|
||||
|
||||
|
||||
func on_external_cu_btn_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
ProjectSettings.set_setting('application/config/Внешнее управление', state)
|
||||
if state:
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
|
||||
|
||||
func on_vk_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
signaller.emit_signal('kb_pressed', state)
|
||||
|
||||
|
||||
func on_ems2_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
signaller.emit_signal('ems2_hide_pressed', state)
|
||||
|
||||
|
||||
func on_row_pressed(i_row: int):
|
||||
$scroll_set/table.clear_rows_selected()
|
||||
$scroll_set/table.set_row_selected(i_row, true)
|
||||
|
||||
|
||||
func parse_cmd_line_args(settings_data: Dictionary):
|
||||
var args = OS.get_cmdline_args()
|
||||
for i in range(0, args.size(), 2):
|
||||
var key: String = args[i]
|
||||
key = key.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes()
|
||||
if not settings_data.has(key):
|
||||
continue
|
||||
if not ((i + 1) < args.size()):
|
||||
push_error('для аргумента \"%s\" не указано значение.' % key)
|
||||
break
|
||||
var val0 = args[i + 1]
|
||||
var val1 = settings_data[key]
|
||||
val0 = val0.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes()
|
||||
if typeof(val1) == TYPE_BOOL:
|
||||
if val0 not in ['yes', 'true', 'да', 'no', 'false', 'нет']:
|
||||
push_error('для аргумента \"%s\" указано неверное значение \"%s\".' % [key, val0])
|
||||
break
|
||||
settings_data[key] = true if val0 in ['yes', 'true', 'да'] else false
|
||||
elif typeof(val1) == TYPE_ARRAY:
|
||||
var val0s = val0.split(',')
|
||||
if val0s.size() != val1.size():
|
||||
push_error('для аргумента \"%s\" указано неверное значение \"%s\" (исходное: \"%s\").' % [key, val0, val1])
|
||||
break
|
||||
for j in val0s.size():
|
||||
var val: String = val0s[j]
|
||||
val = val.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes()
|
||||
if tools.type_is_num(val):
|
||||
val0s[j] = int(val)
|
||||
elif val in ['true', 'false']:
|
||||
val0s[j] = true if val == 'true' else false
|
||||
else:
|
||||
val0s[j] = val
|
||||
elif typeof(val1) == TYPE_STRING:
|
||||
settings_data[key] = val0
|
||||
|
||||
|
||||
## Загружает настройки из файла
|
||||
func load_settings(settings_data: Dictionary):
|
||||
var settings_file = settings.get_settings_file_path()
|
||||
var file = FileAccess.open(settings_file, FileAccess.READ)
|
||||
var abs_path = ProjectSettings.globalize_path(settings_file)
|
||||
if file:
|
||||
var read = file.get_as_text()
|
||||
file.close()
|
||||
var json_conv = JSON.new()
|
||||
if json_conv.parse(read) == OK:
|
||||
settings_data.merge(json_conv.get_data())
|
||||
else:
|
||||
log.warning('Не удалось разобрать \"%s\", будут использованы настройки по умолчанию' % abs_path)
|
||||
else:
|
||||
log.warning('Файл \"%s\" не найден, будут использованы настройки по умолчанию' % abs_path)
|
||||
|
||||
|
||||
func setting_tab():
|
||||
$heard_table.set_header(HEADER_ROW)
|
||||
$heard_table.set_header_text(HEADER_ROW_TEXT)
|
||||
$heard_table.set_columns_min_size([600, 950])
|
||||
$heard_table.set_columns_alignments(ALIGNMENT)
|
||||
var settings_data = {}
|
||||
load_settings(settings_data)
|
||||
parse_cmd_line_args(settings_data)
|
||||
for key in settings_data:
|
||||
ProjectSettings.set_setting('application/config/%s' % key, settings_data[key])
|
||||
for i in SETTING_TABLE.size():
|
||||
var tbl_row = SETTING_TABLE[i]
|
||||
var param_name = tbl_row[0]
|
||||
var node_label = tbl_row[1]
|
||||
var node_value = tbl_row[2]
|
||||
var tootip_text = tbl_row[3]
|
||||
name_to_line_index[param_name] = i
|
||||
$scroll_set/table.add_row([node_label, node_value])
|
||||
var label_instance = $scroll_set/table.get_node2(0, i)
|
||||
label_instance.text = param_name
|
||||
label_instance.tooltip_text = tootip_text
|
||||
$scroll_set/table.set_node_editable(0, i, false)
|
||||
var node_values = $scroll_set/table.get_node2(1, i).get_children()
|
||||
var edit_node = $scroll_set/table.get_node2(1, i)
|
||||
if node_values.size():
|
||||
var child = node_values[0]
|
||||
if child is CheckButton:
|
||||
child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i))
|
||||
var val = settings_data[param_name] if settings_data.has(param_name) else false
|
||||
child.set_pressed(val)
|
||||
else:
|
||||
if settings_data.has(param_name):
|
||||
var val = settings_data[param_name]
|
||||
if typeof(val) == TYPE_STRING:
|
||||
$scroll_set/table.get_node2(1, i).text = settings_data[param_name]
|
||||
if edit_node:
|
||||
if edit_node is LineEdit:
|
||||
$scroll_set/table.set_node_control(1, i, true)
|
||||
$scroll_set/table.set_node_editable(1, COMMIT, false)
|
||||
$scroll_set/table.set_columns_min_size([600, 950])
|
||||
$scroll_set/table.set_columns_alignments(ALIGNMENT)
|
||||
$scroll_set/table.connect('row_pressed', Callable(self, 'on_row_pressed'))
|
||||
var commit_instance = $scroll_set/table.get_node2(1, COMMIT)
|
||||
commit_instance.text = '%s' % commit.VCS_HEAD
|
||||
for i in SETTING_TABLE.size():
|
||||
var param_name = SETTING_TABLE[i][0]
|
||||
if not settings.UnitProfiles.has(param_name):
|
||||
continue
|
||||
var unit_data = settings.UnitProfiles[param_name]
|
||||
var profile = $scroll_set/table.get_node2(1, i)
|
||||
var joined_data = ''
|
||||
for j in unit_data[2].size():
|
||||
joined_data += str(unit_data[2][j])
|
||||
if j < unit_data[2].size() - 1:
|
||||
joined_data += ','
|
||||
profile.text = '%s : %s' % [str(unit_data[1]), joined_data]
|
||||
button_settings()
|
||||
|
||||
|
||||
func button_settings():
|
||||
var extern_cu_node = $scroll_set/table.get_node2(1, EXTERNAL_CU).get_children()[0]
|
||||
extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node))
|
||||
on_external_cu_btn_pressed(extern_cu_node)
|
||||
var vk_node = $scroll_set/table.get_node2(1, KEYBOARD).get_children()[0]
|
||||
vk_node.connect('pressed', on_vk_pressed.bind(vk_node))
|
||||
var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[0]
|
||||
ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node))
|
||||
ems2_hide_node.set_pressed(true)
|
||||
on_ems2_pressed(ems2_hide_node)
|
||||
|
||||
|
||||
func _on_btn_save_settings_pressed():
|
||||
var json_data = {}
|
||||
for i in SETTING_TABLE.size():
|
||||
var parameter = SETTING_TABLE[i][0]
|
||||
if parameter in settings.UnitProfiles:
|
||||
var profiles = $scroll_set/table.get_node2(1, i)
|
||||
var value = profiles.get_text()
|
||||
if parameter not in json_data:
|
||||
json_data[parameter] = []
|
||||
if value.find(':') != -1:
|
||||
var parts = value.split(':')
|
||||
var ip = parts[0].strip_edges()
|
||||
var ports = parts[1].split(',')
|
||||
json_data[parameter].append(ip)
|
||||
for port in ports:
|
||||
if port == 'true':
|
||||
json_data[parameter].append(true)
|
||||
elif port == 'false':
|
||||
json_data[parameter].append(false)
|
||||
else:
|
||||
port = port.strip_edges()
|
||||
if port.is_valid_int():
|
||||
port = int(port)
|
||||
json_data[parameter].append(port)
|
||||
else:
|
||||
var children = $scroll_set/table.get_node2(1, i).get_children()
|
||||
if len(children):
|
||||
var child = children[0]
|
||||
json_data[parameter] = child.is_pressed()
|
||||
else:
|
||||
var row = $scroll_set/table.get_row(i)
|
||||
json_data[parameter] = row[1].text
|
||||
for key in json_data:
|
||||
ProjectSettings.set_setting('application/config/%s' % key, json_data[key])
|
||||
var settings_file = settings.get_settings_file_path()
|
||||
var file = FileAccess.open(settings_file, FileAccess.WRITE)
|
||||
var abs_path = ProjectSettings.globalize_path(settings_file)
|
||||
if not file:
|
||||
log.error('Не удалось открыть файл для записи \"%s\"' % abs_path)
|
||||
return
|
||||
var json_string = JSON.stringify(json_data, ' ', true)
|
||||
if file.store_string(json_string):
|
||||
log.info('Настройки сохранены в файл \"%s\"' % abs_path)
|
||||
file.close()
|
||||
@@ -1 +0,0 @@
|
||||
uid://deq4pmm4iy6ip
|
||||
@@ -1,9 +1,266 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://bnptm4rlp60dq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://deq4pmm4iy6ip" path="res://scenes/настройки/настройки.gd" id="1_2l3rd"]
|
||||
[ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="2_6sx73"]
|
||||
[ext_resource type="Texture2D" uid="uid://csnts8f155sf7" path="res://data/save1.png" id="3_dbpks"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_fc87o"]
|
||||
script/source = "class_name configure extends Panel
|
||||
|
||||
const TableHeader = preload('res://table/header.tscn')
|
||||
const TableToggle = preload('res://table/settings-toggle.tscn')
|
||||
const TableEdit = preload('res://table/ячейка-2.tscn')
|
||||
|
||||
const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
const HEADER_ROW = [TableHeader, TableHeader]
|
||||
const HEADER_ROW_TEXT = ['Параметр', 'Значение']
|
||||
const SETTING_TABLE = [
|
||||
['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'],
|
||||
['Кнопка «ПД-М4»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «К1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «СВ-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'],
|
||||
['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
|
||||
['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'],
|
||||
['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \\\"ЭМС-2\\\"'],
|
||||
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'],
|
||||
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'],
|
||||
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'],
|
||||
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ'],
|
||||
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'],
|
||||
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'],
|
||||
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'],
|
||||
['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'],
|
||||
['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'],
|
||||
['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'],
|
||||
['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'],
|
||||
['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'],
|
||||
['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'],
|
||||
['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'],
|
||||
['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'],
|
||||
['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'],
|
||||
['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'],
|
||||
['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'],
|
||||
['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'],
|
||||
['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'],
|
||||
['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'],
|
||||
['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'],
|
||||
['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \\\"{x}\\\", \\\"{y}\\\", \\\"{z}\\\" для подстановки индекса плитки'],
|
||||
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
|
||||
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'] ]
|
||||
|
||||
const EXTERNAL_CU = 16 ## Внешнее целеуказание
|
||||
const SUPPRESS = 17 ## Строка - Подавление
|
||||
const KEYBOARD = 18 ## Строка - Виртуальная клавиатура
|
||||
const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2
|
||||
const COMMIT = 20 ## Строка - Версия УАРЭП
|
||||
|
||||
var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки
|
||||
|
||||
func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row)
|
||||
|
||||
|
||||
## Вызывается, когда узел впервые попадает в дерево сцены.
|
||||
func _ready() -> void:
|
||||
setting_tab()
|
||||
if not OS.get_cmdline_args().has('++ограниченный'):
|
||||
return
|
||||
$Label2.text = 'Текущий режим доступа: ограниченный'
|
||||
for node in $GridContainer.get_children().filter(func(b): return b is Button):
|
||||
node.disabled = true
|
||||
|
||||
|
||||
func on_external_cu_btn_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
ProjectSettings.set_setting('application/config/Внешнее управление', state)
|
||||
if state:
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
|
||||
|
||||
func on_vk_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
signaller.emit_signal('kb_pressed', state)
|
||||
|
||||
|
||||
func on_ems2_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
signaller.emit_signal('ems2_hide_pressed', state)
|
||||
|
||||
|
||||
func on_row_pressed(i_row: int):
|
||||
$scroll_set/table.clear_rows_selected()
|
||||
$scroll_set/table.set_row_selected(i_row, true)
|
||||
|
||||
|
||||
func parse_cmd_line_args(settings_data: Dictionary):
|
||||
var args = OS.get_cmdline_args()
|
||||
for i in range(0, args.size(), 2):
|
||||
var key: String = args[i]
|
||||
key = key.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
|
||||
if not settings_data.has(key):
|
||||
continue
|
||||
if not ((i + 1) < args.size()):
|
||||
push_error('для аргумента \\\"%s\\\" не указано значение.' % key)
|
||||
break
|
||||
var val0 = args[i + 1]
|
||||
var val1 = settings_data[key]
|
||||
val0 = val0.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
|
||||
if typeof(val1) == TYPE_BOOL:
|
||||
if val0 not in ['yes', 'true', 'да', 'no', 'false', 'нет']:
|
||||
push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\".' % [key, val0])
|
||||
break
|
||||
settings_data[key] = true if val0 in ['yes', 'true', 'да'] else false
|
||||
elif typeof(val1) == TYPE_ARRAY:
|
||||
var val0s = val0.split(',')
|
||||
if val0s.size() != val1.size():
|
||||
push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\" (исходное: \\\"%s\\\").' % [key, val0, val1])
|
||||
break
|
||||
for j in val0s.size():
|
||||
var val: String = val0s[j]
|
||||
val = val.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
|
||||
if tools.type_is_num(val):
|
||||
val0s[j] = int(val)
|
||||
elif val in ['true', 'false']:
|
||||
val0s[j] = true if val == 'true' else false
|
||||
else:
|
||||
val0s[j] = val
|
||||
elif typeof(val1) == TYPE_STRING:
|
||||
settings_data[key] = val0
|
||||
|
||||
|
||||
func setting_tab():
|
||||
$heard_table.set_header(HEADER_ROW)
|
||||
$heard_table.set_header_text(HEADER_ROW_TEXT)
|
||||
$heard_table.set_columns_min_size([600, 950])
|
||||
$heard_table.set_columns_alignments(ALIGNMENT)
|
||||
var settings_data = {}
|
||||
parse_cmd_line_args(settings_data)
|
||||
for key in settings_data:
|
||||
ProjectSettings.set_setting('application/config/%s' % key, settings_data[key])
|
||||
for i in SETTING_TABLE.size():
|
||||
var tbl_row = SETTING_TABLE[i]
|
||||
var param_name = tbl_row[0]
|
||||
var node_label = tbl_row[1]
|
||||
var node_value = tbl_row[2]
|
||||
var tootip_text = tbl_row[3]
|
||||
name_to_line_index[param_name] = i
|
||||
$scroll_set/table.add_row([node_label, node_value])
|
||||
var label_instance = $scroll_set/table.get_node2(0, i)
|
||||
label_instance.text = param_name
|
||||
label_instance.tooltip_text = tootip_text
|
||||
$scroll_set/table.set_node_editable(0, i, false)
|
||||
var node_values = $scroll_set/table.get_node2(1, i).get_children()
|
||||
var edit_node = $scroll_set/table.get_node2(1, i)
|
||||
if node_values.size():
|
||||
var child = node_values[0]
|
||||
if child is CheckButton:
|
||||
child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i))
|
||||
var val = settings_data[param_name] if settings_data.has(param_name) else false
|
||||
child.set_pressed(val)
|
||||
else:
|
||||
if settings_data.has(param_name):
|
||||
var val = settings_data[param_name]
|
||||
if typeof(val) == TYPE_STRING:
|
||||
$scroll_set/table.get_node2(1, i).text = settings_data[param_name]
|
||||
if edit_node:
|
||||
if edit_node is LineEdit:
|
||||
$scroll_set/table.set_node_control(1, i, true)
|
||||
$scroll_set/table.set_node_editable(1, COMMIT, false)
|
||||
$scroll_set/table.set_columns_min_size([600, 950])
|
||||
$scroll_set/table.set_columns_alignments(ALIGNMENT)
|
||||
$scroll_set/table.connect('row_pressed', Callable(self, 'on_row_pressed'))
|
||||
var commit_instance = $scroll_set/table.get_node2(1, COMMIT)
|
||||
commit_instance.text = '%s' % commit.VCS_HEAD
|
||||
for i in SETTING_TABLE.size():
|
||||
var param_name = SETTING_TABLE[i][0]
|
||||
var profile = $scroll_set/table.get_node2(1, i)
|
||||
if settings.UnitProfiles.has(param_name):
|
||||
var unit_data = settings.UnitProfiles[param_name][1]
|
||||
profile.text = ''
|
||||
for val in unit_data:
|
||||
profile.text += str(val) + ','
|
||||
profile.text = profile.text.trim_suffix(',')
|
||||
continue
|
||||
var psk = 'application/config/%s' % param_name
|
||||
if ProjectSettings.has_setting(psk):
|
||||
var unit_data = ProjectSettings.get_setting(psk)
|
||||
if is_instance_of(unit_data, TYPE_STRING):
|
||||
profile.text = unit_data
|
||||
button_settings()
|
||||
|
||||
|
||||
func button_settings():
|
||||
var extern_cu_node = $scroll_set/table.get_node2(1, EXTERNAL_CU).get_children()[0]
|
||||
extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node))
|
||||
on_external_cu_btn_pressed(extern_cu_node)
|
||||
var vk_node = $scroll_set/table.get_node2(1, KEYBOARD).get_children()[0]
|
||||
vk_node.connect('pressed', on_vk_pressed.bind(vk_node))
|
||||
var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[0]
|
||||
ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node))
|
||||
ems2_hide_node.set_pressed(true)
|
||||
on_ems2_pressed(ems2_hide_node)
|
||||
|
||||
|
||||
func _on_btn_save_settings_pressed():
|
||||
var json_data = {}
|
||||
for i in SETTING_TABLE.size():
|
||||
var parameter = SETTING_TABLE[i][0]
|
||||
if parameter in settings.UnitProfiles:
|
||||
var ref_profile = settings.UnitProfiles[parameter][1]
|
||||
var profiles = $scroll_set/table.get_node2(1, i)
|
||||
var value = profiles.get_text()
|
||||
if parameter not in json_data:
|
||||
var row: = []
|
||||
for token in value.split(','):
|
||||
var j: = row.size()
|
||||
if token.is_valid_int():
|
||||
token = int(token)
|
||||
elif token == 'false':
|
||||
token = false
|
||||
elif token == 'true':
|
||||
token = true
|
||||
if typeof(ref_profile[j]) == typeof(token):
|
||||
row.append(token)
|
||||
else:
|
||||
# TODO: Это надо вывести на экран пользователю
|
||||
push_error([parameter, j, type_string(typeof(ref_profile[j])), type_string(typeof(token))])
|
||||
row.append(ref_profile[j])
|
||||
json_data[parameter] = row
|
||||
else:
|
||||
var children = $scroll_set/table.get_node2(1, i).get_children()
|
||||
if len(children):
|
||||
var child = children[0]
|
||||
json_data[parameter] = child.is_pressed()
|
||||
else:
|
||||
var row = $scroll_set/table.get_row(i)
|
||||
json_data[parameter] = row[1].text
|
||||
for key in json_data:
|
||||
ProjectSettings.set_setting('application/config/%s' % key, json_data[key])
|
||||
var settings_file: = settings.get_settings_file_path()
|
||||
var file: = FileAccess.open(settings_file, FileAccess.WRITE)
|
||||
var abs_path: = ProjectSettings.globalize_path(settings_file)
|
||||
if not file:
|
||||
log.error('Не удалось открыть файл для записи \\\"%s\\\"' % abs_path)
|
||||
return
|
||||
var json_string: = JSON.stringify(json_data, ' ', true)
|
||||
if file.store_string(json_string):
|
||||
log.info('Настройки сохранены в файл \\\"%s\\\"' % abs_path)
|
||||
file.close()
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_pyq6h"]
|
||||
texture = ExtResource("3_dbpks")
|
||||
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
|
||||
@@ -18,7 +275,7 @@ modulate_color = Color(0.8, 0.533333, 0.27451, 1)
|
||||
texture = ExtResource("3_dbpks")
|
||||
|
||||
[node name="Настройки" type="Panel"]
|
||||
script = ExtResource("1_2l3rd")
|
||||
script = SubResource("GDScript_fc87o")
|
||||
|
||||
[node name="heard_table" type="GridContainer" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -39,7 +296,7 @@ offset_bottom = 988.0
|
||||
layout_mode = 2
|
||||
script = ExtResource("2_6sx73")
|
||||
|
||||
[node name="btn_save_settings" type="Button" parent="."]
|
||||
[node name="btn_save" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1523.0
|
||||
offset_top = 1057.0
|
||||
@@ -55,4 +312,4 @@ theme_override_styles/hover = SubResource("StyleBoxTexture_pyq6h")
|
||||
theme_override_styles/pressed = SubResource("StyleBoxTexture_l5g3r")
|
||||
theme_override_styles/normal = SubResource("StyleBoxTexture_tbxk6")
|
||||
|
||||
[connection signal="pressed" from="btn_save_settings" to="." method="_on_btn_save_settings_pressed"]
|
||||
[connection signal="pressed" from="btn_save" to="." method="_on_btn_save_settings_pressed"]
|
||||
|
||||
@@ -14,6 +14,7 @@ class CapsRpb extends unit.Unit:
|
||||
var json_dic: Dictionary
|
||||
var tick: = 0 ## Тик время последнего обновления, мс.
|
||||
var tx_stack: Array ## Массив пакетов для отправки.
|
||||
var source_addr: Array ## Адрес отправителя данных
|
||||
|
||||
func _to_string() -> String: return String('CapsRpb(\"%s\")' % self.name)
|
||||
func _init(nm): self.name = nm
|
||||
@@ -23,7 +24,7 @@ class CapsRpb extends unit.Unit:
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
var utf8_data = data.get_string_from_utf8()
|
||||
var utf8_data: = data.get_string_from_utf8()
|
||||
if Error.OK == json_conv.parse(utf8_data):
|
||||
json_dic.merge(json_conv.get_data(), true)
|
||||
emit_signal('data_received', self)
|
||||
|
||||
@@ -249,6 +249,9 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void:
|
||||
if not (dic_msvk is Dictionary): continue
|
||||
if dic_msvk.has('ispp'):
|
||||
var ispp = int(dic_msvk['ispp'])
|
||||
var errmsg = dic_msvk.get('errmsg', '')
|
||||
if errmsg:
|
||||
log.error('сеанс %d: \"%s\"' % [ispp, errmsg])
|
||||
if ecms.has(ispp):
|
||||
var ecm = ecms[ispp]
|
||||
ecm.set_from_dic(dic_msvk)
|
||||
|
||||
@@ -1,23 +1,74 @@
|
||||
class_name Network extends Node
|
||||
|
||||
const UDPTX_PROTO: = {'yau07tx': yau07.YaU07}
|
||||
const UDPJSON_PROTO: = {'json-capsrpb': capsrpb.CapsRpb}
|
||||
const YAU07_PROTO: = {'yau07tx': yau07.YaU07}
|
||||
const UDP_PROTO: = {'capsrpb': capsrpb.CapsRpb, 'trassa': trassa.Trassa}
|
||||
const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28}
|
||||
const SERIAL_PROTO: = {'uart': spt25.SPT25}
|
||||
const SERIAL_PROTO: = {'spt25': spt25.SPT25}
|
||||
const MODBUS_PROTO: = {'mbcs': sch3.Sch3}
|
||||
const UDPRX_PROTO: = {'udprx': navi.NaviSource}
|
||||
const NAVI_PROTO: = {'navi': navi.NaviSource}
|
||||
|
||||
var tick: int = 0
|
||||
|
||||
|
||||
class Serial extends SerialPort:
|
||||
func send_to(data: PackedByteArray): return write_raw(data)
|
||||
class SocketSerial extends SerialPort:
|
||||
const P_DIV: = 0x8408
|
||||
const FLAG: = 0x7e
|
||||
const FLAG_MASK: = 0x20
|
||||
const FSC_MASK: = 0x8000
|
||||
const parity_code = {
|
||||
'N': SerialPort.PARITY_NONE,
|
||||
'E': SerialPort.PARITY_EVEN,
|
||||
'O': SerialPort.PARITY_ODD }
|
||||
|
||||
var tx_buffer: PackedByteArray
|
||||
|
||||
func _init() -> void:
|
||||
tx_buffer.resize(256)
|
||||
|
||||
func send_to(data: PackedByteArray):
|
||||
tx_buffer[0] = 0x7e
|
||||
var i: = 1
|
||||
for v in data:
|
||||
if v != 0x7e:
|
||||
tx_buffer[i] = v
|
||||
i += 1
|
||||
else:
|
||||
tx_buffer[i] = FLAG
|
||||
i += 1
|
||||
tx_buffer[i] = FLAG ^ FLAG_MASK
|
||||
i += 1
|
||||
var v_sum: = get_check_sum(data)
|
||||
tx_buffer.encode_u16(i, v_sum)
|
||||
i += 2
|
||||
tx_buffer[i] = FLAG
|
||||
i += 1
|
||||
# Эта последовательность для запроса состояния, получена от разработчиков СПТ-25
|
||||
const tx_tula = [0x7e, 0x01, 0x04, 0xbb, 0x50, 0x7e]
|
||||
write_raw(tx_tula)
|
||||
|
||||
func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт']
|
||||
|
||||
func get_check_sum(src: PackedByteArray) -> int:
|
||||
var fcs: = (~((src[1] << 8) + src[0])) & 0xffff
|
||||
for i: int in range(2, src.size()):
|
||||
var chr: = src[i]
|
||||
for j: int in 8:
|
||||
if chr & 1:
|
||||
if fcs & 1:
|
||||
fcs = ((fcs >> 1) | FSC_MASK) ^ P_DIV
|
||||
else:
|
||||
fcs = ((fcs >> 1) | FSC_MASK)
|
||||
else:
|
||||
fcs = (fcs >> 1) ^ P_DIV if fcs & 1 else fcs >> 1
|
||||
chr >>= 1
|
||||
for j: int in 16:
|
||||
fcs = (fcs >> 1) ^ P_DIV if fcs & 1 else fcs >> 1
|
||||
return (~fcs) & 0xffff
|
||||
|
||||
func try_open(parsing_proc: Callable):
|
||||
if is_open():
|
||||
return Error.OK
|
||||
var rc = open(port)
|
||||
var rc: = open(port)
|
||||
if rc == Error.OK:
|
||||
data_received.connect(parsing_proc)
|
||||
start_monitoring(timeout)
|
||||
@@ -63,17 +114,15 @@ class SocketTCP extends TCPServer:
|
||||
var poll_sockets: Array[SocketUDP] ## Сокеты для непрерывного опроса наличия новых данных
|
||||
var tcp_sockets: Array[Array] ## Сокеты для TCP-соединений
|
||||
var units: Dictionary[StringName, unit.Unit] ## Экземпляры всех сетевых устройств
|
||||
var units_udp: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с udp-соединением которым нужно передавать данные
|
||||
var units_udptx: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с udp-соединением которым нужно передавать данные
|
||||
var units_udprx: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с udp-соединением от которых приходят данные
|
||||
var units_tcp: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с tcp-соединением
|
||||
var units_serial: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с uart-соединением
|
||||
var units_modbus: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с modbusserial-соединением
|
||||
var serials: Dictionary[StringName, Serial] ## Последовательные порты (uart)
|
||||
var serials: Dictionary[StringName, SocketSerial] ## Последовательные порты (uart)
|
||||
var dst_ports: Dictionary[StringName, int] ## Преобразование имя устройства в порт назначения
|
||||
var dst_addrs: Dictionary[StringName, StringName] ## Преобразование имя устройства в адрес назначения
|
||||
var unit_keys: Dictionary[int, StringName] ## Преобразование порта назначения в имя устройства
|
||||
var sock_unicast: SocketUDP ## Сокет для приёма широковещательных сообщений от ЯУ-07
|
||||
var sock_capsrpb: SocketUDP ## Сокет для приёма сообщений от КАСПРПБ
|
||||
var port_to_unit_name: Dictionary[int, StringName] ## Преобразование порта назначения в имя устройства
|
||||
var logger_page: Node ## Ссылка на журнал работы
|
||||
var send_sockets: Dictionary[StringName, SocketUDP] ## Таблица <имяустройста>: <сокет> для отправки сообщений
|
||||
var addr_port_to_unit_name: Dictionary[StringName, StringName] ## Преобразование адрес:порт в имя устройства
|
||||
@@ -84,22 +133,41 @@ func on_serial_data(data, unit): unit.parse(data, tick)
|
||||
|
||||
## [param unit_name] - Уникальное имя устройства[br]
|
||||
func create_socket_udp(unit_name: StringName) -> SocketUDP:
|
||||
var addr = settings.UnitProfiles[unit_name][1]
|
||||
var port = settings.UnitProfiles[unit_name][2][0]
|
||||
var broad = settings.UnitProfiles[unit_name][3]
|
||||
var bind = settings.UnitProfiles[unit_name][4]
|
||||
var st = settings.UnitProfiles[unit_name][1]
|
||||
var addr = st[0]
|
||||
var port = st[1]
|
||||
var broad = st[2]
|
||||
var bind = st[3]
|
||||
var sock: = SocketUDP.new()
|
||||
sock.set_broadcast_enabled(broad)
|
||||
var rc = Error.OK if not bind else sock.bind(port, addr)
|
||||
var errlevel = log.INFO if rc == Error.OK else log.ERROR
|
||||
log.message(errlevel, '\"%s\" привязан к %s:%d? - %s, результат: %s' % [unit_name, addr, port, ['нет', 'да'][int(bind)], error_string(rc)])
|
||||
var rc: = sock.bind(port, addr)
|
||||
if rc == Error.OK:
|
||||
log.info('\"%s\" привязан к %s:%d' % [unit_name, addr, port])
|
||||
else:
|
||||
var errmsg: = error_string(rc)
|
||||
log.error('привязка \"%s\" к %s:%d не удалась: \"%s\"' % [unit_name, addr, port, errmsg])
|
||||
return sock
|
||||
|
||||
|
||||
func create_socket_caps(unit_name: StringName) -> SocketUDP:
|
||||
var st = settings.UnitProfiles[unit_name][1]
|
||||
var addr = st[0]
|
||||
var port = st[1]
|
||||
var sock: = SocketUDP.new()
|
||||
var rc: = sock.bind(port, addr)
|
||||
if rc == Error.OK:
|
||||
log.info('\"%s\" привязан к %s:%d' % [unit_name, addr, port])
|
||||
else:
|
||||
var errmsg = error_string(rc)
|
||||
log.error('привязка \"%s\" к %s:%d не удалась: \"%s\"' % [unit_name, addr, port, errmsg])
|
||||
return sock
|
||||
|
||||
|
||||
## [param unit_name] - Уникальное имя устройства[br]
|
||||
func create_socket_tcp(unit_name: StringName) -> SocketTCP:
|
||||
var addr = settings.UnitProfiles[unit_name][1]
|
||||
var port = settings.UnitProfiles[unit_name][2][0]
|
||||
var st = settings.UnitProfiles[unit_name][1]
|
||||
var addr = st[0]
|
||||
var port = st[1]
|
||||
var sock: = SocketTCP.new()
|
||||
sock.unit_name = unit_name
|
||||
var rc: = sock.listen(port, addr)
|
||||
@@ -111,13 +179,15 @@ func create_socket_tcp(unit_name: StringName) -> SocketTCP:
|
||||
|
||||
|
||||
## [param unit_name] - Уникальное имя устройства[br]
|
||||
func create_serial(unit_name: StringName) -> Serial:
|
||||
var port = settings.UnitProfiles[unit_name][1]
|
||||
var baud = settings.UnitProfiles[unit_name][2][0]
|
||||
var serial: = Serial.new()
|
||||
serial.port = port
|
||||
serial.baudrate = baud
|
||||
func create_serial(unit_name: StringName) -> SocketSerial:
|
||||
var st = settings.UnitProfiles[unit_name][1]
|
||||
var serial: = SocketSerial.new()
|
||||
serial.port = st[0]
|
||||
serial.baudrate = st[2]
|
||||
serial.parity = SocketSerial.parity_code.get(st[3], SocketSerial.PARITY_NONE)
|
||||
serial.timeout = 20000
|
||||
serial.bytesize = st[4]
|
||||
serial.stopbits = st[5]
|
||||
return serial
|
||||
|
||||
|
||||
@@ -128,16 +198,16 @@ func create_modbus(unit_name: StringName) -> sch_3.Sch3:
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
poll_sockets.append(create_socket_udp('уарэп-яу07-частный'))
|
||||
poll_sockets.append(create_socket_udp('уарэп-яу07-общий'))
|
||||
poll_sockets.append(create_socket_udp('уарэп-капсрпб'))
|
||||
poll_sockets.append(create_socket_udp('навигация'))
|
||||
sock_unicast = poll_sockets[0]
|
||||
sock_capsrpb = poll_sockets[2]
|
||||
|
||||
var sock_unicast: = create_socket_udp('уарэп-яу07-частный')
|
||||
var sock_broadcast: = create_socket_udp('уарэп-яу07-общий')
|
||||
var sock_navi: = create_socket_udp('навигация')
|
||||
var sock_caps: = create_socket_caps('уарэп-капсрпб')
|
||||
var sock_trassa: = create_socket_caps('уарэп-трасса')
|
||||
poll_sockets = [sock_unicast, sock_broadcast, sock_caps, sock_navi, sock_trassa]
|
||||
send_sockets['уарэп-яу07-частный'] = sock_unicast
|
||||
send_sockets['уарэп-яу07-общий'] = poll_sockets[1]
|
||||
send_sockets['уарэп-капсрпб'] = sock_capsrpb
|
||||
send_sockets['уарэп-яу07-общий'] = sock_broadcast
|
||||
send_sockets['уарэп-капсрпб'] = sock_caps
|
||||
send_sockets['уарэп-трасса'] = sock_trassa
|
||||
send_sockets['уарэп-эмс'] = sock_unicast
|
||||
send_sockets['уарэп-яу07-2в'] = sock_unicast
|
||||
send_sockets['уарэп-яу07-2н'] = sock_unicast
|
||||
@@ -156,28 +226,30 @@ func _ready() -> void:
|
||||
var bind_modbuses: = []
|
||||
|
||||
for unit_name in settings.UnitProfiles:
|
||||
var unit_profile = settings.UnitProfiles[unit_name]
|
||||
var proto = unit_profile[0]
|
||||
var unit_profile = settings.UnitProfiles[unit_name][1]
|
||||
var proto = settings.UnitProfiles[unit_name][0]
|
||||
|
||||
if proto in UDPRX_PROTO:
|
||||
var new_unit = UDPRX_PROTO[proto].new(unit_name)
|
||||
if proto in NAVI_PROTO:
|
||||
var new_unit = NAVI_PROTO[proto].new(unit_name)
|
||||
units[unit_name] = new_unit
|
||||
units_udprx[unit_name] = new_unit
|
||||
dst_ports[unit_name] = unit_profile[2][0]
|
||||
dst_ports[unit_name] = unit_profile[1]
|
||||
|
||||
if proto in UDPTX_PROTO:
|
||||
var new_unit = UDPTX_PROTO[proto].new(unit_name)
|
||||
if proto in YAU07_PROTO:
|
||||
var new_unit = YAU07_PROTO[proto].new(unit_name)
|
||||
units[unit_name] = new_unit
|
||||
units_udp[unit_name] = new_unit
|
||||
dst_ports[unit_name] = unit_profile[2][0]
|
||||
dst_addrs[unit_name] = unit_profile[1]
|
||||
units_udptx[unit_name] = new_unit
|
||||
dst_addrs[unit_name] = unit_profile[0]
|
||||
dst_ports[unit_name] = unit_profile[1]
|
||||
var addr_port: = StringName('%s:%d' % [unit_profile[0], unit_profile[1]])
|
||||
addr_port_to_unit_name[addr_port] = unit_name
|
||||
|
||||
if proto in UDPJSON_PROTO:
|
||||
var new_unit = UDPJSON_PROTO[proto].new(unit_name)
|
||||
if proto in UDP_PROTO:
|
||||
var new_unit = UDP_PROTO[proto].new(unit_name)
|
||||
units[unit_name] = new_unit
|
||||
units_udp[unit_name] = new_unit
|
||||
dst_ports[unit_name] = unit_profile[2][1]
|
||||
dst_addrs[unit_name] = unit_profile[1]
|
||||
units_udptx[unit_name] = new_unit
|
||||
dst_addrs[unit_name] = unit_profile[0]
|
||||
dst_ports[unit_name] = unit_profile[2]
|
||||
|
||||
if proto in TCP_PROTO:
|
||||
var unit_tcp = TCP_PROTO[proto].new(unit_name)
|
||||
@@ -186,8 +258,8 @@ func _ready() -> void:
|
||||
|
||||
if proto in MODBUS_PROTO:
|
||||
var unit_modbus = MODBUS_PROTO[proto].new(unit_name)
|
||||
unit_modbus.port = unit_profile[1]
|
||||
unit_modbus.params = unit_profile[2]
|
||||
unit_modbus.port = unit_profile[0]
|
||||
unit_modbus.params = unit_profile.slice(1)
|
||||
units[unit_name] = unit_modbus
|
||||
units_modbus[unit_name] = unit_modbus
|
||||
bind_modbuses.append([unit_modbus, unit_name])
|
||||
@@ -198,23 +270,19 @@ func _ready() -> void:
|
||||
units_serial[unit_name] = unit_serial
|
||||
units[unit_name] = unit_serial
|
||||
serials[unit_name] = serial
|
||||
bind_serials.append([serial, unit_serial, unit_name])
|
||||
|
||||
ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_serial').bind(bind_serials))
|
||||
|
||||
tcp_sockets.append([create_socket_tcp('уарэп-5п28'), units_tcp['уарэп-5п28']])
|
||||
for key: StringName in dst_ports:
|
||||
unit_keys[dst_ports[key]] = key
|
||||
port_to_unit_name[dst_ports[key]] = key
|
||||
if logger_page:
|
||||
for key in units:
|
||||
var u = units[key]
|
||||
u.connect('line_changed', Callable(logger_page, 'on_line_changed'))
|
||||
u.connect('command_fail', Callable(logger_page, 'on_command_fail'))
|
||||
|
||||
for key in settings.UnitProfiles:
|
||||
var item = settings.UnitProfiles[key]
|
||||
var addr_port: = StringName('%s:%d' % [item[1], item[2][0]])
|
||||
addr_port_to_unit_name[addr_port] = StringName(key)
|
||||
|
||||
|
||||
func _on_settings_changed_modbus(bind_modbuses: Array):
|
||||
var _external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false)
|
||||
@@ -248,14 +316,14 @@ func poll_receive_udp(sock: SocketUDP) -> bool:
|
||||
var unit_name: = addr_port_to_unit_name[addr_port]
|
||||
units[unit_name].parse(data, tick)
|
||||
continue
|
||||
if unit_keys.has(port):
|
||||
var unit_name: = unit_keys[port]
|
||||
if port_to_unit_name.has(port):
|
||||
var unit_name: = port_to_unit_name[port]
|
||||
if units.has(unit_name):
|
||||
units[unit_name].parse(data, tick)
|
||||
continue
|
||||
var local_port: = sock.get_local_port()
|
||||
if unit_keys.has(local_port):
|
||||
var unit_name: = unit_keys[local_port]
|
||||
if port_to_unit_name.has(local_port):
|
||||
var unit_name: = port_to_unit_name[local_port]
|
||||
var unit_udprx: = units[unit_name]
|
||||
unit_udprx.source_addr = [addr, port]
|
||||
unit_udprx.parse(data, tick)
|
||||
@@ -267,7 +335,7 @@ func poll_receive_tcp(sock: SocketTCP) -> bool:
|
||||
if sock.is_connection_available(): # Проверить, если кто то пытается подключиться
|
||||
var client: = sock.take_connection() # Принять соединение
|
||||
sock.peerstream.set_stream_peer(client) # Привязать поток к новому клиенту
|
||||
log.info('подключен: %s:%d к порту: %d' % [ client.get_connected_host(), client.get_connected_port(), client.get_local_port() ] )
|
||||
log.info('подключен: %s:%d к порту: %d' % [ client.get_connected_host(), client.get_connected_port(), client.get_local_port() ])
|
||||
var peer = sock.peerstream.get_stream_peer()
|
||||
if peer:
|
||||
while true:
|
||||
@@ -315,11 +383,11 @@ func get_tcp_data(sock: SocketTCP, peer: StreamPeer, len_rx: int):
|
||||
func _process(_delta: float) -> void:
|
||||
tick = Time.get_ticks_msec()
|
||||
RenderingServer.global_shader_parameter_set('tick_curent', tick)
|
||||
for unit_name: StringName in units_udp:
|
||||
var unit_udp: = units_udp[unit_name]
|
||||
if Error.OK == unit_udp.process(tick):
|
||||
var sock: = send_sockets[unit_udp.name]
|
||||
var tx_data: = unit_udp.tx_data.slice(0, unit_udp.tx_len)
|
||||
for unit_name: StringName in units_udptx:
|
||||
var unit_udptx: = units_udptx[unit_name]
|
||||
if Error.OK == unit_udptx.process(tick):
|
||||
var sock: = send_sockets[unit_name]
|
||||
var tx_data: = unit_udptx.tx_data.slice(0, unit_udptx.tx_len)
|
||||
var dst_port: = dst_ports[unit_name]
|
||||
var dst_addr: = dst_addrs[unit_name]
|
||||
sock.send_to([dst_addr, dst_port], tx_data)
|
||||
|
||||
@@ -69,7 +69,7 @@ class TestPRD extends Node:
|
||||
var ems_6666_timer: Timer = Timer.new()
|
||||
signal control_is_over(control_results, power_result)
|
||||
|
||||
|
||||
|
||||
var ecms: Dictionary ## Словарь помеховых воздействий
|
||||
|
||||
## Инициализация аргуметнов
|
||||
@@ -139,14 +139,9 @@ class TestPRD extends Node:
|
||||
STATE_MASHINE.CHEK_KASSETA_Y5:
|
||||
if block_kasseta_y5_config['yau07']:
|
||||
state = STATE_MASHINE.WRITE_ISA
|
||||
else:
|
||||
print_debug('Яу-07Б: нет связи ', block_kasseta_y5_config)
|
||||
STATE_MASHINE.WRITE_ISA:
|
||||
_handle_ug_set_state(0x6)
|
||||
state = STATE_MASHINE.READ_ISA
|
||||
#STATE_MASHINE.IN_EMS_RUN:
|
||||
#ems_6666_timer.start()
|
||||
#state = STATE_MASHINE.READ_ISA
|
||||
STATE_MASHINE.READ_ISA:
|
||||
if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL):
|
||||
_handle_read_isa(module_prd, unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3])
|
||||
|
||||
@@ -15,7 +15,7 @@ class Sch3 extends unit.Unit:
|
||||
|
||||
var step_fsm: Sch3Fsm = Sch3Fsm.CONNECT
|
||||
var base_input_address: int = 0
|
||||
var regs_input_count: int = 0
|
||||
var regs_input_count: int = 5
|
||||
var base_holding_address: int = 0
|
||||
var regs_holding_count: int = 0
|
||||
var request_period: int = 300
|
||||
@@ -39,11 +39,11 @@ class Sch3 extends unit.Unit:
|
||||
var rc: = mbc.open(port, params[0], params[1], params[2], params[3], params[4])
|
||||
if rc != Error.OK: # TODO: убрать это отсюда (неуместный вывод сообщения)
|
||||
if not reconnect_failed:
|
||||
push_error('%s: невозможно открыть \"%s\" %s' % [name, port, params])
|
||||
log.error('%s: невозможно открыть \"%s\" %s' % [name, port, params])
|
||||
reconnect_failed = true
|
||||
return false
|
||||
if reconnect_failed: # TODO: убрать это отсюда (неуместный вывод сообщения)
|
||||
push_warning('%s: открыто после сбоя \"%s\" %s' % [name, port, params])
|
||||
log.warning('%s: открыто после сбоя \"%s\" %s' % [name, port, params])
|
||||
reconnect_failed = false
|
||||
mbc.set_response_timeout(params[5])
|
||||
mbc.thread_run()
|
||||
@@ -51,7 +51,7 @@ class Sch3 extends unit.Unit:
|
||||
|
||||
|
||||
func push_write_holding(regs: Dictionary):
|
||||
var keys = regs.keys()
|
||||
var keys: = regs.keys()
|
||||
keys.sort()
|
||||
var data: = []
|
||||
for k in keys:
|
||||
@@ -91,8 +91,8 @@ class Sch3 extends unit.Unit:
|
||||
signal error(msg: String) ## Вызывается при получении сообщения об исключительной ситуации.
|
||||
|
||||
|
||||
func _init(nm: String):
|
||||
name = nm
|
||||
func _init(unit_name: String):
|
||||
name = unit_name
|
||||
mbc.connect('read', on_read)
|
||||
mbc.connect('read_input', on_read_input)
|
||||
mbc.connect('write', on_write)
|
||||
|
||||
@@ -5,35 +5,36 @@ class_name uarep_settings extends Node
|
||||
|
||||
var settings_program: Dictionary
|
||||
|
||||
@export 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-адрес на котором принимают сообщения от КАПС РПБ'],
|
||||
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||
'уарэп-яу07-2в': ['yau07tx', '10.1.1.22', [50022], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-2н': ['yau07tx', '10.1.1.21', [50021], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-2к': ['yau07tx', '10.1.1.23', [50023], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-4в': ['yau07tx', '10.1.1.42', [50042], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-4н': ['yau07tx', '10.1.1.41', [50041], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-4к': ['yau07tx', '10.1.1.43', [50043], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-1в': ['yau07tx', '10.1.1.12', [50012], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-1н': ['yau07tx', '10.1.1.11', [50011], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-1к': ['yau07tx', '10.1.1.13', [50013], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-3в': ['yau07tx', '10.1.1.32', [50032], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-3н': ['yau07tx', '10.1.1.31', [50031], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'навигация': ['udprx','*', [60000], true, true, 'IP-адрес на котором принимают сообщения от навигации'],
|
||||
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', 42023, 42022, false, true], 'IP-адрес для обмена сообщениями со службой \"МП550\" (СТЦ)'],
|
||||
'уарэп-трасса': ['trassa', ['127.0.0.1', 50200, 50200, 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-адрес на котором принимают сообщения от навигации'],
|
||||
|
||||
# Название: [ Протокол, Адрес, Порт получения, Комментарий ]
|
||||
'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'],
|
||||
# < Название: Протокол, < Адрес, Порт получения >, Комментарий >
|
||||
'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'],
|
||||
|
||||
# Название: [ протокол, путь, [адрес modbus, скорость, чётность, бит на символ, стоп битов, время на ожидание ответа в мкс] комментарий ]
|
||||
'уарэп-щ3': ['mbcs', '/dev/ttyUSB0', [7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'],
|
||||
# < Название: Протокол, < Имя порта, Адрес modbus, Скорость, Чётность, Бит на символ, Стоп битов, Время на ожидание ответа в мкс >, Комментарий >
|
||||
'уарэп-щ3': ['mbcs', ['/dev/ttyUSB0', 7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'],
|
||||
|
||||
# Название: [ Протокол, Имя порта, Скорость, Чётность, ??, Комментарий
|
||||
'уарэп-спт25-1': ['uart', '/dev/ttyUSB1', [19200, false, false], 'Адрес прибора СПТ-25 (G1)'],
|
||||
'уарэп-спт25-2': ['uart', '/dev/ttyUSB2', [19200, false, false], 'Адрес прибора СПТ-25 (G2)'],
|
||||
# < Название: Протокол, < Имя порта, Адрес СПТ-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)'],
|
||||
}
|
||||
|
||||
## Параметры цели.
|
||||
@@ -56,54 +57,55 @@ func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var settings_file = get_settings_file_path()
|
||||
var abs_path = ProjectSettings.globalize_path(settings_file)
|
||||
var abs_path: = ProjectSettings.globalize_path(settings_file)
|
||||
log.info('Путь к файлу настроек: \"%s\"' % abs_path)
|
||||
var file = FileAccess.open(settings_file, FileAccess.READ)
|
||||
var file: = FileAccess.open(settings_file, FileAccess.READ)
|
||||
if not file:
|
||||
log.info('Не удалось открыть файл настроек, будут использованы настройики по умолчанию')
|
||||
log.error('Не удалось открыть файл настроек.')
|
||||
log.warning('Будут использованы настройики по умолчанию.')
|
||||
return
|
||||
var read = file.get_as_text()
|
||||
var read: = file.get_as_text()
|
||||
file.close()
|
||||
var json_conv: = JSON.new()
|
||||
if Error.OK != json_conv.parse(read):
|
||||
log.info('Не удалось разобрать файл настроек: ошибка в содержании, будут использованы настройики по умолчанию')
|
||||
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)
|
||||
for key in UnitProfiles.keys():
|
||||
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 temp_array = []
|
||||
var set_from_file = true
|
||||
if typeof(json_data[key][0]) == typeof(UnitProfiles[key][1]):
|
||||
temp_array.append(json_data[key][0])
|
||||
else:
|
||||
set_from_file = false
|
||||
if len(json_data[key]) < len(UnitProfiles[key][2]):
|
||||
log.info('Не удалось прочитать значение \"%s\", ошибка в содержании файла настроек' % key)
|
||||
var vj = json_data[key]
|
||||
var vp = UnitProfiles[key][1]
|
||||
if vp.size() != vj.size():
|
||||
log.error('Не удалось прочитать настройки для \"%s\"' % key)
|
||||
continue
|
||||
temp_array.append([])
|
||||
for i in len(json_data[key]) - 1:
|
||||
if tools.type_is_num(json_data[key][i+1]) and tools.type_is_num(UnitProfiles[key][2][i]):
|
||||
if typeof(UnitProfiles[key][2][i]) == TYPE_INT:
|
||||
temp_array[1].append(int(json_data[key][i+1]))
|
||||
elif typeof(UnitProfiles[key][2][i]) == TYPE_FLOAT:
|
||||
temp_array[1].append(float(json_data[key][i+1]))
|
||||
else:
|
||||
set_from_file = false
|
||||
elif typeof(json_data[key][i+1]) == typeof(UnitProfiles[key][2][i]):
|
||||
temp_array[1].append(json_data[key][i+1])
|
||||
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:
|
||||
set_from_file = false
|
||||
if set_from_file:
|
||||
UnitProfiles[key][1] = temp_array[0]
|
||||
UnitProfiles[key][2] = temp_array[1]
|
||||
else:
|
||||
log.info('Не удалось прочитать значение \"%s\" из файла настроек, будет использовано значение по умолчанию' % key)
|
||||
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():
|
||||
func get_settings_file_path() -> String:
|
||||
return ProjectSettings.get_setting(
|
||||
'application/config/settings_path',
|
||||
'user://settings.json')
|
||||
|
||||
@@ -41,15 +41,12 @@ class SPT25 extends unit.Unit:
|
||||
|
||||
func _init(nm) -> void:
|
||||
self.name = nm
|
||||
tx_data.resize(8)
|
||||
tx_data[0] = 0x7e # Флаги синхронизации пакета
|
||||
tx_data[1] = 0 # Адрес абонента, которому предназначен пакет
|
||||
tx_data[2] = CmdCode.INFO # Тип пакета, КОД КОМАНДЫ - Получить информацию о состоянии преобразователя
|
||||
tx_data.resize(5)
|
||||
tx_data[0] = 0 # Адрес абонента, которому предназначен пакет
|
||||
tx_data[1] = CmdCode.INFO # Тип пакета, КОД КОМАНДЫ - Получить информацию о состоянии преобразователя
|
||||
tx_data[2] = 0 # Данные
|
||||
tx_data[3] = 0 # Данные
|
||||
tx_data[4] = 0 # Данные
|
||||
tx_data[5] = 0 # Данные
|
||||
tx_data[6] = 0 # Контрольная сумма
|
||||
tx_data[7] = 0x7e # Флаги синхронизации пакета
|
||||
|
||||
|
||||
func parse(rx_data: PackedByteArray, tick: int):
|
||||
|
||||
@@ -29,6 +29,8 @@ func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
func is_overlap(x1, x2, y1, y2) -> bool: return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Закрывает программу если [param val] установлен в [b]false[/b][br]
|
||||
## [param msg] - сообщение об ошибке
|
||||
func allways(val: bool, msg: String = '<не указано>'):
|
||||
if val: return
|
||||
push_error('ошибка: %s\n' % msg)
|
||||
@@ -129,10 +131,12 @@ func get_members_names(obj: Object) -> Array:
|
||||
return names
|
||||
|
||||
|
||||
## Проверяет, что заданный массив [param val] похож на ip-адрес.
|
||||
## Проверяет, что заданный массив [param val] похож на ip-адрес,
|
||||
## в формате ['0.0.0.0', 1000]
|
||||
func is_array_ipaddr(val: Array):
|
||||
return (val.size() == 2) \
|
||||
and (val[0] is String) \
|
||||
and (val[0].split('.').size() == 4) \
|
||||
and (val[1] is int) \
|
||||
and (0 < val[1]) \
|
||||
and (val[1] < 65536)
|
||||
@@ -198,22 +202,22 @@ func fill_files_table(tbl: table, folder: String, rows_types: Array):
|
||||
if dir == null:
|
||||
return
|
||||
var exclude_names: = ['.', '..']
|
||||
dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
|
||||
dir.list_dir_begin() # TODO: GODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
|
||||
while true:
|
||||
var file: = dir.get_next()
|
||||
if file == '':
|
||||
break
|
||||
if file in exclude_names:
|
||||
continue
|
||||
var file_name = folder + file
|
||||
var fd = FileAccess.open(file_name, FileAccess.READ)
|
||||
var file_name: = folder + file
|
||||
var fd: = FileAccess.open(file_name, FileAccess.READ)
|
||||
if not fd:
|
||||
continue
|
||||
var glob_path = ProjectSettings.globalize_path(file_name)
|
||||
var sz = fd.get_length()
|
||||
var ut = FileAccess.get_modified_time(file_name)
|
||||
var glob_path: = ProjectSettings.globalize_path(file_name)
|
||||
var sz: = fd.get_length()
|
||||
var ut: = FileAccess.get_modified_time(file_name)
|
||||
fd.close()
|
||||
var mt = Time.get_datetime_dict_from_unix_time(ut)
|
||||
var mt: = Time.get_datetime_dict_from_unix_time(ut)
|
||||
var file_row = [file, '%d' % sz, '%d-%02d-%02d %02d:%02d' % [mt.year, mt.month, mt.day, mt.hour, mt.minute]]
|
||||
tbl.add_row(rows_types)
|
||||
var i_row: = tbl.get_rows_count() - 1
|
||||
|
||||
13
scripts/trassa.gd
Normal file
13
scripts/trassa.gd
Normal file
@@ -0,0 +1,13 @@
|
||||
class_name trassa_unit extends Node
|
||||
|
||||
|
||||
class Trassa extends unit.Unit:
|
||||
var source_addr: = []
|
||||
func process(tick: int):
|
||||
return Error.ERR_BUSY
|
||||
|
||||
func _init(unit_name: StringName):
|
||||
self.name = unit_name
|
||||
|
||||
func parse(data: PackedByteArray, now_tick: int):
|
||||
pass
|
||||
1
scripts/trassa.gd.uid
Normal file
1
scripts/trassa.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://s0xvnch1r63u
|
||||
160
settings.json
Normal file
160
settings.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"Адрес АФСП левого борта": "http://172.22.246.13:8081/selftest",
|
||||
"Адрес АФСП правого борта": "http://172.22.246.11:8082/selftest",
|
||||
"Адрес БПО левого борта": "http://172.22.246.13:8081/selftest",
|
||||
"Адрес БПО правого борта": "http://172.22.246.11:8082/selftest",
|
||||
"Виртуальная клавиатура": false,
|
||||
"Внешнее управление": false,
|
||||
"Кнопка «JTIDS»": false,
|
||||
"Кнопка «К1»": false,
|
||||
"Кнопка «КУПД»": false,
|
||||
"Кнопка «ЛЧМ-1»": false,
|
||||
"Кнопка «МЧМ-1»": false,
|
||||
"Кнопка «ОЗП-1»": false,
|
||||
"Кнопка «ОРН-И1»": false,
|
||||
"Кнопка «ОРН-М2»": false,
|
||||
"Кнопка «ОРН»": false,
|
||||
"Кнопка «ПД-М2»": false,
|
||||
"Кнопка «ПД-М4»": false,
|
||||
"Кнопка «ПД-М4С»": false,
|
||||
"Кнопка «ПД-ЧМ»": false,
|
||||
"Кнопка «Подавление»": false,
|
||||
"Кнопка «СВ-И1»": false,
|
||||
"Кнопка «СВ-М2»": false,
|
||||
"Ограниченный режим": false,
|
||||
"Скрыть вкладку ЭМС 2": true,
|
||||
"Текущая версия ПО УАРЭП": "HEAD 48353cc Fri Sep 5 14:44:15 2025 +0300",
|
||||
"Шаблон адреса сервера карт": "http://169.254.27.71:8001/osm_tiles/{z}/{x}/{y}.png",
|
||||
"навигация": [
|
||||
"*",
|
||||
60000,
|
||||
true,
|
||||
true
|
||||
],
|
||||
"уарэп-5п28": [
|
||||
"127.0.0.1",
|
||||
50000
|
||||
],
|
||||
"уарэп-капсрпб": [
|
||||
"127.0.0.1",
|
||||
42023,
|
||||
42022,
|
||||
false,
|
||||
true
|
||||
],
|
||||
"уарэп-спт25-1": [
|
||||
"/dev/ttyUSB1",
|
||||
0,
|
||||
19200,
|
||||
"N",
|
||||
8,
|
||||
1
|
||||
],
|
||||
"уарэп-спт25-2": [
|
||||
"/dev/ttyUSB2",
|
||||
0,
|
||||
19200,
|
||||
"N",
|
||||
8,
|
||||
1
|
||||
],
|
||||
"уарэп-щ3": [
|
||||
"/dev/ttyUSB0",
|
||||
7,
|
||||
19200,
|
||||
"N",
|
||||
8,
|
||||
1,
|
||||
50000
|
||||
],
|
||||
"уарэп-эмс": [
|
||||
"10.1.1.52",
|
||||
50052,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-1в": [
|
||||
"10.1.1.12",
|
||||
50012,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-1к": [
|
||||
"10.1.1.13",
|
||||
50013,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-1н": [
|
||||
"10.1.1.11",
|
||||
50011,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-2в": [
|
||||
"10.1.1.22",
|
||||
50022,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-2к": [
|
||||
"10.1.1.23",
|
||||
50023,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-2н": [
|
||||
"10.1.1.21",
|
||||
50021,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-3в": [
|
||||
"10.1.1.32",
|
||||
50032,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-3к": [
|
||||
"10.1.1.33",
|
||||
50033,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-3н": [
|
||||
"10.1.1.31",
|
||||
50031,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-4в": [
|
||||
"10.1.1.42",
|
||||
50042,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-4к": [
|
||||
"10.1.1.43",
|
||||
50043,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-4н": [
|
||||
"10.1.1.41",
|
||||
50041,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"уарэп-яу07-общий": [
|
||||
"*",
|
||||
50000,
|
||||
true,
|
||||
true
|
||||
],
|
||||
"уарэп-яу07-частный": [
|
||||
"10.1.1.2",
|
||||
50002,
|
||||
false,
|
||||
true
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user