Рефактор. Общий список прибор теперь использует имя прибора для индекса

This commit is contained in:
sasha80
2025-08-01 13:02:13 +03:00
parent 37e552d207
commit 56df30a3ba
22 changed files with 122 additions and 122 deletions

View File

@@ -22,7 +22,10 @@ script = ExtResource("1_151rh")
metadata/DeviceName = &"Устройство РР левого борта" metadata/DeviceName = &"Устройство РР левого борта"
[node name="request" type="HTTPRequest" parent="."] [node name="request" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("2_4vyhj") script = ExtResource("2_4vyhj")
addr_left = "http://192.168.56.2:8001/selftest"
addr_right = "http://192.168.56.2:8002/selftest"
[node name="timer" type="Timer" parent="request"] [node name="timer" type="Timer" parent="request"]
autostart = true autostart = true

View File

@@ -22,6 +22,7 @@ script = ExtResource("1_tfses")
metadata/DeviceName = &"Устройство РР правого борта" metadata/DeviceName = &"Устройство РР правого борта"
[node name="request" type="HTTPRequest" parent="."] [node name="request" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("2_miwrd") script = ExtResource("2_miwrd")
[node name="timer" type="Timer" parent="request"] [node name="timer" type="Timer" parent="request"]

View File

@@ -56,8 +56,8 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0) node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0)
## Вызывается при клике мыши на элементе контроля. ## Вызывается при клике мыши на элементе.
## [param block_a] - Кликнутый элемент контроля. ## [param block_a] - Кликнутый элемент.
func _on_item_pressed(block_a: Control): func _on_item_pressed(block_a: Control):
var metas = block_a.get_meta_list() var metas = block_a.get_meta_list()
for n in metas: for n in metas:

View File

@@ -19,9 +19,11 @@ const RESULT_STRINGS = {
RESULT_TIMEOUT: 'Время истекло' } RESULT_TIMEOUT: 'Время истекло' }
@export var addr_left: String
@export var addr_right: String
var i_bort: int = 0 var i_bort: int = 0
var addr_left: String
var addr_right: String
func get_result_string(result: Result): func get_result_string(result: Result):

View File

@@ -66,9 +66,8 @@ func _ready() -> void:
func initialize_connections() -> void: func initialize_connections() -> void:
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state')) signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
currecnt_unit = unit_prd.name
unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
@@ -96,10 +95,9 @@ func _enter_tree() -> void:
func _exit_tree() -> void: func _exit_tree() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
var prd_module = prd.prd_dict[unit_prd.name] var prd_module = prd.prd_dict[unit_prd.name]
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]]) prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]])
@@ -343,8 +341,8 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void:
func on_ug_setting() -> void: func on_ug_setting() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.units[unit_name]
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1): if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1] ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]

View File

@@ -50,8 +50,8 @@ func _ready() -> void:
func initialize_connections() -> void: func initialize_connections() -> void:
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state')) signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
currecnt_unit = unit_prd.name currecnt_unit = unit_prd.name
unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
@@ -80,10 +80,9 @@ func _enter_tree() -> void:
func _exit_tree() -> void: func _exit_tree() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
var prd_module = prd.prd_dict[unit_prd.name] var prd_module = prd.prd_dict[unit_prd.name]
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]]) prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]])
@@ -301,9 +300,8 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void:
func on_ug_setting() -> void: func on_ug_setting() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1): if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1] ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2): if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2):

View File

@@ -51,8 +51,8 @@ func _ready() -> void:
func initialize_connections() -> void: func initialize_connections() -> void:
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state')) signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
currecnt_unit = unit_prd.name currecnt_unit = unit_prd.name
unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
@@ -75,10 +75,9 @@ func _enter_tree() -> void:
func _exit_tree() -> void: func _exit_tree() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
var prd_module = prd.prd_dict[unit_prd.name] var prd_module = prd.prd_dict[unit_prd.name]
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]]) prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]])
@@ -330,8 +329,8 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void:
func on_ug_setting() -> void: func on_ug_setting() -> void:
var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_name = get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.units[unit_name]
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1): if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1] ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]

