Доработка. Индикация "на связи"

This commit is contained in:
sasha80
2025-10-13 11:08:07 +03:00
parent 0978a06a3f
commit ea35977884
6 changed files with 68 additions and 22 deletions

View File

@@ -70,7 +70,6 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
return
unit_instance.rx_tick = Time.get_ticks_msec()
if not unit_instance.online:
unit_instance.online = true
unit_instance.emit_signal('line_changed', unit_instance)

View File

@@ -1,20 +1,44 @@
@tool
class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd'
@export var prefix_path: String = 'DeviceDescription[DeviceName]'
@export var prefix_path: String = '' ## Должно быть в JSON
@export var this_bpo1_name: String = '' ## Должно быть в JSON
@export var this_bpo2_name: String = '' ## Должно быть в JSON
@export var unit_name1: StringName= '' ## Должно быть в settings.gd
@export var unit_name2: StringName= '' ## Должно быть в settings.gd
@export var settings_path1_to_url: String = '' ## Должно быть в ProjectSettings
@export var settings_path2_to_url: String = '' ## Должно быть в ProjectSettings
@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings
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'}
var bort_to_node_name = {}
var bort_to_unit_name = {}
func _ready() -> void:
ProjectSettings.connect('settings_changed', on_settings_changed)
on_settings_changed()
func on_settings_changed():
bort_to_node_name.merge({this_bpo1_name: 'grid_bpo_a1', this_bpo2_name: 'grid_bpo_a2'}, true)
bort_to_unit_name.merge({this_bpo1_name: unit_name1, this_bpo2_name: unit_name2})
$request1.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path1_to_url)
$request1/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
$request2.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path2_to_url)
$request2/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
assert($request1.request_url != null)
assert($request2.request_url != null)
func _on_request_completed(result, _response_code, headers, body: PackedByteArray):
if result != 0:
var rs = $request.get_result_string(result)
var rs = $request1.get_result_string(result)
push_error('\"%s\"' % rs)
return
@@ -45,6 +69,13 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
var node_name = bort_to_node_name[ret_val[0]]
var bort_node = get_node(node_name)
var unit_name = bort_to_unit_name[ret_val[0]]
var unit_instance = network.get_unit_instance(unit_name)
unit_instance.rx_tick = Time.get_ticks_msec()
if not unit_instance.online:
unit_instance.online = true
unit_instance.emit_signal('line_changed', unit_instance)
for item in bort_node.get_children():
node_maper.map_value_to_item(json_conv.data, item, 'state')

View File

@@ -1,16 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://5uv1idl3lqea"]
[gd_scene load_steps=5 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
@@ -19,6 +13,14 @@ offset_top = 150.0
offset_right = 115.0
offset_bottom = 150.0
script = ExtResource("1_bhc4e")
prefix_path = "DeviceDescription[DeviceName]"
this_bpo1_name = "Устройство БПО левого борта"
this_bpo2_name = "Устройство БПО правого борта"
unit_name1 = &"уарэп-бпо-1"
unit_name2 = &"уарэп-бпо-2"
settings_path1_to_url = "Адрес БПО левого борта"
settings_path2_to_url = "Адрес БПО правого борта"
settings_path_to_wait_time = "Период опроса состояния БПО, секунды"
[node name="mod_pit_g1" parent="." instance=ExtResource("2_jp6m0")]
layout_mode = 2
@@ -197,14 +199,22 @@ show_rname = false
self_size = Vector2i(50, 145)
fname = "Яч. связи"
[node name="request" type="HTTPRequest" parent="."]
[node name="request1" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("4_crej3")
request_url = null
[node name="timer" type="Timer" parent="request1"]
autostart = true
[node name="request2" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("4_crej3")
[node name="timer" type="Timer" parent="request"]
wait_time = 30.0
[node name="timer" type="Timer" parent="request2"]
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"]
[connection signal="request_completed" from="request1" to="." method="_on_request_completed"]
[connection signal="timeout" from="request1/timer" to="request1" method="_on_request_timer"]
[connection signal="request_completed" from="request2" to="." method="_on_request_completed"]
[connection signal="timeout" from="request2/timer" to="request2" method="_on_request_timer"]

View File

@@ -382,8 +382,6 @@ func _process(delta) -> void:
func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: Tile) -> void:
var unit_instance = network.get_unit_instance('уарэп-карта')
_req_count -= 1
remove_child(req)
req.queue_free()
@@ -407,6 +405,12 @@ func _response(result, code, _headers: Array, body: PackedByteArray, req, tile:
push_error('не удалось получить изображение (неверный формат?) из \"%s\"' % tile.url)
return
var unit_instance = network.get_unit_instance('уарэп-карта')
unit_instance.rx_tick = Time.get_ticks_msec()
if not unit_instance.online:
unit_instance.online = true
unit_instance.emit_signal('line_changed', unit_instance)
tile.texture = ImageTexture.create_from_image(image)
_cache[tile.i] = tile

View File

@@ -392,6 +392,7 @@ stretch_mode = 0
script = ExtResource("3_4pt7j")
state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)]
metadata/unit_name = [&"уарэп-бпо-1", &"уарэп-бпо-2"]
metadata/online_proc = "online_change_arr"
[node name="label" type="Label" parent="pribor_rtr"]
layout_mode = 0

View File

@@ -7,7 +7,6 @@ const SERIAL_PROTO: = {'spt25': spt25.SPT25}
const MODBUS_PROTO: = {'mbcs': sch3.Sch3}
const NAVI_PROTO: = {'navi': navi.NaviSource}
const NULL_PROTO: = {null: unit.Unit}
var tick: int = 0
@@ -131,6 +130,7 @@ var units_udprx: Dictionary[StringName, unit.Unit] ## Экземпляры
var units_tcp: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с tcp-соединением
var units_serial: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с uart-соединением
var units_modbus: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с modbusserial-соединением
var units_nullp: Dictionary[StringName, unit.Unit] ## Экземпляры устройств без протокола
var serials: Dictionary[StringName, SocketSerial] ## Последовательные порты (uart)
var dst_ports: Dictionary[StringName, int] ## Преобразование имя устройства в порт назначения
var dst_addrs: Dictionary[StringName, StringName] ## Преобразование имя устройства в адрес назначения
@@ -290,6 +290,7 @@ func _ready() -> void:
if proto in NULL_PROTO:
var unit_null = NULL_PROTO[proto].new(unit_name)
units[unit_name] = unit_null
units_nullp[unit_name] = unit_null
tcp_sockets.append([create_socket_tcp('уарэп-5п28'), units_tcp['уарэп-5п28']])