Merge remote-tracking branch 'MaD_CaT/master'

This commit is contained in:
sasha80
2025-02-12 10:56:43 +03:00
15 changed files with 256 additions and 112 deletions

View File

@@ -54,16 +54,17 @@ yau07="*res://scripts/yau07.gd"
capsrpb="*res://scripts/capsrpb.gd"
table="*res://table/table.gd"
threats="*res://scripts/threats.gd"
yemsdevs="*res://scripts/yems-devs.gd"
yemsboards="*res://scripts/yems-boards.gd"
yemsconsts="*res://scripts/yems-consts.gd"
yemsg="*res://scripts/yems-g.gd"
yemsdevs="*res://scenes/эмс/yems-devs.gd"
yemsboards="*res://scenes/эмс/yems-boards.gd"
yemsconsts="*res://scenes/эмс/yems-consts.gd"
yemsg="*res://scenes/эмс/yems-g.gd"
interfer="*res://scripts/interfer.gd"
hotkeys="*res://scripts/hotkeys.gd"
tcp5p28="*res://scripts/tcp5p28.gd"
sch3="*res://scripts/sch3.gd"
spt25="*res://scripts/spt25.gd"
astrakb="*res://scripts/astra_kb.gd"
prd="*res://scripts/prd.gd"
[debug]
@@ -84,7 +85,6 @@ gdscript/warnings/integer_division=0
window/size/viewport_width=1600
window/size/viewport_height=1200
window/size/mode=3
window/subwindows/embed_subwindows=false
window/stretch/mode="canvas_items"

View File

@@ -4,9 +4,11 @@ class_name scroll_ecm_params extends ScrollContainer
const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы.
const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы.
const CellTaggleBtn = preload('res://table/taggle.tscn')
const TABLE_HEADER = [ TableHeader, TableHeader ] ## Описание ряда заголовка.
const TABLE_ROW = [ CellLineEdit, CellLineEdit ] ## Описание ряда.
const TABLE_TAGGLE_BTN = [ CellLineEdit, CellTaggleBtn ] ## Описание ряда c кнопкой.
const TABLE_HEADERS_TEXT = ['Параметр', 'Значение' ] ## Назания колонок.
const TABLE_COLUMN_SIZE = [ 370, 85 ] ## Ширины колонок.
@@ -18,6 +20,7 @@ const TABLE_PARAMS = {
'dur': [4, 'Длительность импульса, мкс', true, 0.0, 1000000.0],
'period': [5, 'Период повтора, мкс', true, 0.0, 1000000.0] }
const MOD_ROW_INDEX = 6 ## Индекс строки с модуляцией
func init_table():
for i in TABLE_PARAMS.size(): $table.add_row(TABLE_ROW)
@@ -28,22 +31,38 @@ func init_table():
$table.set_node_editable(0, p[0], false)
$table.set_node_editable(1, p[0], false)
$table.set_node_user_data(1, p[0], key)
$table.connect_columns(self, 'text_submitted', 'on_edit_entry', [1], [])
var node = $table.get_node2(1, p[0])
node.connect('text_submitted', Callable(self, 'on_edit_entry').bind(node))
$table.add_row(TABLE_TAGGLE_BTN)
$table.set_node_text(0, MOD_ROW_INDEX, 'Модуляция')
$table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT)
$table.set_node_editable(0, MOD_ROW_INDEX, false)
var taggle_node = $table.get_node2(1, MOD_ROW_INDEX)
for item in taggle_node.get_children():
item.size.x = 85
item.size.y = 25
item.position.x = 0
item.position.y = 0
taggle_node.size.x = 85
taggle_node.size.y = 25
var taggle_btn = taggle_node.get_children()[1]
taggle_btn.connect('pressed', on_taggle_btn.bind(taggle_btn))
taggle_btn.disabled = true
$table.set_columns_min_size(TABLE_COLUMN_SIZE)
$table.set_meta('id', 0)
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(taggle_btn))
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
## Called when the node enters the scene tree for the first time.
func _ready():
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected'))
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
call_deferred('init_table')
func on_edit_entry(text : String, entry):
var ecm = $table.get_meta('ecm')
if $table.has_meta('ecm') == false: return
var indexis = $table.get_key_indexes(entry[0].name)
var indexis = $table.get_key_indexes(entry.name)
var row_i = indexis[1]
var param = $table.get_node_user_data(1, row_i)
var p = TABLE_PARAMS[param]
@@ -61,19 +80,22 @@ func check_value(val, min_val, max_val, old_val):
else: return old_val
func on_interfer_selected(ecm):
func on_interfer_selected(ecm, taggle_btn):
if ecm != null:
$table.set_meta('ecm', ecm)
taggle_btn.disabled = false
else:
$table.set_meta('ecm', null)
on_ecm_update()
taggle_btn.disabled = true
taggle_btn.button_pressed = false
on_ecm_update(taggle_btn)
func on_ecm_update():
func on_ecm_update(taggle_btn):
for item in len(TABLE_PARAMS):
$table.set_node_text(1, item, '')
$table.set_node_editable(1, item, false)
if $table.has_meta('ecm') == false: return
if not $table.has_meta('ecm'): return
var ecm: interfer.Interfer = $table.get_meta('ecm')
var mnms = tools.get_members_names(ecm)
for item in ecm['params'].keys():
@@ -84,9 +106,17 @@ func on_ecm_update():
var val = ecm.get_value(member_name)
$table.set_node_text(1, p[0], '%s' % val)
$table.set_node_editable(1, p[0], p[2])
taggle_btn.button_pressed = ecm.modulation
func on_rto_threat_unsel(_th_id):
for item in range(len(TABLE_PARAMS)):
$table.set_node_text(1, item, '')
$table.set_node_editable(1, item, false)
func on_taggle_btn(taggle_btn):
if not $table.has_meta('ecm'): return
var ecm: interfer.Interfer = $table.get_meta('ecm')
ecm.modulation = taggle_btn.button_pressed

