Тестовый коммит
This commit is contained in:
38
scripts/capsrpb.gd
Normal file
38
scripts/capsrpb.gd
Normal file
@@ -0,0 +1,38 @@
|
||||
extends Node
|
||||
|
||||
const ONLINE_TIMEOUT = 5.0 # Время ожидания пакета от ячейки, секунды
|
||||
const BUFFER_SIZE = 2048
|
||||
|
||||
|
||||
class CapsRpb:
|
||||
signal line_changed(unit: CapsRpb)
|
||||
signal command_done(unit: CapsRpb)
|
||||
signal command_fail(unit: CapsRpb)
|
||||
var online: = false
|
||||
var name: = String()
|
||||
var test_json_conv: JSON
|
||||
var tick: = 0.0
|
||||
var tick_rx: = 0.0
|
||||
|
||||
func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
func _init(nm):
|
||||
test_json_conv = JSON.new()
|
||||
self.name = nm
|
||||
|
||||
|
||||
func parse(data):
|
||||
tick_rx = tick
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
var utf8_data = data.get_string_from_utf8()
|
||||
test_json_conv.parse(utf8_data)
|
||||
var json = test_json_conv.get_data()
|
||||
print_debug(json)
|
||||
|
||||
|
||||
func process(delta: float):
|
||||
tick += delta
|
||||
if online and ((tick - tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
@@ -1,36 +1,69 @@
|
||||
extends Node
|
||||
|
||||
|
||||
var sock_unicast: PacketPeerUDP
|
||||
var sock_broadcast: PacketPeerUDP
|
||||
var units_yau07: Dictionary
|
||||
class Socket extends PacketPeerUDP:
|
||||
func send_to(addr, data):
|
||||
self.set_dest_address(addr[0], addr[1])
|
||||
self.put_packet(data)
|
||||
|
||||
|
||||
const PROTO_TYPE: = {'yau07tx': yau07.YaU07, 'jsontx': capsrpb.CapsRpb}
|
||||
var poll_sockets: Array[Socket]
|
||||
var units: Dictionary
|
||||
var sock_unicast: Socket
|
||||
var logger_page: Node
|
||||
|
||||
|
||||
func create_socket(nm) -> Socket:
|
||||
var addr = REPSettings.addr[nm][1]
|
||||
var port = REPSettings.addr[nm][2]
|
||||
var broad = REPSettings.addr[nm][3]
|
||||
var bind = REPSettings.addr[nm][4]
|
||||
var sock: = Socket.new()
|
||||
sock.set_broadcast_enabled(broad)
|
||||
var rc = Error.OK if not bind else sock.bind(port, addr)
|
||||
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)])
|
||||
return sock
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var addr = REPSettings.addr['уарэп-яу07-частный'][1]
|
||||
var port = REPSettings.addr['уарэп-яу07-частный'][2]
|
||||
sock_unicast = PacketPeerUDP.new()
|
||||
sock_unicast.bind(port, addr)
|
||||
Log.info('Сетевой модуль готов')
|
||||
poll_sockets.append(create_socket('уарэп-яу07-частный'))
|
||||
poll_sockets.append(create_socket('уарэп-яу07-общий'))
|
||||
poll_sockets.append(create_socket('уарэп-капсрпб-пол'))
|
||||
|
||||
sock_unicast = poll_sockets[0]
|
||||
|
||||
for key in REPSettings.addr:
|
||||
var prof = REPSettings.addr[key]
|
||||
if prof[0] == 'yau07':
|
||||
addr = REPSettings.addr[key][1]
|
||||
port = REPSettings.addr[key][2]
|
||||
var unit = yau07.YaU07.new([addr, port])
|
||||
var addr_port: String = '%s:%d' % [addr, port]
|
||||
units_yau07[addr_port] = unit
|
||||
Log.info('ЯУ-07: %s' % unit)
|
||||
var setting = REPSettings.addr[key]
|
||||
var proto = setting[0]
|
||||
if proto in PROTO_TYPE:
|
||||
var unit = PROTO_TYPE[proto].new(key)
|
||||
var addr = Array([setting[1], setting[2]])
|
||||
units[addr] = unit
|
||||
unit.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(addr))
|
||||
unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(addr))
|
||||
|
||||
for addr in units:
|
||||
var unit = units[addr]
|
||||
Log.info('%s %s:%d' % [unit.name, addr[0], addr[1]])
|
||||
|
||||
|
||||
func poll_receive(sock: Socket):
|
||||
while sock.get_available_packet_count() > 0:
|
||||
var data: = sock.get_packet()
|
||||
var addr: = sock.get_packet_ip()
|
||||
var port: = sock.get_packet_port()
|
||||
var addr_port: = [addr, port]
|
||||
if addr_port in units: units[addr_port].parse(data)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
for unit in units_yau07.values() as Array[yau07.YaU07]:
|
||||
unit.process(delta, sock_unicast)
|
||||
|
||||
while sock_unicast.get_available_packet_count() > 0:
|
||||
var data = sock_unicast.get_packet()
|
||||
var addr = sock_unicast.get_packet_ip()
|
||||
var port = sock_unicast.get_packet_port()
|
||||
var addr_port: String = '%s:%d' % [addr, port]
|
||||
if addr_port in units_yau07:
|
||||
var unit: yau07.YaU07 = units_yau07[addr_port]
|
||||
unit.parse(data)
|
||||
for addr in units:
|
||||
var unit = units[addr]
|
||||
match unit.process(delta):
|
||||
Error.OK: sock_unicast.send_to(addr, unit.data_tx)
|
||||
Error.FAILED: emit_signal('socket_error', 'ошибка: %s %s:%d' % [unit, addr[0], addr[1]])
|
||||
for sock in poll_sockets:
|
||||
poll_receive(sock)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
extends Node
|
||||
|
||||
<<<<<<< HEAD
|
||||
@export var addr: Dictionary = { \
|
||||
'уарэп-яу07-частный': ['udp', '10.1.1.160', 50160, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||
'уарэп-яу07-общий': ['udp', '10.1.1.255', 50000, 'IP-адрес для приёма широковещательных пакетов от ЯУ-07'],
|
||||
@@ -19,3 +20,30 @@ extends Node
|
||||
'уарэп-яу07-3н': ['yau07', '10.1.1.49', 50049, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07', '10.1.1.51', 50051, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-щ3': ['uart', '/dev/stty0', 115200, 1, 1, false, 1000, 'Прибор Щ3 (скорость, стартовых, стоповых, чётность, таймаут в мкс)'] }
|
||||
=======
|
||||
|
||||
@export var addr: = { \
|
||||
# Название Протокол Адрес Порт Широков. Привяз. Комментарий
|
||||
'уарэп-яу07-частный': ['yau07rx', '127.0.0.1', 50079, false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
|
||||
'уарэп-яу07-общий': ['yau07rx', '127.0.0.255', 50000, true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
|
||||
'уарэп-капсрпб-пол': ['jsonrx', '127.0.0.1', 42023, false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
|
||||
'уарэп-капсрпб-отп': ['jsontx', '127.0.0.1', 42022, false, false, 'IP-адрес на который отправляют сообщения для КАПС РПБ'],
|
||||
'уарэп-эмс': ['yau07tx', '10.1.1.27', 50027, false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||
'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', 50034, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', 50033, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', 50035, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', 50066, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', 50065, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', 50067, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', 50018, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', 50017, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', 50019, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', 50050, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', 50049, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', 50051, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-щ3': ['uart', '/dev/stty0', 115200, 1, 1, false, 1000, 'Прибор Щ3'] } # скорость, стартовых, стоповых, чётность, таймаут в мкс
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Log.info('Модуль настроек готов')
|
||||
>>>>>>> sasha/master
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
extends Node
|
||||
|
||||
enum ThreatSrc {
|
||||
SIGMA,
|
||||
RLKS,
|
||||
RPB,
|
||||
MP405 }
|
||||
|
||||
|
||||
class Threat:
|
||||
|
||||
<<<<<<< HEAD
|
||||
enum FFlags { # Допустимые значения для Threat.fflags
|
||||
NONE = 0, TMOD = 1, BAUD = 2, PROTO = 4,
|
||||
SLON = 8, SLAT = 16, SALT = 32, LAT = 64,
|
||||
@@ -27,3 +34,52 @@ class Threat:
|
||||
var lon: float # Текущие координаты, широта в градусах. Достоверность задана значением Threat.fflags
|
||||
var alt: float # Текущая высота, метры. Достоверность задана значением Threat.fflags
|
||||
var fflags: FFlags # Флаги достоверности полей
|
||||
=======
|
||||
enum FFlags { # Допустимые значения для Threat.fflags
|
||||
TMOD = 1 << 0,
|
||||
BAUD = 1 << 1,
|
||||
PROTO = 1 << 2,
|
||||
SLON = 1 << 3,
|
||||
SLAT = 1 << 4,
|
||||
SALT = 1 << 5,
|
||||
LAT = 1 << 6,
|
||||
LON = 1 << 7,
|
||||
ALT = 1 << 8,
|
||||
AOA = 1 << 9,
|
||||
FREQ = 1 << 10,
|
||||
WIDTH = 1 << 11,
|
||||
}
|
||||
|
||||
var aoa: float # Курсовой угол на источник сигнала, градусы.
|
||||
var freq: float # Частота несущей или центральная частота, МГц
|
||||
var width: float # Ширина занимаемого диапазона частот, МГц
|
||||
var pow_rx: float # Уровень принимаемого сигнала, дБм
|
||||
var tick: int # Время приёма сигнала, мс
|
||||
var freqm: String # Режим смены частоты
|
||||
var rkrp: String # Рекомендуемый режим помехи
|
||||
var rparams: String # Рекомендуемые параметры помехи
|
||||
var tmod: String # Тип модуляции
|
||||
var baud: float # Модуляционная скорость
|
||||
var proto: String # Тип протокола источника сигнала
|
||||
var slon: float # Координаты старта, долгота в градусах. Достоверность задана значением Threat.fflags
|
||||
var slat: float # Координаты старта, широта в градусах. Достоверность задана значением Threat.fflags
|
||||
var salt: float # Координаты старта, высота от уровня моря. метры. Достоверность задана значением Threat.fflags
|
||||
var lat: float # Текущие координаты, долгота в градусах. Достоверность задана значением Threat.fflags
|
||||
var lon: float # Текущие координаты, широта в градусах. Достоверность задана значением Threat.fflags
|
||||
var alt: float # Текущая высота, метры. Достоверность задана значением Threat.fflags
|
||||
var atime: Dictionary # Время обнаружения
|
||||
var utime: Dictionary # Время крайнего обновления
|
||||
var fflags: FFlags # Флаги достоверности полей
|
||||
|
||||
|
||||
var _threats = {}
|
||||
"""
|
||||
Список целей. Индекс - <источник цели>:<номер цели>
|
||||
Источник цели может быть: 'RPB', 'SIGMA', 'RLKS', 'MP405'
|
||||
"""
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Log.info('Модуль обработки целей готов')
|
||||
|
||||
>>>>>>> sasha/master
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
extends Node
|
||||
|
||||
|
||||
func assert_array_ipaddr(val: Array):
|
||||
""" Выкидывает исключение, если массив не содержит ip-адрес """
|
||||
assert(val[0] is String)
|
||||
assert(val[1] is int)
|
||||
assert((0 < val[1]) and (val[1] < 65536))
|
||||
|
||||
|
||||
func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
""" Преобразует декартовые координаты в полярные """
|
||||
var x1: float = pos.x - pos0.x
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
extends Node
|
||||
|
||||
# Протокол ячейки ЯУ-07
|
||||
|
||||
const ONLINE_TIMEOUT = 5.0 # Время ожидания пакета от ячейки, секунды
|
||||
const RESEND_TIMEOUT = 0.3 # Задержка для повторной отправки команды, секунды
|
||||
const RETRY_COUNT = 5 # Количество повторных отправок
|
||||
const DEFAULT_ADDR = ['localhost', 50000]
|
||||
const BUFFER_SIZE = 2048
|
||||
|
||||
|
||||
|
||||
# Ячейка ЯУ-07
|
||||
class YaU07:
|
||||
|
||||
@@ -20,12 +23,11 @@ class YaU07:
|
||||
DONE, # Команда выполнена
|
||||
FAIL } # Команда не выполнена
|
||||
|
||||
signal online_changed(yau07: YaU07)
|
||||
signal command_done(yau07: YaU07)
|
||||
signal command_fail(yau07: YaU07)
|
||||
signal net_error(message: String)
|
||||
signal line_changed(unit: YaU07)
|
||||
signal command_done(unit: YaU07)
|
||||
signal command_fail(unit: YaU07)
|
||||
|
||||
var src_addr: = DEFAULT_ADDR # Адрес источника
|
||||
var name: = String()
|
||||
var cmd_num_rx: = 0 # Номер команды принятый
|
||||
var cmd_num_tx: = 0 # Номер команды переданный
|
||||
var cmd_state = CmdState.UNCK # Состояние выполнения команды
|
||||
@@ -41,39 +43,39 @@ class YaU07:
|
||||
var isa_ports = {} # Результат выполнения команды "читать порт"
|
||||
var online = false
|
||||
|
||||
func _to_string() -> String:
|
||||
return '%s %s:%d cmd_num:%d' % [['отключен', 'на связи'][int(online)], src_addr[0], src_addr[1], cmd_num_rx]
|
||||
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
|
||||
func _init(addr: Array):
|
||||
src_addr = addr
|
||||
func _init(nm):
|
||||
self.name = nm
|
||||
tx_data.resize(BUFFER_SIZE)
|
||||
tx_data.fill(0)
|
||||
tick = 0.0
|
||||
|
||||
|
||||
func process(delta: float, sock: PacketPeerUDP):
|
||||
func process(delta: float):
|
||||
tick += delta
|
||||
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rc = Error.ERR_BUSY
|
||||
if cmd_state == CmdState.SEND:
|
||||
sock.set_dest_address(src_addr[0], src_addr[1])
|
||||
if sock.put_packet(tx_data.slice(0, tx_len)) == OK:
|
||||
cmd_tick_tx = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
cmd_retry = RETRY_COUNT
|
||||
rc = rc.OK
|
||||
cmd_tick_tx = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
cmd_retry = RETRY_COUNT
|
||||
elif cmd_state == CmdState.WAIT:
|
||||
if cmd_retry:
|
||||
if (tick - cmd_tick_tx) > RESEND_TIMEOUT:
|
||||
sock.set_dest_address(src_addr[0], src_addr[1])
|
||||
if sock.put_packet(tx_data.slice(0, tx_len)) == OK:
|
||||
cmd_tick_tx = tick
|
||||
else:
|
||||
emit_signal('socket_error', 'ошибка: пакет не отправлен на: %s' % src_addr)
|
||||
rc = Error.OK
|
||||
cmd_tick_tx = tick
|
||||
cmd_retry -= 1
|
||||
else:
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('command_fail', self)
|
||||
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('online_changed', self)
|
||||
rc = Error.FAILED
|
||||
return rc
|
||||
|
||||
|
||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||
@@ -151,7 +153,7 @@ class YaU07:
|
||||
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('online_changed', self)
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
if rx_data_len < 11:
|
||||
@@ -187,7 +189,7 @@ class YaU07:
|
||||
if cmd_result != 1: # Команда не выполнена
|
||||
return false
|
||||
|
||||
var cmd_code: CmdCode = rx_data[cmd_code_pos] # "код команды"
|
||||
var cmd_code: CmdCode = rx_data[cmd_code_pos] as CmdCode # "код команды"
|
||||
if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA):
|
||||
parse_isa(rx_data, status_len)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user