Доработка. Контроль БПО

This commit is contained in:
sasha80
2025-10-01 12:40:33 +03:00
parent 5c17f1f237
commit c50a9caa05
8 changed files with 83 additions and 30 deletions

View File

@@ -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")

View File

@@ -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()

View File

@@ -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

View File

@@ -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"]

View File

@@ -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)

View File

@@ -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 ## Строка - Подавление