View File

@@ -19,6 +19,7 @@ func _ready() -> void:
func on_external_cu_btn_pressed(btn) -> void:
var state = btn.button_pressed
ProjectSettings.set_setting('application/config/external_cu', state)
if state:
signaller.emit_signal('interfer_off_all')

View File

@@ -36,50 +36,14 @@ signal drag_continue ## Вызывается во время продолжен
signal drag_end ## Вызывается в момент завершения перетаскивания.
## Границы секторов блоков ФС по частоте в режиме РТО.
const fs_band_rto: Dictionary = {
0: [200.0, 250.0],
1: [250.0, 300.0],
2: [300.0, 350.0],
3: [350.0, 400.0],
4: [400.0, 450.0],
5: [450.0, 500.0],
6: [500.0, 550.0] }
## Границы секторов блоков ФС по частоте в режиме РЛС.
const fs_band_rls: Dictionary = {
0: [480.0, 490.0],
1: [490.0, 500.0],
2: [500.0, 510.0],
3: [510.0, 520.0],
4: [520.0, 530.0],
5: [530.0, 540.0],
6: [540.0, 550.0] }
## Границы секторов блоков ФС по пеленгу.
const fs_sectors: Dictionary = {
0: [0.0, 90.0],
3: [90.0, 180.0],
2: [180.0, 270.0],
1: [270.0, 360.0] }
const fs_freq: Dictionary = {
0: [390.0, 510.0, 200.0, 250.0, 433.0],
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
3: [1150.0, 1490.0, 350.0, 400.0, 1227.0],
4: [1490.0, 2000.0, 400.0, 450.0, 1575.0],
5: [2000.0, 3500.0, 450.0, 500.0, 2450.0],
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0]
}
## Размеры карты для разных режимов РТО и РЛС соответственно
const map_sizes = [
Rect2i(360, 360, 400, 400),
Rect2i(82, 82, 955, 955)]
var fs_band = fs_band_rto ## Текущий режим блоков ФС по частоте
var fs_band = prd.fs_band_rto ## Текущий режим блоков ФС по частоте
var fs_selected: Dictionary ## Словарь выбранных секторов
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
## Состояние перетаскивания.
enum DragFSM {
DRAG, ## В процессе.
@@ -110,7 +74,7 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed')
## Обработчик нажатия на кнопку вид.
func on_button_view_toggled(toggled: bool):
signaller.emit_signal('map_mode_changed', int(toggled))
fs_band = fs_band_rls if toggled else fs_band_rto
fs_band = prd.fs_band_rls if toggled else prd.fs_band_rto
var s = map_sizes[int(toggled)]
$tilemap.size = s.size
$tilemap.position = s.position
@@ -173,17 +137,17 @@ func map_threat_to_bip(th: threats.Threat, bip: Control):
var freq = th.freq
var sector_key = null
var sector_width = 50.0
for key in fs_freq:
var freq_range = fs_freq[key]
for key in prd.fs_freq:
var freq_range = prd.fs_freq[key]
var _num_values = (freq_range[1]- freq_range[0]) / sector_width
if freq_range[0] <= freq and freq <= freq_range[1]:
sector_key = key
break
if sector_key!= null:
radius_internal = fs_freq[sector_key][2]
radius_outter = fs_freq[sector_key][3]
freq_low = fs_freq[sector_key][0]
freq_high = fs_freq[sector_key][1]
radius_internal = prd.fs_freq[sector_key][2]
radius_outter = prd.fs_freq[sector_key][3]
freq_low = prd.fs_freq[sector_key][0]
freq_high = prd.fs_freq[sector_key][1]
bip.position = tools.pos_calc(
th.freq,
th.aoa,
@@ -407,9 +371,9 @@ func sel_fs_sector(event):
var sector: int
var band: int
var has_band: bool = false
for sec in fs_sectors.values():
for sec in prd.fs_sectors.values():
if angle >= sec[0] and angle <= sec[1]:
sector = fs_sectors.find_key(sec)
sector = prd.fs_sectors.find_key(sec)
for diap in fs_band.values():
if distance >= diap[0] and distance <= diap[1]:
band = fs_band.find_key(diap)
@@ -429,7 +393,7 @@ func sel_fs_sector(event):
func set_fs_color(ecm):
var fs_index_arr: Array = []
get_fs_index(ecm, fs_index_arr)
prd.get_fs_index(ecm, fs_index_arr)
if ecm.krp != interfer.INTERFER_OFF:
for item in fs_index_arr:
fs_active[item] = null
@@ -465,40 +429,23 @@ func set_ecm_btns_state(value: bool):
func get_fs_param(index: int) -> Array:
var freq = (fs_freq[index / 4][4])
var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0
var freq = (prd.fs_freq[index / 4][4])
var sector = (prd.fs_sectors[index % 4][0] + prd.fs_sectors[index % 4][1])/2 - 45.0
if sector < 0:
sector += 360.0
var width = fs_freq[index / 4][1] - fs_freq[index / 4][0]
var width = prd.fs_freq[index / 4][1] - prd.fs_freq[index / 4][0]
return [sector, freq, width, index]
func on_fs_selected(ecm):
var fs_index_arr: Array = []
get_fs_index(ecm, fs_index_arr)
prd.get_fs_index(ecm, fs_index_arr)
fs_selected.clear()
for item in fs_index_arr:
fs_selected[item] = null
update_fs_colors()
func get_fs_index(ecm, fs_index_arr):
var sector: int
var band: Array
var angle: float = ecm.kni + 45.0
if angle > 360.0:
angle -= 360.0
for sec in fs_sectors.values():
if float(angle) >= sec[0] and float(angle) <= sec[1]:
sector = fs_sectors.find_key(sec)
for diap in fs_freq.values():
if ecm.params.has('freq'):
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
band.append(fs_freq.find_key(diap))
for item in band:
fs_index_arr.append(item * 4 + sector)
func set_btns_disabled(value: bool, btn):
var external_cu = ProjectSettings.get_setting('application/config/external_cu', false)
if external_cu:

View File

@@ -283,4 +283,4 @@ class EmsBoard:
cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)])
func set_load_done():
unit_ems.send_other(unit_ems.CmdCode.LOAD_EMG_DONE)
unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE)

