Доработка. Отключение помехи если 5 секунд нет команд на подавление.

This commit is contained in:
MaD_CaT
2025-12-26 11:12:57 +03:00
parent 78fcb79e00
commit cb4c3eceaf
3 changed files with 31 additions and 20 deletions

View File

@@ -1,11 +1,5 @@
extends Node extends Node
var id_array: Array # Массив id целей
var interfers : Dictionary # Словарь целей
var msg_counter : int = 0 # Счётчик отправленных пакетов
var g_table # таблица с помехами
const TableCellType1 = preload('res://ячейка-1.tscn') const TableCellType1 = preload('res://ячейка-1.tscn')
const TableCellType2 = preload('res://кнопка-3.tscn') const TableCellType2 = preload('res://кнопка-3.tscn')
const TableCellType3 = preload('res://кнопка-4.tscn') const TableCellType3 = preload('res://кнопка-4.tscn')
@@ -83,6 +77,14 @@ const INTERFER_NAMES: Dictionary = {
'SRNI1_LIT4.pcm', 'SRNI1_LIT4.pcm',
'SRNI1_LIT5.pcm'] } 'SRNI1_LIT5.pcm'] }
const INTERFER_OFF_TIMEOUT = 5.0 # Интервал выключения помехи
var id_array: Array # Массив id целей
var interfers : Dictionary # Словарь целей
var msg_counter : int = 0 # Счётчик отправленных пакетов
var g_table # таблица с помехами
var now = 0.0 # Время с момента запуска приложения
# Помеха # Помеха
class Interfer: class Interfer:
var get_data: Dictionary = { var get_data: Dictionary = {
@@ -105,6 +107,7 @@ class Interfer:
var svk: int = 0 var svk: int = 0
var row_id: int var row_id: int
var active_fs: fs.Fs var active_fs: fs.Fs
var rx_tick: = 0
func _init(data: Dictionary): func _init(data: Dictionary):
options.merge(data, true) options.merge(data, true)
@@ -142,6 +145,7 @@ func set_interfer(data):
on_row_add(g_table, interfers[data['ispp']]) on_row_add(g_table, interfers[data['ispp']])
var cmd_state: int = fs.set_fs(interfers[data['ispp']]) var cmd_state: int = fs.set_fs(interfers[data['ispp']])
interfers[data['ispp']].svk = cmd_state interfers[data['ispp']].svk = cmd_state
interfers[data['ispp']].rx_tick = now;
var cell = g_table.get_node2(COLUMN_SVK, interfers[data['ispp']].row_id) var cell = g_table.get_node2(COLUMN_SVK, interfers[data['ispp']].row_id)
cell.select(cmd_state) cell.select(cmd_state)
@@ -221,14 +225,14 @@ func on_row_pressed(i_row: int, table):
pass pass
func off_interfer(json_data): func off_interfer(interfer_id):
if not interfers.has(json_data['ispp']): return if not interfers.has(interfer_id): return
var row_id = interfers[json_data['ispp']].row_id var row_id = interfers[interfer_id].row_id
if interfers[json_data['ispp']] != null: if interfers[interfer_id] != null:
if interfers[json_data['ispp']].active_fs != null: if interfers[interfer_id].active_fs != null:
fs.fs_off(interfers[json_data['ispp']].active_fs) fs.fs_off(interfers[interfer_id].active_fs)
if g_table.get_rows_count() > row_id: if g_table.get_rows_count() > row_id:
interfers.erase(json_data['ispp']) interfers.erase(interfer_id)
g_table.remove_row(row_id) g_table.remove_row(row_id)
for i in g_table.get_rows_count(): for i in g_table.get_rows_count():
var interfer = g_table.get_node_user_data(0, i) var interfer = g_table.get_node_user_data(0, i)
@@ -245,3 +249,10 @@ func check_interfers_state():
interfer.svk = cmd_state interfer.svk = cmd_state
var cell = g_table.get_node2(COLUMN_SVK, interfer.row_id) var cell = g_table.get_node2(COLUMN_SVK, interfer.row_id)
cell.select(cmd_state) cell.select(cmd_state)
func _process(delta):
now += delta
for key in interfers:
if (now - interfers[key].rx_tick) > INTERFER_OFF_TIMEOUT:
off_interfer(key)

View File

@@ -64,7 +64,7 @@ func on_receive(data):
if not json_data.has('ss'): return if not json_data.has('ss'): return
if not ((json_data['ss'] is int) or (json_data['ss'] is float)): return if not ((json_data['ss'] is int) or (json_data['ss'] is float)): return
if json_data['krp'] == 'off': if json_data['krp'] == 'off':
Interfers.off_interfer(json_data) Interfers.off_interfer(json_data['ispp'])
sock.put_packet(Interfers.get_msg7_data()) sock.put_packet(Interfers.get_msg7_data())
return return
if not json_data.has('powp'): return if not json_data.has('powp'): return

View File

@@ -80,17 +80,17 @@ const M_PROTO = ['<неопр.>', '3dlink', 'skyhopperpro', 'picardiooem', 'solo
'mavlink', 'ltm', 'hc12', 'df1', ] 'mavlink', 'ltm', 'hc12', 'df1', ]
const COLUMN_OPT_BTN = [COLUMN_TMOD, COLUMN_FREQM, COLUMN_PROTO, COLUMN_REC] const COLUMN_OPT_BTN = [COLUMN_TMOD, COLUMN_FREQM, COLUMN_PROTO, COLUMN_REC]
const ID_ARRAY_LEN = 150 # Размер пула номеров целей const ID_ARRAY_LEN = 150 # Размер пула номеров целей
const MIN_FLIC_TIME = 1.0 # минимальное время мерцания цели const MIN_FLIC_TIME = 1.0 # минимальное время мерцания цели
var id_array: Array # Массив id целей var id_array: Array # Массив id целей
var threats : Dictionary # Словарь целей var threats : Dictionary # Словарь целей
var msg_counter : int = 0 # Счётчик отправленных пакетов var msg_counter : int = 0 # Счётчик отправленных пакетов
var g_table: GridContainer var g_table: GridContainer
var send_flag = true var send_flag = true
var rkrp = [] var rkrp = []
var now = 0.0 # Время с момента запуска приложения var now = 0.0 # Время с момента запуска приложения
var bpo_mode: int = 1 # Режим работы блока БПО var bpo_mode: int = 1 # Режим работы блока БПО
# Номера колонок # Номера колонок
var COLUMN_OPT = [[COLUMN_TMOD, MODE_TYPES], [COLUMN_FREQM, FREQM], [COLUMN_PROTO, M_PROTO], [COLUMN_REC, rkrp]] var COLUMN_OPT = [[COLUMN_TMOD, MODE_TYPES], [COLUMN_FREQM, FREQM], [COLUMN_PROTO, M_PROTO], [COLUMN_REC, rkrp]]