Merge branch 'lepshiy-master'
# Conflicts: # scenes/frame-ecm-list/frm-ecm-list.gd # scripts/signaller.gd
This commit is contained in:
@@ -38,6 +38,8 @@ config/unit_rr_left_bort="http://127.0.0.1:8080/reports/left_SelfTestReport.json
|
||||
config/unit_rr_right_bort="http://127.0.0.1:8080/reports/right_SelfTestReport.json"
|
||||
config/unit_rr_request_period=5.0
|
||||
config/kems_files_path="user://kems/"
|
||||
config/emsg_files_path="user://emsg/"
|
||||
config/settings_path="user://settings.json"
|
||||
|
||||
[autoload]
|
||||
|
||||
@@ -55,12 +57,14 @@ threats="*res://scripts/threats.gd"
|
||||
yemsdevs="*res://scripts/yems-devs.gd"
|
||||
yemsboards="*res://scripts/yems-boards.gd"
|
||||
yemsconsts="*res://scripts/yems-consts.gd"
|
||||
yemsg="*res://scripts/yems-g.gd"
|
||||
interfer="*res://scripts/interfer.gd"
|
||||
hotkeys="*res://scripts/hotkeys.gd"
|
||||
mercator="*res://scripts/mercator.gd"
|
||||
tcp5p28="*res://scripts/tcp5p28.gd"
|
||||
sch3="*res://scripts/sch3.gd"
|
||||
spt25="*res://scripts/spt25.gd"
|
||||
astrakb="*res://scripts/astra_kb.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
@@ -81,6 +85,7 @@ gdscript/warnings/integer_division=0
|
||||
|
||||
window/size/viewport_width=1600
|
||||
window/size/viewport_height=1200
|
||||
window/size/mode=3
|
||||
window/subwindows/embed_subwindows=false
|
||||
window/stretch/mode="canvas_items"
|
||||
|
||||
|
||||
@@ -2,12 +2,13 @@ class_name frm_ecm_list extends NinePatchRect
|
||||
|
||||
|
||||
const srn_sectors: Dictionary = {
|
||||
'srni1': [4, 5, 6, 7, 8, 9, 10, 11] }
|
||||
'srni1': [12, 13, 14, 15, 16, 17, 18, 19] }
|
||||
|
||||
const jtids_sectors: Dictionary = {
|
||||
'svi1': [12, 13, 14, 15, 16, 17, 18, 19] }
|
||||
'svi1': [4, 5, 6, 7, 8, 9, 10, 11] }
|
||||
|
||||
const kupd_sectors: Dictionary = {}
|
||||
const kupd_sectors: Dictionary = {
|
||||
'lchm1': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, 24, 25, 26, 27] }
|
||||
|
||||
const panika_sectors: Dictionary = {
|
||||
'lchm1': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, 24, 25, 26, 27],
|
||||
@@ -25,7 +26,7 @@ func on_btn_cancel_pressed(btn, nodes):
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
btn.pressed = false
|
||||
nodes.any(func(b): b.pressed = false)
|
||||
nodes.any(func(btn_node): btn_node.pressed = false)
|
||||
|
||||
|
||||
func on_btn_pressed(btn_this, btn_others):
|
||||
|
||||
@@ -126,6 +126,9 @@ func on_interfer_off(ecm, ecms, thrs, table_index):
|
||||
rehash(table_index)
|
||||
ecms.erase(ecm.ispp)
|
||||
thrs.erase(ecm.ispp)
|
||||
interfer.cu.erase(ecm.ispp)
|
||||
interfer.fs.erase(ecm.ispp)
|
||||
interfer.push_id(ecm.ispp)
|
||||
|
||||
|
||||
## Перестраивает индекс таблицы. Вызывать при удалении строки
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://m5s87q7m66lj"]
|
||||
[gd_scene load_steps=11 format=3 uid="uid://m5s87q7m66lj"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="1_8dmgr"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/прибор.gd" id="1_ufjwe"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="2_14h25"]
|
||||
[ext_resource type="PackedScene" uid="uid://cm5jd4gjrrpba" path="res://scenes/контроль/кассета-у-5-к.tscn" id="2_tb85r"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета_у_5.gd" id="3_wip3a"]
|
||||
[ext_resource type="PackedScene" uid="uid://bkxblfoj7ejv0" path="res://scenes/контроль/блок-а.tscn" id="6_fmhtx"]
|
||||
[ext_resource type="PackedScene" uid="uid://bmagw8nd0ulhj" path="res://scenes/pribor-prd-k/kasseta-fs-kd.tscn" id="7_ia27q"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
|
||||
@@ -25,6 +26,7 @@ offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
script = ExtResource("3_wip3a")
|
||||
fname = "Кассета У5"
|
||||
|
||||
[node name="lbl_header" type="Label" parent="."]
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://dnuexoef2nnv5"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://dnuexoef2nnv5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/контроль/прибор.gd" id="1_mcea3"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_lpj3d"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_i1no5"]
|
||||
[ext_resource type="PackedScene" uid="uid://bk1655p4e8y4u" path="res://scenes/контроль/кассета-у-5-нв.tscn" id="5_ej152"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета_у_5.gd" id="5_hne5j"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета.gd" id="6_b1cob"]
|
||||
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_dqc3e"]
|
||||
[ext_resource type="PackedScene" uid="uid://bkxblfoj7ejv0" path="res://scenes/контроль/блок-а.tscn" id="8_u7eqo"]
|
||||
@@ -94,6 +95,7 @@ offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
script = ExtResource("5_hne5j")
|
||||
fname = "Кассета У5"
|
||||
|
||||
[node name="kasseta_FS_ND" type="NinePatchRect" parent="."]
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://cvskpe1ti3p45"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://cvskpe1ti3p45"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/контроль/прибор.gd" id="1_dl7rt"]
|
||||
[ext_resource type="Script" path="res://scenes/pribor-prd-v/pribor_prd_v.gd" id="1_c20s6"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_xpo4b"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="3_wyy1b"]
|
||||
[ext_resource type="PackedScene" uid="uid://bk1655p4e8y4u" path="res://scenes/контроль/кассета-у-5-нв.tscn" id="4_gl2bl"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета_у_5.gd" id="5_6p5qb"]
|
||||
[ext_resource type="PackedScene" uid="uid://cd5sue1e8iyrv" path="res://scenes/pribor-prd-n/kasseta-fs-nd.tscn" id="5_nhd2k"]
|
||||
[ext_resource type="Script" path="res://scenes/контроль/кассета.gd" id="6_os4mt"]
|
||||
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_38u2b"]
|
||||
@@ -16,7 +17,7 @@ offset_left = 15.0
|
||||
offset_top = 30.0
|
||||
offset_right = 15.0
|
||||
offset_bottom = 30.0
|
||||
script = ExtResource("1_dl7rt")
|
||||
script = ExtResource("1_c20s6")
|
||||
|
||||
[node name="maa2000_A22" parent="." instance=ExtResource("2_xpo4b")]
|
||||
layout_mode = 2
|
||||
@@ -95,6 +96,7 @@ offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
script = ExtResource("5_6p5qb")
|
||||
fname = "Кассета У5"
|
||||
|
||||
[node name="kasseta_FS_VD" parent="." instance=ExtResource("5_nhd2k")]
|
||||
|
||||
44
scenes/pribor-prd-v/pribor_prd_v.gd
Normal file
44
scenes/pribor-prd-v/pribor_prd_v.gd
Normal file
@@ -0,0 +1,44 @@
|
||||
extends "res://scenes/контроль/прибор.gd"
|
||||
|
||||
enum STATE_VAL {
|
||||
NONE = 0,
|
||||
GOOD = 1,
|
||||
ERROR = 2 }
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name'))
|
||||
var unit_prd = network.units[unit_key]
|
||||
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
|
||||
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
set_default_state()
|
||||
|
||||
|
||||
func set_default_state():
|
||||
$um1535_A7.state = STATE_VAL.NONE
|
||||
$um1535_A8.state = STATE_VAL.NONE
|
||||
$um1535_A9.state = STATE_VAL.NONE
|
||||
$um1535_A10.state = STATE_VAL.NONE
|
||||
$um1535_A11.state = STATE_VAL.NONE
|
||||
$um1535_A12.state = STATE_VAL.NONE
|
||||
$um1535_A13.state = STATE_VAL.NONE
|
||||
$um1535_A14.state = STATE_VAL.NONE
|
||||
$um1535_A15.state = STATE_VAL.NONE
|
||||
$um1535_A16.state = STATE_VAL.NONE
|
||||
$um1535_A17.state = STATE_VAL.NONE
|
||||
$um1535_A18.state = STATE_VAL.NONE
|
||||
|
||||
|
||||
func on_line_changed(unit_prd):
|
||||
if not unit_prd.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_data_received(unit_prd):
|
||||
var ukp1_online = (unit_prd.status[0] >> 2) & 1
|
||||
var ukp2_online = (unit_prd.status[0] >> 3) & 1
|
||||
var ug_online = (unit_prd.status[0] >> 1) & 1
|
||||
if ug_online:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
@@ -1,20 +1,20 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://dwxn2puh462nl"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/контроль/прибор.gd" id="1_2qyst"]
|
||||
[ext_resource type="Script" path="res://scenes/pribor-uf/pribor_uf.gd" id="1_7gtpa"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="2_ho0da"]
|
||||
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="3_dp78y"]
|
||||
|
||||
[node name="pribor_uf" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
script = ExtResource("1_2qyst")
|
||||
script = ExtResource("1_7gtpa")
|
||||
|
||||
[node name="ref_uf" type="NinePatchRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 98.0
|
||||
offset_left = 187.0
|
||||
offset_top = 247.0
|
||||
offset_right = 708.0
|
||||
offset_bottom = 1121.0
|
||||
offset_bottom = 955.0
|
||||
texture = ExtResource("2_ho0da")
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
@@ -23,40 +23,24 @@ patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_bu1" type="NinePatchRect" parent="ref_uf"]
|
||||
layout_mode = 0
|
||||
offset_left = 282.0
|
||||
offset_top = 138.0
|
||||
offset_right = 591.0
|
||||
offset_bottom = 468.0
|
||||
offset_left = 199.0
|
||||
offset_top = 14.0
|
||||
offset_right = 508.0
|
||||
offset_bottom = 344.0
|
||||
texture = ExtResource("2_ho0da")
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_A13" parent="ref_uf/ref_bu1" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 7.0
|
||||
offset_top = 60.0
|
||||
offset_right = 59.0
|
||||
offset_bottom = 322.0
|
||||
self_size = Vector2i(52, 262)
|
||||
fname = "MKEG/C"
|
||||
rname = "A13"
|
||||
|
||||
[node name="ref_A" parent="ref_uf/ref_bu1" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 59.0
|
||||
[node name="ref_A8_BU" parent="ref_uf/ref_bu1" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 8.0
|
||||
offset_top = 60.0
|
||||
offset_right = 302.0
|
||||
offset_bottom = 322.0
|
||||
self_size = Vector2i(243, 262)
|
||||
self_size = Vector2i(294, 262)
|
||||
fname = "ВК-110"
|
||||
|
||||
[node name="А8" type="Label" parent="ref_uf/ref_bu1"]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 12.0
|
||||
offset_right = 39.0
|
||||
offset_bottom = 31.0
|
||||
text = "А8"
|
||||
rname = "A8"
|
||||
|
||||
[node name="А1" type="Label" parent="ref_uf/ref_bu1"]
|
||||
layout_mode = 0
|
||||
@@ -68,83 +52,74 @@ text = "БУ-1"
|
||||
|
||||
[node name="ref_kassetav13" type="NinePatchRect" parent="ref_uf"]
|
||||
layout_mode = 0
|
||||
offset_left = 12.0
|
||||
offset_top = 513.0
|
||||
offset_right = 601.0
|
||||
offset_bottom = 852.0
|
||||
offset_left = 11.0
|
||||
offset_top = 353.0
|
||||
offset_right = 509.0
|
||||
offset_bottom = 692.0
|
||||
texture = ExtResource("2_ho0da")
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_A18" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 6.0
|
||||
[node name="ref_A9_ESW" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 62.0
|
||||
offset_top = 65.0
|
||||
offset_right = 165.0
|
||||
offset_right = 170.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(159, 260)
|
||||
self_size = Vector2i(108, 260)
|
||||
fname = "ESW-6U16TP"
|
||||
rname = "A18"
|
||||
rname = "A9"
|
||||
|
||||
[node name="ref_A7" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 166.0
|
||||
[node name="ref_A7_YAU07" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 438.0
|
||||
offset_top = 65.0
|
||||
offset_right = 218.0
|
||||
offset_right = 490.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(52, 260)
|
||||
fname = "ЯУ-07Б"
|
||||
rname = "A7"
|
||||
|
||||
[node name="ref_A2" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 218.0
|
||||
[node name="ref_A4_KEMS" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 279.0
|
||||
offset_top = 65.0
|
||||
offset_right = 270.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(52, 260)
|
||||
fname = "КЭМС-Б"
|
||||
rname = "A2"
|
||||
|
||||
[node name="ref_A4" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 269.0
|
||||
offset_top = 65.0
|
||||
offset_right = 321.0
|
||||
offset_right = 331.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(52, 260)
|
||||
fname = "КЭМС-Б1"
|
||||
rname = "A4"
|
||||
|
||||
[node name="ref_A5" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 322.0
|
||||
[node name="ref_A5_EMS" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 225.0
|
||||
offset_top = 65.0
|
||||
offset_right = 374.0
|
||||
offset_right = 277.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(52, 260)
|
||||
fname = "ЭМС-Б"
|
||||
rname = "A5"
|
||||
|
||||
[node name="ref_A6" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 374.0
|
||||
[node name="ref_A6_EMS" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 171.0
|
||||
offset_top = 65.0
|
||||
offset_right = 426.0
|
||||
offset_right = 223.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(52, 260)
|
||||
fname = "ЭМС-Б"
|
||||
rname = "A6"
|
||||
|
||||
[node name="ref_A3" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 427.0
|
||||
[node name="ref_A3_IP5B" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 332.0
|
||||
offset_top = 65.0
|
||||
offset_right = 532.0
|
||||
offset_right = 437.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(105, 260)
|
||||
fname = "ИП-220-5Б"
|
||||
rname = "A3"
|
||||
|
||||
[node name="ref_A8" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 531.0
|
||||
[node name="ref_A12_IP27B" parent="ref_uf/ref_kassetav13" instance=ExtResource("3_dp78y")]
|
||||
offset_left = 9.0
|
||||
offset_top = 65.0
|
||||
offset_right = 582.0
|
||||
offset_right = 60.0
|
||||
offset_bottom = 325.0
|
||||
self_size = Vector2i(51, 260)
|
||||
fname = "ИП220-27Б"
|
||||
@@ -168,7 +143,7 @@ text = "Кассета В-13"
|
||||
|
||||
[node name="lbl_header" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 105.0
|
||||
offset_left = 199.0
|
||||
offset_top = 225.0
|
||||
offset_right = 704.0
|
||||
offset_bottom = 251.0
|
||||
@@ -177,3 +152,16 @@ text = "Контроль исправности прибора УФ
|
||||
"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="lbl_header2" type="Label" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 199.0
|
||||
offset_top = 974.0
|
||||
offset_right = 704.0
|
||||
offset_bottom = 1000.0
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Прибор не исправен
|
||||
"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
101
scenes/pribor-uf/pribor_uf.gd
Normal file
101
scenes/pribor-uf/pribor_uf.gd
Normal file
@@ -0,0 +1,101 @@
|
||||
extends "res://scenes/контроль/прибор.gd"
|
||||
|
||||
enum STATE_VAL {
|
||||
NONE = 0,
|
||||
GOOD = 1,
|
||||
ERROR = 2 }
|
||||
|
||||
var timer = Timer.new()
|
||||
|
||||
var DEV_LIST = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0']
|
||||
var USB_TRACKERBALL = '13ba:0018'
|
||||
var REVFF = '(rev ff)'
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var unit_key = settings.get_unit_key('уарэп-эмс')
|
||||
var unit_uf = network.units[unit_key]
|
||||
|
||||
self.add_child(timer)
|
||||
timer.connect('timeout', Callable(self, 'on_timer').bind(unit_uf))
|
||||
timer.start(1)
|
||||
|
||||
|
||||
func on_timer(unit_uf):
|
||||
Control_VK() # проверка трекбола и pci
|
||||
if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б
|
||||
$ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.GOOD
|
||||
$ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.GOOD
|
||||
$ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.GOOD
|
||||
Control_EMS(unit_uf.status) # проверка ЭМС ячеек
|
||||
else:
|
||||
$ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.ERROR
|
||||
$ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.NONE
|
||||
$ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.NONE
|
||||
$ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.NONE
|
||||
$ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.NONE
|
||||
$ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.NONE
|
||||
$ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.NONE
|
||||
status_uf() # отслеживание состояния прибора
|
||||
|
||||
func Control_VK() -> void:
|
||||
var out_usb_str = ''
|
||||
var out_pci_str = ''
|
||||
var out_usb = []
|
||||
var out_pci = []
|
||||
|
||||
OS.execute('lsusb', [], out_usb)
|
||||
for element in out_usb:
|
||||
out_usb_str += element
|
||||
|
||||
OS.execute('lspci', [], out_pci)
|
||||
for element in out_pci:
|
||||
out_pci_str += element
|
||||
|
||||
out_usb_str = out_usb_str.split("\n")
|
||||
out_pci_str = out_pci_str.split("\n")
|
||||
|
||||
var i: int = 0
|
||||
|
||||
for string in out_usb_str:
|
||||
if USB_TRACKERBALL in string:
|
||||
i += 1
|
||||
break
|
||||
for string in out_pci_str:
|
||||
for item in DEV_LIST:
|
||||
if item in string:
|
||||
i += 1
|
||||
if REVFF in string:
|
||||
i -= 1
|
||||
break
|
||||
|
||||
if i == (len(DEV_LIST) + 1):
|
||||
$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD
|
||||
else:
|
||||
$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR
|
||||
|
||||
|
||||
func Control_EMS(status:Array) -> void:
|
||||
$ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if ((status[0] >> 0) & 1) and ((status[0] >> 3) & 1) else STATE_VAL.ERROR
|
||||
$ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if ((status[0] >> 1) & 1) and ((status[0] >> 4) & 1) else STATE_VAL.ERROR
|
||||
$ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if ((status[0] >> 2) & 1) and ((status[0] >> 5) & 1) else STATE_VAL.ERROR
|
||||
$ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.GOOD if ((status[2] >> 6) & 1) else STATE_VAL.ERROR
|
||||
|
||||
|
||||
func status_uf() -> void:
|
||||
var status_bu:int = $ref_uf/ref_bu1/ref_A8_BU.state
|
||||
var status_yay:int = $ref_uf/ref_kassetav13/ref_A7_YAU07.state
|
||||
var status_kems:int = $ref_uf/ref_kassetav13/ref_A4_KEMS.state
|
||||
var status_ems0:int = $ref_uf/ref_kassetav13/ref_A5_EMS.state
|
||||
var status_ems1:int = $ref_uf/ref_kassetav13/ref_A6_EMS.state
|
||||
var status_ip5:int = $ref_uf/ref_kassetav13/ref_A3_IP5B.state
|
||||
var status_ip27:int = $ref_uf/ref_kassetav13/ref_A12_IP27B.state
|
||||
|
||||
if (status_yay == 1) and (status_bu == 1) and (status_kems == 1) \
|
||||
and (status_ems0 == 1) and (status_ems1 == 1) and (status_ip5 == 1) and (status_ip27 == 1):
|
||||
$lbl_header2.text = "Прибор исправен"
|
||||
$lbl_header2.modulate = Color(0,1,0,1)
|
||||
else:
|
||||
$lbl_header2.text = "Прибор не исправен"
|
||||
$lbl_header2.modulate = Color(1,0,0,1)
|
||||
$lbl_header2.visible = true
|
||||
@@ -34,18 +34,7 @@ offset_top = 275.0
|
||||
offset_right = 655.0
|
||||
offset_bottom = 301.0
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Контроль исправности прибора УЭП"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
self_modulate = Color(0.835294, 0.141176, 0.286275, 1)
|
||||
layout_mode = 0
|
||||
offset_left = 95.0
|
||||
offset_top = 1125.0
|
||||
offset_right = 625.0
|
||||
offset_bottom = 1144.0
|
||||
text = "** Позиционные обозначения требуют уточнения **"
|
||||
text = "Контроль исправности устройства У-ЭП"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
@@ -57,8 +46,8 @@ offset_right = 328.0
|
||||
offset_bottom = 749.0
|
||||
script = ExtResource("4_v0lil")
|
||||
unit_name = "уарэп-спт25-1"
|
||||
fname = "СПТ-25-230-400"
|
||||
rname = "A1"
|
||||
fname = "СПТ-25-230-400-3"
|
||||
rname = "G1"
|
||||
|
||||
[node name="block_input1" parent="spt25_A1" instance=ExtResource("4_mrvir")]
|
||||
layout_mode = 0
|
||||
@@ -91,8 +80,8 @@ offset_right = 643.0
|
||||
offset_bottom = 749.0
|
||||
script = ExtResource("4_v0lil")
|
||||
unit_name = "уарэп-спт25-2"
|
||||
fname = "СПТ-25-230-400"
|
||||
rname = "A2"
|
||||
fname = "СПТ-25-230-400-3"
|
||||
rname = "G2"
|
||||
|
||||
[node name="block_input1" parent="spt25_A2" instance=ExtResource("4_mrvir")]
|
||||
layout_mode = 0
|
||||
@@ -124,4 +113,4 @@ offset_right = 633.0
|
||||
offset_bottom = 1059.0
|
||||
unit_name = "уарэп-щ3"
|
||||
fname = "Щ3 (контроль и управление питанием)"
|
||||
rname = "A3"
|
||||
rname = "A1"
|
||||
|
||||
@@ -14,6 +14,7 @@ extends 'res://scenes/контроль/элемент-я.gd'
|
||||
@export var regs_holding_count: = 4 ## Количество регистров хранения
|
||||
@export var modbus_address: = 3 ## Адрес устройства на шине Modbus
|
||||
@export var request_period: = 1.0 ## Период отправки команд на шину Modbus
|
||||
@export var reconnect_period: = 5.0 ## Период переподключения
|
||||
|
||||
var regs_input: = {} ## Регистры входные
|
||||
var regs_holding: = {} ## Регистры хранения
|
||||
@@ -23,6 +24,7 @@ var input_stack: = [] ## Стек команд для чтения регис
|
||||
var read_step: = 0
|
||||
var switches_sync: = false
|
||||
var timer = Timer.new()
|
||||
var timer_reconnect = Timer.new()
|
||||
|
||||
|
||||
class StackItem:
|
||||
@@ -59,6 +61,14 @@ func _on_timeout(unit_sch3) -> void:
|
||||
read_step %= 2
|
||||
|
||||
|
||||
func _on_timeout_recconect(unit_sch3):
|
||||
var unit_key = settings.get_unit_key(unit_sch3.name)
|
||||
var mbc = network.mbcs[unit_key]
|
||||
mbc.try_reconnect()
|
||||
var mb_data = {'code': 'read_holding', 'data': [0, 4], 'unit': 0}
|
||||
mbc.send_to(mb_data)
|
||||
|
||||
|
||||
## Вызывается при изменении состояния выключателя[br]
|
||||
## [param val] - Состояние выключателя[br]
|
||||
## [param meta] - Адреса регистров и индексы битов назначенных выключателю[br]
|
||||
@@ -99,11 +109,14 @@ func _ready() -> void:
|
||||
timer.connect('timeout', _on_timeout.bind(unit_sch3))
|
||||
add_child(timer)
|
||||
timer.start(request_period)
|
||||
timer_reconnect.connect('timeout', _on_timeout_recconect.bind(unit_sch3))
|
||||
add_child(timer_reconnect)
|
||||
|
||||
|
||||
func on_command_fail(unit_sch3):
|
||||
unit_sch3.cmd_state = unit.Unit.CmdState.DONE
|
||||
timer.stop()
|
||||
timer_reconnect.start(reconnect_period)
|
||||
|
||||
|
||||
## Вызывается, когда состояния прибора Щ3 "на связи" изменяется[br]
|
||||
@@ -124,8 +137,10 @@ func on_line_changed(unit_sch3: sch_3.Sch3):
|
||||
$margin/vbox/grid1/state_freq.texture = textures[STATE_VAL.NONE]
|
||||
$margin/vbox/grid/state.texture = textures[STATE_VAL.NONE]
|
||||
else:
|
||||
timer_reconnect.stop()
|
||||
timer.start(request_period)
|
||||
|
||||
|
||||
## Вызывается по сигналу "приняты данные чтения регистров хранения"[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Массив значений прочитанных из регистров.
|
||||
@@ -154,6 +169,8 @@ func on_resp_holding(base_addr: int, data: Array):
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Массив значений прочитанных из регистров.[br]
|
||||
func on_resp_input(base_addr: int, data: Array):
|
||||
if !is_inside_tree():
|
||||
return
|
||||
if (base_addr != base_input_address) or (data.size() < regs_input_count):
|
||||
return
|
||||
# "Для контроля состояния управляющего элемента подачи электроэнергии на приборы ..."
|
||||
|
||||
@@ -721,7 +721,7 @@ size_flags_vertical = 4
|
||||
tooltip_text = "Индикатор допуска входного напряжения"
|
||||
texture = ExtResource("2_ln52a")
|
||||
expand_mode = 1
|
||||
metadata/bits = [0, 0, 2, 0]
|
||||
metadata/bits = [0, 15, 4, 0]
|
||||
|
||||
[node name="lbl0" type="Label" parent="margin/vbox/grid1"]
|
||||
self_modulate = Color(1, 1, 1, 0.627451)
|
||||
|
||||
@@ -5,6 +5,11 @@ const TAB_TOSIGNAL_NAME = {0: 'режим_работа', 1: 'режим_конт
|
||||
|
||||
func _enter_tree() -> void:
|
||||
network.logger_page = $Журнал
|
||||
signaller.connect('ems2_hide_pressed', on_ems2_hide_pressed)
|
||||
|
||||
|
||||
func on_ems2_hide_pressed(state):
|
||||
set_tab_hidden(4, state)
|
||||
|
||||
|
||||
func _on_tab_changed(tab) -> void:
|
||||
|
||||
44
scenes/контроль/кассета_у_5.gd
Normal file
44
scenes/контроль/кассета_у_5.gd
Normal file
@@ -0,0 +1,44 @@
|
||||
extends "res://scenes/контроль/кассета.gd"
|
||||
|
||||
enum STATE_VAL {
|
||||
NONE = 0,
|
||||
GOOD = 1,
|
||||
ERROR = 2 }
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
var unit_key = settings.get_unit_key(get_parent().get_meta('unit_name'))
|
||||
var unit_prd = network.units[unit_key]
|
||||
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
|
||||
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
set_default_state()
|
||||
|
||||
|
||||
func set_default_state():
|
||||
$ref_A37.state = STATE_VAL.ERROR
|
||||
$ref_A31.state = STATE_VAL.NONE
|
||||
$ref_A33.state = STATE_VAL.NONE
|
||||
$ref_A34.state = STATE_VAL.NONE
|
||||
$ref_A35.state = STATE_VAL.NONE
|
||||
$ref_A36.state = STATE_VAL.NONE
|
||||
|
||||
|
||||
func on_line_changed(unit_prd):
|
||||
if not unit_prd.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_data_received(unit_prd):
|
||||
$ref_A37.state = STATE_VAL.GOOD
|
||||
var ems_online = unit_prd.status[0] & 1
|
||||
var bit_load = 4
|
||||
var ems_load = (unit_prd.status[0] >> bit_load) & 1
|
||||
var ug_online = (unit_prd.status[0] >> 1) & 1
|
||||
$ref_A33.state = STATE_VAL.GOOD if ems_online and ems_load else STATE_VAL.ERROR
|
||||
$ref_A34.state = STATE_VAL.GOOD if ug_online else STATE_VAL.ERROR
|
||||
$ref_A35.state = STATE_VAL.GOOD if (unit_prd.status[0] >> 2) & 1 else STATE_VAL.ERROR
|
||||
$ref_A36.state = STATE_VAL.GOOD if (unit_prd.status[0] >> 3) & 1 else STATE_VAL.ERROR
|
||||
if ug_online:
|
||||
$ref_A31.state = STATE_VAL.GOOD if (unit_prd.status[27] >> 7) & 1 else STATE_VAL.ERROR
|
||||
else:
|
||||
$ref_A31.state = STATE_VAL.NONE
|
||||
@@ -22,7 +22,7 @@ const PRIBORS_RES = \
|
||||
'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'],
|
||||
'pribor_rtr': ['res://scenes/pribor-rtr/pribor-rtr.tscn', 'Контроль исправности прибора РТР'],
|
||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности прибора УЭП'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||
}
|
||||
|
||||
|
||||
@@ -34,11 +34,11 @@ func _ready():
|
||||
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.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node))
|
||||
log.info('Модуль контроля работы готов')
|
||||
|
||||
|
||||
func on_pribor_press(pribor_path, header_text):
|
||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
clear_obj($mnemo_container)
|
||||
var pribor_obj = load(pribor_path)
|
||||
if not pribor_obj:
|
||||
@@ -49,6 +49,10 @@ func on_pribor_press(pribor_path, header_text):
|
||||
push_error('экземпляр не создан: \"%s\" (%s)' % [pribor_path, header_text])
|
||||
return
|
||||
pribor.set_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)
|
||||
$mnemo_container.add_child(pribor)
|
||||
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ offset_left = 29.8566
|
||||
offset_top = -21.3276
|
||||
offset_right = 69.8566
|
||||
offset_bottom = -2.32759
|
||||
text = "УЭП"
|
||||
text = "У-ЭП"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
@@ -246,6 +246,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-2в"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_2"]
|
||||
layout_mode = 0
|
||||
@@ -286,6 +287,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-2н"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_2"]
|
||||
layout_mode = 0
|
||||
@@ -328,6 +330,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-2к"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_2"]
|
||||
layout_mode = 0
|
||||
@@ -369,6 +372,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-3в"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_3"]
|
||||
layout_mode = 0
|
||||
@@ -411,6 +415,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-3н"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_3"]
|
||||
layout_mode = 0
|
||||
@@ -452,6 +457,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-3к"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_3"]
|
||||
layout_mode = 0
|
||||
@@ -494,6 +500,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-1в"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_1"]
|
||||
layout_mode = 0
|
||||
@@ -535,6 +542,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-1н"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_1"]
|
||||
layout_mode = 0
|
||||
@@ -576,6 +584,7 @@ stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-1к"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_1"]
|
||||
layout_mode = 0
|
||||
@@ -616,6 +625,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-4в"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_v_4"]
|
||||
layout_mode = 0
|
||||
@@ -657,6 +667,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-4н"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_4"]
|
||||
layout_mode = 0
|
||||
@@ -697,6 +708,7 @@ texture_normal = ExtResource("6_i1yfn")
|
||||
stretch_mode = 4
|
||||
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)]
|
||||
metadata/unit_name = "уарэп-яу07-4к"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_k_4"]
|
||||
layout_mode = 0
|
||||
|
||||
@@ -29,8 +29,6 @@ func _enter_tree() -> void:
|
||||
vals[2] = get_theme_constant('margin_bottom')
|
||||
vals[3] = get_theme_constant('margin_right')
|
||||
return vals
|
||||
|
||||
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_evx06"]
|
||||
|
||||
@@ -10,9 +10,6 @@ var TableEmpti = preload('res://table/empti.tscn')
|
||||
## Вызывается, когда узел впервые попадает в дерево сцены.
|
||||
func _ready() -> void:
|
||||
setting_tab()
|
||||
dop_set_tab()
|
||||
set_tab()
|
||||
$lbl_commit.text = ' \"%s\"' % commit.VCS_HEAD
|
||||
if not OS.get_cmdline_args().has('++ограниченный'):
|
||||
return
|
||||
$Label2.text = 'Текущий режим доступа: ограниченный'
|
||||
@@ -20,64 +17,75 @@ func _ready() -> void:
|
||||
node.disabled = true
|
||||
|
||||
|
||||
func _on_external_cu_btn_pressed() -> void:
|
||||
var state = $GridContainer2/external_cu_btn.button_pressed
|
||||
ProjectSettings.set_setting('application/config/external_cu', state)
|
||||
func on_external_cu_btn_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
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 setting_tab():
|
||||
var yams: Array = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER ]
|
||||
var yams: Array = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
$table.set_header([TableHeader, TableHeader])
|
||||
$table.set_header_text(['Элемент', ' Показывать '])
|
||||
$table.set_header_text(['Параметр', 'начение '])
|
||||
var row_texts: Array = ['Ограниченный режим',
|
||||
'Управление элементами в ограниченном режиме',
|
||||
'Кнопка «ПД-М4»', 'Кнопка «ПД-М2»',
|
||||
'Кнопка «ОЗП-1»',
|
||||
'Кнопка «МЧМ-1»',
|
||||
'Кнопка «ОРН-И1»',
|
||||
'Кнопка «ОРН-М2»',
|
||||
'Кнопка «ЛЧМ-1»',
|
||||
'Кнопка «ПД-М4С»',
|
||||
'Кнопка «ПД-ЧМ»',
|
||||
'Кнопка «СВ-И1»',
|
||||
'Кнопка «К1»',
|
||||
'Кнопка «СВ-М2»',
|
||||
'Кнопка «ОРН»',
|
||||
'Кнопка «JTIDS»',
|
||||
'Кнопка «КУПД»',
|
||||
'Внешнее целеуказание',
|
||||
'Кнопка «Подавление»',
|
||||
'Виртуальная клавиатура',
|
||||
'Скрыть вкладку ЭМС 2',
|
||||
'Текущая версия ПО УАРЭП',
|
||||
'Адрес сервера карт' ]
|
||||
|
||||
for i in range(15):
|
||||
$table.add_row([TableLabel, TableTaggle])
|
||||
for i in range(len(row_texts)):
|
||||
if i < 21:
|
||||
$table.add_row([TableLabel, TableTaggle])
|
||||
else:
|
||||
if i == len(row_texts) - 2:
|
||||
var commit_version = '%s"' % commit.VCS_HEAD
|
||||
$table.add_row([TableLabel, TableLabel])
|
||||
$table.set_row_text(i, [row_texts[i], commit_version])
|
||||
elif i == len(row_texts) - 1:
|
||||
$table.add_row([TableLabel, TableLabel])
|
||||
$table.set_row_text(i, [row_texts[i], ProjectSettings.get('application/config/map_server_addr')])
|
||||
else:
|
||||
$table.add_row([TableLabel, TableEmpti])
|
||||
$table.set_row_text(i, [row_texts[i]])
|
||||
|
||||
$table.set_row_text(0,([' Кнопка «ПД-М4» ']))
|
||||
$table.set_row_text(1,([' Кнопка «ПД-М2» ']))
|
||||
$table.set_row_text(2,([' Кнопка «ОЗП-1» ']))
|
||||
$table.set_row_text(3,([' Кнопка «МЧМ-1» ']))
|
||||
$table.set_row_text(4,([' Кнопка «ОРН-И1» ']))
|
||||
$table.set_row_text(5,([' Кнопка «ОРН-М2» ']))
|
||||
$table.set_row_text(6,([' Кнопка «ЛЧМ-1» ']))
|
||||
$table.set_row_text(7,([' Кнопка «ПД-М4С» ']))
|
||||
$table.set_row_text(8,([' Кнопка «ПД-ЧМ» ']))
|
||||
$table.set_row_text(9,([' Кнопка «СВ-И1» ']))
|
||||
$table.set_row_text(10,([' Кнопка «К1» ']))
|
||||
$table.set_row_text(11,([' Кнопка «СВ-М2» ']))
|
||||
$table.set_row_text(12,([' Кнопка «ОРН» ']))
|
||||
$table.set_row_text(13,([' Кнопка «JTIDS» ']))
|
||||
$table.set_row_text(14,([' Кнопка «КУПД» ']))
|
||||
var extern_cu_node = $table.get_node2(1, 17).get_children()[1]
|
||||
extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node))
|
||||
$table.set_row_text(18,(['Кнопка «Подавление»']))
|
||||
$table.set_row_text(19,(['Виртуальная клавиатура']))
|
||||
var vk_node = $table.get_node2(1, 19).get_children()[1]
|
||||
vk_node.connect('pressed', on_vk_pressed.bind(vk_node))
|
||||
$table.set_row_text(20,(['Скрыть вкладку ЭМС 2']))
|
||||
var ems2_hide_node = $table.get_node2(1, 20).get_children()[1]
|
||||
ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node))
|
||||
ems2_hide_node.set_pressed(true)
|
||||
on_ems2_pressed(ems2_hide_node)
|
||||
|
||||
$table.set_columns_min_size([150, 100])
|
||||
$table.set_columns_min_size([365, 365])
|
||||
$table.set_columns_alignments(yams)
|
||||
|
||||
|
||||
func dop_set_tab():
|
||||
var yams: Array = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER ]
|
||||
$table2.add_row([TableLabel, TableEmpti])
|
||||
$table2.add_row([TableLabel, TableEmpti])
|
||||
$table2.add_row([TableEmpti, TableEmpti])
|
||||
$table2.add_row([TableLabel, TableTaggle])
|
||||
$table2.add_row([TableLabel, TableTaggle])
|
||||
|
||||
$table2.set_row_text(0, (['Текущая версия ПО УАРЭП:']))
|
||||
$table2.set_row_text(1, (['Адрес сервера карт:']))
|
||||
$table2.set_row_text(2, (['']))
|
||||
$table2.set_row_text(3, (['Внешнее целеуказание.']))
|
||||
$table2.set_row_text(4, (['Кнопка «Подавление».\nОтключить отображение этой кнопки,\nчто бы тип помех применялся сразу.']))
|
||||
|
||||
|
||||
$table2.set_columns_min_size([180, 50])
|
||||
$table2.set_columns_alignments(yams)
|
||||
|
||||
func set_tab():
|
||||
$table3.add_row([TableLabel, TableEmpti])
|
||||
$table3.add_row([TableLabel, TableEmpti])
|
||||
|
||||
$table3.set_row_text(0, ([' Текущий режим доступа: полный ']))
|
||||
$table3.set_row_text(1, ([' Управление элементами в режиме с ограниченным доступом ']))
|
||||
|
||||
$table3.set_columns_min_size([250, 5])
|
||||
|
||||
@@ -1,341 +1,15 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://bnptm4rlp60dq"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bnptm4rlp60dq"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/настройки/настройки.gd" id="1_2l3rd"]
|
||||
[ext_resource type="Script" path="res://table/table.gd" id="2_6sx73"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_anjmx"]
|
||||
script/source = "extends LineEdit
|
||||
|
||||
func _ready() -> void: text = ProjectSettings.get('application/config/map_server_addr')
|
||||
|
||||
|
||||
func _on_text_changed(new_text: String) -> void:
|
||||
ProjectSettings.set('application/config/map_server_addr', new_text)
|
||||
ProjectSettings.save_custom('override.cfg')
|
||||
"
|
||||
|
||||
[node name="Настройки" type="Panel"]
|
||||
script = ExtResource("1_2l3rd")
|
||||
|
||||
[node name="GridContainer" type="GridContainer" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 44.0
|
||||
offset_top = 87.0
|
||||
offset_right = 336.0
|
||||
offset_bottom = 193.0
|
||||
columns = 2
|
||||
|
||||
[node name="Label" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Элемент"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Label2" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Показывать"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Label4" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ПД-M4»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label5" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ПД-M2»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton3" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label6" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ОЗП-1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton5" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label7" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «МЧМ-1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton6" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label8" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «СРН-И1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton7" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label9" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «СРН-М2»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton8" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label10" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ЛЧМ-1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton9" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label11" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ПД-М4С»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton10" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label12" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «ПД-ЧМ»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton11" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label13" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «СВ-И1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton12" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label14" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «К1»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton13" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label15" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «СВ-М2»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton14" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label16" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «СРН»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton15" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label17" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «JTIDS»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton16" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label18" type="Label" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «КУПД»"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="CheckButton17" type="CheckButton" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
button_pressed = true
|
||||
|
||||
[node name="Label1" type="Label" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 16.0
|
||||
offset_top = 60.0
|
||||
offset_right = 434.0
|
||||
offset_bottom = 82.0
|
||||
text = "Управление элементами в режиме с ограниченным доступом"
|
||||
|
||||
[node name="Label2" type="Label" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 20.0
|
||||
offset_right = 445.0
|
||||
offset_bottom = 50.0
|
||||
text = "Текущий режим доступа: полный"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="edt_mapaddr" type="LineEdit" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 776.0
|
||||
offset_top = 48.0
|
||||
offset_right = 1148.0
|
||||
offset_bottom = 78.0
|
||||
theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1)
|
||||
script = SubResource("GDScript_anjmx")
|
||||
|
||||
[node name="Label" type="Label" parent="edt_mapaddr"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = -180.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = 30.0
|
||||
text = "Адрес сервера карт:"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="GridContainer2" type="GridContainer" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 478.0
|
||||
offset_top = 154.0
|
||||
offset_right = 784.0
|
||||
offset_bottom = 260.0
|
||||
columns = 2
|
||||
|
||||
[node name="external_cu_lbl" type="Label" parent="GridContainer2"]
|
||||
layout_mode = 2
|
||||
text = "Внешнее целеуказание."
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="external_cu_btn" type="CheckButton" parent="GridContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label19" type="Label" parent="GridContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Кнопка «Подавление».
|
||||
Отключить отображение этой кнопки,
|
||||
что бы тип помех применялся сразу."
|
||||
|
||||
[node name="CheckButton18" type="CheckButton" parent="GridContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 6
|
||||
disabled = true
|
||||
|
||||
[node name="lbl_commit" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 776.0
|
||||
offset_top = 24.0
|
||||
offset_right = 1144.0
|
||||
offset_bottom = 54.0
|
||||
theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1)
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="table" type="GridContainer" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 40.0
|
||||
offset_top = 88.0
|
||||
offset_top = 40.0
|
||||
offset_right = 80.0
|
||||
offset_bottom = 128.0
|
||||
offset_bottom = 80.0
|
||||
script = ExtResource("2_6sx73")
|
||||
|
||||
[node name="table2" type="GridContainer" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 512.0
|
||||
offset_top = 32.0
|
||||
offset_right = 552.0
|
||||
offset_bottom = 72.0
|
||||
script = ExtResource("2_6sx73")
|
||||
|
||||
[node name="table3" type="GridContainer" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 40.0
|
||||
offset_top = 32.0
|
||||
offset_right = 80.0
|
||||
offset_bottom = 72.0
|
||||
script = ExtResource("2_6sx73")
|
||||
|
||||
[connection signal="text_changed" from="edt_mapaddr" to="edt_mapaddr" method="_on_text_changed"]
|
||||
[connection signal="pressed" from="GridContainer2/external_cu_btn" to="." method="_on_external_cu_btn_pressed"]
|
||||
|
||||
@@ -64,13 +64,14 @@ const fs_sectors: Dictionary = {
|
||||
1: [270.0, 360.0] }
|
||||
|
||||
const fs_freq: Dictionary = {
|
||||
0: [370.0, 800.0, 200.0, 250.0],
|
||||
1: [800.0, 1065.0, 250.0, 300.0],
|
||||
2: [1065.0, 1180.0, 300.0, 350.0],
|
||||
3: [1180.0, 1450.0, 350.0, 400.0],
|
||||
4: [1450.0, 2000.0, 400.0, 450.0],
|
||||
5: [2000.0, 3500.0, 450.0, 500.0],
|
||||
6: [3500.0, 6000.0, 500.0, 550.0] }
|
||||
0: [390.0, 510.0, 200.0, 250.0, 433.0],
|
||||
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
|
||||
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
|
||||
3: [1150.0, 1490.0, 350.0, 400.0, 1227.0],
|
||||
4: [1490.0, 2000.0, 400.0, 450.0, 1575.0],
|
||||
5: [2000.0, 3500.0, 450.0, 500.0, 2450.0],
|
||||
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0]
|
||||
}
|
||||
|
||||
## Размеры карты для разных режимов РТО и РЛС соответственно
|
||||
const map_sizes = [
|
||||
@@ -153,7 +154,7 @@ func _ready():
|
||||
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(nodes))
|
||||
signaller.connect('interfer_new', Callable(self, 'on_interfer_new'))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all'))
|
||||
signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno'))
|
||||
signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno').bind(nodes))
|
||||
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
|
||||
signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color'))
|
||||
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
|
||||
@@ -171,17 +172,18 @@ func get_all_nodes(root):
|
||||
func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
var freq = th.freq
|
||||
var sector_key = null
|
||||
var sector_width = 50.0
|
||||
for key in fs_freq:
|
||||
var freq_range = fs_freq[key]
|
||||
var _num_values = (freq_range[1]- freq_range[0]) / sector_width
|
||||
if freq_range[0] <= freq and freq <= freq_range[1]:
|
||||
sector_key = key
|
||||
break
|
||||
if sector_key != null:
|
||||
var fsf = fs_freq[sector_key]
|
||||
radius_internal = fsf[2]
|
||||
radius_outter = fsf[3]
|
||||
freq_low = fsf[0]
|
||||
freq_high = fsf[1]
|
||||
if sector_key!= null:
|
||||
radius_internal = fs_freq[sector_key][2]
|
||||
radius_outter = fs_freq[sector_key][3]
|
||||
freq_low = fs_freq[sector_key][0]
|
||||
freq_high = fs_freq[sector_key][1]
|
||||
bip.position = tools.pos_calc(
|
||||
th.freq,
|
||||
th.aoa,
|
||||
@@ -426,11 +428,14 @@ func sel_fs_sector(event):
|
||||
|
||||
|
||||
func set_fs_color(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
var fs_index_arr: Array = []
|
||||
get_fs_index(ecm, fs_index_arr)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
fs_active[fs_index] = null
|
||||
for item in fs_index_arr:
|
||||
fs_active[item] = null
|
||||
else:
|
||||
fs_active.erase(fs_index)
|
||||
for item in fs_index_arr:
|
||||
fs_active.erase(item)
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
@@ -460,7 +465,7 @@ func set_ecm_btns_state(value: bool):
|
||||
|
||||
|
||||
func get_fs_param(index: int) -> Array:
|
||||
var freq = (fs_freq[index / 4][0] + fs_freq[index / 4][1])/2
|
||||
var freq = (fs_freq[index / 4][4])
|
||||
var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0
|
||||
if sector < 0:
|
||||
sector += 360.0
|
||||
@@ -469,15 +474,17 @@ func get_fs_param(index: int) -> Array:
|
||||
|
||||
|
||||
func on_fs_selected(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
var fs_index_arr: Array = []
|
||||
get_fs_index(ecm, fs_index_arr)
|
||||
fs_selected.clear()
|
||||
fs_selected[fs_index] = null
|
||||
for item in fs_index_arr:
|
||||
fs_selected[item] = null
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func get_fs_index(ecm):
|
||||
func get_fs_index(ecm, fs_index_arr):
|
||||
var sector: int
|
||||
var band: int
|
||||
var band: Array
|
||||
var angle: float = ecm.kni + 45.0
|
||||
if angle > 360.0:
|
||||
angle -= 360.0
|
||||
@@ -487,9 +494,9 @@ func get_fs_index(ecm):
|
||||
for diap in fs_freq.values():
|
||||
if ecm.params.has('freq'):
|
||||
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
|
||||
band = fs_freq.find_key(diap)
|
||||
var fs_index = band * 4 + sector
|
||||
return fs_index
|
||||
band.append(fs_freq.find_key(diap))
|
||||
for item in band:
|
||||
fs_index_arr.append(item * 4 + sector)
|
||||
|
||||
|
||||
func set_btns_disabled(value: bool, btn):
|
||||
@@ -500,16 +507,21 @@ func set_btns_disabled(value: bool, btn):
|
||||
else:
|
||||
btn.set_disabled(value)
|
||||
|
||||
|
||||
func on_fs_update_color(ecms):
|
||||
fs_active.clear()
|
||||
for ecm in ecms.values():
|
||||
set_fs_color(ecm)
|
||||
update_fs_colors()
|
||||
|
||||
func on_interfer_prenuditelno (prenuditelno_sectors):
|
||||
|
||||
func on_interfer_prenuditelno (prenuditelno_sectors, btns):
|
||||
for key in prenuditelno_sectors:
|
||||
var sectors = []
|
||||
for sector in prenuditelno_sectors[key]:
|
||||
sectors.append(get_fs_param(sector))
|
||||
signaller.emit_signal('interfer_init', key, sectors)
|
||||
update_fs_colors()
|
||||
for btn in btns:
|
||||
btn.set_pressed(false)
|
||||
set_btns_disabled(true, btn)
|
||||
|
||||
@@ -133,7 +133,7 @@ func on_btn_flash_write(btn):
|
||||
func init_tbl_files():
|
||||
check_dir()
|
||||
$scrl_files/tbl_files.set_header([TableHeader, TableHeader, TableHeader])
|
||||
$scrl_files/tbl_files.set_header_text(['Имя файла', 'Дата изменения', 'Размер'])
|
||||
$scrl_files/tbl_files.set_header_text(['Имя файла', 'Размер', 'Дата изменения'])
|
||||
$scrl_files/tbl_files.set_columns_min_size([200, 120, 70])
|
||||
tools.fill_files_table($scrl_files/tbl_files, yemsconsts.files_folder, FILES_ROWS_TYPES)
|
||||
$scrl_files/tbl_files.set_columns_alignments(yemsconsts.FILES_ROWS_ALIGNMENT)
|
||||
|
||||
15
scripts/astra_kb.gd
Normal file
15
scripts/astra_kb.gd
Normal file
@@ -0,0 +1,15 @@
|
||||
extends Node
|
||||
|
||||
var pid = null
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
signaller.connect('kb_pressed', Callable(self, 'on_kb_pressed'))
|
||||
|
||||
|
||||
func on_kb_pressed(state):
|
||||
if pid:
|
||||
OS.kill(pid)
|
||||
pid = null
|
||||
if state:
|
||||
pid = OS.create_process('fly-vkbd', [])
|
||||
@@ -265,7 +265,6 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer)
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
|
||||
@@ -278,7 +277,6 @@ func send_ecm(ecm, unit):
|
||||
func on_interfer_off_all(unit, ecms):
|
||||
for ecm in ecms.values():
|
||||
ecm.krp = INTERFER_OFF
|
||||
push_id(ecm.ispp)
|
||||
send_ecm(ecm, unit)
|
||||
signaller.emit_signal('interfer_off',ecm, ecms, thrs)
|
||||
|
||||
@@ -289,7 +287,6 @@ func on_threats_lost(th, ecms, unit):
|
||||
var ecm_id = key
|
||||
var ecm = ecms[ecm_id]
|
||||
ecm.krp = INTERFER_OFF
|
||||
push_id(ecm.ispp)
|
||||
send_ecm(ecm, unit)
|
||||
signaller.emit_signal('interfer_off',ecm, ecms, thrs)
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
class_name Network extends Node
|
||||
|
||||
|
||||
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb, 'udp-json-mbcs': sch3.Sch3}
|
||||
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb}
|
||||
const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28}
|
||||
const SERIAL_PROTO: = {'uart': spt25.SPT25 }
|
||||
const SERIAL_PROTO: = {'uart': spt25.SPT25}
|
||||
const MODBUS_PROTO: = {'mbcs': sch3.Sch3}
|
||||
|
||||
var tick: int = 0
|
||||
|
||||
@@ -47,13 +48,35 @@ class SocketTCP extends TCPServer:
|
||||
peer.put_data(data)
|
||||
|
||||
|
||||
class Modbus extends ModbusClientRtu:
|
||||
var unit_name
|
||||
func send_to(data):
|
||||
if data['code'] == 'write':
|
||||
var addr = data['data'].pop_at(0)
|
||||
request_write(addr, data['data'])
|
||||
elif data['code'] == 'read_holding':
|
||||
request_read(data['data'][0], data['data'][1])
|
||||
elif data['code'] == 'read_input':
|
||||
request_read_input(data['data'][0], data['data'][1])
|
||||
|
||||
func try_reconnect():
|
||||
var port = settings.UnitProfiles[unit_name][1]
|
||||
var params = settings.UnitProfiles[unit_name][2]
|
||||
thread_stop()
|
||||
close()
|
||||
open(port, params[1], params[0], params[2], params[3], params[4])
|
||||
thread_run()
|
||||
|
||||
|
||||
var poll_sockets: Array[Socket]
|
||||
var tcp_sockets: Array
|
||||
var units: Dictionary
|
||||
var units_udp: Dictionary
|
||||
var units_tcp: Dictionary
|
||||
var units_serial: Dictionary
|
||||
var serials: Dictionary
|
||||
var units_modbus: Dictionary
|
||||
var serials: Dictionary # Последовательные порты
|
||||
var mbcs: Dictionary # Клиенты modbus.
|
||||
var dst_ports: Dictionary
|
||||
var unit_keys: Dictionary
|
||||
var sock_unicast: Socket
|
||||
@@ -97,11 +120,23 @@ func create_serial(nm) -> Serial:
|
||||
return sp
|
||||
|
||||
|
||||
func create_modbus(nm, mbc_unit) -> Modbus:
|
||||
var port = settings.UnitProfiles[nm][1]
|
||||
var params = settings.UnitProfiles[nm][2]
|
||||
var mbc: = Modbus.new()
|
||||
mbc.connect('read', mbc_unit.on_read)
|
||||
mbc.connect('read_input', mbc_unit.on_read_input)
|
||||
mbc.connect('write', mbc_unit.on_write)
|
||||
var _rc = mbc.open(port, params[1], params[0], params[2], params[3], params[4])
|
||||
mbc.thread_run()
|
||||
mbc.unit_name = nm
|
||||
return mbc
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
poll_sockets.append(create_socket('уарэп-яу07-частный'))
|
||||
poll_sockets.append(create_socket('уарэп-яу07-общий'))
|
||||
poll_sockets.append(create_socket('уарэп-капсрпб'))
|
||||
poll_sockets.append(create_socket('уарэп-щ3'))
|
||||
sock_unicast = poll_sockets[0]
|
||||
sock_capsrpb = poll_sockets[2]
|
||||
|
||||
@@ -122,12 +157,26 @@ func _ready() -> void:
|
||||
dst_ports[unit_key] = st[2][0]
|
||||
|
||||
if proto in TCP_PROTO:
|
||||
var unit = TCP_PROTO[proto].new(unit_name)
|
||||
var unit_tcp = TCP_PROTO[proto].new(unit_name)
|
||||
var unit_key = settings.get_unit_key(unit_name)
|
||||
units_tcp[unit_key] = unit
|
||||
units_tcp[unit_key] = unit_tcp
|
||||
units[unit_key] = unit_tcp
|
||||
if logger_page:
|
||||
unit.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(unit_key))
|
||||
unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key))
|
||||
unit_tcp.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(unit_key))
|
||||
unit_tcp.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key))
|
||||
|
||||
|
||||
if proto in MODBUS_PROTO:
|
||||
var unit_modbus = MODBUS_PROTO[proto].new(unit_name)
|
||||
var unit_key = settings.get_unit_key(unit_name)
|
||||
if logger_page:
|
||||
unit_modbus.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(unit_key))
|
||||
unit_modbus.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key))
|
||||
var mbc = create_modbus(unit_name, unit_modbus)
|
||||
units_modbus[unit_key] = unit_modbus
|
||||
units[unit_key] = unit_modbus
|
||||
mbcs[unit_key] = mbc
|
||||
|
||||
|
||||
if proto in SERIAL_PROTO:
|
||||
var unit_serial = SERIAL_PROTO[proto].new(unit_name)
|
||||
@@ -225,6 +274,12 @@ func _process(_delta: float) -> void:
|
||||
match unit_serial.process(tick):
|
||||
Error.OK: serial.send_to(unit_serial.tx_data)
|
||||
Error.FAILED: emit_signal('socket_error', [unit_serial, serial])
|
||||
for key in units_modbus:
|
||||
var unit_modbus = units_modbus[key]
|
||||
var mbc = mbcs[key]
|
||||
match unit_modbus.process(tick):
|
||||
Error.OK: mbc.send_to(unit_modbus.mb_data)
|
||||
Error.FAILED: emit_signal('socket_error', [unit_modbus, mbc])
|
||||
for sock_unit in tcp_sockets:
|
||||
var sock = sock_unit[0]
|
||||
var unit_tcp = sock_unit[1]
|
||||
|
||||
142
scripts/sch3.gd
142
scripts/sch3.gd
@@ -9,10 +9,11 @@ const REQUEST_PERIOD: int = 1000 ## Переиод запроса, мс
|
||||
## Представление прибора Щ3
|
||||
class Sch3 extends unit.Unit:
|
||||
|
||||
var mb_addr: = 0 ## Адрес устройства Modbus.
|
||||
var cmd_state: = CmdState.DONE ## Состояние выполнения текущей команды.
|
||||
var tick_rx: = 0 ## Время приёма крайнего сообщения.
|
||||
var tick_tx: = 0 ## Время отправки крайнего сообщения.
|
||||
var mb_addr: = 0 ## Адрес устройства Modbus.
|
||||
var cmd_state: = CmdState.DONE ## Состояние выполнения текущей команды.
|
||||
var tick_rx: = 0 ## Время приёма крайнего сообщения.
|
||||
var tick_tx: = 0 ## Время отправки крайнего сообщения.
|
||||
var mb_data: Dictionary = {} ## Буфер для записи в регистры модбас
|
||||
|
||||
static var json_conv: = JSON.new()
|
||||
signal resp_input(addr: int, data: Array) ## Вызывается при получении сообщения c данными из регистров входов.
|
||||
@@ -48,50 +49,43 @@ class Sch3 extends unit.Unit:
|
||||
## Производит разбор принятых данных. Вызывать при приёме данных на сокете.[br]
|
||||
## [param data] - Данные принятые на сокете.[br]
|
||||
## [param tick] - Текущщее время в мс.[br]
|
||||
func parse(data: PackedByteArray, tick: int) -> bool:
|
||||
func parse(message: Dictionary, tick: int) -> bool:
|
||||
rx_tick = tick
|
||||
if not online:
|
||||
if not online and (message['code'] != 'exception'):
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
var utf8_data = data.get_string_from_utf8()
|
||||
if Error.OK == json_conv.parse(utf8_data):
|
||||
emit_signal('data_received', data)
|
||||
var message: Dictionary = json_conv.get_data()
|
||||
if message.has('code') and message.has('data'):
|
||||
var rc: = true
|
||||
var message_code = message['code']
|
||||
var message_data = message['data']
|
||||
match message_code:
|
||||
'resp_holding', 'resp_input':
|
||||
var addr = int(message_data[0])
|
||||
var regs = message_data.slice(1)
|
||||
for i in regs.size():
|
||||
regs[i] = int(regs[i])
|
||||
emit_signal(message_code, addr, regs)
|
||||
'resp_write':
|
||||
emit_signal(message_code)
|
||||
'info':
|
||||
var msg = message['data']
|
||||
emit_signal('info_received', msg)
|
||||
'exception':
|
||||
var msg = message['data']
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('except_received', msg)
|
||||
rc = false
|
||||
_:
|
||||
var msg: String = 'код команды \"%s\" - не распознан' % message_code
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('parse_failed', msg)
|
||||
rc = false
|
||||
if (cmd_state == CmdState.WAIT) and rc:
|
||||
cmd_state = CmdState.DONE
|
||||
emit_signal('command_done')
|
||||
elif (cmd_state == CmdState.WAIT) and (not rc):
|
||||
if message.has('code') and message.has('data'):
|
||||
var rc: = true
|
||||
var message_code = message['code']
|
||||
var message_data = message['data']
|
||||
match message_code:
|
||||
'resp_holding', 'resp_input':
|
||||
var addr = int(message_data[0])
|
||||
var regs = message_data.slice(1)
|
||||
for i in regs.size():
|
||||
regs[i] = int(regs[i])
|
||||
emit_signal(message_code, addr, regs)
|
||||
'resp_write':
|
||||
emit_signal(message_code)
|
||||
'info':
|
||||
var msg = message['data']
|
||||
emit_signal('info_received', msg)
|
||||
'exception':
|
||||
var msg = message['data']
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('command_fail', self)
|
||||
else:
|
||||
var message = json_conv.get_error_message()
|
||||
emit_signal('parse_failed', message)
|
||||
emit_signal('except_received', msg)
|
||||
rc = false
|
||||
_:
|
||||
var msg: String = 'код команды \"%s\" - не распознан' % message_code
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('parse_failed', msg)
|
||||
rc = false
|
||||
if (cmd_state == CmdState.WAIT) and rc:
|
||||
cmd_state = CmdState.DONE
|
||||
emit_signal('command_done')
|
||||
elif (cmd_state == CmdState.WAIT) and (not rc):
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('command_fail', self)
|
||||
return true
|
||||
|
||||
## Отправляет команду "записать в регистры".[br]
|
||||
@@ -99,9 +93,7 @@ class Sch3 extends unit.Unit:
|
||||
## [param count] - Данные для записи в регистры от начального адреса.[br]
|
||||
func write(addr: int, data: Array) -> bool:
|
||||
if cmd_state != CmdState.DONE: return false
|
||||
var json_dict: = {'code': 'write', 'data': [addr] + data, 'unit': mb_addr}
|
||||
tx_data = JSON.stringify(json_dict).to_utf8_buffer()
|
||||
tx_len = len(tx_data)
|
||||
mb_data = {'code': 'write', 'data': [addr] + data, 'unit': mb_addr}
|
||||
cmd_state = CmdState.SEND
|
||||
return true
|
||||
|
||||
@@ -110,9 +102,7 @@ class Sch3 extends unit.Unit:
|
||||
## [param count] - Количество регистров от начального адреса.[br]
|
||||
func read_holding(addr: int, count: int = 1) -> bool:
|
||||
if cmd_state != CmdState.DONE: return false
|
||||
var json_dict: = {'code': 'read_holding', 'data': [addr, count], 'unit': mb_addr}
|
||||
tx_data = JSON.stringify(json_dict).to_utf8_buffer()
|
||||
tx_len = len(tx_data)
|
||||
mb_data = {'code': 'read_holding', 'data': [addr, count], 'unit': mb_addr}
|
||||
cmd_state = CmdState.SEND
|
||||
return true
|
||||
|
||||
@@ -121,8 +111,54 @@ class Sch3 extends unit.Unit:
|
||||
## [param count] - Количество регистров от начального адреса.[br]
|
||||
func read_input(addr: int, count: int = 1) -> bool:
|
||||
if cmd_state != CmdState.DONE: return false
|
||||
var json_dict: = {'code': 'read_input', 'data': [addr, count], 'unit': mb_addr}
|
||||
tx_data = JSON.stringify(json_dict).to_utf8_buffer()
|
||||
tx_len = len(tx_data)
|
||||
mb_data = {'code': 'read_input', 'data': [addr, count], 'unit': mb_addr}
|
||||
cmd_state = CmdState.SEND
|
||||
return true
|
||||
|
||||
|
||||
## Принимает результат команды "читать регистры хранения".[br]
|
||||
## [param return_code] - Код выполнения команды.[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Данные прочитанные из регистров.[br]
|
||||
## [param tick] - Время приёма пакета.[br]
|
||||
func on_read(return_code, base_addr, data):
|
||||
var tick = Time.get_ticks_msec()
|
||||
var msg: Dictionary
|
||||
if return_code == 0:
|
||||
msg['code'] = 'resp_holding'
|
||||
msg['data'] = [base_addr] + data
|
||||
else:
|
||||
msg['code'] = 'exception'
|
||||
parse(msg, tick)
|
||||
|
||||
|
||||
## Принимает результат команды "читать регистры входов".[br]
|
||||
## [param return_code] - Код выполнения команды.[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Данные прочитанные из регистров.[br]
|
||||
## [param tick] - Время приёма пакета.[br]
|
||||
func on_read_input(return_code, base_addr, data):
|
||||
var tick = Time.get_ticks_msec()
|
||||
var msg: Dictionary
|
||||
if return_code == 0:
|
||||
msg['code'] = 'resp_input'
|
||||
msg['data'] = [base_addr] + data
|
||||
else:
|
||||
msg['code'] = 'exception'
|
||||
parse(msg, tick)
|
||||
|
||||
|
||||
## Принимает результат команды "записать в регистры".[br]
|
||||
## [param return_code] - Код выполнения команды.[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Данные прочитанные из регистров.[br]
|
||||
## [param tick] - Время приёма пакета.[br]
|
||||
func on_write(return_code, _base_addr, data):
|
||||
var tick = Time.get_ticks_msec()
|
||||
var msg: Dictionary
|
||||
msg['data'] = 'resp_write'
|
||||
if return_code == 0:
|
||||
msg['code'] = 'resp_write'
|
||||
else:
|
||||
msg['code'] = 'exception'
|
||||
parse(msg, tick)
|
||||
|
||||
@@ -3,30 +3,34 @@ class_name rep_settings extends Node
|
||||
|
||||
## Параметры.
|
||||
|
||||
var settings_file = ProjectSettings.get_setting('application/config/settings_path', 'user://settings.json') # Путь к файлу с настройками
|
||||
|
||||
var settings_program: Dictionary
|
||||
|
||||
@export var UnitProfiles: = { \
|
||||
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
|
||||
'уарэп-яу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.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', [50066], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', [50065], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', [50067], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', [50018], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', [50017], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', [50019], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', [50050], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', [50049], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', [50051], 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 прибора ПРД-Н'],
|
||||
|
||||
# Название: [ Протокол, Адрес, Порт получения, Комментарий ]
|
||||
'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'],
|
||||
'уарэп-5п28': [ '5p28', '192.168.3.109', [50000], 'IP-адрес комплекса 5П-28'],
|
||||
|
||||
# Название: [ Протокол, Адрес, [ Порт получения, Порт отправки], ??, ??, Комментарий
|
||||
'уарэп-щ3': ['udp-json-mbcs', '127.0.0.1', [48000, 44100], false, true, 'IP-адрес и порты через которые производят обмен сообщения с драйвером клиента Modbus Serial'],
|
||||
# Название: [ Протокол, Адрес, Скорость, ??, ??, Комментарий
|
||||
'уарэп-щ3': ['mbcs', '/home/sasha/dev/tty1', [19200, 7, 'N', 8, 1], 'Параметры клиента Modbus Serial'],
|
||||
|
||||
# Название: [ Протокол, Имя порта, Скорость, Чётность, ??, Комментарий
|
||||
'уарэп-спт25-1': ['uart', '/home/sasha/dev/tty0', [19200, false, false], 'Адрес прибора СПТ-25 (G1)'],
|
||||
@@ -39,7 +43,24 @@ class_name rep_settings extends Node
|
||||
}
|
||||
|
||||
|
||||
func _ready() -> void: log.info('Модуль настроек готов')
|
||||
func _ready() -> void:
|
||||
var file = FileAccess.open(settings_file, FileAccess.READ)
|
||||
if file != null:
|
||||
var read = file.get_as_text()
|
||||
file.close()
|
||||
var json_conv: = JSON.new()
|
||||
if Error.OK == json_conv.parse(read):
|
||||
var json_data = json_conv.get_data()
|
||||
settings_program.merge(json_data)
|
||||
for key in UnitProfiles.keys():
|
||||
if json_data.has(key):
|
||||
UnitProfiles[key][1] = json_data[key][0]
|
||||
for i in len(json_data[key]) - 1:
|
||||
if json_data[key][1][i+1].is_valid_int():
|
||||
UnitProfiles[key][2][i] = int(json_data[key][i+1])
|
||||
else:
|
||||
UnitProfiles[key][2][i] = json_data[key][i+1]
|
||||
log.info('Модуль настроек готов')
|
||||
|
||||
|
||||
## Возвращает ключ устройства.
|
||||
|
||||
@@ -151,5 +151,13 @@ signal th_aoa_update(threats: Dictionary)
|
||||
## [param ecms] - <...>
|
||||
signal fs_update_color(ecms: Dictionary)
|
||||
|
||||
|
||||
signal socket_error(error: String)
|
||||
|
||||
## Вызывается при нажатии на кнопку экранной клавиатуры
|
||||
## [param state] - состояние нажатого переключателя виртуальной клавиатуры астры
|
||||
signal kb_pressed(state)
|
||||
|
||||
|
||||
## Вызывается при нажатии на кнопку экранной клавиатуры
|
||||
## [param state] - состояние скрытия кнопки ЭМС2
|
||||
signal ems2_hide_pressed(state)
|
||||
|
||||
@@ -24,6 +24,7 @@ class YaU07 extends unit.Unit:
|
||||
WRITE_FLASH_MP550 = 55, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07
|
||||
WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07
|
||||
READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07
|
||||
LOAD_EMG_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07
|
||||
}
|
||||
|
||||
var cmd_num_rx: = 0 ## Номер команды принятый
|
||||
@@ -171,6 +172,22 @@ class YaU07 extends unit.Unit:
|
||||
cmd_state = CmdState.SEND
|
||||
cmd_code_tx = cmd_code
|
||||
return true
|
||||
|
||||
func send_other(cmd_code: int):
|
||||
if (cmd_state == CmdState.WAIT) \
|
||||
or (cmd_state == CmdState.SEND) \
|
||||
or (cmd_state == CmdState.UNCK):
|
||||
return false
|
||||
if not (cmd_code == CmdCode.LOAD_EMG_DONE):
|
||||
return false
|
||||
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
||||
tx_data.encode_u16(0, cmd_retry)
|
||||
tx_data.encode_u16(2, cmd_num_tx)
|
||||
tx_data.encode_u8(6, cmd_code)
|
||||
tx_len = 7
|
||||
cmd_state = CmdState.SEND
|
||||
cmd_code_tx = cmd_code
|
||||
|
||||
## Возвращает код команды ЯУ-07.
|
||||
## rx_data - Принятые данные.
|
||||
## Возвращает - Код команды не найден, 0...255 - код команды.
|
||||
|
||||
@@ -2,7 +2,7 @@ class_name yems_boards extends Node
|
||||
|
||||
class EmsBoard:
|
||||
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
|
||||
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END} ## Состояния платы
|
||||
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END, LOAD_FAIL} ## Состояния платы
|
||||
|
||||
var id_board: int ## id платы
|
||||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||||
@@ -25,9 +25,11 @@ class EmsBoard:
|
||||
var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш
|
||||
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
|
||||
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
|
||||
var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г
|
||||
|
||||
signal upd_delay_offset(board, cur_dev) ## Согнал о обновлении данных задержек
|
||||
signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек
|
||||
signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов
|
||||
signal load_done(board) ## Сигнал о окончании загрузки данных в ячейку
|
||||
|
||||
func _init(id, base_addr, in_table, out_table, u):
|
||||
id_board = id
|
||||
@@ -41,11 +43,19 @@ class EmsBoard:
|
||||
|
||||
## Устанавливает состояние входов и выходов платы
|
||||
func set_status(status):
|
||||
var offset = yemsconsts.STATUS_OFFSET[id_board]
|
||||
var bit_online = 0 + id_board
|
||||
var bit_load = 3 + id_board
|
||||
online = (status[0] >> bit_online) & 1
|
||||
ems_load = (status[0] >> bit_load) & 1
|
||||
var offset = 0
|
||||
if id_board < 3:
|
||||
offset = yemsconsts.STATUS_OFFSET[id_board]
|
||||
var bit_online = 0 + id_board
|
||||
var bit_load = 3 + id_board
|
||||
online = (status[0] >> bit_online) & 1
|
||||
ems_load = (status[0] >> bit_load) & 1
|
||||
else:
|
||||
online = status[0] & 1
|
||||
var bit_load = 4
|
||||
ems_load = (status[0] >> bit_load) & 1
|
||||
if not online:
|
||||
need_write = true
|
||||
var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \
|
||||
(status[4 + offset] << 24) | (status[5 + offset] << 32))
|
||||
var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \
|
||||
@@ -271,3 +281,6 @@ class EmsBoard:
|
||||
else: continue
|
||||
if ports.has('%d'%(base_addr_isa + 10)):
|
||||
cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)])
|
||||
|
||||
func set_load_done():
|
||||
unit_ems.send_other(unit_ems.CmdCode.LOAD_EMG_DONE)
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
class_name yerms_consts extends Node
|
||||
|
||||
var files_folder = ProjectSettings.get_setting('application/config/kems_files_path', 'user://kems/') # Папка с файлами вариантами настроек ЭМС
|
||||
var emsg_files_folder = ProjectSettings.get_setting('application/config/emsg_files_path', 'user://emsg/') # Папка с файлами вариантами настроек ЭМС
|
||||
|
||||
var FILES_ROWS_ALIGNMENT = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER ]
|
||||
var FILES_COLUMN_WIDTHS = [ 90, 150, 150 ]
|
||||
|
||||
const NUM_INPUT = 38 ## Количество входных устройств
|
||||
const NUM_OUTPUT = 38 ## Количество выходных устройств
|
||||
const NUM_INPUT_G = 16 ## Количество входных устройств для ЭМС-Г
|
||||
const NUM_OUTPUT_G = 16 ## Количество выходных устройств для ЭМС-Г
|
||||
const NUM_BYTE_FROM_FLASH = 760 ## Количество байт для запись в flash
|
||||
const STATUS_OFFSET = { ## Смещение статуса, ключ id платы
|
||||
0: 0,
|
||||
@@ -32,6 +35,22 @@ const FILES_NAME = ['Вариант 1',
|
||||
'Вариант 5',
|
||||
]
|
||||
|
||||
## Первый элемент - имя юнита, второй - имя файла настроек
|
||||
const EMS_G_BOARDS = [
|
||||
['уарэп-яу07-2в','ЭМС-Г-В2'],
|
||||
['уарэп-яу07-2н','ЭМС-Г-Н2'],
|
||||
['уарэп-яу07-2к','ЭМС-Г-К2'],
|
||||
['уарэп-яу07-4в','ЭМС-Г-В4'],
|
||||
['уарэп-яу07-4н','ЭМС-Г-Н4'],
|
||||
['уарэп-яу07-4к','ЭМС-Г-К4'],
|
||||
['уарэп-яу07-1в','ЭМС-Г-В1'],
|
||||
['уарэп-яу07-1н','ЭМС-Г-Н1'],
|
||||
['уарэп-яу07-1к','ЭМС-Г-К1'],
|
||||
['уарэп-яу07-3в','ЭМС-Г-В3'],
|
||||
['уарэп-яу07-3н','ЭМС-Г-Н3'],
|
||||
['уарэп-яу07-3к','ЭМС-Г-К4'],]
|
||||
|
||||
|
||||
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
||||
const INPUT_KEMS = [
|
||||
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
||||
|
||||
79
scripts/yems-g.gd
Normal file
79
scripts/yems-g.gd
Normal file
@@ -0,0 +1,79 @@
|
||||
extends Node
|
||||
|
||||
var ems_board: Dictionary = {}
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
check_dir()
|
||||
var in_tbl: Array = []
|
||||
var out_tbl: Array = []
|
||||
for j in yemsconsts.NUM_INPUT_G:
|
||||
in_tbl.append([j+1])
|
||||
out_tbl.append([j+yemsconsts.STATUS_OUT_OFFSET])
|
||||
for i in len(yemsconsts.EMS_G_BOARDS):
|
||||
var unit_key = settings.get_unit_key(yemsconsts.EMS_G_BOARDS[i][0])
|
||||
var unit_ems = network.units[unit_key]
|
||||
var ems_g: yemsboards.EmsBoard = yemsboards.EmsBoard.new(i+3, 0x120, in_tbl, out_tbl, unit_ems)
|
||||
ems_board[i+3] = [ems_g, unit_ems]
|
||||
ems_g.ems_g_fn = yemsconsts.EMS_G_BOARDS[i][1]
|
||||
var params = ['','',0.0, 0,0]
|
||||
for item in ems_g.in_tbl:
|
||||
var in_dev: yemsdevs.InDev = yemsdevs.InDev.new(item[0], params, 0, 0x120)
|
||||
ems_g.in_devs[in_dev.id] = in_dev
|
||||
for item in ems_g.out_tbl:
|
||||
var out_dev = yemsdevs.OutDev.new(item[0], params, 0, 0x120)
|
||||
ems_g.out_devs[out_dev.id] = out_dev
|
||||
ems_g.need_write = true
|
||||
unit_ems.connect('data_received', Callable(self, 'on_data_ems_received').bind(ems_g))
|
||||
unit_ems.connect('command_done', Callable(self, 'on_command_done').bind(ems_g))
|
||||
unit_ems.connect('line_changed', Callable(self, 'on_line_changed').bind(ems_g))
|
||||
|
||||
|
||||
func on_line_changed(unit_ems, board):
|
||||
if not unit_ems.online:
|
||||
board.ems_load = false
|
||||
board.state_board = board.WAIT
|
||||
board.state_cmd = board.WAIT
|
||||
board.need_write = true
|
||||
|
||||
|
||||
func on_data_ems_received(unit_ems, board):
|
||||
board.set_status(unit_ems.status)
|
||||
if board.state_board == board.WAIT and board.state_cmd == board.WAIT:
|
||||
if board.online:
|
||||
if board.need_write:
|
||||
start_load(board)
|
||||
elif not board.ems_load:
|
||||
board.set_load_done()
|
||||
else:
|
||||
board.need_write = true
|
||||
|
||||
|
||||
func on_command_done(unit_ems, board):
|
||||
board.on_command_done(unit_ems)
|
||||
|
||||
|
||||
func start_load(board):
|
||||
var file = FileAccess.open(yemsconsts.emsg_files_folder + board.ems_g_fn, FileAccess.READ)
|
||||
if file == null:
|
||||
board.state_board = board.LOAD_FAIL
|
||||
return
|
||||
var read = file.get_as_text()
|
||||
file.close()
|
||||
var json_conv: = JSON.new()
|
||||
if Error.OK == json_conv.parse(read):
|
||||
var json_data = json_conv.get_data()
|
||||
board.btn_load(json_data)
|
||||
board.state_board = board.WRITE
|
||||
board.start_rw_kems(false)
|
||||
else:
|
||||
board.state_board = board.LOAD_FAIL
|
||||
|
||||
|
||||
## Проверяет ниличие директории, если их нет, создаёт
|
||||
func check_dir():
|
||||
var dir = DirAccess.open(yemsconsts.emsg_files_folder)
|
||||
if dir:
|
||||
return
|
||||
else:
|
||||
DirAccess.make_dir_absolute(yemsconsts.emsg_files_folder)
|
||||
@@ -1,4 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://dm7hh7ibuin78"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dm7hh7ibuin78"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="1_2wdrh"]
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -6,8 +8,14 @@ anchors_preset = 0
|
||||
offset_right = 96.0
|
||||
offset_bottom = 24.0
|
||||
|
||||
[node name="Lable" parent="." instance=ExtResource("1_2wdrh")]
|
||||
layout_mode = 0
|
||||
offset_right = 368.0
|
||||
offset_bottom = 21.0
|
||||
|
||||
[node name="CheckButton" type="CheckButton" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 30.0
|
||||
offset_right = 74.0
|
||||
offset_bottom = 24.0
|
||||
offset_left = 161.0
|
||||
offset_top = -2.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 22.0
|
||||
|
||||
Reference in New Issue
Block a user