View File

@@ -13,9 +13,7 @@ var REVFF = '(rev ff)'
func _ready() -> void: func _ready() -> void:
var unit_key = settings.get_unit_key('уарэп-эмс') var unit_uf = network.get_unit_instance('уарэп-эмс')
var unit_uf = network.units[unit_key]
self.add_child(timer) self.add_child(timer)
timer.connect('timeout', Callable(self, 'on_timer').bind(unit_uf)) timer.connect('timeout', Callable(self, 'on_timer').bind(unit_uf))
timer.start(1) timer.start(1)

View File

@@ -69,8 +69,7 @@ func on_toggled_switch(val: bool, meta: Array, unit_sch3):
func _enter_tree() -> void: func _enter_tree() -> void:
super._enter_tree() super._enter_tree()
if Engine.is_editor_hint(): return if Engine.is_editor_hint(): return
var unit_key = settings.get_unit_key(unit_name) var unit_sch3 = network.get_unit_instance(unit_name)
var unit_sch3 = network.units[unit_key]
unit_sch3.base_holding_address = base_holding_address unit_sch3.base_holding_address = base_holding_address
unit_sch3.regs_holding_count = regs_holding_count unit_sch3.regs_holding_count = regs_holding_count
unit_sch3.base_input_address = base_input_address unit_sch3.base_input_address = base_input_address
@@ -83,8 +82,7 @@ func _enter_tree() -> void:
func _ready() -> void: func _ready() -> void:
var unit_key = settings.get_unit_key(unit_name) var unit_sch3 = network.get_unit_instance(unit_name)
var unit_sch3 = network.units[unit_key]
var items = get_tree().get_nodes_in_group('bits_items_switch') var items = get_tree().get_nodes_in_group('bits_items_switch')
for item in items: for item in items:
var meta = item.get_meta('bits') var meta = item.get_meta('bits')
@@ -94,8 +92,7 @@ func _ready() -> void:
func _exit_tree() -> void: func _exit_tree() -> void:
if Engine.is_editor_hint(): return if Engine.is_editor_hint(): return
var unit_key = settings.get_unit_key(unit_name) var unit_sch3 = network.get_unit_instance(unit_name)
var unit_sch3 = network.units[unit_key]
unit_sch3.disconnect('read_input', on_input.bind(unit_sch3)) unit_sch3.disconnect('read_input', on_input.bind(unit_sch3))
external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false) external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false)
unit_sch3.disconnect('error', on_error) unit_sch3.disconnect('error', on_error)

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=15 format=3 uid="uid://3slb0i3pvowc"] [gd_scene load_steps=14 format=3 uid="uid://3slb0i3pvowc"]
[ext_resource type="Script" uid="uid://bvo6tcreqyuex" path="res://scenes/tabs-switch/tab-switch.gd" id="1_fg0vd"] [ext_resource type="Script" uid="uid://bvo6tcreqyuex" path="res://scenes/tabs-switch/tab-switch.gd" id="1_fg0vd"]
[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа/работа.tscn" id="2_u7p16"] [ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа/работа.tscn" id="2_u7p16"]
@@ -8,7 +8,6 @@
[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки/настройки.tscn" id="6_i8iv3"] [ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки/настройки.tscn" id="6_i8iv3"]
[ext_resource type="PackedScene" uid="uid://musb21x2u0xs" path="res://scenes/эмс2/эмс2.tscn" id="6_rsg03"] [ext_resource type="PackedScene" uid="uid://musb21x2u0xs" path="res://scenes/эмс2/эмс2.tscn" id="6_rsg03"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tidwt"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tidwt"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_41d34"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_41d34"]
@@ -35,15 +34,15 @@ theme_override_styles/tab_focus = SubResource("StyleBoxEmpty_41d34")
theme_override_styles/tab_disabled = SubResource("StyleBoxEmpty_cw2ss") theme_override_styles/tab_disabled = SubResource("StyleBoxEmpty_cw2ss")
theme_override_styles/tabbar_background = SubResource("StyleBoxEmpty_nmdfd") theme_override_styles/tabbar_background = SubResource("StyleBoxEmpty_nmdfd")
theme_override_styles/panel = SubResource("StyleBoxEmpty_vap7n") theme_override_styles/panel = SubResource("StyleBoxEmpty_vap7n")
current_tab = 1 current_tab = 0
script = ExtResource("1_fg0vd") script = ExtResource("1_fg0vd")
[node name="Работа" parent="tab_switch" instance=ExtResource("2_u7p16")] [node name="Работа" parent="tab_switch" instance=ExtResource("2_u7p16")]
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 0 metadata/_tab_index = 0
[node name="Контроль" parent="tab_switch" instance=ExtResource("3_txp0s")] [node name="Контроль" parent="tab_switch" instance=ExtResource("3_txp0s")]
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 1 metadata/_tab_index = 1

