From 5fee3963871cfd6b9b999aa431a4f53a6213d656 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 29 Aug 2025 10:06:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/network.gd | 38 ++++++++++++++++++++++++-------------- scripts/settings.gd | 4 ++-- scripts/tools.gd | 16 +++++++++------- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/scripts/network.gd b/scripts/network.gd index 70284874..3a73b13a 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -3,15 +3,22 @@ class_name Network extends Node const UDPTX_PROTO: = {'yau07tx': yau07.YaU07} const UDPJSON_PROTO: = {'json-capsrpb': capsrpb.CapsRpb} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} -const SERIAL_PROTO: = {'uart': spt25.SPT25} +const SERIAL_PROTO: = {'spt25': spt25.SPT25} const MODBUS_PROTO: = {'mbcs': sch3.Sch3} const UDPRX_PROTO: = {'udprx': navi.NaviSource} var tick: int = 0 -class Serial extends SerialPort: - func send_to(data: PackedByteArray): return write_raw(data) +class Spt25Serial extends SerialPort: + func send_to(data: PackedByteArray): + tools.allways(data.size() >= 2, 'длина буфера меньше необходимого') + var i_sum: = data.size() - 3 + var csd: = data.slice(0, i_sum) + var v_sum: = get_check_sum(csd) + data.encode_u16(i_sum, v_sum) + return write_raw(data) + func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт'] func try_open(parsing_proc: Callable): @@ -68,7 +75,7 @@ var units_udprx: Dictionary[StringName, unit.Unit] ## Экземпляры var units_tcp: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с tcp-соединением var units_serial: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с uart-соединением var units_modbus: Dictionary[StringName, unit.Unit] ## Экземпляры устройств с modbusserial-соединением -var serials: Dictionary[StringName, Serial] ## Последовательные порты (uart) +var serials: Dictionary[StringName, Spt25Serial] ## Последовательные порты (uart) var dst_ports: Dictionary[StringName, int] ## Преобразование имя устройства в порт назначения var dst_addrs: Dictionary[StringName, StringName] ## Преобразование имя устройства в адрес назначения var unit_keys: Dictionary[int, StringName] ## Преобразование порта назначения в имя устройства @@ -84,10 +91,11 @@ func on_serial_data(data, unit): unit.parse(data, tick) ## [param unit_name] - Уникальное имя устройства[br] func create_socket_udp(unit_name: StringName) -> SocketUDP: - var addr = settings.UnitProfiles[unit_name][1] - var port = settings.UnitProfiles[unit_name][2][0] - var broad = settings.UnitProfiles[unit_name][3] - var bind = settings.UnitProfiles[unit_name][4] + var st = settings.UnitProfiles[unit_name] + var addr = st[1] + var port = st[2][0] + var broad = st[3] + var bind = st[4] var sock: = SocketUDP.new() sock.set_broadcast_enabled(broad) var rc = Error.OK if not bind else sock.bind(port, addr) @@ -98,8 +106,9 @@ func create_socket_udp(unit_name: StringName) -> SocketUDP: ## [param unit_name] - Уникальное имя устройства[br] func create_socket_tcp(unit_name: StringName) -> SocketTCP: - var addr = settings.UnitProfiles[unit_name][1] - var port = settings.UnitProfiles[unit_name][2][0] + var st = settings.UnitProfiles[unit_name] + var addr = st[1] + var port = st[2][0] var sock: = SocketTCP.new() sock.unit_name = unit_name var rc: = sock.listen(port, addr) @@ -111,10 +120,11 @@ func create_socket_tcp(unit_name: StringName) -> SocketTCP: ## [param unit_name] - Уникальное имя устройства[br] -func create_serial(unit_name: StringName) -> Serial: - var port = settings.UnitProfiles[unit_name][1] - var baud = settings.UnitProfiles[unit_name][2][0] - var serial: = Serial.new() +func create_serial(unit_name: StringName) -> Spt25Serial: + var st = settings.UnitProfiles[unit_name] + var port = st[1] + var baud = st[2][0] + var serial: = Spt25Serial.new() serial.port = port serial.baudrate = baud serial.timeout = 20000 diff --git a/scripts/settings.gd b/scripts/settings.gd index 904f9c9c..a7326b0a 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -32,8 +32,8 @@ var settings_program: Dictionary 'уарэп-щ3': ['mbcs', '/dev/ttyUSB0', [7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'], # Название: [ Протокол, Имя порта, Скорость, Чётность, ??, Комментарий - 'уарэп-спт25-1': ['uart', '/dev/ttyUSB1', [19200, false, false], 'Адрес прибора СПТ-25 (G1)'], - 'уарэп-спт25-2': ['uart', '/dev/ttyUSB2', [19200, false, false], 'Адрес прибора СПТ-25 (G2)'], + 'уарэп-спт25-1': ['spt25', '/dev/ttyUSB1', [19200, false, false], 'Адрес прибора СПТ-25 (G1)'], + 'уарэп-спт25-2': ['spt25', '/dev/ttyUSB2', [19200, false, false], 'Адрес прибора СПТ-25 (G2)'], } ## Параметры цели. diff --git a/scripts/tools.gd b/scripts/tools.gd index ec7d5533..2a41a74c 100644 --- a/scripts/tools.gd +++ b/scripts/tools.gd @@ -29,6 +29,8 @@ func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y) func is_overlap(x1, x2, y1, y2) -> bool: return max(x1, y1) <= min(x2, y2) +## Закрывает программу если [param val] установлен в [b]false[/b][br] +## [param msg] - сообщение об ошибке func allways(val: bool, msg: String = '<не указано>'): if val: return push_error('ошибка: %s\n' % msg) @@ -198,22 +200,22 @@ func fill_files_table(tbl: table, folder: String, rows_types: Array): if dir == null: return 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 == '': break if file in exclude_names: continue - var file_name = folder + file - var fd = FileAccess.open(file_name, FileAccess.READ) + var file_name: = folder + file + var fd: = FileAccess.open(file_name, FileAccess.READ) if not fd: continue - var glob_path = ProjectSettings.globalize_path(file_name) - var sz = fd.get_length() - var ut = FileAccess.get_modified_time(file_name) + var glob_path: = ProjectSettings.globalize_path(file_name) + var sz: = fd.get_length() + var ut: = FileAccess.get_modified_time(file_name) fd.close() - var mt = Time.get_datetime_dict_from_unix_time(ut) + 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