diff --git a/project.godot b/project.godot index 107b538..ee894e9 100644 --- a/project.godot +++ b/project.godot @@ -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" diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 5e90d51..7aa4887 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -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 diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 969fa17..89e2ca0 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -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') diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 58a61ab..02e3556 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -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: diff --git a/scripts/yems-boards.gd b/scenes/эмс/yems-boards.gd similarity index 99% rename from scripts/yems-boards.gd rename to scenes/эмс/yems-boards.gd index b72794a..e34cc91 100644 --- a/scripts/yems-boards.gd +++ b/scenes/эмс/yems-boards.gd @@ -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) diff --git a/scripts/yems-consts.gd b/scenes/эмс/yems-consts.gd similarity index 100% rename from scripts/yems-consts.gd rename to scenes/эмс/yems-consts.gd diff --git a/scripts/yems-devs.gd b/scenes/эмс/yems-devs.gd similarity index 100% rename from scripts/yems-devs.gd rename to scenes/эмс/yems-devs.gd diff --git a/scripts/yems-g.gd b/scenes/эмс/yems-g.gd similarity index 95% rename from scripts/yems-g.gd rename to scenes/эмс/yems-g.gd index 94e9c18..ade970d 100644 --- a/scripts/yems-g.gd +++ b/scenes/эмс/yems-g.gd @@ -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. diff --git a/scenes/эмс/кнопка-эмс.tscn b/scenes/эмс/кнопка-эмс.tscn index 562b190..9d90065 100644 --- a/scenes/эмс/кнопка-эмс.tscn +++ b/scenes/эмс/кнопка-эмс.tscn @@ -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 diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 90281f8..36aa3c1 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -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 diff --git a/scripts/network.gd b/scripts/network.gd index fd7fbda..0b3e022 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -30,6 +30,7 @@ class Socket extends PacketPeerUDP: put_packet(data) + class SocketTCP extends TCPServer: const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета. var peerstream: = PacketPeerStream.new() diff --git a/scripts/prd.gd b/scripts/prd.gd new file mode 100644 index 0000000..c6a503f --- /dev/null +++ b/scripts/prd.gd @@ -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 diff --git a/scripts/settings.gd b/scripts/settings.gd index b53439f..1ce3165 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -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('Модуль настроек готов') diff --git a/scripts/yau07.gd b/scripts/yau07.gd index a4175ae..8476f95 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -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) diff --git a/table/table.gd b/table/table.gd index d566f7a..e1360a8 100644 --- a/table/table.gd +++ b/table/table.gd @@ -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_' ## Префикс ключа индикатора выбранного ряда таблицы