View File

@@ -1,5 +1,15 @@
extends Node
const modulation_dev: Dictionary = {
0 : 50,
1 : 51,
2 : 52,
3 : 51,
4 : 52,
5 : 51,
6 : 52,
}
var ems_board: Dictionary = {}
# Called when the node enters the scene tree for the first time.

View File

@@ -5,15 +5,15 @@
[sub_resource type="StyleBoxEmpty" id="1"]
[sub_resource type="StyleBoxEmpty" id="6"]
[sub_resource type="StyleBoxEmpty" id="4"]
[sub_resource type="StyleBoxEmpty" id="5"]
[sub_resource type="StyleBoxEmpty" id="2"]
[sub_resource type="StyleBoxEmpty" id="3"]
[sub_resource type="StyleBoxEmpty" id="5"]
[sub_resource type="StyleBoxEmpty" id="4"]
[sub_resource type="StyleBoxEmpty" id="6"]
[node name="container" type="PanelContainer"]
offset_right = 30.0
@@ -36,11 +36,11 @@ axis_stretch_vertical = 2
[node name="button" type="Button" parent="."]
layout_mode = 2
theme_override_styles/normal = SubResource("6")
theme_override_styles/focus = SubResource("4")
theme_override_styles/disabled = SubResource("5")
theme_override_styles/hover = SubResource("2")
theme_override_styles/pressed = SubResource("3")
theme_override_styles/disabled = SubResource("5")
theme_override_styles/focus = SubResource("4")
theme_override_styles/normal = SubResource("6")
toggle_mode = true
clip_text = true

