diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 3fc2c3a..6ce798d 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -103,7 +103,6 @@ func on_ecm_update(toggle_btn): toggle_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, '') diff --git a/scenes/frame-params/scroll-params.gd b/scenes/frame-params/scroll-params.gd index 78bb5ba..2f40f4b 100644 --- a/scenes/frame-params/scroll-params.gd +++ b/scenes/frame-params/scroll-params.gd @@ -61,5 +61,5 @@ func on_threat_update(th): func on_rto_threat_unsel(_th_id): - for item in range(len(TABLE_PARAMS)): + for item in TABLE_PARAMS.size(): $table.set_node_text(1, item, '') diff --git a/scenes/frame-threats/scroll-threats.gd b/scenes/frame-threats/scroll-threats.gd index f054b02..a0f2056 100644 --- a/scenes/frame-threats/scroll-threats.gd +++ b/scenes/frame-threats/scroll-threats.gd @@ -14,6 +14,10 @@ const TABLE_HEADERS_TEXT = ['Номер', 'Пеленг', 'Часто const TABLE_COLUMN_SIZE = [ 65, 145, 145, 90 ] ## Ширины колонок. +## Снимает выделение цели. +func on_rto_threat_unsel(_th_id): $table.clear_rows_selected() + + ## Вызывается при нажатии указателем мыши на выбранный ряд. func on_row_pressed(i_row: int): row_pressed(i_row) @@ -97,7 +101,3 @@ func on_rto_threat_sel(th_id, tbl): if node.text.to_int() == th_id: row_pressed(i) break - - -## Снимает выделение цели. -func on_rto_threat_unsel(_th_id): $table.clear_rows_selected() diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 74c6956..a0bb3f6 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -1,5 +1,5 @@ @tool -extends "res://scenes/контроль/прибор.gd" +extends 'res://scenes/контроль/прибор.gd' const Constants: Dictionary = { 'IN_BLANK_PRD': 1, diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 46d83c5..0aca3e9 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -1,3 +1,4 @@ +@tool extends 'res://scenes/контроль/прибор.gd' const Constants = { diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index 1d51e8b..1c38a80 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -1,31 +1,32 @@ -extends 'res://scenes/контроль/прибор.gd' +@tool +class_name pribor_uf extends 'res://scenes/контроль/прибор.gd' -enum STATE_VAL { - NONE = 0, - GOOD = 1, - ERROR = 2 } - -var timer = Timer.new() - -var DEV_LIST = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0'] -var USB_TRACKERBALL = '13ba:0018' -var REVFF = '(rev ff)' +enum STATE_VAL {NONE = 0, GOOD = 1, ERROR = 2} +const DEV_LIST = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0'] +const USB_TRACKERBALL = '13ba:0018' +const REVFF = '(rev ff)' func _ready() -> void: + if Engine.is_editor_hint(): + return var unit_uf = network.get_unit_instance('уарэп-эмс') - self.add_child(timer) - timer.connect('timeout', Callable(self, 'on_timer').bind(unit_uf)) - timer.start(1) + unit_uf.connect('line_changed', on_line_changed) + on_timer.bind(unit_uf) + control_vk() -func on_timer(unit_uf): - Control_VK() # проверка трекбола и pci +func on_timer(unit_uf: unit.Unit): + status_uf() # отслеживание состояния прибора + if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б + control_ems(unit_uf.status) # проверка ЭМС ячеек + + +func on_line_changed(unit_uf): if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.GOOD - Control_EMS(unit_uf.status) # проверка ЭМС ячеек else: $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.ERROR $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.NONE @@ -34,20 +35,19 @@ func on_timer(unit_uf): $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.NONE - status_uf() # отслеживание состояния прибора -func Control_VK() -> void: +func control_vk() -> void: var out_usb_str = '' var out_pci_str = '' var out_usb = [] var out_pci = [] - OS.execute('lsusb', [], out_usb) + OS.execute('lsusb', [], out_usb) # TODO: Не переносимое, платформозависимое for element in out_usb: out_usb_str += element - OS.execute('lspci', [], out_pci) + OS.execute('lspci', [], out_pci) # TODO: Не переносимое, платформозависимое for element in out_pci: out_pci_str += element @@ -68,13 +68,13 @@ func Control_VK() -> void: i -= 1 break - if i == (len(DEV_LIST) + 1): + if i == (DEV_LIST.size() + 1): $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD else: $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR -func Control_EMS(status:Array) -> void: +func control_ems(status: Array) -> void: $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if ((status[0] >> 0) & 1) and ((status[0] >> 3) & 1) else STATE_VAL.ERROR $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if ((status[0] >> 1) & 1) and ((status[0] >> 4) & 1) else STATE_VAL.ERROR $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if ((status[0] >> 2) & 1) and ((status[0] >> 5) & 1) else STATE_VAL.ERROR @@ -82,19 +82,19 @@ func Control_EMS(status:Array) -> void: func status_uf() -> void: - var status_bu:int = $ref_uf/ref_bu1/ref_A8_BU.state - var status_yay:int = $ref_uf/ref_kassetav13/ref_A7_YAU07.state - var status_kems:int = $ref_uf/ref_kassetav13/ref_A4_KEMS.state - var status_ems0:int = $ref_uf/ref_kassetav13/ref_A5_EMS.state - var status_ems1:int = $ref_uf/ref_kassetav13/ref_A6_EMS.state - var status_ip5:int = $ref_uf/ref_kassetav13/ref_A3_IP5B.state - var status_ip27:int = $ref_uf/ref_kassetav13/ref_A12_IP27B.state + var status_bu: int = $ref_uf/ref_bu1/ref_A8_BU.state + var status_yau: int = $ref_uf/ref_kassetav13/ref_A7_YAU07.state + var status_kyems: int = $ref_uf/ref_kassetav13/ref_A4_KEMS.state + var status_yems0: int = $ref_uf/ref_kassetav13/ref_A5_EMS.state + var status_yems1: int = $ref_uf/ref_kassetav13/ref_A6_EMS.state + var status_ip5: int = $ref_uf/ref_kassetav13/ref_A3_IP5B.state + var status_ip27: int = $ref_uf/ref_kassetav13/ref_A12_IP27B.state - if (status_yay == 1) and (status_bu == 1) and (status_kems == 1) \ - and (status_ems0 == 1) and (status_ems1 == 1) and (status_ip5 == 1) and (status_ip27 == 1): + if (status_yau == 1) and (status_bu == 1) and (status_kyems == 1) \ + and (status_yems0 == 1) and (status_yems1 == 1) and (status_ip5 == 1) and (status_ip27 == 1): $lbl_header2.text = 'Прибор исправен' - $lbl_header2.modulate = Color(0,1,0,1) + $lbl_header2.modulate = Color.GREEN else: $lbl_header2.text = 'Прибор не исправен' - $lbl_header2.modulate = Color(1,0,0,1) + $lbl_header2.modulate = Color.RED $lbl_header2.visible = true diff --git a/scenes/pribor-uf/pribor-uf.tscn b/scenes/pribor-uf/pribor-uf.tscn index 6d9ea19..9b63dc8 100644 --- a/scenes/pribor-uf/pribor-uf.tscn +++ b/scenes/pribor-uf/pribor-uf.tscn @@ -153,3 +153,5 @@ text = "Прибор не исправен " horizontal_alignment = 1 vertical_alignment = 1 + +[node name="timer" type="Timer" parent="."] diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index 200a35b..15ef85c 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -12,6 +12,7 @@ class_name MercatorTileMap base_url = v _clean_all() queue_redraw() +const TILE_REQUEST_NAME: = 'tile_request_%d' @export var zoom_step: float = 0.1 @export var tile_width: float = 256.0 @@ -160,7 +161,7 @@ func _on_resize() -> void: $canvas/spr_mask.scale = $canvas.size / default_size -## Создаёт новую отметку из координат экранаa +## Создаёт новую отметку из координат экрана func add_mark_from_screen_pos(id: int, scr_xy: Vector2, mark: Node) -> bool: if _marks.has(id): return false @@ -348,7 +349,7 @@ func _process(delta) -> void: _req_count += 1 req.set_meta('tile', tile) add_child(req) - req.name = NodePath(str(tile.i)) + req.name = NodePath(TILE_REQUEST_NAME % tile.i) _queue.erase(tile.i) req.request_completed.connect(_response.bind(req, tile)) @@ -561,16 +562,15 @@ func get_tile(x: int, y: int, z: int) -> Tile: return null var idx = xyz_to_idx(x, y, z) - var tile = null - var req = get_node_or_null(NodePath(str(idx))) + var req: = get_node_or_null(NodePath(TILE_REQUEST_NAME % idx)) if req: - tile = req.get_meta('tile') + var tile = req.get_meta('tile') if tile != null: tile.t = now return tile - tile = _cache.get(idx) + var tile = _cache.get(idx) if tile: tile.t = now return tile @@ -699,12 +699,12 @@ func blend_mask(val: bool) -> void: func update_coordinates_label(lon: float, lat: float) -> void: - coordinates_label = "Координаты:\nNS:%f\nEW: %f" % [lat, lon] + coordinates_label = 'Координаты:\nNS:%f\nEW: %f' % [lat, lon] signaller.emit_signal('update_coordinates_map', coordinates_label) func update_scale_label() -> void: - scale_label = "Масштаб: " + str(round(_xyz.z)) + scale_label = 'Масштаб: ' + str(round(_xyz.z)) signaller.emit_signal('update_scale_map', scale_label) diff --git a/scenes/журнал/журнал.gd b/scenes/журнал/журнал.gd index 2c304e2..46b206c 100644 --- a/scenes/журнал/журнал.gd +++ b/scenes/журнал/журнал.gd @@ -1,10 +1,10 @@ extends Panel -func on_line_changed(unit, addr): log.message(Logger.INFO, '\"%s\" %s изменение состояния: %s' % [unit.name, addr, 'на связи' if unit.online else 'отключен']) -func on_command_fail(unit, addr): log.message(Logger.ERROR, '\"%s\" %s команда не выполнена' % [unit.name, addr]) +func on_line_changed(unit_inst): log.message(Logger.INFO, '\"%s\" изменение состояния: %s' % [unit_inst.name, 'на связи' if unit_inst.online else 'отключен']) +func on_command_fail(unit_inst): log.message(Logger.ERROR, '\"%s\" %s команда не выполнена' % unit_inst.name) func on_threats_changed(th: Object, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, th.to_string()]) -func on_parse_error(unit, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit.name, msg]) +func on_parse_error(unit_inst, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit.name, msg]) func on_interfer_off(ecm, _ecms, _thrs,msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()]) func on_set_program_mode(msg: String): log.message(Logger.INFO, msg) diff --git a/scenes/контроль/контроль.gd b/scenes/контроль/контроль.gd index 058a9a7..46283e2 100644 --- a/scenes/контроль/контроль.gd +++ b/scenes/контроль/контроль.gd @@ -18,7 +18,7 @@ const PRIBORS_RES = \ 'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'], 'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'], 'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'], - 'pribor_rtr': ['res://scenes/pribor-afsp/pribor-rtr.tscn', 'Контроль исправности прибора РТР'], + 'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'], 'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'], 'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'], 'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'], diff --git a/scenes/эмс/кнопка-эмс.gd b/scenes/эмс/кнопка-эмс.gd index 37bcaf7..4937b7d 100644 --- a/scenes/эмс/кнопка-эмс.gd +++ b/scenes/эмс/кнопка-эмс.gd @@ -52,4 +52,4 @@ func button_connect(button_signal: String, proc: Callable): func _on_button_mouse_entered(): - emit_signal("mouse_entered") + emit_signal('mouse_entered') diff --git a/scripts/file-table.gd b/scripts/file-table.gd index d2012c5..f8a7808 100644 --- a/scripts/file-table.gd +++ b/scripts/file-table.gd @@ -14,7 +14,7 @@ func fill_files_table(tbl: table, folder: String, rows_types: Array): return var files: = [] var exclude_names: = ['.', '..'] - dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 + dir.list_dir_begin() # TODO: GODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 while true: var file: = dir.get_next() if file == '': @@ -32,7 +32,7 @@ func fill_files_table(tbl: table, folder: String, rows_types: Array): var mt = Time.get_datetime_dict_from_unix_time(ut) var file_row = [file, '%d' % sz, '%d-%02d-%02d %02d:%02d' % [mt.year, mt.month, mt.day, mt.hour, mt.minute]] tbl.add_row(rows_types) - var i_row = tbl.get_rows_count() - 1 + var i_row: int = tbl.get_rows_count() - 1 tbl.set_row_text(i_row, file_row) tbl.set_node_meta(0, i_row, 'file_path', glob_path) dir.list_dir_end() diff --git a/scripts/network.gd b/scripts/network.gd index 2e0562e..2a7d4c6 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -61,22 +61,22 @@ class SocketTCP extends TCPServer: var poll_sockets: Array[Socket] -var tcp_sockets: Array +var tcp_sockets: Array[Array] var units: Dictionary[StringName, unit.Unit] var units_udp: Dictionary[StringName, unit.Unit] var units_udprx: Dictionary[StringName, unit.Unit] var units_tcp: Dictionary[StringName, unit.Unit] var units_serial: Dictionary[StringName, unit.Unit] var units_modbus: Dictionary[StringName, unit.Unit] -var serials: Dictionary # Последовательные порты -var mbcs: Dictionary # Клиенты modbus. +var serials: Dictionary[StringName, Serial] # Последовательные порты +var mbcs: Dictionary[StringName, unit.Unit] # Клиенты modbus var dst_ports: Dictionary[StringName, int] var dst_addrs: Dictionary[StringName, StringName] -var unit_keys: Dictionary +var unit_keys: Dictionary[int, StringName] var sock_unicast: Socket var sock_capsrpb: Socket var logger_page: Node -var send_sockets: Dictionary # Таблица <имяустройста>: <сокет> для отправки сообщений +var send_sockets: Dictionary[StringName, Socket] # Таблица <имяустройста>: <сокет> для отправки сообщений var addr_port_to_unit_name: Dictionary[StringName, StringName] @@ -197,8 +197,8 @@ func _ready() -> void: if logger_page: for key in units: var u = units[key] - u.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(key)) - u.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(key)) + u.connect('line_changed', Callable(logger_page, 'on_line_changed')) + u.connect('command_fail', Callable(logger_page, 'on_command_fail')) for key in settings.UnitProfiles: var item = settings.UnitProfiles[key] @@ -239,14 +239,14 @@ func poll_receive_udp(sock: Socket) -> bool: units[unit_name].parse(data, tick) continue if unit_keys.has(port): - var key1 = unit_keys[port] - if units.has(key1): - units[key1].parse(data, tick) + var unit_key = unit_keys[port] + if units.has(unit_key): + units[unit_key].parse(data, tick) continue - port = sock.get_local_port() - var key = StringName('%s:%d' % ['*', port]) - if units.has(key): - var unit_udprx = units[key] + var local_port: = sock.get_local_port() + if unit_keys.has(local_port): + var unit_name = unit_keys[local_port] + var unit_udprx = units[unit_name] unit_udprx.source_addr = [addr, port] unit_udprx.parse(data, tick) continue diff --git a/scripts/settings.gd b/scripts/settings.gd index 829952c..f1dc516 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -107,8 +107,3 @@ func get_settings_file_path(): return ProjectSettings.get_setting( 'application/config/settings_path', 'user://settings.json') - - -## Возвращает ключ устройства. -func get_unit_key(unit_name: String) -> StringName: - return StringName(unit_name)