View File

@@ -135,8 +135,7 @@ func _ready() -> void:
_on_resize() _on_resize()
signaller.connect('map_centered', on_map_centered) signaller.connect('map_centered', on_map_centered)
if not Engine.is_editor_hint(): if not Engine.is_editor_hint():
var key = settings.get_unit_key('навигация') var unit_nav = network.get_unit_instance('навигация')
var unit_nav = network.units[key]
unit_nav.connect('data_received', on_data_received) unit_nav.connect('data_received', on_data_received)
ProjectSettings.connect('settings_changed', _settings_changed) ProjectSettings.connect('settings_changed', _settings_changed)
threats.connect('threat_new', Callable(self, '_on_threat_new')) threats.connect('threat_new', Callable(self, '_on_threat_new'))

View File

@@ -6,10 +6,10 @@ enum STATE_VAL {
GOOD = 1, GOOD = 1,
ERROR = 2 } ERROR = 2 }
# Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
var unit_key = settings.get_unit_key(get_parent().get_meta('unit_name')[0]) var unit_name = get_parent().get_meta('unit_name')[0]
var unit_prd = network.units[unit_key] var unit_prd = network.get_unit_instance(unit_name)
unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
set_default_state() set_default_state()

View File

@@ -44,16 +44,14 @@ func _ready():
continue continue
if pribor_meta.size(): if pribor_meta.size():
for i in pribor_meta.size(): for i in pribor_meta.size():
var unit_key = settings.get_unit_key(pribor_meta[i]) var unit_pribor = network.get_unit_instance(pribor_meta[i])
var unit_pribor = network.units[unit_key]
unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta)) unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta))
func online_change_arr(_u, conn_node, pribor_meta): func online_change_arr(_u, conn_node, pribor_meta):
var state_online = true var state_online = true
for i in pribor_meta.size(): for i in pribor_meta.size():
var unit_key = settings.get_unit_key(pribor_meta[i]) var unit_pribor = network.get_unit_instance(pribor_meta[i])
var unit_pribor = network.units[unit_key]
if not unit_pribor.online: if not unit_pribor.online:
state_online = false state_online = false
break break

View File