View File

@@ -50,6 +50,7 @@ class Interfer:
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
var tick_tx: int ## Тик время обновления цели, мс.
var source_interfer: String = '' ## Тип объекта по которой поставлена помеха.
var modulation: bool ## Модуляция для включения усилителей
func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
@@ -86,7 +87,6 @@ class Interfer:
else:
self.set(value_key, value)
signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи.
signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи.
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке.
@@ -149,6 +149,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit):
ecm.kni = thr.aoa
send_ecm(ecm, unit)
signaller.emit_signal('fs_update_color', ecms)
prd.update_fs_state(ecms)
if auto_status == 0:
return

View File

@@ -30,6 +30,7 @@ class Socket extends PacketPeerUDP:
put_packet(data)
class SocketTCP extends TCPServer:
const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета.
var peerstream: = PacketPeerStream.new()

150
scripts/prd.gd Normal file
View File

@@ -0,0 +1,150 @@
extends Node
## Границы секторов блоков ФС по частоте в режиме РТО.
const fs_band_rto: Dictionary = {
0: [200.0, 250.0],
1: [250.0, 300.0],
2: [300.0, 350.0],
3: [350.0, 400.0],
4: [400.0, 450.0],
5: [450.0, 500.0],
6: [500.0, 550.0] }
## Границы секторов блоков ФС по частоте в режиме РЛС.
const fs_band_rls: Dictionary = {
0: [480.0, 490.0],
1: [490.0, 500.0],
2: [500.0, 510.0],
3: [510.0, 520.0],
4: [520.0, 530.0],
5: [530.0, 540.0],
6: [540.0, 550.0] }
## Границы секторов блоков ФС по пеленгу.
const fs_sectors: Dictionary = {
0: [0.0, 90.0],
3: [90.0, 180.0],
2: [180.0, 270.0],
1: [270.0, 360.0] }
const fs_freq: Dictionary = {
0: [390.0, 800.0, 200.0, 250.0, 433.0],
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
3: [1150.0, 1490.0, 350.0, 400.0, 1227.0],
4: [1490.0, 2000.0, 400.0, 450.0, 1575.0],
5: [2000.0, 3500.0, 450.0, 500.0, 2450.0],
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] }
const prd_names: Array = [
'уарэп-яу07-1н',
'уарэп-яу07-1в',
'уарэп-яу07-1к',
'уарэп-яу07-2н',
'уарэп-яу07-2в',
'уарэп-яу07-2к',
'уарэп-яу07-3н',
'уарэп-яу07-3в',
'уарэп-яу07-3к',
'уарэп-яу07-4н',
'уарэп-яу07-4в',
'уарэп-яу07-4к', ]
const fs_ampls: Dictionary = {
0: ['уарэп-яу07-1к'],
1: ['уарэп-яу07-4к'],
2: ['уарэп-яу07-3к'],
3: ['уарэп-яу07-2к'],
4: ['уарэп-яу07-1н'],
5: ['уарэп-яу07-4н'],
6: ['уарэп-яу07-3н'],
7: ['уарэп-яу07-2н'],
8: ['уарэп-яу07-1н'],
9: ['уарэп-яу07-4н'],
10: ['уарэп-яу07-3н'],
11: ['уарэп-яу07-2н'],
12: ['уарэп-яу07-1в'],
13: ['уарэп-яу07-4в'],
14: ['уарэп-яу07-3в'],
15: ['уарэп-яу07-2в'],
16: ['уарэп-яу07-1в'],
17: ['уарэп-яу07-4в'],
18: ['уарэп-яу07-3в'],
19: ['уарэп-яу07-2в'],
20: ['уарэп-яу07-1к'],
21: ['уарэп-яу07-4к'],
22: ['уарэп-яу07-3к'],
23: ['уарэп-яу07-2к'],
24: ['уарэп-яу07-1к'],
25: ['уарэп-яу07-4к'],
26: ['уарэп-яу07-3к'],
27: ['уарэп-яу07-2к'], }
var fs_dict: Dictionary
var prd_dict: Dictionary
class FsAmpl:
var index ## Индекс блока усилителей
var modulation: int ## Состояние модуляции
var prd_name: String ## Ипя прибора ПРД в котором стоит модуль
func _init(i, p_name):
prd_name = p_name
index = i
func set_modulation(val):
modulation = val
class PRD:
var prd_name: String ## Имя прибора
var unit_yau07 ## Юнит эмс
var fs_dic: Dictionary ## Массив блоков ФС
var yemsg_board ## Плата ЭМС-Г
func _init(u_name ,u, yems_board):
prd_name = u_name
unit_yau07 = u
yemsg_board = yems_board
func _ready() -> void:
for prd_name in prd_names:
var unit_key = settings.get_unit_key(prd_name)
var unit_prd = network.units[unit_key]
for yemsg_board in yemsg.ems_board.values():
if yemsg_board[1] == unit_prd:
var yemsg_b = yemsg_board[0]
var new_prd = PRD.new(prd_name, unit_prd, yemsg_b)
prd_dict[prd_name] = new_prd
for key in fs_ampls.keys():
var fs_ampl = FsAmpl.new(key, fs_ampls[key][0])
fs_dict[key] = fs_ampl
if prd_dict.has(fs_ampl.prd_name):
prd_dict[fs_ampl.prd_name].fs_dic[key] = fs_ampl
func get_fs_index(ecm, fs_index_arr):
var sector: int
var band: Array
var angle: float = ecm.kni + 45.0
if angle > 360.0:
angle -= 360.0
for sec in fs_sectors.values():
if float(angle) >= sec[0] and float(angle) <= sec[1]:
sector = fs_sectors.find_key(sec)
for diap in fs_freq.values():
if ecm.params.has('freq'):
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
band.append(fs_freq.find_key(diap))
for item in band:
fs_index_arr.append(item * 4 + sector)
func update_fs_state(ecms):
for ecm in ecms.values():
var fs_ids: Array
get_fs_index(ecm, fs_ids)
pass

