From 6eab961951801e85a16852d236ba09733a4d061b Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 12 Jul 2023 10:34:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B5.=20=D0=A7?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- default_env.tres | 7 ----- main.tscn | 20 -------------- project.godot | 5 ++-- scenes/sector.tscn | 22 ++++++++++++++++ scenes/tab_switch.tscn | 3 +-- scenes/threats.gd | 27 ------------------- scenes/wnd_stc.tscn | 12 --------- scenes/yau07.gd | 3 ++- scripts/repnetwork.gd | 36 +++++++++++++++++++++++++ scripts/repsettings.gd | 21 +++++++++++++++ scripts/tools.gd | 60 ++++++++++++++++++++++++++++++++++++++++++ tab_container_stc.gd | 22 ---------------- tab_container_stc.tscn | 10 ------- 13 files changed, 144 insertions(+), 104 deletions(-) delete mode 100644 default_env.tres delete mode 100644 main.tscn create mode 100644 scenes/sector.tscn delete mode 100644 scenes/threats.gd delete mode 100644 scenes/wnd_stc.tscn create mode 100644 scripts/repnetwork.gd create mode 100644 scripts/repsettings.gd create mode 100644 scripts/tools.gd delete mode 100644 tab_container_stc.gd delete mode 100644 tab_container_stc.tscn diff --git a/default_env.tres b/default_env.tres deleted file mode 100644 index 11a5935..0000000 --- a/default_env.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="Environment" load_steps=2 format=3 uid="uid://bxd3ftmqis2y1"] - -[sub_resource type="Sky" id="1"] - -[resource] -background_mode = 2 -sky = SubResource("1") diff --git a/main.tscn b/main.tscn deleted file mode 100644 index 3ad2738..0000000 --- a/main.tscn +++ /dev/null @@ -1,20 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://cu3e03by7d61j"] - -[ext_resource type="PackedScene" uid="uid://3slb0i3pvowc" path="res://scenes/tab_switch.tscn" id="1_uwy4p"] -[ext_resource type="PackedScene" uid="uid://w6ta0ck1bedl" path="res://scenes/wnd_stc.tscn" id="2_jab5i"] - -[node name="main" type="Control"] -layout_mode = 3 -anchors_preset = 0 -offset_right = 1600.0 -offset_bottom = 1200.0 - -[node name="tab_switch" parent="." instance=ExtResource("1_uwy4p")] -layout_mode = 0 -offset_top = 0.0 -offset_bottom = 1200.0 -all_tabs_in_front = true -metadata/_edit_lock_ = true - -[node name="wnd_stc" parent="." instance=ExtResource("2_jab5i")] -visible = false diff --git a/project.godot b/project.godot index 6f2b4b4..489e7b0 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="uarep-ctl" -run/main_scene="res://main.tscn" +run/main_scene="res://scenes/tab_switch.tscn" config/features=PackedStringArray("4.1") run/delta_smoothing=false boot_splash/show_image=false @@ -28,6 +28,7 @@ yau07="*res://scenes/yau07.gd" Log="*res://addons/godot-logger/scripts/logger.gd" Table="*res://table/table.gd" Bip="*res://scenes/bip.tscn" +Threats="*res://scripts/threats.gd" [debug] @@ -70,7 +71,6 @@ file_logging/enable_file_logging=true [physics] -2d/run_on_separate_thread=true common/physics_ticks_per_second=1 common/max_physics_steps_per_frame=1 common/enable_object_picking=false @@ -82,5 +82,4 @@ gl_compatibility/item_buffer_size=8192 shader_compiler/shader_cache/strip_debug=true textures/default_filters/anisotropic_filtering_level=0 anti_aliasing/screen_space_roughness_limiter/enabled=false -environment/defaults/default_environment="res://default_env.tres" quality/driver/fallback_to_gles2=true diff --git a/scenes/sector.tscn b/scenes/sector.tscn new file mode 100644 index 0000000..6e7d6b9 --- /dev/null +++ b/scenes/sector.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=3 uid="uid://c73ahpv8uiuc7"] + +[ext_resource type="Shader" path="res://shaders/sector.gdshader" id="1_aikdh"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_xo5or"] +resource_local_to_scene = true +shader = ExtResource("1_aikdh") +shader_parameter/color = Color(1, 1, 1, 0.168627) +shader_parameter/clip_color = Color(1, 0.5, 0.5, 1) +shader_parameter/width = 45.0 +shader_parameter/band = 0.02 +shader_parameter/radius = 0.08 +shader_parameter/dir = 0.0 +shader_parameter/inner_clip = 0.045 + +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2lkm8"] + +[node name="строб" type="Sprite2D"] +material = SubResource("ShaderMaterial_xo5or") +position = Vector2(610, 600) +scale = Vector2(1108, 1108) +texture = SubResource("PlaceholderTexture2D_2lkm8") diff --git a/scenes/tab_switch.tscn b/scenes/tab_switch.tscn index 02dad40..3363bfb 100644 --- a/scenes/tab_switch.tscn +++ b/scenes/tab_switch.tscn @@ -5,9 +5,8 @@ [ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="3_hgnup"] [node name="tab_switch" type="TabContainer"] -offset_top = -25.0 offset_right = 1600.0 -offset_bottom = 1175.0 +offset_bottom = 1200.0 [node name="работа" parent="." instance=ExtResource("1_uow82")] layout_mode = 2 diff --git a/scenes/threats.gd b/scenes/threats.gd deleted file mode 100644 index 25f1bb9..0000000 --- a/scenes/threats.gd +++ /dev/null @@ -1,27 +0,0 @@ -extends Node - - -class Threat: - - enum FFlags { # Допустимые значения для Threat.fflags - NONE = 0, TMOD = 1, BAUD = 2, PROTO = 4, - SLON = 8, SLAT = 16, SALT = 32, LAT = 64, - LON = 128, ALT = 256 } - - var id: int # Идентификатор цели - var aoa: float # Курсовой угол на источник сигнала, градусы. - var freq: float # Частота несущей или центральная частота, МГц - var width: float # Ширина занимаемого диапазона частот, МГц - var pow_rx: float # Уровень принимаемого сигнала, дБм - var tick: int # Уровень принимаемого сигнала, дБм - var freqm: String # Режим смены частоты - var tmod: String # Тип модуляции - var baud: float # Модуляционная скорость - var proto: String # Тип протокола источника сигнала - var slon: float # Координаты старта, долгота в градусах. Достоверность задана значением Threat.fflags - var slat: float # Координаты старта, широта в градусах. Достоверность задана значением Threat.fflags - var salt: float # Координаты старта, высота от уровня моря. метры. Достоверность задана значением Threat.fflags - var lat: float # Текущие координаты, долгота в градусах. Достоверность задана значением Threat.fflags - var lon: float # Текущие координаты, широта в градусах. Достоверность задана значением Threat.fflags - var alt: float # Текущая высота, метры. Достоверность задана значением Threat.fflags - var fflags: FFlags # Флаги полей достоверности полей diff --git a/scenes/wnd_stc.tscn b/scenes/wnd_stc.tscn deleted file mode 100644 index f32cc3d..0000000 --- a/scenes/wnd_stc.tscn +++ /dev/null @@ -1,12 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://w6ta0ck1bedl"] - -[ext_resource type="PackedScene" uid="uid://cbfp6bylx8g4i" path="res://tab_container_stc.tscn" id="1_ty26o"] - -[node name="wnd_stc" type="Window"] -sdf_oversize = 0 -initial_position = 3 -size = Vector2i(1600, 1200) -mode = 3 -current_screen = 1 - -[node name="TabContainer" parent="." instance=ExtResource("1_ty26o")] diff --git a/scenes/yau07.gd b/scenes/yau07.gd index 2e7306c..0ae8ad2 100644 --- a/scenes/yau07.gd +++ b/scenes/yau07.gd @@ -23,6 +23,7 @@ class YaU07: signal online_changed(yau07: YaU07) signal command_done(yau07: YaU07) signal command_fail(yau07: YaU07) + signal net_error( var src_addr: = DEFAULT_ADDR # Адрес источника var cmd_num_rx: = 0 # Номер команды принятый @@ -65,7 +66,7 @@ class YaU07: if sock.put_packet(tx_data.slice(0, tx_len)) == OK: cmd_tick_tx = tick else: - print_debug('ошибка: пакет не отправлен на: ', src_addr) + emit_signal('socket_error', 'ошибка: пакет не отправлен на: %s' % src_addr) cmd_retry -= 1 else: cmd_state = CmdState.FAIL diff --git a/scripts/repnetwork.gd b/scripts/repnetwork.gd new file mode 100644 index 0000000..3f9f59e --- /dev/null +++ b/scripts/repnetwork.gd @@ -0,0 +1,36 @@ +extends Node + + +var sock_unicast: PacketPeerUDP +var sock_broadcast: PacketPeerUDP +var units_yau07: Dictionary + + +func _ready() -> void: + var addr = REPSettings.addr['уарэп-яу07-частный'][1] + var port = REPSettings.addr['уарэп-яу07-частный'][2] + sock_unicast = PacketPeerUDP.new() + sock_unicast.bind(port, addr) + for key in REPSettings.addr: + var prof = REPSettings.addr[key] + if prof[0] == 'yau07': + addr = REPSettings.addr[key][1] + port = REPSettings.addr[key][2] + var unit = yau07.YaU07.new([addr, port]) + var addr_port: String = '%s:%d' % [addr, port] + units_yau07[addr_port] = unit + Log.info('ЯУ-07: %s' % unit) + + +func _process(delta: float) -> void: + for unit in units_yau07.values() as Array[yau07.YaU07]: + unit.process(delta, sock_unicast) + + while sock_unicast.get_available_packet_count() > 0: + var data = sock_unicast.get_packet() + var addr = sock_unicast.get_packet_ip() + var port = sock_unicast.get_packet_port() + var addr_port: String = '%s:%d' % [addr, port] + if addr_port in units_yau07: + var unit: yau07.YaU07 = units_yau07[addr_port] + unit.parse(data) diff --git a/scripts/repsettings.gd b/scripts/repsettings.gd new file mode 100644 index 0000000..7c4db0a --- /dev/null +++ b/scripts/repsettings.gd @@ -0,0 +1,21 @@ +extends Node + +@export var addr: Dictionary = { \ + 'уарэп-яу07-частный': ['udp', '10.1.1.160', 50160, 'IP-адрес ЯУ-07 прибора УФ'], + 'уарэп-яу07-общий': ['udp', '10.1.1.255', 50000, 'IP-адрес для приёма широковещательных пакетов от ЯУ-07'], + 'уарэп-капсрпб-пол': ['udp', 'localhost', 42023, 'IP-адрес получения сообщений от КАПС РПБ'], + 'уарэп-капсрпб-отп': ['udp', 'localhost', 42022, 'IP-адрес отправки сообщений на КАПС РПБ'], + 'уарэп-эмс': ['yau07', '10.1.1.27', 50027, 'IP-адрес ЯУ-07 прибора УФ'], + 'уарэп-яу07-2в': ['yau07', '10.1.1.34', 50034, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-2н': ['yau07', '10.1.1.33', 50033, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-2к': ['yau07', '10.1.1.35', 50035, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-4в': ['yau07', '10.1.1.66', 50066, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-4н': ['yau07', '10.1.1.65', 50065, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-4к': ['yau07', '10.1.1.67', 50067, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-1в': ['yau07', '10.1.1.18', 50018, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-1н': ['yau07', '10.1.1.17', 50017, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-1к': ['yau07', '10.1.1.19', 50019, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-3в': ['yau07', '10.1.1.50', 50050, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-3н': ['yau07', '10.1.1.49', 50049, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-3к': ['yau07', '10.1.1.51', 50051, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-щ3': ['uart', '/dev/stty0', 115200, 1, 1, false, 1000, 'Прибор Щ3 (скорость, стартовых, стоповых, чётность, таймаут в мкс)'] } diff --git a/scripts/tools.gd b/scripts/tools.gd new file mode 100644 index 0000000..bf9720a --- /dev/null +++ b/scripts/tools.gd @@ -0,0 +1,60 @@ +extends Node + + +func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2: + """ Преобразует декартовые координаты в полярные """ + var x1: float = pos.x - pos0.x + var y1: float = pos.y - pos0.y + var ang: float = (atan2(y1, x1) * 180.0) / PI + ang += 360.0 * float(ang < 0.0) + var radius: float = hypot(x1, y1) + return Vector2(ang, radius) + + +func hypot(x: float, y: float) -> float: + return sqrt(x * x + y * y) + + +func is_overlap(x1, x2, y1, y2): + """ Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """ + return max(x1, y1) <= min(x2, y2) + + +func ibytes_to_word(buf: PackedByteArray, i: int) -> int: + return buf[i] + (buf[i + 1] * 256) + + +func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float: + """ Переводит значение val из диапазона a0...a1 в диапазон b0...b1 """ + return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0 + + +func type_is_num(val) -> bool: + """ Возвращает true, если val число, false - если иначе """ + return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0)) + + +func sort_ascending_0(a, b) -> bool: + return a[0] < b[0] + + +func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: + var j: int = len(p) - 1 + var odd_nodes: int = 0 + for i in range(len(p)): + if ((p[i].y < pos.y and p[j].y >= pos.y or p[j].y < pos.y and p[i].y >= pos.y) and (p[i].x <= pos.x or p[j].x <= pos.x)): + odd_nodes ^= int((p[i].x + (pos.y - p[i].y) / (p[j].y - p[i].y) * (p[j].x - p[i].x) < pos.x)) + j = i + return odd_nodes > 0 + + +func set_wordi(buf: Array, index, val): + """ + Устанавливает слово в байтовом массиве + :param buf: Байтовый массив + :param index: Индекс младшего байта слова в массиве + :param val: Значение слова для записи в батовый массив + :return: None """ + buf[index] = val & 0xff + buf[index + 1] = (val >> 8) & 0xff + diff --git a/tab_container_stc.gd b/tab_container_stc.gd deleted file mode 100644 index 5acbb5a..0000000 --- a/tab_container_stc.gd +++ /dev/null @@ -1,22 +0,0 @@ -extends TabContainer - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(_delta): - pass - - -func _on_tab_changed(tab): - if tab == 7: - $Panel8/VideoStreamPlayer.play() - else: - $Panel8/VideoStreamPlayer.stop() - - -func _on_video_stream_player_finished(): - $Panel8/VideoStreamPlayer.play() diff --git a/tab_container_stc.tscn b/tab_container_stc.tscn deleted file mode 100644 index 2199b9e..0000000 --- a/tab_container_stc.tscn +++ /dev/null @@ -1,10 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cbfp6bylx8g4i"] - -[ext_resource type="Script" path="res://tab_container_stc.gd" id="1_rk3q4"] - -[node name="TabContainer" type="TabContainer"] -offset_right = 1595.0 -offset_bottom = 1200.0 -script = ExtResource("1_rk3q4") - -[connection signal="tab_changed" from="." to="." method="_on_tab_changed"]