Доработка. Получение данных о навигации

This commit is contained in:
sasha80
2025-04-18 15:11:18 +03:00
parent 5ccbfdf6c9
commit 58809f5922
6 changed files with 53 additions and 3 deletions

View File

@@ -64,6 +64,7 @@ sch3="*res://scripts/sch3.gd"
spt25="*res://scripts/spt25.gd" spt25="*res://scripts/spt25.gd"
astrakb="*res://scripts/astra-kb.gd" astrakb="*res://scripts/astra-kb.gd"
prd="*res://scripts/prd.gd" prd="*res://scripts/prd.gd"
navi="*res://scripts/navigation.gd"
[debug] [debug]

46
scripts/navigation.gd Normal file
View File

@@ -0,0 +1,46 @@
class_name navigation extends Node
## "Протокол №120-11435-09.PDF"
const ONLINE_TIMEOUT: = 5000 ## Время ожидания пакета от ячейки, милисекунды
const BUFFER_SIZE: = 32 ## Размер буфера для приёма датаграмм
const pow_2_30: = pow(2.0, 30.0)
## Источник данных навигации
class NaviSource extends unit.Unit:
var cmd_tick_rx: int = 0
var data: = {}
const akng_mode = {0:'тестовый', 1:'основной', 2:'резервный', 3:'аварийный'}
func _to_string() -> String:
return String('NaviSource: %s %s' % [self.name, 'на связи' if online else 'отключен'])
func _init(nm):
self.name = nm
func process(tick: int):
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
online = false
emit_signal('line_changed', self)
func parse(rx_data: PackedByteArray, tick: int) -> bool:
cmd_tick_rx = tick
if not online:
online = true
emit_signal('line_changed', self)
if rx_data.size() < 28:
emit_signal('parse_failed', self)
return false
var flags: = rx_data.decode_u16(24)
data.clear()
data['mode'] = akng_mode[(flags >> 4) & 3];
if flags & (1 << 0):
data['kk'] = rx_data.decode_float(0)
data['bk'] = rx_data.decode_float(4)
if flags & (1 << 1):
data['k'] = rx_data.decode_float(8)
if flags & (1 << 2):
data['latitude'] = float(rx_data.decode_s32(12) * 180) / pow_2_30
data['longitude'] = float(rx_data.decode_s32(16) * 180) / pow_2_30
if flags & (1 << 3):
data['speed'] = rx_data.decode_float(20)
data['err'] = rx_data.decode_u16(22)
emit_signal('data_received', data)
return true

View File

@@ -0,0 +1 @@
uid://bsabhln1eblsg

View File

@@ -1,7 +1,7 @@
class_name Network extends Node class_name Network extends Node
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb} const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb, 'udprawrx': navi.NaviSource}
const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28}
const SERIAL_PROTO: = {'uart': spt25.SPT25} const SERIAL_PROTO: = {'uart': spt25.SPT25}
const MODBUS_PROTO: = {'mbcs': sch3.Sch3} const MODBUS_PROTO: = {'mbcs': sch3.Sch3}
@@ -77,7 +77,7 @@ func create_socket(nm) -> Socket:
sock.set_broadcast_enabled(broad) sock.set_broadcast_enabled(broad)
var rc = Error.OK if not bind else sock.bind(port, addr) var rc = Error.OK if not bind else sock.bind(port, addr)
var errlevel = log.INFO if rc == Error.OK else log.ERROR var errlevel = log.INFO if rc == Error.OK else log.ERROR
log.message(errlevel, '%s: сокет:%s:%d привязанный:%s %s' % [nm, addr, port, ['нет', 'да'][int(bind)], error_string(rc)]) log.message(errlevel, '\"%s\" привязан к %s:%d? - %s, результат: %s' % [nm, addr, port, ['нет', 'да'][int(bind)], error_string(rc)])
return sock return sock
@@ -110,6 +110,7 @@ func _ready() -> void:
poll_sockets.append(create_socket('уарэп-яу07-частный')) poll_sockets.append(create_socket('уарэп-яу07-частный'))
poll_sockets.append(create_socket('уарэп-яу07-общий')) poll_sockets.append(create_socket('уарэп-яу07-общий'))
poll_sockets.append(create_socket('уарэп-капсрпб')) poll_sockets.append(create_socket('уарэп-капсрпб'))
poll_sockets.append(create_socket('навигация'))
sock_unicast = poll_sockets[0] sock_unicast = poll_sockets[0]
sock_capsrpb = poll_sockets[2] sock_capsrpb = poll_sockets[2]

View File

@@ -25,6 +25,7 @@ var settings_program: Dictionary
'уарэп-яу07-3в': ['yau07tx', '10.1.1.32', [50032], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], 'уарэп-яу07-3в': ['yau07tx', '10.1.1.32', [50032], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
'уарэп-яу07-3н': ['yau07tx', '10.1.1.31', [50031], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], 'уарэп-яу07-3н': ['yau07tx', '10.1.1.31', [50031], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], 'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
'навигация': ['udprawrx','*', [60000], true, true, 'IP-адрес на котором принимают сообщения от навигации'],
# Название: [ Протокол, Адрес, Порт получения, Комментарий ] # Название: [ Протокол, Адрес, Порт получения, Комментарий ]
'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'], 'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'],

View File

@@ -16,7 +16,7 @@ class Unit extends Object:
signal command_done(unit) ## Вызывается после успешного выполнения команды. signal command_done(unit) ## Вызывается после успешного выполнения команды.
signal command_fail(unit) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена. signal command_fail(unit) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена.
signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных
signal data_received(data: PackedByteArray) ## Вызывается по приёму данных signal data_received(data) ## Вызывается по приёму данных
var cmd_state = CmdState.UNCK ## Состояние выполнения команды var cmd_state = CmdState.UNCK ## Состояние выполнения команды
var tx_data: = PackedByteArray() ## Буфер для отправки. var tx_data: = PackedByteArray() ## Буфер для отправки.