View File

@@ -27,7 +27,7 @@ var settings_program: Dictionary
'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
# Название: [ Протокол, Адрес, Порт получения, Комментарий ]
'уарэп-5п28': [ '5p28', '192.168.3.109', [50000], 'IP-адрес комплекса 5П-28'],
'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'],
# Название: [ Протокол, Адрес, Скорость, ??, ??, Комментарий
'уарэп-щ3': ['mbcs', '/home/sasha/dev/tty1', [19200, 7, 'N', 8, 1], 'Параметры клиента Modbus Serial'],
@@ -45,21 +45,25 @@ var settings_program: Dictionary
func _ready() -> void:
var file = FileAccess.open(settings_file, FileAccess.READ)
if file != null:
var read = file.get_as_text()
file.close()
var json_conv: = JSON.new()
if Error.OK == json_conv.parse(read):
var json_data = json_conv.get_data()
settings_program.merge(json_data)
for key in UnitProfiles.keys():
if json_data.has(key):
UnitProfiles[key][1] = json_data[key][0]
for i in len(json_data[key]) - 1:
if json_data[key][1][i+1].is_valid_int():
UnitProfiles[key][2][i] = int(json_data[key][i+1])
else:
UnitProfiles[key][2][i] = json_data[key][i+1]
if not file:
log.info('Не удалось открыть файл настроек %s, использованы настройики по умолчанию' % settings_file)
return
var read = file.get_as_text()
file.close()
var json_conv: = JSON.new()
if Error.OK != json_conv.parse(read):
log.info('Не удалось прочитать файл настроек %s, использованы настройики по умолчанию' % settings_file)
return
var json_data = json_conv.get_data()
settings_program.merge(json_data)
for key in UnitProfiles.keys():
if not json_data.has(key): continue
UnitProfiles[key][1] = json_data[key][0]
for i in len(json_data[key]) - 1:
if json_data[key][1][i+1].is_valid_int():
UnitProfiles[key][2][i] = int(json_data[key][i+1])
else:
UnitProfiles[key][2][i] = json_data[key][i+1]
log.info('Модуль настроек готов')

