Доработка ЭМС

This commit is contained in:
TotMaxim
2025-11-27 21:47:12 +03:00
parent 1f93815d25
commit 2a090d02a3
17 changed files with 820 additions and 135 deletions

View File

@@ -3,7 +3,7 @@
"ПРД-Н1": {
"temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
"power_ukp": [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011],
"sockets": [false, false, false, false, false],
"sockets": [true, true, true, true, true],
"dkm": [false, false, false, false, false, false, false],
"dou2": [false, false, false, false, false, false, false],
"dou3": [false, false, false, false, false, false, false],

70
main.gd
View File

@@ -7,6 +7,7 @@ var default_data: Dictionary = {}
var dictionary_yau07: Dictionary
var dictionary_sockets_bit: Dictionary ## Байт 8 для отправки о состоянии ячеек
func _load_default_data():
var file = FileAccess.open(CONFIG_PATH, FileAccess.READ)
if file:
@@ -32,7 +33,7 @@ func _apply_default_data():
# Заполняем поля температур
func _fill_ukp_fields(prd_node: Control, device_data: Dictionary):
func _fill_ukp_fields(prd_node: Control, device_data: Dictionary) -> void:
var device_name = prd_node.get_meta('yau07')
# Заполняем поля температур
@@ -94,7 +95,8 @@ func _fill_ukp_fields(prd_node: Control, device_data: Dictionary):
var ip_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "ip")
for i in range(min(ip_fields.size(), device_data["ip"].size())):
# Для IP используется инверсия: true в JSON = нажато = бит 0
ip_fields[i].set_pressed_no_signal(device_data["ip"][i])
var is_pressed = not device_data["ip"][i]
ip_fields[i].set_pressed_no_signal(is_pressed)
func _ready() -> void:
@@ -141,6 +143,11 @@ func _ready() -> void:
var ip_arr_node: Array = get_tree().get_nodes_in_group('ip')
for ip in ip_arr_node:
ip.connect('toggled', _on_modify_ip.bind(ip.get_meta('bit'), ip.get_meta('device')))
var ems_arr_node: Array = get_tree().get_nodes_in_group('ems_g')
for ems in ems_arr_node:
ems.connect('bits_changed', _on_modify_ems_g_status.bind(ems.get_meta('device')))
_update_tab_container()
_load_default_data()
_apply_default_data()
@@ -166,6 +173,15 @@ func on_modify_device(toggled: bool, name_device: String) -> void:
print("Устройство %s активировано" % name_device)
dictionary_yau07[name_device].connect('update_isa_ports', _on_update_isa_ports)
dictionary_yau07[name_device].connect('update_socket_status', _on_update_socket_status)
var device_data = default_data[name_device]
_on_ukp_submitted('', name_device)
dictionary_yau07[name_device].set
dictionary_yau07[name_device].status_manager.set_dou2_status(bool_array_to_number(device_data["dou2"]))
dictionary_yau07[name_device].status_manager.set_att2_status(bool_array_to_number(device_data["att2"]))
dictionary_yau07[name_device].status_manager.set_dou3_status(bool_array_to_number(device_data["dou3"]))
dictionary_yau07[name_device].status_manager.set_att3_status(bool_array_to_number(device_data["att3"]))
dictionary_yau07[name_device].set_ip_status(bool_array_to_number(device_data["ip"]))
dictionary_yau07[name_device].set_sockets_status(bool_array_to_number(device_data["sockets"]))
else:
if dictionary_yau07.has(name_device) and dictionary_yau07[name_device]:
dictionary_yau07[name_device].close_udp_unit()
@@ -209,7 +225,7 @@ func _on_update_socket_status(status: int, device_name: String)->void:
var bit_index = socket.get_meta('bit')
var is_bit_set = (status >> bit_index) & 1
socket.set_pressed_no_signal(is_bit_set == 1)
func _on_update_isa_ports(isa_ports: Dictionary, device_name: String)->void:
for port_addr in isa_ports:
@@ -271,7 +287,7 @@ func _on_modify_sockets(toggled: bool, bit: int, device: String)->void:
var current_status = udp_unit.get_sockets_status() # Используем геттер
var new_status = _set_bit(current_status, bit, toggled)
udp_unit.set_sockets_status(new_status) # Используем сеттер
print("Статус сокетов устройства %s обновлен: 0x%04X" % [device, new_status])
print("Статус сокетов устройства %s обновлен: 0x%02X" % [device, new_status])
## Функция для установки статусов ДКМ в ПРД
@@ -281,7 +297,14 @@ func _on_modify_dkm(toggled: bool, bit: int, device: String)->void:
var current_status = udp_unit.get_dkm_status() # Используем геттер
var new_status = _set_bit(current_status, bit, toggled)
udp_unit.set_dkm_status(new_status) # Используем сеттер
print("Статус DKM устройства %s обновлен: 0x%04X" % [device, new_status])
print("Статус DKM устройства %s обновлен: 0x%02X" % [device, new_status])
func _on_modify_ems_g_status(input_impulse: int, input_const: int, output_impulse: int, output_const: int, device: String)->void:
if not dictionary_yau07.has(device):
return
var udp_unit = dictionary_yau07[device]
udp_unit.set_ems_g_status(input_impulse, input_const, output_impulse, output_const)
func _on_modify_status(toggled: bool, bit: int, device: String, status_type: String) -> void:
@@ -304,16 +327,11 @@ func _on_modify_status(toggled: bool, bit: int, device: String, status_type: Str
button.set_pressed_no_signal(false)
# Устанавливаем статус через менеджер
match status_type:
"dou2":
udp_unit.status_manager.set_dou2_status(bit)
"att1":
udp_unit.status_manager.set_att1_status(bit)
"att2":
udp_unit.status_manager.set_att2_status(bit)
"dou3":
udp_unit.status_manager.set_dou3_status(bit)
"att3":
udp_unit.status_manager.set_att3_status(bit)
"dou2": udp_unit.status_manager.set_dou2_status(bit)
"att1": udp_unit.status_manager.set_att1_status(bit)
"att2": udp_unit.status_manager.set_att2_status(bit)
"dou3": udp_unit.status_manager.set_dou3_status(bit)
"att3": udp_unit.status_manager.set_att3_status(bit)
func _on_modify_ip(toggled: bool, bit: int, device: String):
@@ -323,13 +341,11 @@ func _on_modify_ip(toggled: bool, bit: int, device: String):
# Инверсия: нажата = 0, отжата = 1
var bit_value = 0 if toggled else 1
var new_status
if bit_value == 0:
new_status = current_status & ~(1 << bit) # Устанавливаем бит в 0
else:
new_status = current_status | (1 << bit) # Устанавливаем бит в 1
if bit_value == 0: new_status = current_status & ~(1 << bit) # Устанавливаем бит в 0
else: new_status = current_status | (1 << bit) # Устанавливаем бит в 1
udp_unit.set_ip_status(new_status)
print("Статус ИП устройства %s обновлен: 0x%04X" % [device, new_status])
print("Статус ИП устройства %s обновлен: 0x%02X" % [device, new_status])
## Функция для установки значений в ячейках УКП
@@ -449,7 +465,15 @@ static func _set_bit(bits: int, index: int, val: bool) -> int:
return bits | (1 << index) if val else bits & ~(1 << index)
## Новый метод для работы с ISA портами
static func bool_array_to_number(bool_array: Array)-> int:
var result: int = 0
for i in range(bool_array.size()):
if bool_array[i]:
result |= (1 << i)
return result
## Метод для работы с ISA портами
func read_isa_ports(device: String, port_addresses: Array) -> Dictionary:
"""Чтение ISA портов указанного устройства"""
if dictionary_yau07.has(device):
@@ -459,7 +483,7 @@ func read_isa_ports(device: String, port_addresses: Array) -> Dictionary:
return {}
## Новый метод для записи ISA портов
## Метод для записи ISA портов
func write_isa_port(device: String, port_address: int, value: int) -> bool:
"""Запись значения в ISA порт указанного устройства"""
if dictionary_yau07.has(device):

278
main.tscn
View File

@@ -1,6 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://bxorauom63ib6"]
[gd_scene load_steps=7 format=3 uid="uid://bxorauom63ib6"]
[ext_resource type="Script" uid="uid://d1qwoxkckvdbc" path="res://main.gd" id="1_ig7tw"]
[ext_resource type="PackedScene" uid="uid://2rjgbflmbi7e" path="res://емс_г.tscn" id="2_0xm2m"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0xm2m"]
bg_color = Color(0.1167, 0.351514, 0.35159, 1)
@@ -24,8 +25,8 @@ script = ExtResource("1_ig7tw")
[node name="Panel" type="Panel" parent="."]
layout_mode = 0
offset_right = 1541.0
offset_bottom = 615.0
offset_right = 1634.0
offset_bottom = 885.0
[node name="Yau-07-addr" type="GridContainer" parent="."]
layout_mode = 0
@@ -33,73 +34,122 @@ offset_left = 32.0
offset_top = 24.0
offset_right = 140.0
offset_bottom = 440.0
columns = 2
[node name="CheckButton" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-Н1"
metadata/device = "ПРД-Н1"
[node name="Label" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.11"
[node name="CheckButton2" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-В1"
metadata/device = "ПРД-В1"
[node name="Label2" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.12"
[node name="CheckButton3" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-К1"
metadata/device = "ПРД-К1"
[node name="Label3" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.13"
[node name="CheckButton4" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-Н2"
metadata/device = "ПРД-Н2"
[node name="Label4" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.21"
[node name="CheckButton5" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-В2"
metadata/device = "ПРД-В2"
[node name="Label5" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.22"
[node name="CheckButton6" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-К2"
metadata/device = "ПРД-К2"
[node name="Label6" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.23"
[node name="CheckButton7" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-Н3"
metadata/device = "ПРД-Н3"
[node name="Label7" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.31"
[node name="CheckButton8" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-В3"
metadata/device = "ПРД-В3"
[node name="Label8" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.32"
[node name="CheckButton9" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-К3"
metadata/device = "ПРД-К3"
[node name="Label9" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.33"
[node name="CheckButton10" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-Н4"
metadata/device = "ПРД-Н4"
[node name="Label10" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.41"
[node name="CheckButton11" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-В4"
metadata/device = "ПРД-В4"
[node name="Label11" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.42"
[node name="CheckButton12" type="CheckButton" parent="Yau-07-addr" groups=["device-addr"]]
layout_mode = 2
text = "ПРД-К4"
metadata/device = "ПРД-К4"
[node name="Label12" type="Label" parent="Yau-07-addr"]
layout_mode = 2
text = "10.1.1.43"
[node name="TabContainer" type="TabContainer" parent="."]
layout_mode = 0
offset_left = 187.0
offset_left = 237.0
offset_top = 19.0
offset_right = 1373.0
offset_bottom = 442.0
offset_right = 1472.0
offset_bottom = 752.0
current_tab = 2
use_hidden_tabs_for_min_size = true
tab_focus_mode = 0
@@ -113,8 +163,10 @@ metadata/yau07 = "ПРД-Н1"
[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-Н1"]
layout_mode = 2
offset_right = 140.0
offset_bottom = 171.0
offset_left = 19.0
offset_top = 14.0
offset_right = 159.0
offset_bottom = 185.0
[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
layout_mode = 2
@@ -146,442 +198,446 @@ text = "Загрузка ЭМС"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="TabBar" type="TabContainer" parent="TabContainer/ПРД-Н1"]
[node name="SocketsBar" type="TabContainer" parent="TabContainer/ПРД-Н1"]
layout_mode = 0
offset_left = 199.0
offset_top = 9.0
offset_right = 957.0
offset_bottom = 334.0
offset_right = 1234.0
offset_bottom = 760.0
current_tab = 2
tabs_position = 1
tab_focus_mode = 0
[node name="ukp_1" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar"]
[node name="УКП-1" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar"]
visible = false
layout_mode = 2
columns = 7
metadata/_tab_index = 0
[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_1"]
[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_styles/normal = SubResource("StyleBoxFlat_ig7tw")
text = "Температуры"
horizontal_alignment = 1
[node name="TextEdit" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["temperature_ukp"]]
[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="Label2" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_1"]
[node name="Label2" type="Label" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_styles/normal = SubResource("StyleBoxFlat_ig7tw")
text = "Мощность"
horizontal_alignment = 1
[node name="TextEdit7" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit7" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_1" groups=["power_ukp"]]
[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-1" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="ukp_2" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar"]
[node name="УКП-2" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar"]
visible = false
layout_mode = 2
columns = 7
metadata/_tab_index = 1
[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_2"]
[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_styles/normal = SubResource("StyleBoxFlat_ig7tw")
text = "Температуры"
horizontal_alignment = 1
[node name="TextEdit" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["temperature_ukp"]]
[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["temperature_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="Label2" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_2"]
[node name="Label2" type="Label" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_styles/normal = SubResource("StyleBoxFlat_ig7tw")
text = "Мощность"
horizontal_alignment = 1
[node name="TextEdit7" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit7" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_2" groups=["power_ukp"]]
[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-Н1/SocketsBar/УКП-2" groups=["power_ukp"]]
custom_minimum_size = Vector2(100, 35)
layout_mode = 2
placeholder_text = "0"
metadata/device = "ПРД-Н1"
[node name="ug" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar"]
[node name="УГ" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar"]
layout_mode = 2
columns = 5
metadata/_tab_index = 2
[node name="GridContainer4" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
[node name="GridContainer4" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar/УГ"]
layout_mode = 2
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ -5°"
metadata/bit = 0
metadata/device = "ПРД-Н1"
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ 5°"
metadata/bit = 1
metadata/device = "ПРД-Н1"
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ 15°"
metadata/bit = 2
metadata/device = "ПРД-Н1"
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ 25°"
metadata/bit = 3
metadata/device = "ПРД-Н1"
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ 35°"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ 45°"
metadata/bit = 5
metadata/device = "ПРД-Н1"
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer4" groups=["dou2"]]
layout_mode = 2
text = "ЛУЧ КОНТРОЛЬ"
metadata/bit = 6
metadata/device = "ПРД-Н1"
[node name="GridContainer" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
[node name="GridContainer" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar/УГ"]
layout_mode = 2
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ -5°"
metadata/bit = 0
metadata/device = "ПРД-Н1"
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ 5°"
metadata/bit = 1
metadata/device = "ПРД-Н1"
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ 15°"
metadata/bit = 2
metadata/device = "ПРД-Н1"
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ 25°"
metadata/bit = 3
metadata/device = "ПРД-Н1"
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ 35°"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ 45°"
metadata/bit = 5
metadata/device = "ПРД-Н1"
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer" groups=["dou3"]]
layout_mode = 2
text = "ЛУЧ КОНТРОЛЬ"
metadata/bit = 6
metadata/device = "ПРД-Н1"
[node name="GridContainer2" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
[node name="GridContainer2" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar/УГ"]
layout_mode = 2
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 0 dB"
metadata/device = "ПРД-Н1"
metadata/bit = 0
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 0.5 dB"
metadata/bit = 1
metadata/device = "ПРД-Н1"
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 2 dB"
metadata/bit = 2
metadata/device = "ПРД-Н1"
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 2.5 dB"
metadata/bit = 3
metadata/device = "ПРД-Н1"
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 8 dB"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 8.5 dB"
metadata/bit = 5
metadata/device = "ПРД-Н1"
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 10 dB"
metadata/bit = 6
metadata/device = "ПРД-Н1"
[node name="CheckBox8" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
[node name="CheckBox8" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer2" groups=["att2"]]
layout_mode = 2
text = "АТТ 10.5 dB"
metadata/bit = 7
metadata/device = "ПРД-Н1"
[node name="GridContainer5" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
[node name="GridContainer5" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar/УГ"]
layout_mode = 2
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 0 dB"
metadata/bit = 0
metadata/device = "ПРД-Н1"
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 0.5 dB"
metadata/bit = 1
metadata/device = "ПРД-Н1"
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 2 dB"
metadata/bit = 2
metadata/device = "ПРД-Н1"
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 2.5 dB"
metadata/bit = 3
metadata/device = "ПРД-Н1"
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 8 dB"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 8.5 dB"
metadata/bit = 5
metadata/device = "ПРД-Н1"
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 10 dB"
metadata/bit = 6
metadata/device = "ПРД-Н1"
[node name="CheckBox8" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer5" groups=["att3"]]
[node name="CheckBox8" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer5" groups=["att3"]]
layout_mode = 2
text = "АТТ 10.5 dB"
metadata/bit = 7
metadata/device = "ПРД-Н1"
[node name="GridContainer3" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
[node name="GridContainer3" type="GridContainer" parent="TabContainer/ПРД-Н1/SocketsBar/УГ"]
layout_mode = 2
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "МАА №1"
metadata/bit = 0
metadata/device = "ПРД-Н1"
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "МАА №2"
metadata/bit = 1
metadata/device = "ПРД-Н1"
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "ИП9-50 №1"
metadata/bit = 2
metadata/device = "ПРД-Н1"
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox4" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "ИП9-50 №2"
metadata/bit = 3
metadata/device = "ПРД-Н1"
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "ИП12-50 №1"
metadata/bit = 4
metadata/device = "ПРД-Н1"
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer3" groups=["ip"]]
[node name="CheckBox6" type="CheckBox" parent="TabContainer/ПРД-Н1/SocketsBar/УГ/GridContainer3" groups=["ip"]]
layout_mode = 2
text = "ИП5-25"
metadata/bit = 7
metadata/device = "ПРД-Н1"
[node name="ЕМС-Г" parent="TabContainer/ПРД-Н1/SocketsBar" groups=["ems_g"] instance=ExtResource("2_0xm2m")]
visible = false
layout_mode = 2
metadata/device = "ПРД-Н1"
[node name="dkm" type="GridContainer" parent="TabContainer/ПРД-Н1"]
layout_mode = 0
offset_left = 10.0
offset_top = 201.0
offset_right = 50.0
offset_bottom = 241.0
offset_left = 19.0
offset_top = 206.0
offset_right = 97.0
offset_bottom = 272.0
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/dkm" groups=["dkm"]]
layout_mode = 2
@@ -604,6 +660,10 @@ metadata/yau07 = "ПРД-В1"
[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-В1"]
layout_mode = 2
offset_left = 19.0
offset_top = 14.0
offset_right = 159.0
offset_bottom = 185.0
[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
layout_mode = 2
@@ -638,9 +698,8 @@ metadata/device = "ПРД-В1"
[node name="TabBar" type="TabContainer" parent="TabContainer/ПРД-В1"]
layout_mode = 0
offset_left = 199.0
offset_top = 9.0
offset_right = 970.0
offset_bottom = 370.0
offset_right = 1235.0
offset_bottom = 733.0
current_tab = 2
tabs_position = 1
tab_focus_mode = 0
@@ -1100,12 +1159,17 @@ text = "ИП5-25"
metadata/bit = 7
metadata/device = "ПРД-В1"
[node name="ЕМС-Г" parent="TabContainer/ПРД-В1/TabBar" groups=["ems_g"] instance=ExtResource("2_0xm2m")]
visible = false
layout_mode = 2
metadata/device = "ПРД-В1"
[node name="dkm" type="GridContainer" parent="TabContainer/ПРД-В1"]
layout_mode = 0
offset_left = 10.0
offset_top = 201.0
offset_right = 50.0
offset_bottom = 241.0
offset_left = 19.0
offset_top = 206.0
offset_right = 97.0
offset_bottom = 272.0
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-В1/dkm" groups=["dkm"]]
layout_mode = 2
@@ -1127,6 +1191,10 @@ metadata/yau07 = "ПРД-К1"
[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-К1"]
layout_mode = 2
offset_left = 19.0
offset_top = 14.0
offset_right = 159.0
offset_bottom = 185.0
[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
layout_mode = 2
@@ -1162,9 +1230,9 @@ metadata/device = "ПРД-К1"
layout_direction = 2
layout_mode = 0
offset_left = 170.0
offset_top = 9.0
offset_right = 1144.0
offset_bottom = 370.0
offset_top = 1.0
offset_right = 1235.0
offset_bottom = 734.0
current_tab = 3
tabs_position = 1
tab_focus_mode = 0
@@ -1729,12 +1797,18 @@ text = "ИП5-25"
metadata/bit = 7
metadata/device = "ПРД-К1"
[node name="ЕМС-Г" parent="TabContainer/ПРД-К1/TabBar" groups=["ems_g"] instance=ExtResource("2_0xm2m")]
visible = false
layout_mode = 2
metadata/_tab_index = 4
metadata/device = "ПРД-В1"
[node name="dkm" type="GridContainer" parent="TabContainer/ПРД-К1"]
layout_mode = 0
offset_left = 10.0
offset_top = 201.0
offset_right = 50.0
offset_bottom = 241.0
offset_left = 19.0
offset_top = 206.0
offset_right = 97.0
offset_bottom = 307.0
[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-К1/dkm" groups=["dkm"]]
layout_mode = 2

View File

@@ -17,8 +17,8 @@ config/icon="res://icon.svg"
[display]
window/size/viewport_width=1400
window/size/viewport_height=600
window/size/viewport_width=1500
window/size/viewport_height=850
[rendering]

21
socket_status.gd Normal file
View File

@@ -0,0 +1,21 @@
extends PanelContainer
@onready var animated_sprite = $SZI_x
signal update_frame(bit: int, frame: int)
func _ready():
gui_input.connect(_on_gui_input)
mouse_filter = Control.MOUSE_FILTER_PASS
func _on_gui_input(event):
if event is InputEventMouseButton:
if event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
_switch_frame()
func _switch_frame():
var current_frame = animated_sprite.frame
var next_frame = (current_frame + 1) % 3
animated_sprite.frame = next_frame
emit_signal('update_frame', get_meta("bit"), next_frame)

1
socket_status.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://bg8n8wt3kjqpm

46
socket_status.tscn Normal file
View File

@@ -0,0 +1,46 @@
[gd_scene load_steps=7 format=3 uid="uid://dn3jp4r8ij3rf"]
[ext_resource type="Texture2D" uid="uid://cwabmu3cljbpr" path="res://эмс-бланк.png" id="1_bsrew"]
[ext_resource type="Script" uid="uid://bg8n8wt3kjqpm" path="res://socket_status.gd" id="1_kydjn"]
[ext_resource type="Texture2D" uid="uid://sx6xcpus2yf" path="res://эмс-бланк-пост.png" id="2_b2kjm"]
[ext_resource type="Texture2D" uid="uid://snpqhalopnp" path="res://эмс-бланк-перем.png" id="3_odpjv"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_q1ixs"]
bg_color = Color(0, 0, 0, 0.490196)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
[sub_resource type="SpriteFrames" id="SpriteFrames_a7q1i"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("1_bsrew")
}, {
"duration": 1.0,
"texture": ExtResource("2_b2kjm")
}, {
"duration": 1.0,
"texture": ExtResource("3_odpjv")
}, {
"duration": 1.0,
"texture": null
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="PanelContainer" type="PanelContainer"]
custom_minimum_size = Vector2(50, 35)
offset_left = -3.0
offset_right = 47.0
offset_bottom = 35.0
theme_override_styles/panel = SubResource("StyleBoxFlat_q1ixs")
script = ExtResource("1_kydjn")
[node name="SZI_x" type="AnimatedSprite2D" parent="."]
position = Vector2(25, 17)
scale = Vector2(1.2, 1.2)
sprite_frames = SubResource("SpriteFrames_a7q1i")

View File

@@ -49,6 +49,10 @@ var _dkm_status_bit: int = 0
var _dry_contact_status_bit: int = 0xFF
var _cmd_number_count: int = 0
var _last_received_command: int = -1
var _input_impulse: int = 0xffff
var _input_const: int = 0xffff
var _output_impulse: int = 0xffff
var _output_const: int = 0xffff
var ukp0_data: PackedByteArray
var ukp1_data: PackedByteArray
@@ -198,6 +202,14 @@ func get_ip_status()->int:
return _dry_contact_status_bit
func set_ems_g_status(in_imp: int, in_const: int, out_imp: int, out_const: int) -> void:
'''Установка статуса входов и выходов ЕМС'''
_input_impulse = in_imp
_input_const = in_const
_output_impulse = out_imp
_output_const = out_const
func set_isa_port(port_addr: int, value: int) -> bool:
'''Установка значения ISA порта'''
if port_addr < 0 or port_addr > 0xFFFF:
@@ -343,13 +355,15 @@ func _encode_device_data(buffer: PackedByteArray) -> void:
func _encode_ems_g_data(buffer: PackedByteArray) -> void:
'''Кодирование данных EMS-G'''
var ems_g_data = [
0x9e00, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000,
0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff
]
for i in range(ems_g_data.size()):
buffer.encode_u16(EMS_G_DATA_OFFSET + i * 2, ems_g_data[i])
#var ems_g_data = [
#0x9e00, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff,
#0x0000, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff,
#0xffff
#]
buffer.encode_u16(EMS_G_DATA_OFFSET, _input_const)
buffer.encode_u16(EMS_G_DATA_OFFSET + 6, _input_impulse)
buffer.encode_u16(EMS_G_DATA_OFFSET + 12, _output_const)
buffer.encode_u16(EMS_G_DATA_OFFSET + 18, _output_impulse)
func _encode_ug_data(buffer: PackedByteArray) -> void:

92
емс_г.gd Normal file
View File

@@ -0,0 +1,92 @@
extends Panel
@onready var output_status = $output
# Константы состояний фреймов
const FRAME_OFF := 0
const FRAME_CONST := 1
const FRAME_IMPULSE := 2
var _input_impulse: int = 0
var _input_const: int = 0
var _output_impulse: int = 0
var _output_const: int = 0
#region Сигналы для уведомления об изменениях
signal input_bits_updated(input_impulse: int, input_const: int)
signal output_bits_updated(output_impulse: int, output_const: int)
signal bits_changed(input_impulse: int, input_const: int, output_impulse: int, output_const: int)
#endregion
func _ready():
_setup_connections()
func _setup_connections():
var _input_nodes = get_tree().get_nodes_in_group('input')
var _output_nodes = get_tree().get_nodes_in_group('output')
for node in _input_nodes:
if node.has_signal('update_frame'):
node.update_frame.connect(on_update_frame_input)
for node in _output_nodes:
if node.has_signal('update_frame'):
node.update_frame.connect(on_update_frame_output)
func on_update_frame_input(bit: int, frame: int)-> void:
var mask = 1 << bit
var old_impulse = _input_impulse
var old_const = _input_const
_input_impulse = _input_impulse & ~mask | (mask if frame == FRAME_IMPULSE else 0)
_input_const = _input_const & ~mask | (mask if frame == FRAME_CONST else 0)
# Отправляем сигналы только если значения изменились
if _input_impulse != old_impulse || _input_const != old_const:
input_bits_updated.emit(get_input_impulse(), get_input_const())
bits_changed.emit(get_input_impulse(), get_input_const(), get_output_impulse(), get_output_const())
func on_update_frame_output(bit: int, frame: int)-> void:
var mask = 1 << bit
var old_impulse = _output_impulse
var old_const = _output_const
_output_impulse = _output_impulse & ~mask | (mask if frame == FRAME_IMPULSE else 0)
_output_const = _output_const & ~mask | (mask if frame == FRAME_CONST else 0)
# Отправляем сигналы только если значения изменились
if _output_impulse != old_impulse || _output_const != old_const:
output_bits_updated.emit(get_output_impulse(), get_output_const())
bits_changed.emit(get_input_impulse(), get_input_const(), get_output_impulse(), get_output_const())
func _invert_bits(value: int) -> int:
"""Инвертирует все биты (0 становится 0xFFFF, 0xFFFF становится 0)"""
return value ^ 0xFFFF
#region Геттеры для безопасного доступа к данным
func get_input_impulse() -> int:
return _input_impulse
func get_input_const() -> int:
return _input_const
func get_output_impulse() -> int:
return _output_impulse
func get_output_const() -> int:
return _output_const
#endregion
#region Функция для получения всех данных сразу
func get_all_bits() -> Dictionary:
return {
"input_impulse": _input_impulse,
"input_const": _input_const,
"output_impulse": _output_impulse,
"output_const": _output_const
}
#endregion

1
емс_г.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://d2fgin0bhm826

310
емс_г.tscn Normal file
View File

@@ -0,0 +1,310 @@
[gd_scene load_steps=4 format=3 uid="uid://2rjgbflmbi7e"]
[ext_resource type="PackedScene" uid="uid://dn3jp4r8ij3rf" path="res://socket_status.tscn" id="1_deko5"]
[ext_resource type="Script" uid="uid://d2fgin0bhm826" path="res://емс_г.gd" id="1_tk3ne"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_deko5"]
[node name="ЕМС-Г" type="Panel"]
offset_right = 789.0
offset_bottom = 395.0
theme_override_styles/panel = SubResource("StyleBoxTexture_deko5")
script = ExtResource("1_tk3ne")
metadata/_tab_index = 3
[node name="output" type="GridContainer" parent="."]
layout_mode = 2
offset_left = 161.0
offset_top = 15.0
offset_right = 1021.0
offset_bottom = 77.0
columns = 16
[node name="Label" type="Label" parent="output"]
layout_mode = 2
text = "СИ1"
[node name="Label2" type="Label" parent="output"]
layout_mode = 2
text = "СИ2"
[node name="Label3" type="Label" parent="output"]
layout_mode = 2
text = "СИ3"
[node name="Label4" type="Label" parent="output"]
layout_mode = 2
text = "Мод1"
[node name="Label5" type="Label" parent="output"]
layout_mode = 2
text = "Мод2"
[node name="Label6" type="Label" parent="output"]
layout_mode = 2
text = "Мод3"
[node name="Label7" type="Label" parent="output"]
layout_mode = 2
[node name="Label8" type="Label" parent="output"]
layout_mode = 2
[node name="Label9" type="Label" parent="output"]
layout_mode = 2
text = "ФГОЗ"
[node name="Label10" type="Label" parent="output"]
layout_mode = 2
text = "ФГОЗ"
[node name="Label11" type="Label" parent="output"]
layout_mode = 2
text = "МодМ"
[node name="Label12" type="Label" parent="output"]
layout_mode = 2
[node name="Label13" type="Label" parent="output"]
layout_mode = 2
[node name="Label14" type="Label" parent="output"]
layout_mode = 2
[node name="Label15" type="Label" parent="output"]
layout_mode = 2
[node name="Label16" type="Label" parent="output"]
layout_mode = 2
[node name="PanelContainer0" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 0
[node name="PanelContainer1" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 1
[node name="PanelContainer2" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 2
[node name="PanelContainer3" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 3
[node name="PanelContainer4" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 4
[node name="PanelContainer5" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 5
[node name="PanelContainer6" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 6
[node name="PanelContainer7" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 7
[node name="PanelContainer8" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 8
[node name="PanelContainer9" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 9
[node name="PanelContainer10" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 10
[node name="PanelContainer11" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 11
[node name="PanelContainer12" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 12
[node name="PanelContainer13" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 13
[node name="PanelContainer14" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 14
[node name="PanelContainer15" parent="output" groups=["output"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 15
[node name="input" type="GridContainer" parent="."]
layout_mode = 2
offset_left = 9.0
offset_top = 83.0
offset_right = 155.0
offset_bottom = 703.0
columns = 2
[node name="Label" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ1 от УФ"
[node name="PanelContainer0" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 0
[node name="Label2" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ2 от УФ"
[node name="PanelContainer1" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 1
[node name="Label3" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ3 от УФ"
[node name="PanelContainer2" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 2
[node name="Label4" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ4 от УФ"
[node name="PanelContainer3" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 3
[node name="Label5" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ5 от УФ"
[node name="PanelContainer4" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 4
[node name="Label6" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ6 от УФ"
[node name="PanelContainer5" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 5
[node name="Label7" type="Label" parent="input"]
layout_mode = 2
text = "СЗИ7 от УФ"
[node name="PanelContainer6" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 6
[node name="Label8" type="Label" parent="input"]
layout_mode = 2
text = "Х"
[node name="PanelContainer7" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 7
[node name="Label9" type="Label" parent="input"]
layout_mode = 2
text = "СИ1 от ФС"
[node name="PanelContainer8" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 8
[node name="Label10" type="Label" parent="input"]
layout_mode = 2
text = "СИ2 от ФС"
[node name="PanelContainer9" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 9
[node name="Label11" type="Label" parent="input"]
layout_mode = 2
text = "СИ3 от ФС"
[node name="PanelContainer10" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 10
[node name="Label12" type="Label" parent="input"]
layout_mode = 2
text = "СИ4 от ФС"
[node name="PanelContainer11" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 11
[node name="Label13" type="Label" parent="input"]
layout_mode = 2
text = "СИ5 от ФС"
[node name="PanelContainer12" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 12
[node name="Label14" type="Label" parent="input"]
layout_mode = 2
text = "СИ6 от ФС"
[node name="PanelContainer13" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 13
[node name="Label15" type="Label" parent="input"]
layout_mode = 2
text = "СИ7 от ФС"
[node name="PanelContainer14" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 14
[node name="Label16" type="Label" parent="input"]
layout_mode = 2
text = "Х"
[node name="PanelContainer15" parent="input" groups=["input"] instance=ExtResource("1_deko5")]
layout_mode = 2
mouse_default_cursor_shape = 2
metadata/bit = 15

BIN
эмс-бланк-перем.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://snpqhalopnp"
path="res://.godot/imported/эмс-бланк-перем.png-011e0d06ef6ddca754d1f3d8e11a448c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://эмс-бланк-перем.png"
dest_files=["res://.godot/imported/эмс-бланк-перем.png-011e0d06ef6ddca754d1f3d8e11a448c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
эмс-бланк-пост.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://sx6xcpus2yf"
path="res://.godot/imported/эмс-бланк-пост.png-439ef19be91abe97f22f96e843d00c61.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://эмс-бланк-пост.png"
dest_files=["res://.godot/imported/эмс-бланк-пост.png-439ef19be91abe97f22f96e843d00c61.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
эмс-бланк.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwabmu3cljbpr"
path="res://.godot/imported/эмс-бланк.png-59a703aa6cdf36be7c906f7ee7a30184.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://эмс-бланк.png"
dest_files=["res://.godot/imported/эмс-бланк.png-59a703aa6cdf36be7c906f7ee7a30184.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1