diff --git a/project.godot b/project.godot index b50f554..1fa004a 100644 --- a/project.godot +++ b/project.godot @@ -31,10 +31,11 @@ interfer/select_color=Vector3(1, 1, 1) interfer/interfer_color=Vector3(0.58, 0.47, 0.51) interfer/resend_timeout=1000.0 config/external_cu=false -config/unit_rr_request_period=5.0 +config/unit_rr_request_period=20.0 config/kems_files_path="user://kems/" config/emsg_files_path="user://emsg/" config/settings_path="user://settings.json" +config/unit_bpo_request_period=20.0 [autoload] @@ -143,6 +144,7 @@ folder_colors={ map_server_addr=false center_offset=Vector2(0, 0) external_cu=false +unit_bpo_request_period=0.0 [global_group] diff --git a/scenes/pribor-afsp/pribor-afsp-1.tscn b/scenes/pribor-afsp/pribor-afsp-1.tscn index 81a5e01..3081df5 100644 --- a/scenes/pribor-afsp/pribor-afsp-1.tscn +++ b/scenes/pribor-afsp/pribor-afsp-1.tscn @@ -29,6 +29,7 @@ projsettings_path_left = "application/config/Адрес АФСП левого б projsettings_path_right = "application/config/Адрес АФСП правого борта" [node name="timer" type="Timer" parent="request"] +wait_time = 20.0 autostart = true script = SubResource("GDScript_yhnwg") diff --git a/scenes/pribor-afsp/pribor-afsp.gd b/scenes/pribor-afsp/pribor-afsp.gd index 046059b..be349a6 100644 --- a/scenes/pribor-afsp/pribor-afsp.gd +++ b/scenes/pribor-afsp/pribor-afsp.gd @@ -1,7 +1,7 @@ @tool class_name pribor_afsp extends 'res://scenes/контроль/прибор.gd' -@export var prefix_path: String = 'DeviceDescripton[DeviceName]' +@export var prefix_path: String = 'DeviceDescription[DeviceName]' @export var unit_name: StringName= '' static var json_conv: JSON = JSON.new() diff --git a/scenes/pribor-afsp/pribor-bpo.gd b/scenes/pribor-afsp/pribor-bpo.gd index 677bb5d..e1799a4 100644 --- a/scenes/pribor-afsp/pribor-bpo.gd +++ b/scenes/pribor-afsp/pribor-bpo.gd @@ -1,21 +1,21 @@ @tool class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd' -@export var prefix_path: String = 'DeviceDescripton[DeviceName]' +@export var prefix_path: String = 'DeviceDescription[DeviceName]' static var json_conv: JSON = JSON.new() static var node_maper = load('res://scenes/контроль/node-maper.gd') const bort_to_node_name = { - 'Устройство РР левого борта': 'grid_bpo_a1', - 'Устройство РР правого борта': 'grid_bpo_a2'} + 'Устройство БПО левого борта': 'grid_bpo_a1', + 'Устройство БПО правого борта': 'grid_bpo_a2'} func _on_request_completed(result, _response_code, headers, body: PackedByteArray): if result != 0: var rs = $request.get_result_string(result) - log.error('\"%s\"' % rs) + push_error('\"%s\"' % rs) return var json_str: = body.get_string_from_utf8() @@ -39,6 +39,7 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra return if not bort_to_node_name.has(ret_val[0]): + push_error('не известное устройство: \"%s\"' % ret_val[0]) return var node_name = bort_to_node_name[ret_val[0]] @@ -46,3 +47,19 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra for item in bort_node.get_children(): node_maper.map_value_to_item(json_conv.data, item, 'state') + + var items = get_tree().get_nodes_in_group('управляется-по-шине-1') + for node in items: + if node.state == 1: + $yas_bpo_a1.state = 1 + break + items = get_tree().get_nodes_in_group('управляется-по-шине-2') + for node in items: + if node.state == 1: + $yas_bpo_a2.state = 1 + break + items = get_tree().get_nodes_in_group('потребитель-питания') + for node in items: + if node.state == 1: + $mod_pit_g1.state = 1 + break diff --git a/scenes/pribor-afsp/pribor-bpo.tscn b/scenes/pribor-afsp/pribor-bpo.tscn index 71ae79c..0dc97f3 100644 --- a/scenes/pribor-afsp/pribor-bpo.tscn +++ b/scenes/pribor-afsp/pribor-bpo.tscn @@ -1,10 +1,16 @@ -[gd_scene load_steps=5 format=3 uid="uid://5uv1idl3lqea"] +[gd_scene load_steps=6 format=3 uid="uid://5uv1idl3lqea"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrk" path="res://scenes/pribor-afsp/pribor-bpo.gd" id="1_bhc4e"] [ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_jp6m0"] [ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="3_jcpjs"] [ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="4_crej3"] +[sub_resource type="GDScript" id="GDScript_bhc4e"] +script/source = "extends Timer + +func _ready(): wait_time = ProjectSettings.get_setting('application/config/unit_bpo_request_period') +" + [node name="pribor_bpo" type="Control"] layout_mode = 3 anchors_preset = 0 @@ -43,63 +49,63 @@ offset_right = 498.0 offset_bottom = 320.0 columns = 4 -[node name="kanal1" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal1" parent="grid_bpo_a1" groups=["потребитель-питания"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 1" metadata/state = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']" -[node name="kanal2" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal2" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 2" metadata/state = "SelfTest[0].SystemList[0].DevList[1]['TestPassed']" -[node name="kanal3" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal3" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 3" metadata/state = "SelfTest[0].SystemList[0].DevList[2]['TestPassed']" -[node name="kanal4" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal4" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 4" metadata/state = "SelfTest[0].SystemList[0].DevList[3]['TestPassed']" -[node name="kanal5" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal5" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 5" metadata/state = "SelfTest[0].SystemList[0].DevList[4]['TestPassed']" -[node name="kanal6" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal6" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 6" metadata/state = "SelfTest[0].SystemList[0].DevList[5]['TestPassed']" -[node name="kanal7" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal7" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 7" metadata/state = "SelfTest[0].SystemList[0].DevList[6]['TestPassed']" -[node name="kanal8" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")] +[node name="kanal8" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 8" metadata/state = "SelfTest[0].SystemList[0].DevList[7]['TestPassed']" -[node name="yas_bpo_a1" parent="." instance=ExtResource("3_jcpjs")] +[node name="yas_bpo_a1" parent="." groups=["потребитель-питания"] instance=ExtResource("3_jcpjs")] offset_left = 500.0 offset_top = 175.0 offset_right = 550.0 @@ -126,63 +132,63 @@ offset_right = 498.0 offset_bottom = 520.0 columns = 4 -[node name="kanal1" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal1" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 1" metadata/state = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']" -[node name="kanal2" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal2" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 2" metadata/state = "SelfTest[0].SystemList[0].DevList[1]['TestPassed']" -[node name="kanal3" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal3" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 3" metadata/state = "SelfTest[0].SystemList[0].DevList[2]['TestPassed']" -[node name="kanal4" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal4" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 4" metadata/state = "SelfTest[0].SystemList[0].DevList[3]['TestPassed']" -[node name="kanal5" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal5" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 5" metadata/state = "SelfTest[0].SystemList[0].DevList[4]['TestPassed']" -[node name="kanal6" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal6" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 6" metadata/state = "SelfTest[0].SystemList[0].DevList[5]['TestPassed']" -[node name="kanal7" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal7" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 7" metadata/state = "SelfTest[0].SystemList[0].DevList[6]['TestPassed']" -[node name="kanal8" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")] +[node name="kanal8" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")] layout_mode = 2 size_flags_horizontal = 7 size_flags_vertical = 7 fname = "Канал 8" metadata/state = "SelfTest[0].SystemList[0].DevList[7]['TestPassed']" -[node name="yas_bpo_a2" parent="." instance=ExtResource("3_jcpjs")] +[node name="yas_bpo_a2" parent="." groups=["потребитель-питания"] instance=ExtResource("3_jcpjs")] offset_left = 500.0 offset_top = 375.0 offset_right = 550.0 @@ -192,13 +198,15 @@ self_size = Vector2i(50, 145) fname = "Яч. связи" [node name="request" type="HTTPRequest" parent="."] -use_threads = true script = ExtResource("4_crej3") projsettings_path_left = "application/config/Адрес БПО левого борта" projsettings_path_right = "application/config/Адрес БПО правого борта" +projsettings_path_wait_time = "application/config/Период опроса состояния БПО, секунды" [node name="timer" type="Timer" parent="request"] +wait_time = 5.0 autostart = true +script = SubResource("GDScript_bhc4e") [connection signal="request_completed" from="request" to="." method="_on_request_completed"] [connection signal="timeout" from="request/timer" to="request" method="_on_request_timer"] diff --git a/scenes/контроль/request.gd b/scenes/контроль/request.gd index e138987..9481544 100644 --- a/scenes/контроль/request.gd +++ b/scenes/контроль/request.gd @@ -18,9 +18,30 @@ const RESULT_STRINGS = { RESULT_REDIRECT_LIMIT_REACHED: 'Запрос достиг максимального предела перенаправления, см. `max_redirects`', RESULT_TIMEOUT: 'Время истекло' } +const headers_left = [ + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Encoding: gzip, deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', + 'Connection: keep-alive', + 'Host: 172.22.246.12:8081', + 'Priority: u=0,i', + 'Upgrade-Insecure-Requests: 1', + 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0' ] + +const headers_right = [ + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Encoding: gzip, deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', + 'Connection: keep-alive', + 'Host: 172.22.246.14:8082', + 'Priority: u=0,i', + 'Upgrade-Insecure-Requests: 1', + 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0' ] @export var projsettings_path_left: String = '' @export var projsettings_path_right: String = '' +@export var projsettings_path_wait_time: String = '' + var i_bort: int = 0 var addr_left: String @@ -30,6 +51,7 @@ var addr_right: String func on_settings_changed(): addr_left = ProjectSettings.get_setting(projsettings_path_left) addr_right = ProjectSettings.get_setting(projsettings_path_right) + $timer.wait_time = int(ProjectSettings.get_setting(projsettings_path_wait_time, 5)) func get_result_string(result: Result): @@ -42,8 +64,10 @@ func _ready(): func _on_request_timer(): - var addr = [addr_left, addr_right][i_bort] - var rc = request(addr) + cancel_request() + var addr = [addr_right, addr_left][i_bort] + var hdrs = [headers_right, headers_left][i_bort] + var rc: = request(addr, hdrs) if rc != Error.OK: var s: String = '%s: %s' % [error_string(rc), addr] log.error('%s' % s) diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index b69067f..c21899b 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -60,7 +60,8 @@ const SETTING_TABLE = [ ['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], ['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], ['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], - ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'] ] + ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], + ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ] ] const EXTERNAL_CU = 16 ## Внешнее целеуказание const SUPPRESS = 17 ## Строка - Подавление diff --git a/shaders/sector.gdshader b/shaders/sector.gdshader index 08e3143..f3783bf 100644 --- a/shaders/sector.gdshader +++ b/shaders/sector.gdshader @@ -9,7 +9,7 @@ instance uniform vec4 clip_color: source_color = vec4(1.0, 0.5, 0.5, 1.0); instance uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0; instance uniform float band: hint_range(0.0, 0.125) = 0.02; instance uniform float radius: hint_range(0.0, 0.125) = 0.08; -instance uniform float dir: hint_range(0.0, 360.0) = 0.0; +instance uniform float dir: hint_range(0.0, 360.0) = 0.0; instance uniform float inner_clip: hint_range(0.0, 0.125) = 0.045;