diff --git a/scenes/pribor-afsp/pribor-afsp-1.tscn b/scenes/pribor-afsp/pribor-afsp-1.tscn index 4ae55a58..81a5e01b 100644 --- a/scenes/pribor-afsp/pribor-afsp-1.tscn +++ b/scenes/pribor-afsp/pribor-afsp-1.tscn @@ -19,6 +19,7 @@ offset_right = 70.0 offset_bottom = 30.0 scale = Vector2(1, 0.9) script = ExtResource("1_151rh") +unit_name = &"уарэп-афсп-левый" metadata/DeviceName = &"Устройство РР левого борта" [node name="request" type="HTTPRequest" parent="."] diff --git a/scenes/pribor-afsp/pribor-afsp-2.tscn b/scenes/pribor-afsp/pribor-afsp-2.tscn index 9d8b4cc7..2f252167 100644 --- a/scenes/pribor-afsp/pribor-afsp-2.tscn +++ b/scenes/pribor-afsp/pribor-afsp-2.tscn @@ -19,6 +19,7 @@ offset_right = 81.0 offset_bottom = 108.0 scale = Vector2(1, 0.9) script = ExtResource("1_tfses") +unit_name = &"уарэп-афсп-правый" metadata/DeviceName = &"Устройство РР правого борта" [node name="request" type="HTTPRequest" parent="."] diff --git a/scenes/pribor-afsp/pribor-afsp.gd b/scenes/pribor-afsp/pribor-afsp.gd index 319ed927..046059bd 100644 --- a/scenes/pribor-afsp/pribor-afsp.gd +++ b/scenes/pribor-afsp/pribor-afsp.gd @@ -2,25 +2,39 @@ class_name pribor_afsp extends 'res://scenes/контроль/прибор.gd' @export var prefix_path: String = 'DeviceDescripton[DeviceName]' +@export var unit_name: StringName= '' static var json_conv: JSON = JSON.new() static var node_maper = load('res://scenes/контроль/node-maper.gd') + func _on_request_completed(result, _response_code, headers, body: PackedByteArray): + + var unit_instance = network.get_unit_instance(unit_name) + if result != 0: var rs = $request.get_result_string(result) log.error('\"%s\"' % rs) + if unit_instance.online: + unit_instance.online = false + unit_instance.emit_signal('line_changed', unit_instance) return var json_str: String = body.get_string_from_utf8() if not json_str: push_error('не удаётся получить строку utf8 из данных (%s)' % headers) + if unit_instance.online: + unit_instance.online = false + unit_instance.emit_signal('line_changed', unit_instance) return var rc = json_conv.parse(json_str) if rc != Error.OK: var err = json_conv.get_error_message() push_error('разбор json прерван - \"%s\" (%s)' % [err, headers]) + if unit_instance.online: + unit_instance.online = false + unit_instance.emit_signal('line_changed', unit_instance) return var pp = [] @@ -38,6 +52,10 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra if this_afsp_name != received_afsp_name: return + if not unit_instance.online: + unit_instance.online = true + unit_instance.emit_signal('line_changed', unit_instance) + for child in $bort.get_node('konverter/grid').get_children(): node_maper.map_value_to_item(json_conv.data, child, 'value0') node_maper.map_value_to_item(json_conv.data, child, 'value1') diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index b62b8584..b646187e 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -45,6 +45,9 @@ const PRIBORS_RES = \\ } +const null_units_names = ['уарэп-афсп-левый', 'уарэп-афсп-правый'] + + func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online) @@ -65,7 +68,9 @@ func _ready(): for i in pribor_meta.size(): var unit_pribor = network.get_unit_instance(pribor_meta[i]) unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta)) - + for unit_name in null_units_names: + var unit_instance = network.get_unit_instance(unit_name) + unit_instance.connect('line_changed', on_line_changed) func online_change_arr(_u, conn_node, pribor_meta): var state_online = true diff --git a/scripts/network.gd b/scripts/network.gd index 31f19575..ad04ee30 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -6,6 +6,7 @@ const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} 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 @@ -272,6 +273,10 @@ func _ready() -> void: serials[unit_name] = serial bind_serials.append([serial, unit_serial, unit_name]) + if proto in NULL_PROTO: + var unit_null = NULL_PROTO[proto].new(unit_name) + units[unit_name] = unit_null + ProjectSettings.connect('settings_changed', Callable(self, '_on_settings_changed_serial').bind(bind_serials)) tcp_sockets.append([create_socket_tcp('уарэп-5п28'), units_tcp['уарэп-5п28']]) diff --git a/scripts/settings.gd b/scripts/settings.gd index 2ac22b72..1c47f91a 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -35,6 +35,11 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ # < Название: Протокол, < Имя порта, Адрес СПТ-25, Скорость, Чётность, Бит на символ, Стоп битов >, Комментарий > 'уарэп-спт25-1': ['spt25', ['/dev/ttyUSB1', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G1)'], 'уарэп-спт25-2': ['spt25', ['/dev/ttyUSB2', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G2)'], + 'уарэп-афсп-левый': [null, [], 'Прибор АФСП левого борта'], + 'уарэп-афсп-правый': [null, [], 'Прибор АФСП правого борта'], + 'уарэп-бпо-1': [null, [], 'Прибор БПО 1'], + 'уарэп-бпо-2': [null, [], 'Прибор БПО 2'], + 'уарэп-карта': [null, [], 'Сервер карты'], } ## Параметры цели.