@@ -56,10 +56,9 @@ func _on_resized() -> void:
func _enter_tree() -> void: func _enter_tree() -> void:
if Engine.is_editor_hint(): return if Engine.is_editor_hint(): return
var unit_key = settings.get_unit_key(unit_name) var unit_any = network.get_unit_instance(unit_name)
var unit = network.units[unit_key] unit_any.connect('data_received', Callable(self, 'on_data_received'))
unit.connect('data_received', Callable(self, 'on_data_received')) unit_any.connect('line_changed', Callable(self, 'on_line_changed'))
unit.connect('line_changed', Callable(self, 'on_line_changed'))
$margin/vbox.alignment = alignment $margin/vbox.alignment = alignment
$margin/vbox/grid/fname.text = fname $margin/vbox/grid/fname.text = fname
$margin/vbox/grid/rname.text = rname $margin/vbox/grid/rname.text = rname
@@ -68,7 +67,6 @@ func _enter_tree() -> void:
func _exit_tree() -> void: func _exit_tree() -> void:
if Engine.is_editor_hint(): return if Engine.is_editor_hint(): return
var unit_key = settings.get_unit_key(unit_name) var unit_any = network.get_unit_instance(unit_name)
var unit = network.units[unit_key] unit_any.disconnect('data_received', Callable(self, 'on_data_received'))
unit.disconnect('data_received', Callable(self, 'on_data_received')) unit_any.disconnect('line_changed', Callable(self, 'on_line_changed'))
unit.disconnect('line_changed', Callable(self, 'on_line_changed'))

View File

@@ -32,8 +32,7 @@ func _ready() -> void:
## Инициализация основных элементов экрана ЭМС. ## Инициализация основных элементов экрана ЭМС.
func init_boards(): func init_boards():
var unit_key = settings.get_unit_key('уарэп-эмс') var unit_ems = network.get_unit_instance('уарэп-эмс')
var unit_ems = network.units[unit_key]
# Выставление позиций элементов ЭМС на экране # Выставление позиций элементов ЭМС на экране
$scrollin.set_position(Vector2(posx,posy)) $scrollin.set_position(Vector2(posx,posy))

View File

@@ -106,10 +106,8 @@ func _ready() -> void:
var ecms: Dictionary = {} ## Словарь помех. var ecms: Dictionary = {} ## Словарь помех.
for i in ID_INTERFERS_LEN: # Заполняет массив ID целей for i in ID_INTERFERS_LEN: # Заполняет массив ID целей
id_array.append(i + 1) id_array.append(i + 1)
var unit_key = settings.get_unit_key('уарэп-капсрпб') var unit_caps = network.get_unit_instance('уарэп-капсрпб')
var unit_caps = network.units[unit_key] var unit_5p28 = network.get_unit_instance('уарэп-5п28')
var unit_5p28_key = settings.get_unit_key('уарэп-5п28')
var unit_5p28 = network.units_tcp[unit_5p28_key]
var timer_check_state: = Timer.new() var timer_check_state: = Timer.new()
add_child(timer_check_state) add_child(timer_check_state)
var resend_timeout = ProjectSettings.get_setting('application/interfer/resend_timeout', 1000.0) var resend_timeout = ProjectSettings.get_setting('application/interfer/resend_timeout', 1000.0)
@@ -128,8 +126,7 @@ func _ready() -> void:
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms)) signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms))
threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps)) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps))
var key = settings.get_unit_key('навигация') var unit_nav = network.get_unit_instance('навигация')
var unit_nav = network.units[key]
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps)) unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps))

View File

