From 66241101923258e20bbb9e0a9672025959c9b724 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Thu, 20 Nov 2025 21:37:17 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?=
=?UTF-8?q?=D0=BA=D0=B0=20=D0=A3=D0=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/default_data.json | 136 +++++++++++
main.gd | 187 +++++++++++++++-
main.tscn | 470 +++++++++++++++++++++++++++++----------
udp_broadcast.gd | 47 +++-
4 files changed, 721 insertions(+), 119 deletions(-)
create mode 100644 config/default_data.json
diff --git a/config/default_data.json b/config/default_data.json
new file mode 100644
index 0000000..49e3337
--- /dev/null
+++ b/config/default_data.json
@@ -0,0 +1,136 @@
+{
+ "default_data": {
+ "ПРД-Н1": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-В1": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, true, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, true]
+ },
+ "ПРД-К1": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-Н2": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-В2": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-К2": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-Н3": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-В3": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-К3": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-Н4": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-В4": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ },
+ "ПРД-К4": {
+ "temperature_ukp": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
+ "power_ukp": [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112],
+ "sockets": [false, false, false, false, false],
+ "dkm": [false, false, false, false, false, false, false],
+ "dou2": [false, false, false, false, false, false, false],
+ "dou3": [false, false, false, false, false, false, false],
+ "att2": [false, false, false, false, false, false, false, false],
+ "att3": [false, false, false, false, false, false, false, false],
+ "ip": [false, false, false, false, false, false, false, false]
+ }
+ }
+}
diff --git a/main.gd b/main.gd
index 7062361..1592b71 100644
--- a/main.gd
+++ b/main.gd
@@ -1,15 +1,101 @@
extends Control
+const CONFIG_PATH = "res://config/default_data.json"
const BUFFER_SIZE = 32
-var dictionary_yau07: Dictionary
var udp_broadcast: UDPBroadcast
+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:
+ var json = JSON.new()
+ var error = json.parse(file.get_as_text())
+ if error == OK:
+ default_data = json.data["default_data"]
+ else:
+ push_error("JSON Parse Error: ", json.get_error_message())
+ file.close()
+ else:
+ push_error("Failed to load config file: ", CONFIG_PATH)
+
+
+func _apply_default_data():
+ var prd_nodes = get_tree().get_nodes_in_group('prd')
+
+ for prd in prd_nodes:
+ var device_name = prd.get_meta('yau07')
+ if default_data.has(device_name):
+ var device_data = default_data[device_name]
+ _fill_ukp_fields(prd, device_data)
+
+
+# Заполняем поля температур
+func _fill_ukp_fields(prd_node: Control, device_data: Dictionary):
+ var device_name = prd_node.get_meta('yau07')
+
+ # Заполняем поля температур
+ var temp_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "temperature_ukp")
+ if device_data.has("temperature_ukp"):
+ for i in range(min(temp_fields.size(), device_data["temperature_ukp"].size())):
+ temp_fields[i].text = str(device_data["temperature_ukp"][i])
+
+ # Заполняем поля мощности
+ var power_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "power_ukp")
+ if device_data.has("power_ukp"):
+ for i in range(min(power_fields.size(), device_data["power_ukp"].size())):
+ power_fields[i].text = str(device_data["power_ukp"][i])
+
+ # Устанавливаем состояния сокетов
+ if device_data.has("sockets"):
+ var socket_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "socket")
+ for i in range(min(socket_fields.size(), device_data["sockets"].size())):
+ socket_fields[i].set_pressed_no_signal(device_data["sockets"][i])
+
+ # Устанавливаем состояния ДКМ
+ if device_data.has("dkm"):
+ var dkm_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "dkm")
+ for i in range(min(dkm_fields.size(), device_data["dkm"].size())):
+ dkm_fields[i].set_pressed_no_signal(device_data["dkm"][i])
+
+ # Устанавливаем состояния ДОУ2
+ if device_data.has("dou2"):
+ var dou2_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "dou2")
+ for i in range(min(dou2_fields.size(), device_data["dou2"].size())):
+ dou2_fields[i].set_pressed_no_signal(device_data["dou2"][i])
+
+ # Устанавливаем состояния ДОУ3
+ if device_data.has("dou3"):
+ var dou3_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "dou3")
+ for i in range(min(dou3_fields.size(), device_data["dou3"].size())):
+ dou3_fields[i].set_pressed_no_signal(device_data["dou3"][i])
+
+ # Устанавливаем состояния аттенюаторов 2
+ if device_data.has("att2"):
+ var att2_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "att2")
+ for i in range(min(att2_fields.size(), device_data["att2"].size())):
+ att2_fields[i].set_pressed_no_signal(device_data["att2"][i])
+
+ # Устанавливаем состояния аттенюаторов 3
+ if device_data.has("att3"):
+ var att3_fields = _get_ukp_nodes_for_device(device_name, [prd_node], "att3")
+ for i in range(min(att3_fields.size(), device_data["att3"].size())):
+ att3_fields[i].set_pressed_no_signal(device_data["att3"][i])
+
+ # Устанавливаем состояния источников питания (с инверсией)
+ if device_data.has("ip"):
+ 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])
+
func _ready() -> void:
var device_yau07: Array = get_tree().get_nodes_in_group('device-addr')
for device in device_yau07:
device.connect('toggled', on_modify_device.bind(device.get_meta('device')))
+
var sockets: Array = get_tree().get_nodes_in_group('socket')
for soc in sockets:
soc.connect('toggled', _on_modify_sockets.bind(soc.get_meta('bit'), soc.get_meta('device'))) ## Мета bit от 0 до 3, мета ПРД
@@ -26,6 +112,21 @@ func _ready() -> void:
for dkm in dkm_arr_node:
dkm.connect('toggled', _on_modify_dkm.bind(dkm.get_meta('bit'), dkm.get_meta('device')))
+ var dou2_arr_node: Array = get_tree().get_nodes_in_group('dou2')
+ for dou2 in dou2_arr_node:
+ dou2.connect('toggled', _on_modify_dou2.bind(dou2.get_meta('bit'), dou2.get_meta('device')))
+
+ var dou3_arr_node: Array = get_tree().get_nodes_in_group('dou3')
+ for dou3 in dou3_arr_node:
+ dou3.connect('toggled', _on_modify_dou3.bind(dou3.get_meta('bit'), dou3.get_meta('device')))
+
+ 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')))
+ _update_tab_container()
+ _load_default_data()
+ _apply_default_data()
+
func _exit_tree():
for device in dictionary_yau07:
@@ -45,6 +146,35 @@ func on_modify_device(toggled: bool, name_device: String) -> void:
dictionary_yau07[name_device].close_udp_unit()
dictionary_yau07.erase(name_device)
print("Устройство %s деактивировано" % name_device)
+ _update_tab_container()
+
+
+func _update_tab_container():
+ var tab_container = $TabContainer
+ var device_nodes = get_tree().get_nodes_in_group('device-addr')
+ var has_visible_tabs = false
+ # Проходим по всем вкладкам и обновляем их состояние
+ for i in range(tab_container.get_tab_count()):
+ var tab_control = tab_container.get_tab_control(i)
+ var device_name = tab_control.get_meta('yau07', '')
+
+ # Ищем соответствующую кнопку устройства
+ var device_button = null
+ for device in device_nodes:
+ if device.get_meta('device') == device_name:
+ device_button = device
+ break
+
+ # Если нашли кнопку, устанавливаем состояние вкладки
+ if device_button:
+ var is_enabled = device_button.button_pressed
+ tab_container.set_tab_disabled(i, !is_enabled)
+
+ if is_enabled:
+ has_visible_tabs = true
+
+ # Если все вкладки заблокированы, скрываем TabContainer
+ tab_container.visible = has_visible_tabs
## Функция для установки статусов ячеек на связи (УГ, ЭМС-Г, УКП)
@@ -67,6 +197,61 @@ func _on_modify_dkm(toggled: bool, bit: int, device: String)->void:
print("Статус DKM устройства %s обновлен: 0x%04X" % [device, new_status])
+## Функция для установки статусов ДОУ2 в ПРД
+func _on_modify_dou2(toggled: bool, bit: int, device: String)->void:
+ if not toggled:
+ var dou2_arr_node = get_tree().get_nodes_in_group('dou2')
+ for dou2 in dou2_arr_node:
+ if dou2.has_meta('bit') and dou2.get_meta('bit') == bit:
+ dou2.set_pressed(true)
+ if toggled:
+ var dou2_arr_node = get_tree().get_nodes_in_group('dou2')
+ for dou2 in dou2_arr_node:
+ if dou2.has_meta('bit') and dou2.get_meta('bit') != bit and dou2.button_pressed:
+ dou2.set_pressed_no_signal(false)
+
+ # Всегда устанавливаем статус, если кнопка нажата
+ if toggled and dictionary_yau07.has(device):
+ var udp_unit = dictionary_yau07[device]
+ udp_unit.set_dou2_status(bit)
+
+
+## Функция для установки статусов ДОУ3 в ПРД
+func _on_modify_dou3(toggled: bool, bit: int, device: String)->void:
+ if not toggled:
+ var dou3_arr_node = get_tree().get_nodes_in_group('dou3')
+ for dou3 in dou3_arr_node:
+ if dou3.has_meta('bit') and dou3.get_meta('bit') == bit:
+ dou3.set_pressed(true)
+
+ if toggled:
+ var dou3_arr_node = get_tree().get_nodes_in_group('dou3')
+ for dou3 in dou3_arr_node:
+ if dou3.has_meta('bit') and dou3.get_meta('bit') != bit and dou3.button_pressed:
+ dou3.set_pressed_no_signal(false)
+
+ # Всегда устанавливаем статус, если кнопка нажата
+ if toggled and dictionary_yau07.has(device):
+ var udp_unit = dictionary_yau07[device]
+ udp_unit.set_dou3_status(bit)
+
+
+func _on_modify_ip(toggled: bool, bit: int, device: String):
+ if dictionary_yau07.has(device):
+ var udp_unit = dictionary_yau07[device]
+ var current_status = udp_unit.get_ip_status()
+ # Инверсия: нажата = 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
+
+ udp_unit.set_ip_status(new_status)
+ print("Статус ИП устройства %s обновлен: 0x%04X" % [device, new_status])
+
+
## Функция для установки значений в ячейках УКП
func _on_ukp_submitted(_new_text: String, device: String) -> void:
if not dictionary_yau07.has(device):
diff --git a/main.tscn b/main.tscn
index a80a9f4..63d3f88 100644
--- a/main.tscn
+++ b/main.tscn
@@ -145,194 +145,436 @@ text = "Загрузка ЭМС"
metadata/bit = 4
metadata/device = "ПРД-Н1"
-[node name="ukp_1" type="GridContainer" parent="TabContainer/ПРД-Н1"]
-layout_mode = 2
-offset_left = 205.0
-offset_top = 7.0
-offset_right = 939.0
-offset_bottom = 95.0
-columns = 7
-
-[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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/ukp_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"]
+[node name="TabBar" type="TabContainer" parent="TabContainer/ПРД-Н1"]
layout_mode = 0
-offset_left = 205.0
-offset_top = 103.0
-offset_right = 939.0
-offset_bottom = 191.0
-columns = 7
+offset_left = 199.0
+offset_top = 9.0
+offset_right = 957.0
+offset_bottom = 334.0
+current_tab = 2
+tabs_position = 1
+tab_focus_mode = 0
-[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/ukp_2"]
+[node name="ukp_1" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar"]
+visible = false
+layout_mode = 2
+columns = 7
+metadata/_tab_index = 0
+
+[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["temperature_ukp"]]
+[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2"]
+[node name="Label2" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit7" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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/ukp_2" groups=["power_ukp"]]
+[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-Н1/TabBar/ukp_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"]
+visible = false
+layout_mode = 2
+columns = 7
+metadata/_tab_index = 1
+
+[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/TabBar/ukp_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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+placeholder_text = "0"
+metadata/device = "ПРД-Н1"
+
+[node name="ug" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar"]
+layout_mode = 2
+columns = 5
+metadata/_tab_index = 2
+
+[node name="GridContainer4" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
+layout_mode = 2
+
+[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 5°"
+metadata/bit = 1
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 25°"
+metadata/bit = 3
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 45°"
+metadata/bit = 5
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer4" groups=["dou2"]]
+layout_mode = 2
+text = "ЛУЧ КОНТРОЛЬ"
+metadata/bit = 6
+metadata/device = "ПРД-Н1"
+
+[node name="GridContainer" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
+layout_mode = 2
+
+[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 5°"
+metadata/bit = 1
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 25°"
+metadata/bit = 3
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox5" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "ЛУЧ 45°"
+metadata/bit = 5
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox7" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer" groups=["dou3"]]
+layout_mode = 2
+text = "ЛУЧ КОНТРОЛЬ"
+metadata/bit = 6
+metadata/device = "ПРД-Н1"
+
+[node name="GridContainer2" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
+layout_mode = 2
+
+[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/GridContainer2" groups=["att2"]]
+layout_mode = 2
+text = "АТТ 0 dB"
+metadata/att = 0
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox2" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+layout_mode = 2
+text = "АТТ 10.5 dB"
+metadata/bit = 7
+metadata/device = "ПРД-Н1"
+
+[node name="GridContainer5" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
+layout_mode = 2
+
+[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+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"]]
+layout_mode = 2
+text = "АТТ 10.5 dB"
+metadata/bit = 7
+metadata/device = "ПРД-Н1"
+
+[node name="GridContainer3" type="GridContainer" parent="TabContainer/ПРД-Н1/TabBar/ug"]
+layout_mode = 2
+
+[node name="CheckBox" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+layout_mode = 2
+text = "МАА №2"
+metadata/bit = 1
+metadata/device = "ПРД-Н1"
+
+[node name="CheckBox3" type="CheckBox" parent="TabContainer/ПРД-Н1/TabBar/ug/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"]]
+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"]]
+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"]]
+layout_mode = 2
+text = "ИП5-25"
+metadata/bit = 7
+metadata/device = "ПРД-Н1"
+
[node name="dkm" type="GridContainer" parent="TabContainer/ПРД-Н1"]
layout_mode = 0
offset_left = 10.0
diff --git a/udp_broadcast.gd b/udp_broadcast.gd
index 44ebb1e..24d9043 100644
--- a/udp_broadcast.gd
+++ b/udp_broadcast.gd
@@ -43,6 +43,9 @@ var _timer: Timer
var _poll_timer: Timer
var _sockets_status_bit: int = 0
var _dkm_status_bit: int = 0
+var _dry_contact_status_bit: int = 0xFF
+var _dou_and_att_2_status_bit: Dictionary = {0x106: 0}
+var _dou_and_att_3_status_bit: Dictionary = {0x108: 0}
var _isa_ports: Dictionary = {}
var _cmd_number_count: int = 0
var _written_isa_ports: Array = []
@@ -64,6 +67,8 @@ var ukp1_data: PackedByteArray:
print('Данные UKP1 обновлены')
+
+
func _init(name: String):
"""Инициализация UDP broadcast клиента"""
_self_name = name
@@ -188,6 +193,38 @@ func get_dkm_status() -> int:
return _dkm_status_bit
+func set_dou2_status(status: int) -> void:
+ """Установка статуса DOU"""
+ var masked_status = status & 0b111 # Маска для первых 3 битов
+ _dou_and_att_2_status_bit[0x106] = masked_status
+
+
+func get_dou2_status() -> int:
+ """Получение статуса DOU"""
+ return _dou_and_att_2_status_bit[0x106] & 0b111
+
+
+func set_dou3_status(status: int) -> void:
+ """Установка статуса DOU"""
+ var masked_status = status & 0b111 # Маска для первых 3 битов
+ _dou_and_att_3_status_bit[0x108] = masked_status
+
+
+func get_dou3_status() -> int:
+ """Получение статуса DOU"""
+ return _dou_and_att_3_status_bit[0x108] & 0b111
+
+
+func set_ip_status(status: int)->void:
+ """Установка статуса ИП"""
+ _dry_contact_status_bit = status
+
+
+func get_ip_status()->int:
+ """Получение статуса ИП"""
+ return _dry_contact_status_bit
+
+
func set_isa_port(port_addr: int, value: int) -> bool:
"""Установка значения ISA порта"""
if port_addr < 0 or port_addr > 0xFFFF:
@@ -276,7 +313,7 @@ func _form_status_device_packet() -> PackedByteArray:
_encode_packet_header(buffer)
_encode_device_data(buffer)
- print('_written_isa_ports.size(): ', _written_isa_ports.size())
+
# Добавляем поле команды после статуса
if _written_isa_ports.size() > 0:
var cmd_offset = header_size + STATUS_PACKET_SIZE
@@ -343,9 +380,11 @@ func _encode_ems_g_data(buffer: PackedByteArray) -> void:
func _encode_ug_data(buffer: PackedByteArray) -> void:
"""Кодирование данных UG"""
- buffer.encode_u16(UG_DATA_OFFSET, _dkm_status_bit) # Статус DKM
- buffer.encode_u16(UG_DATA_OFFSET + 2, 0x059e) # DRY CONTACT
-
+ # D15...D8 = ДКМ (старший байт)
+ buffer.encode_u8(UG_DATA_OFFSET + 1, _dkm_status_bit & 0xFF)
+ # D7...D0 = Сухие контакты (младший байт)
+ buffer.encode_u8(UG_DATA_OFFSET, _dry_contact_status_bit & 0xFF)
+
func _encode_ukp_data(buffer: PackedByteArray) -> void:
"""Кодирование данных UKP"""