Рефактор.
This commit is contained in:
@@ -181,8 +181,7 @@ func _input(event) -> void:
|
||||
## Переключает режим окна программы полный - обычный экран
|
||||
func toggle_full_screen(id: int) -> void:
|
||||
var mode = DisplayServer.window_get_mode(id)
|
||||
if mode == DisplayServer.WINDOW_MODE_FULLSCREEN:
|
||||
mode = DisplayServer.WINDOW_MODE_WINDOWED
|
||||
else:
|
||||
mode = DisplayServer.WINDOW_MODE_FULLSCREEN
|
||||
mode = DisplayServer.WINDOW_MODE_WINDOWED \
|
||||
if mode == DisplayServer.WINDOW_MODE_FULLSCREEN \
|
||||
else DisplayServer.WINDOW_MODE_FULLSCREEN
|
||||
DisplayServer.window_set_mode(mode, id)
|
||||
|
||||
@@ -32,7 +32,7 @@ class Interfer:
|
||||
var ss: int = 0 ## Счётчик сообщений
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var state: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param ITERFER_MODE]
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE]
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения
|
||||
var params: = {} ## Параметры помехи
|
||||
@@ -45,9 +45,12 @@ class Interfer:
|
||||
names.any(func(vn): if dic.has(vn): set(vn, dic[vn]); return false)
|
||||
|
||||
|
||||
signal interfer_preparing(ecm: Interfer)
|
||||
signal interfer_run(ecm: Interfer)
|
||||
signal interfer_error(ecm: Interfer, msg: String)
|
||||
signal interfer_preparing(ecm: Interfer) ## Вызывается при запуске помехи
|
||||
signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи
|
||||
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке
|
||||
signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи
|
||||
signal interfer_new(ecm: Interfer) ## Вызывается при новой помехе
|
||||
signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех
|
||||
|
||||
|
||||
## Производит приём состояния помех. [param unit] -> [param ecms]
|
||||
@@ -55,7 +58,6 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
if not unit.json_dic.has('ts'): return
|
||||
if not (unit.json_dic['ts'] is int): return
|
||||
if unit.json_dic['ts'] != 5: return
|
||||
|
||||
if not unit.json_dic.has('msvk'): return
|
||||
if not (unit.json_dic['msvk'] is Array): return
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
extends Node
|
||||
|
||||
|
||||
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'jsontx': capsrpb.CapsRpb}
|
||||
|
||||
|
||||
class Socket extends PacketPeerUDP:
|
||||
func send_to(addr, data):
|
||||
self.set_dest_address(addr[0], addr[1])
|
||||
self.put_packet(data)
|
||||
|
||||
|
||||
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'jsontx': capsrpb.CapsRpb}
|
||||
var poll_sockets: Array[Socket]
|
||||
var units: Dictionary
|
||||
var sock_unicast: Socket
|
||||
|
||||
@@ -2,10 +2,10 @@ extends Node
|
||||
|
||||
## Протокол ячейки ЯУ-07
|
||||
|
||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, секунды
|
||||
const RESEND_TIMEOUT = 0.3 ## Задержка для повторной отправки команды, секунды
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм, байты
|
||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, мс
|
||||
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, мс
|
||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||
|
||||
|
||||
## Ячейка ЯУ-07
|
||||
@@ -19,32 +19,32 @@ class YaU07:
|
||||
|
||||
## Состояние автомата выполнения команды
|
||||
enum CmdState {
|
||||
UNCK, ## Номер команды не ининциирован
|
||||
SEND, ## Буфер готов для отправки
|
||||
WAIT, ## Ожидание выполнения
|
||||
DONE, ## Команда выполнена
|
||||
FAIL ## Команда не выполнена
|
||||
FAIL, ## Команда не выполнена
|
||||
SEND, ## Буфер готов для отправки
|
||||
UNCK, ## Номер команды не ининциирован
|
||||
WAIT ## Ожидание выполнения
|
||||
}
|
||||
|
||||
signal line_changed(unit: YaU07) ## Вызывается когда меняется состояние связи с ячейкой
|
||||
signal command_done(unit: YaU07) ## Вызывается после выполнения команды
|
||||
signal command_fail(unit: YaU07) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена
|
||||
|
||||
var name: = String()
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_num_rx: = 0 ## Номер команды принятый
|
||||
var cmd_num_tx: = 0 ## Номер команды переданный
|
||||
var cmd_state = CmdState.UNCK ## Состояние выполнения команды
|
||||
var cmd_result: = 1 ## Результат выполнения команды. Устанавливается в ЯУ-07
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_retry = 0 ## Счётчик оставшихся попыток выполнить команду
|
||||
var tick = 0.0 ## Текущее тик-время в мс
|
||||
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
||||
var cmd_state = CmdState.UNCK ## Состояние выполнения команды
|
||||
var cmd_tick_rx = 0.0 ## Время последнего приёма команды
|
||||
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
||||
var isa_ports = {} ## Результат выполнения команды "читать порт"
|
||||
var name: = String() ## Имя
|
||||
var online = false ## Состояние связи с ячейкой
|
||||
var status: = PackedByteArray() ## Поле "состояние прибора"
|
||||
var tick = 0.0 ## Текущее тик-время в мс
|
||||
var tx_data: = [] ## Буфер отправленный
|
||||
var tx_len = 0 ## Длина последнего отправленного пакета
|
||||
var isa_ports = {} ## Результат выполнения команды "читать порт"
|
||||
var online = false ## Состояние связи с ячейкой
|
||||
|
||||
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
@@ -56,8 +56,8 @@ class YaU07:
|
||||
tick = 0.0
|
||||
|
||||
|
||||
func process(delta: float):
|
||||
tick += delta
|
||||
func process(t: int):
|
||||
tick = t
|
||||
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
@@ -81,7 +81,7 @@ class YaU07:
|
||||
return rc
|
||||
|
||||
|
||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||
func send_isa(cmd_code: int, ports_data: PackedByteArray) -> bool:
|
||||
if (cmd_state == CmdState.WAIT) \
|
||||
or (cmd_state == CmdState.SEND) \
|
||||
or (cmd_state == CmdState.UNCK):
|
||||
@@ -93,7 +93,7 @@ class YaU07:
|
||||
|
||||
var ports_count = ports_data.size()
|
||||
tx_len = ports_count * 2 + 8
|
||||
Tools.set_wordi(tx_data, 2, cmd_num_tx)
|
||||
tx_data.encode_u16(2, cmd_num_tx)
|
||||
|
||||
if cmd_code == CmdCode.WRITE_ISA:
|
||||
ports_count /= 2
|
||||
@@ -109,14 +109,15 @@ class YaU07:
|
||||
|
||||
|
||||
## Возвращает код команды ЯУ-07
|
||||
## rx_data - Принятые данные
|
||||
## Возвращает - Код команды не найден, 0...255 - код команды
|
||||
func get_cmd_code(rx_data):
|
||||
## [param rx_data] - Принятые данные[br]
|
||||
## Возвращает [b]null[/b] - Если код команды не найден[br]
|
||||
## Возвращает [b]0...255[/b] - Код команды
|
||||
func get_cmd_code(rx_data: PackedByteArray):
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
if rx_data_len < 7:
|
||||
return null
|
||||
var status_len = Tools.ibytes_to_word(rx_data, 6) # Длина массива байтового "состояние прибора"
|
||||
var status_len = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора"
|
||||
if rx_data_len <= (status_len + 6): # Нет поля "ответ на команду", разбор пакета завершить
|
||||
return null
|
||||
var cmd_code_pos = status_len + 8 # Положение в приёмном буфере "кода команды"
|
||||
|
||||
Reference in New Issue
Block a user