@@ -45,7 +45,7 @@ class Socket extends PacketPeerUDP:
class SocketTCP extends TCPServer: class SocketTCP extends TCPServer:
const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета. const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета.
var peerstream: = PacketPeerStream.new() var peerstream: = PacketPeerStream.new()
var unit_key: Array ## Ключ юнита. var unit_key: StringName ## Ключ юнита.
var head_len: int = 8 ## Длина заголовка команды. var head_len: int = 8 ## Длина заголовка команды.
var len_place: int = 4 ## Номер начального байта с длинной блока данных. var len_place: int = 4 ## Номер начального байта с длинной блока данных.
var type_len: int = 4 ## Количество байт в размере длинны. var type_len: int = 4 ## Количество байт в размере длинны.
@@ -62,20 +62,22 @@ class SocketTCP extends TCPServer:
var poll_sockets: Array[Socket] var poll_sockets: Array[Socket]
var tcp_sockets: Array var tcp_sockets: Array
var units: Dictionary var units: Dictionary[StringName, unit.Unit]
var units_udp: Dictionary var units_udp: Dictionary[StringName, unit.Unit]
var units_udprx: Dictionary var units_udprx: Dictionary[StringName, unit.Unit]
var units_tcp: Dictionary var units_tcp: Dictionary[StringName, unit.Unit]
var units_serial: Dictionary var units_serial: Dictionary[StringName, unit.Unit]
var units_modbus: Dictionary var units_modbus: Dictionary[StringName, unit.Unit]
var serials: Dictionary # Последовательные порты var serials: Dictionary # Последовательные порты
var mbcs: Dictionary # Клиенты modbus. var mbcs: Dictionary # Клиенты modbus.
var dst_ports: Dictionary var dst_ports: Dictionary[StringName, int]
var dst_addrs: Dictionary[StringName, StringName]
var unit_keys: Dictionary var unit_keys: Dictionary
var sock_unicast: Socket var sock_unicast: Socket
var sock_capsrpb: Socket var sock_capsrpb: Socket
var logger_page: Node var logger_page: Node
var send_sockets: Dictionary # Таблица <имяустройста>: <сокет> для отправки сообщений var send_sockets: Dictionary # Таблица <имяустройста>: <сокет> для отправки сообщений
var addr_port_to_unit_name: Dictionary[StringName, StringName]
func on_serial_data(data, unit): unit.parse(data, tick) func on_serial_data(data, unit): unit.parse(data, tick)
@@ -94,16 +96,16 @@ func create_socket(nm) -> Socket:
return sock return sock
func create_tcpsocket(nm) -> SocketTCP: func create_tcpsocket(unit_name: StringName) -> SocketTCP:
var addr = settings.UnitProfiles[nm][1] var addr = settings.UnitProfiles[unit_name][1]
var port = settings.UnitProfiles[nm][2][0] var port = settings.UnitProfiles[unit_name][2][0]
var sock = SocketTCP.new() var sock = SocketTCP.new()
sock.unit_key = settings.get_unit_key(nm) sock.unit_key = unit_name
var rc: = sock.listen(port, addr) var rc: = sock.listen(port, addr)
if rc == Error.OK: if rc == Error.OK:
log.message(log.INFO, '\"%s\" слушает на %s:%d' % [nm, addr, port]) log.message(log.INFO, '\"%s\" слушает на %s:%d' % [unit_name, addr, port])
else: else:
log.message(log.ERROR, '\"%s\" %s:%d \"%s\"' % [nm, addr, port, error_string(rc)]) log.message(log.ERROR, '\"%s\" %s:%d \"%s\"' % [unit_name, addr, port, error_string(rc)])
return sock return sock
@@ -156,38 +158,36 @@ func _ready() -> void:
if proto in UDPRX_PROTO: if proto in UDPRX_PROTO:
var new_unit = UDPRX_PROTO[proto].new(unit_name) var new_unit = UDPRX_PROTO[proto].new(unit_name)
var unit_key = settings.get_unit_key(unit_name) units[unit_name] = new_unit
units[unit_key] = new_unit units_udprx[unit_name] = new_unit
units_udprx[unit_key] = new_unit dst_ports[unit_name] = st[2][0]
dst_ports[unit_key] = st[2][0]
if proto in UDP_PROTO: if proto in UDP_PROTO:
var new_unit = UDP_PROTO[proto].new(unit_name) var new_unit = UDP_PROTO[proto].new(unit_name)
var unit_key = settings.get_unit_key(unit_name) units[unit_name] = new_unit
units[unit_key] = new_unit units_udp[unit_name] = new_unit
units_udp[unit_key] = new_unit dst_ports[unit_name] = st[2][1] if len(st[2]) > 1 else st[2][0]
dst_ports[unit_key] = st[2][1] if len(st[2]) > 1 else st[2][0] dst_addrs[unit_name] = st[1]
if proto in TCP_PROTO: if proto in TCP_PROTO:
var unit_tcp = TCP_PROTO[proto].new(unit_name) var unit_tcp = TCP_PROTO[proto].new(unit_name)
var unit_key = settings.get_unit_key(unit_name) units[unit_name] = unit_tcp
units_tcp[unit_key] = unit_tcp units_tcp[unit_name] = unit_tcp
units[unit_key] = unit_tcp
if proto in MODBUS_PROTO: if proto in MODBUS_PROTO:
var unit_modbus = MODBUS_PROTO[proto].new(unit_name) var unit_modbus = MODBUS_PROTO[proto].new(unit_name)
var unit_key = settings.get_unit_key(unit_name) unit_modbus.port = settings.UnitProfiles[unit_name][1] # TODO: убрать это отсюда (обращение к глобальным данным из экземпляра)
units_modbus[unit_key] = unit_modbus unit_modbus.params = settings.UnitProfiles[unit_name][2] # TODO: убрать это отсюда (обращение к глобальным данным из экземпляра)
units[unit_key] = unit_modbus units[unit_name] = unit_modbus
units_modbus[unit_name] = unit_modbus
bind_modbuses.append([unit_modbus, unit_name]) bind_modbuses.append([unit_modbus, unit_name])
if proto in SERIAL_PROTO: if proto in SERIAL_PROTO:
var unit_serial = SERIAL_PROTO[proto].new(unit_name) var unit_serial = SERIAL_PROTO[proto].new(unit_name)
var unit_key = settings.get_unit_key(unit_name)
var serial = create_serial(unit_name) var serial = create_serial(unit_name)
units_serial[unit_key] = unit_serial units_serial[unit_name] = unit_serial
units[unit_key] = unit_serial units[unit_name] = unit_serial
serials[unit_key] = serial serials[unit_name] = serial
ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_serial').bind(bind_serials)) ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_serial').bind(bind_serials))
@@ -200,6 +200,12 @@ func _ready() -> void:
u.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(key)) u.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(key))
u.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(key)) u.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(key))
for key in settings.UnitProfiles:
var item = settings.UnitProfiles[key]
var addr_port: = StringName('%s:%d' % [item[1], item[2][0]])
addr_port_to_unit_name[addr_port] = StringName(key)
pass
func _on_settings_changed_modbus(bind_modbuses: Array): func _on_settings_changed_modbus(bind_modbuses: Array):
var external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false) var external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false)
@@ -228,9 +234,10 @@ func poll_receive_udp(sock: Socket) -> bool:
var data: = sock.get_packet() var data: = sock.get_packet()
var addr: = sock.get_packet_ip() var addr: = sock.get_packet_ip()
var port: = sock.get_packet_port() var port: = sock.get_packet_port()
var addr_port: = [addr, port] var addr_port: = StringName('%s:%d' % [addr, port])
if units.has(addr_port): if addr_port_to_unit_name.has(addr_port):
units[addr_port].parse(data, tick) var unit_name: = addr_port_to_unit_name[addr_port]
units[unit_name].parse(data, tick)
continue continue
if unit_keys.has(port): if unit_keys.has(port):
var key1 = unit_keys[port] var key1 = unit_keys[port]
@@ -238,7 +245,7 @@ func poll_receive_udp(sock: Socket) -> bool:
units[key1].parse(data, tick) units[key1].parse(data, tick)
continue continue
port = sock.get_local_port() port = sock.get_local_port()
var key = ['*', port] var key = StringName('%s:%d' % ['*', port])
if units.has(key): if units.has(key):
var unit_udprx = units[key] var unit_udprx = units[key]
unit_udprx.source_addr = [addr, port] unit_udprx.source_addr = [addr, port]
@@ -301,9 +308,10 @@ func _process(_delta: float) -> void:
var unit_udp = units_udp[key] var unit_udp = units_udp[key]
if Error.OK == unit_udp.process(tick): if Error.OK == unit_udp.process(tick):
var sock = send_sockets[unit_udp.name] var sock = send_sockets[unit_udp.name]
var dst_port = dst_ports[key]
var tx_data = unit_udp.tx_data.slice(0, unit_udp.tx_len) var tx_data = unit_udp.tx_data.slice(0, unit_udp.tx_len)
sock.send_to([key[0], dst_port], tx_data) var dst_port = dst_ports[key]
var dst_addr = dst_addrs[key]
sock.send_to([dst_addr, dst_port], tx_data)
for key in units_udprx: for key in units_udprx:
var unit_udprx = units_udprx[key] var unit_udprx = units_udprx[key]
unit_udprx.process(tick) unit_udprx.process(tick)
@@ -322,3 +330,8 @@ func _process(_delta: float) -> void:
sock.send_to(unit_tcp.tx_data) sock.send_to(unit_tcp.tx_data)
poll_receive_tcp(sock) poll_receive_tcp(sock)
poll_sockets.any(poll_receive_udp) poll_sockets.any(poll_receive_udp)
func get_unit_instance(unit_name: StringName) -> unit.Unit:
tools.allways(unit_name in units, 'нет такого устройства: \"%s\"' % unit_name)
return units[unit_name]

