Доработка. Режим "Контроль". Отображение состояния на связи для TCP подключений

This commit is contained in:
sasha80
2025-09-11 16:25:35 +03:00
parent 74562f7ab0
commit 9ba277a84e
6 changed files with 36 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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, [], 'Сервер карты'],
}
## Параметры цели.