diff --git a/scenes/pribor-afsp/pribor-afsp.gd b/scenes/pribor-afsp/pribor-afsp.gd index 60fad6a6..3e5d5e2e 100644 --- a/scenes/pribor-afsp/pribor-afsp.gd +++ b/scenes/pribor-afsp/pribor-afsp.gd @@ -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) diff --git a/scenes/pribor-afsp/pribor-bpo.gd b/scenes/pribor-afsp/pribor-bpo.gd index e1799a4c..e493d0e3 100644 --- a/scenes/pribor-afsp/pribor-bpo.gd +++ b/scenes/pribor-afsp/pribor-bpo.gd @@ -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') diff --git a/scenes/pribor-afsp/pribor-bpo.tscn b/scenes/pribor-afsp/pribor-bpo.tscn index ea8b7b87..36d5db08 100644 --- a/scenes/pribor-afsp/pribor-bpo.tscn +++ b/scenes/pribor-afsp/pribor-bpo.tscn @@ -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"] diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index 8a7bad2d..a3f4137c 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -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 diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 944c4ee2..5eb62062 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -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 diff --git a/scripts/network.gd b/scripts/network.gd index e6312e16..74d6fa01 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -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']])