View File

@@ -159,9 +159,9 @@ class PRD:
var ug_online: bool = false ## Состояние ячейки УГ var ug_online: bool = false ## Состояние ячейки УГ
var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки
func _init(u_name ,u): func _init(u_name, u_yau07):
prd_name = u_name prd_name = u_name
unit_yau07 = u unit_yau07 = u_yau07
init_ems_g() init_ems_g()
func init_ems_g(): func init_ems_g():
@@ -261,8 +261,7 @@ class PRD:
func _ready() -> void: func _ready() -> void:
check_dir() check_dir()
for prd_name in PRD_NAMES: for prd_name in PRD_NAMES:
var unit_key = settings.get_unit_key(prd_name) var unit_prd = network.get_unit_instance(prd_name)
var unit_prd = network.units[unit_key]
var new_prd = PRD.new(prd_name, unit_prd) var new_prd = PRD.new(prd_name, unit_prd)
prd_dict[prd_name] = new_prd prd_dict[prd_name] = new_prd
for key in FS_PRD.keys(): for key in FS_PRD.keys():
@@ -274,8 +273,7 @@ func _ready() -> void:
for key in FS_PRD.keys(): for key in FS_PRD.keys():
fs_caps_id[FS_PRD[key][1]] = key fs_caps_id[FS_PRD[key][1]] = key
var unit_caps_key = settings.get_unit_key('уарэп-капсрпб') var unit_caps = network.get_unit_instance('уарэп-капсрпб')
var unit_caps = network.units[unit_caps_key]
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received')) unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received'))
signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(PrdState.CONTROL)) signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(PrdState.CONTROL))
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(PrdState.WORK)) signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(PrdState.WORK))

