From f8fbb3bc4e84bde177a97c8ea9b03d71c1612269 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Fri, 14 Nov 2025 16:35:33 +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=94=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80?=
=?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=A3=D0=9A=D0=9F=20=D1=81=D0=BE?=
=?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/misc.xml | 3 +
main.gd | 139 +++++++-
main.tscn | 869 ++++++++++++++++++++++++++++++++++++++++++++++-
project.godot | 2 +-
udp_broadcast.gd | 72 +++-
5 files changed, 1076 insertions(+), 9 deletions(-)
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 060d2c5..db8786c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/main.gd b/main.gd
index de3ed89..f5a3be3 100644
--- a/main.gd
+++ b/main.gd
@@ -1,12 +1,27 @@
extends Control
+const BUFFER_SIZE = 32
var dictionary_yau07: Dictionary
+var udp_broadcast: UDPBroadcast
+var dictionary_sockets_bit: Dictionary ## Байт 8 для отправки о состоянии ячеек
+
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, мета ПРД
+
+ var power_ukp: Array = get_tree().get_nodes_in_group('power_ukp')
+ for socket_power in power_ukp:
+ socket_power.connect('text_submitted', _on_ukp_submitted.bind(socket_power.get_meta('device')))
+
+ var temperature_ukp: Array = get_tree().get_nodes_in_group('temperature_ukp')
+ for socket_temp in temperature_ukp:
+ socket_temp.connect('text_submitted', _on_ukp_submitted.bind(socket_temp.get_meta('device')))
+
func _exit_tree():
for device in dictionary_yau07:
@@ -16,9 +31,129 @@ func _exit_tree():
func on_modify_device(toggled: bool, name_device: String) -> void:
if toggled:
- var udp_broadcast := UDPBroadcast.new(name_device)
+ udp_broadcast = UDPBroadcast.new(name_device)
udp_broadcast.add_timer_to_scene(self)
udp_broadcast.start_broadcast()
dictionary_yau07[name_device] = udp_broadcast
else:
dictionary_yau07[name_device].close_udp_unit()
+
+
+func _process(_delta: float) -> void:
+ for device in dictionary_yau07:
+ if dictionary_yau07[device]:
+ dictionary_yau07[device].poll_receive()
+
+
+static func _set_bit(bits: int, index: int, val: bool) -> int:
+ return bits | (1 << index) if val else bits & ~(1 << index)
+
+
+## Функция для установки статусов ячеек на связи (УГ, ЭМС-Г, УКП)
+func _on_modify_sockets(toggled: bool, bit: int, device: String)->void:
+ if dictionary_yau07.has(device):
+ var udp_unit = dictionary_yau07[device]
+ udp_unit.sockets_status_bit = _set_bit(udp_unit.sockets_status_bit, bit, toggled)
+
+
+## Функция для установки значений в ячейках УКП
+func _on_ukp_submitted(_new_text: String, device: String) -> void:
+ var prep_temperature_ukp1_array: Array = _on_text_temperature_changed(device, 1)
+ var prep_temperature_ukp2_array: Array = _on_text_temperature_changed(device, 2)
+
+ var prep_power_ukp1_array: Array = _on_text_power_changed(device, 1)
+ var prep_power_ukp2_array: Array = _on_text_power_changed(device, 2)
+
+ var combine_data_ukp1: Array
+ combine_data_ukp1 = _combine_arrays(combine_data_ukp1, prep_temperature_ukp1_array, prep_power_ukp1_array)
+ var combine_data_ukp2: Array
+ combine_data_ukp2 = _combine_arrays(combine_data_ukp2, prep_temperature_ukp2_array, prep_power_ukp2_array)
+ _form_buffers(device,combine_data_ukp1, 1, dictionary_yau07)
+ _form_buffers(device,combine_data_ukp2, 2, dictionary_yau07)
+
+
+func _on_text_temperature_changed(device: String, number_device: int) -> Array:
+ const CONST_MIN_TEMP: int = -25
+ const MAXIMUM_CODE_ADC: int = 3796
+ const MINIMUM_CODE_AD: int = 2660
+ const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD)
+
+ var current_change: Array
+ for prd in get_tree().get_nodes_in_group('prd'):
+ if device == prd.get_meta('yau07'):
+ for temperature_node in prd.get_tree().get_nodes_in_group('temperature_ukp'):
+ if prd.is_ancestor_of(temperature_node):
+ current_change.append(temperature_node)
+ break
+
+ var temp_arr: Array = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
+ if number_device == 1:
+ for i in 6:
+ if not current_change[i].text == null:
+ var value = _safe_convert_to_int(current_change[i].text)
+ var normal_temp: int = MAXIMUM_CODE_ADC - (value - CONST_MIN_TEMP - 3) / TEMP
+ temp_arr[i] = normal_temp
+ elif number_device == 2:
+ for i in 6:
+ if not current_change[i+6].text == null:
+ var value = _safe_convert_to_int(current_change[i+6].text)
+ var normal_temp: int = MAXIMUM_CODE_ADC - (value - CONST_MIN_TEMP - 3) / TEMP
+ temp_arr[i] = normal_temp
+ return temp_arr
+
+
+func _on_text_power_changed(device: String, number_device: int) -> Array:
+ var current_change: Array
+ for prd in get_tree().get_nodes_in_group('prd'):
+ if device == prd.get_meta('yau07'):
+ for power_node in prd.get_tree().get_nodes_in_group('power_ukp'):
+ if prd.is_ancestor_of(power_node):
+ current_change.append(power_node)
+ break
+
+ var power_arr: Array = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
+
+ if number_device == 1:
+ for i in 6:
+ if not current_change[i].text == null:
+ var value = _safe_convert_to_int(current_change[i].text)
+ power_arr[i] = value
+ elif number_device == 2:
+ for i in 6:
+ if not current_change[i+6].text == null:
+ var value = _safe_convert_to_int(current_change[i+6].text)
+ power_arr[i] = value
+
+ return power_arr
+ #_update_buffers(power_arr_1, device)
+
+
+static func _safe_convert_to_int(text: String) -> int:
+ text = text.strip_edges()
+ if text.is_valid_int():
+ return int(text)
+ elif text.begins_with("0x") and text.substr(2).is_valid_hex_number():
+ return text.hex_to_int()
+ else:
+ return 0
+
+
+static func _combine_arrays(ukp_data: Array, power_arr: Array, temp_arr: Array)-> Array:
+ for i in temp_arr.size():
+ ukp_data.append(temp_arr[i])
+ for i in power_arr.size():
+ ukp_data.append(power_arr[i])
+ return ukp_data
+
+
+static func _form_buffers(device: String, ukp_data: Array, number_device: int, dic_yau07: Dictionary):
+ var buffer: PackedByteArray = PackedByteArray()
+ buffer.resize(BUFFER_SIZE)
+ for i in ukp_data.size():
+ buffer.encode_u16(2 * i, ukp_data[i])
+ if dic_yau07.has(device):
+ var udp_unit = dic_yau07[device]
+ if number_device == 1:
+ udp_unit.ukp0_data = buffer
+ elif number_device == 2:
+ udp_unit.ukp1_data = buffer
diff --git a/main.tscn b/main.tscn
index 3d385aa..11a0ccd 100644
--- a/main.tscn
+++ b/main.tscn
@@ -1,7 +1,15 @@
-[gd_scene load_steps=2 format=3 uid="uid://bxorauom63ib6"]
+[gd_scene load_steps=5 format=3 uid="uid://bxorauom63ib6"]
[ext_resource type="Script" uid="uid://d1qwoxkckvdbc" path="res://main.gd" id="1_ig7tw"]
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0xm2m"]
+bg_color = Color(0.1167, 0.351514, 0.35159, 1)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ig7tw"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h2yge"]
+bg_color = Color(0.69546, 0.406261, 0.37248, 1)
+
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
@@ -13,7 +21,7 @@ script = ExtResource("1_ig7tw")
[node name="Panel" type="Panel" parent="."]
layout_mode = 0
-offset_right = 907.0
+offset_right = 1208.0
offset_bottom = 607.0
[node name="Yau-07-addr" type="GridContainer" parent="."]
@@ -82,3 +90,860 @@ metadata/device = "ПРД-В4"
layout_mode = 2
text = "ПРД-К4"
metadata/device = "ПРД-К4"
+
+[node name="TabContainer" type="TabContainer" parent="."]
+layout_mode = 0
+offset_left = 187.0
+offset_top = 19.0
+offset_right = 1147.0
+offset_bottom = 338.0
+current_tab = 0
+use_hidden_tabs_for_min_size = true
+tab_focus_mode = 0
+
+[node name="ПРД-Н1" type="Panel" parent="TabContainer" groups=["prd"]]
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_0xm2m")
+metadata/_tab_index = 0
+metadata/yau07 = "ПРД-Н1"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-Н1"]
+layout_mode = 2
+offset_right = 140.0
+offset_bottom = 171.0
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-Н1"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-Н1"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-Н1"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-Н1"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-Н1/sockets" groups=["socket"]]
+layout_mode = 2
+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"]
+layout_mode = 0
+offset_left = 205.0
+offset_top = 103.0
+offset_right = 939.0
+offset_bottom = 191.0
+columns = 7
+
+[node name="Label" type="Label" parent="TabContainer/ПРД-Н1/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/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/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/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/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/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/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/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/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/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/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/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/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/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+placeholder_text = "0"
+metadata/device = "ПРД-Н1"
+
+[node name="ПРД-В1" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_h2yge")
+metadata/_tab_index = 1
+metadata/yau07 = "ПРД-В1"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-В1"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-В1"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-В1"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-В1"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-В1"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-В1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-В1"
+
+[node name="ukp_1" type="GridContainer" parent="TabContainer/ПРД-В1"]
+layout_mode = 0
+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
+metadata/place = 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
+metadata/place = 1
+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
+metadata/place = 2
+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
+metadata/place = 3
+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
+metadata/place = 4
+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
+metadata/place = 5
+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
+metadata/place = 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
+metadata/place = 1
+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
+metadata/place = 2
+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
+metadata/place = 3
+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
+metadata/place = 4
+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
+metadata/place = 5
+metadata/device = "ПРД-В1"
+
+[node name="ukp_2" type="GridContainer" parent="TabContainer/ПРД-В1"]
+layout_mode = 0
+offset_left = 205.0
+offset_top = 103.0
+offset_right = 939.0
+offset_bottom = 191.0
+columns = 7
+
+[node name="Label" type="Label" parent="TabContainer/ПРД-В1/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/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 8
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit2" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 9
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit3" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 10
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit4" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 11
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit5" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 12
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit6" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["temperature_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 13
+metadata/device = "ПРД-В1"
+
+[node name="Label2" type="Label" parent="TabContainer/ПРД-В1/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/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 8
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit8" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 9
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit9" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 10
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit10" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 11
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit11" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 12
+metadata/device = "ПРД-В1"
+
+[node name="TextEdit12" type="LineEdit" parent="TabContainer/ПРД-В1/ukp_2" groups=["power_ukp"]]
+custom_minimum_size = Vector2(100, 35)
+layout_mode = 2
+metadata/place = 13
+metadata/device = "ПРД-В1"
+
+[node name="ПРД-К1" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 2
+metadata/yau07 = "ПРД-К1"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-К1"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-К1"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-К1"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-К1"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-К1"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-К1/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-К1"
+
+[node name="ПРД-Н2" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 3
+metadata/yau07 = "ПРД-Н2"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-Н2"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-Н2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-Н2"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-Н2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-Н2"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-Н2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-Н2"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-Н2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-Н2"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-Н2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-Н2"
+
+[node name="ПРД-В2" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 4
+metadata/yau07 = "ПРД-В2"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-В2"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-В2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-В2"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-В2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-В2"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-В2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-В2"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-В2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-В2"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-В2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-В2"
+
+[node name="ПРД-К2" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 5
+metadata/yau07 = "ПРД-К2"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-К2"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-К2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-К2"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-К2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-К2"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-К2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-К2"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-К2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-К2"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-К2/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-К2"
+
+[node name="ПРД-Н3" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 6
+metadata/yau07 = "ПРД-Н3"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-Н3"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-Н3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-Н3"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-Н3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-Н3"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-Н3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-Н3"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-Н3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-Н3"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-Н3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-Н3"
+
+[node name="ПРД-В3" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 7
+metadata/yau07 = "ПРД-В3"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-В3"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-В3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-В3"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-В3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-В3"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-В3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-В3"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-В3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-В3"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-В3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-В3"
+
+[node name="ПРД-К3" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 8
+metadata/yau07 = "ПРД-К3"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-К3"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-К3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-К3"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-К3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-К3"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-К3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-К3"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-К3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-К3"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-К3/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-К3"
+
+[node name="ПРД-Н4" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 9
+metadata/yau07 = "ПРД-Н4"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-Н4"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-Н4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-Н4"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-Н4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-Н4"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-Н4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-Н4"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-Н4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-Н4"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-Н4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-Н4"
+
+[node name="ПРД-В4" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 10
+metadata/yau07 = "ПРД-В4"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-В4"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-В4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-В4"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-В4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-В4"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-В4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-В4"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-В4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-В4"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-В4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-В4"
+
+[node name="ПРД-К4" type="Panel" parent="TabContainer" groups=["prd"]]
+visible = false
+layout_mode = 2
+metadata/_tab_index = 11
+metadata/yau07 = "ПРД-К4"
+
+[node name="sockets" type="GridContainer" parent="TabContainer/ПРД-К4"]
+layout_mode = 2
+
+[node name="EMS_G" type="CheckBox" parent="TabContainer/ПРД-К4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "ЭМС-Г"
+metadata/bit = 0
+metadata/device = "ПРД-К4"
+
+[node name="UG" type="CheckBox" parent="TabContainer/ПРД-К4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УГ"
+metadata/bit = 1
+metadata/device = "ПРД-К4"
+
+[node name="UKP_1" type="CheckBox" parent="TabContainer/ПРД-К4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 1"
+metadata/bit = 2
+metadata/device = "ПРД-К4"
+
+[node name="UKP_2" type="CheckBox" parent="TabContainer/ПРД-К4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "УКП 2"
+metadata/bit = 3
+metadata/device = "ПРД-К4"
+
+[node name="Load_EMS" type="CheckBox" parent="TabContainer/ПРД-К4/sockets" groups=["socket"]]
+layout_mode = 2
+text = "Загрузка ЭМС"
+metadata/bit = 4
+metadata/device = "ПРД-К4"
diff --git a/project.godot b/project.godot
index 771c659..46b42ff 100644
--- a/project.godot
+++ b/project.godot
@@ -17,7 +17,7 @@ config/icon="res://icon.svg"
[display]
-window/size/viewport_width=900
+window/size/viewport_width=1200
window/size/viewport_height=600
[rendering]
diff --git a/udp_broadcast.gd b/udp_broadcast.gd
index 82b34c4..1fe5de8 100644
--- a/udp_broadcast.gd
+++ b/udp_broadcast.gd
@@ -19,6 +19,16 @@ const broadcast_addr: Array = [50000, "10.1.1.255"]
var _socket: SocketUDP
var self_name: String
var _timer: Timer
+var sockets_status_bit: int = 0
+var ukp0_data: PackedByteArray:
+ set(v):
+ ukp0_data = v
+ print('Произошло Обновление данных ukp0_data')
+
+var ukp1_data: PackedByteArray:
+ set(v):
+ ukp1_data = v
+ print('Произошло Обновление данных ukp1_data')
func _init(name: String):
@@ -27,6 +37,10 @@ func _init(name: String):
_timer = Timer.new()
_timer.wait_time = 1.0 / 3.0
_timer.timeout.connect(_on_timer_timeout)
+ ukp0_data.resize(32)
+ ukp0_data.fill(0)
+ ukp1_data.resize(32)
+ ukp1_data.fill(0)
if addres_list.has(name):
var port: int = addres_list[name][0]
@@ -37,7 +51,6 @@ func _init(name: String):
func bind_unit_addres(port_for_bind: int, addr_for_bind: String) -> void:
- print('Привязка адреса: %s' % addr_for_bind)
var bind_result = _socket.bind(port_for_bind, addr_for_bind)
if bind_result != OK:
push_error("Не удалось привязаться к %s: %s" % [addr_for_bind, error_string(bind_result)])
@@ -51,9 +64,10 @@ func stop_broadcast() -> void:
_timer.stop()
-func send_broadcast(message: String) -> bool:
+func send_broadcast() -> bool:
_socket.set_broadcast_enabled(true)
- var data: PackedByteArray = message.to_utf8_buffer()
+ var data: PackedByteArray = _form_status_packet()
+ # добавление 11 байтов вперед вохоже
_socket.send_to(broadcast_addr[1], broadcast_addr[0], data)
return true
@@ -67,10 +81,60 @@ func add_timer_to_scene(parent: Node) -> void:
parent.add_child(_timer)
+func poll_receive() -> void:
+ while _socket.get_available_packet_count() > 0:
+ var broadcast_packet = _socket.get_packet()
+ var addr_receive = _socket.get_packet_ip()
+ #var port_receive = _socket.get_packet_port()
+ #var parsed_data = _parse_packet(broadcast_packet)
+ _handle_received_data(broadcast_packet, addr_receive)
+
+
+func _handle_received_data(data: PackedByteArray, addr: String) -> void:
+ print("данные от %s: %s" % [addr, data])
+ # Здесь можно эмитировать сигналы или обрабатывать данные
+
+
func _on_timer_timeout() -> void:
- send_broadcast("hello")
+ send_broadcast()
+func _form_status_packet() -> PackedByteArray:
+ var buf = PackedByteArray()
+ buf.resize(126) # Увеличиваем размер до 126 байт
+
+ # Заголовок (0-5 байты)
+ buf.encode_u16(0, 0) # 00 00
+ buf.encode_u16(2, 0x0cff) # ff 0c
+ buf.encode_u16(4, 0) # 00 00
+
+ # Идентификатор пакета
+ buf[6] = 103 # 67
+
+ # Статус устройств
+ buf[7] = 0
+ buf[8] = sockets_status_bit
+
+ # Данные EMS-G (байты 9-34)
+ var ems_g_data = [0x9e00, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000,
+ 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff]
+ for i in range(13):
+ buf.encode_u16(9 + i * 2, ems_g_data[i])
+
+ # Данные UG (байты 35-38)
+ buf.encode_u16(35, 0x0000) # 00 00
+ buf.encode_u16(37, 0x059e) # 9e 05
+
+ # Данные UKP0 (байты 39-70)
+ for i in ukp0_data.size():
+ buf[39 + i] = ukp0_data[i]
+ # Данные UKP1 (байты 71-102)
+ for i in ukp1_data.size():
+ buf[71 + i] = ukp1_data[i]
+ return buf
+
+
+####
class SocketUDP extends PacketPeerUDP:
func send_to(addr: String, port: int, data: PackedByteArray):
set_dest_address(addr, port)