View File

@@ -24,7 +24,7 @@ class YaU07 extends unit.Unit:
WRITE_FLASH_MP550 = 55, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07
WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07
READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07
LOAD_EMG_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07
LOAD_EMS_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07
}
var cmd_num_rx: = 0 ## Номер команды принятый
@@ -173,12 +173,12 @@ class YaU07 extends unit.Unit:
cmd_code_tx = cmd_code
return true
func send_other(cmd_code: int):
func send_load_ems_done(cmd_code: int):
if (cmd_state == CmdState.WAIT) \
or (cmd_state == CmdState.SEND) \
or (cmd_state == CmdState.UNCK):
return false
if not (cmd_code == CmdCode.LOAD_EMG_DONE):
if not (cmd_code == CmdCode.LOAD_EMS_DONE):
return false
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
tx_data.encode_u16(0, cmd_retry)

View File

@@ -10,8 +10,8 @@ class_name GDTable extends GridContainer
@export_file var selector_type_file: = 'res://table/selector.tscn': set = load_selector_scene ## Сцена селектора для выбранного ряда
const HEAD_PREFIX = 'HEAD_' ## Префикс ключа заголовка таблицы
const INDEX_FORMAT = '%02d_%02d' ## Формат индекса ключа
const MAX_INDEX = 99 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа
const INDEX_FORMAT = '%03d_%03d' ## Формат индекса ключа
const MAX_INDEX = 199 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа
const NODE_PREFIX = 'NODE_' ## Префикс ключа ячейки таблицы
const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикатора выбранного ряда таблицы