View File

@@ -25,6 +25,9 @@ class Sch3 extends unit.Unit:
var tick_fsm: int = 0 var tick_fsm: int = 0
var mbc: = ModbusClientRtu.new() var mbc: = ModbusClientRtu.new()
var tick_fsm_delta: = reconnect_period var tick_fsm_delta: = reconnect_period
var port: String
var params: Array
func try_disconnect(): func try_disconnect():
mbc.thread_stop() mbc.thread_stop()
@@ -33,8 +36,6 @@ class Sch3 extends unit.Unit:
mbc.close() mbc.close()
func try_connect() -> bool: func try_connect() -> bool:
var port = settings.UnitProfiles[name][1] # TODO: убрать это отсюда (обращение к глобальным данным из экземпляра)
var params = settings.UnitProfiles[name][2] # TODO: убрать это отсюда (обращение к глобальным данным из экземпляра)
var rc = mbc.open(port, params[0], params[1], params[2], params[3], params[4]) var rc = mbc.open(port, params[0], params[1], params[2], params[3], params[4])
if rc != Error.OK: # TODO: убрать это отсюда (неуместный вывод сообщения) if rc != Error.OK: # TODO: убрать это отсюда (неуместный вывод сообщения)
if not reconnect_failed: if not reconnect_failed:
@@ -102,8 +103,14 @@ class Sch3 extends unit.Unit:
if external_ctl and (step_fsm not in [Sch3Fsm.DISCONNECT, Sch3Fsm.IDLE]): if external_ctl and (step_fsm not in [Sch3Fsm.DISCONNECT, Sch3Fsm.IDLE]):
step_fsm = Sch3Fsm.DISCONNECT step_fsm = Sch3Fsm.DISCONNECT
elif (not external_ctl) and (step_fsm in [Sch3Fsm.DISCONNECT, Sch3Fsm.IDLE]): elif (not external_ctl) and (step_fsm in [Sch3Fsm.DISCONNECT, Sch3Fsm.IDLE]):
var unit_sch3 = network.get_unit_instance('уарэп-щ3')
var unit_prof = ProjectSettings.get_setting('application/config/%s' % unit_sch3.name)
if unit_prof:
unit_sch3.port = unit_prof[0]
unit_sch3.params = unit_prof[1]
step_fsm = Sch3Fsm.CONNECT step_fsm = Sch3Fsm.CONNECT
func parse(return_code: Error, base_addr: int, data: Array, code: String): func parse(return_code: Error, base_addr: int, data: Array, code: String):
if return_code == Error.OK: if return_code == Error.OK:
rx_tick = Time.get_ticks_msec() rx_tick = Time.get_ticks_msec()

View File

@@ -5,7 +5,7 @@ class_name uarep_settings extends Node
var settings_program: Dictionary var settings_program: Dictionary
@export var UnitProfiles: = { \ @export var UnitProfiles: Dictionary[StringName, Array] = { \
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'], 'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
@@ -110,6 +110,5 @@ func get_settings_file_path():
## Возвращает ключ устройства. ## Возвращает ключ устройства.
func get_unit_key(unit_name: String) -> Array: func get_unit_key(unit_name: String) -> StringName:
var item = UnitProfiles[unit_name] return StringName(unit_name)
return [item[1], item[2][0]]

View File

@@ -71,8 +71,7 @@ class TCP5P28 extends unit.Unit:
func init_state(): func init_state():
for key in PR_STATE.keys(): for key in PR_STATE.keys():
var unit_key = settings.get_unit_key(key) var unit_pribor = network.get_unit_instance(key)
var unit_pribor = network.units[unit_key]
unit_pribor.connect('line_changed', Callable(self, 'pribor_line_changed').bind(key)) unit_pribor.connect('line_changed', Callable(self, 'pribor_line_changed').bind(key))
func pribor_line_changed(u, key): func pribor_line_changed(u, key):

View File

@@ -46,15 +46,13 @@ signal threats_resized(th: Dictionary)
func _ready() -> void: func _ready() -> void:
var threats = {} ## Список целей. Индекс - <номер цели> var threats = {} ## Список целей. Индекс - <номер цели>
var unit_key = settings.get_unit_key('уарэп-капсрпб') var unit_caps = network.get_unit_instance('уарэп-капсрпб')
var unit = network.units[unit_key] var unit_5p28 = network.get_unit_instance('уарэп-5п28')
var unit_5p28_key = settings.get_unit_key('уарэп-5п28')
var unit_5p28 = network.units_tcp[unit_5p28_key]
var timer_check_lost: = Timer.new() var timer_check_lost: = Timer.new()
var timer_aoa_update: = Timer.new() var timer_aoa_update: = Timer.new()
add_child(timer_check_lost) add_child(timer_check_lost)
add_child(timer_aoa_update) add_child(timer_aoa_update)
unit.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(threats)) unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(threats))
unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats)) unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats))
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(settings.ThreatParams.time_lost, threats)) timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(settings.ThreatParams.time_lost, threats))
timer_check_lost.start(settings.ThreatParams.time_lost / 1000.0) timer_check_lost.start(settings.ThreatParams.time_lost / 1000.0)