From 945f621a597d6daf676e5f31a6c02c31142ff4bc Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 2 Sep 2025 14:27:58 +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.=20=D0=A1=D0=B5=D1=82=D0=B5=D0=B2=D0=BE=D0=B9=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=B8=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/network.gd | 51 ++++++++++++------------ scripts/settings.gd | 95 +++++++++++++++++++++------------------------ 2 files changed, 71 insertions(+), 75 deletions(-) diff --git a/scripts/network.gd b/scripts/network.gd index 8f9dbe2d..874d2c9f 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -72,7 +72,7 @@ class SocketSerial extends SerialPort: func try_open(parsing_proc: Callable): if is_open(): return Error.OK - var rc = open(port) + var rc: = open(port) if rc == Error.OK: data_received.connect(parsing_proc) start_monitoring(timeout) @@ -139,11 +139,11 @@ func on_serial_data(data, unit): unit.parse(data, tick) ## [param unit_name] - Уникальное имя устройства[br] func create_socket_udp(unit_name: StringName) -> SocketUDP: - var st = settings.UnitProfiles[unit_name] - var addr = st[1] - var port = st[2][0] - var broad = st[3] - var bind = st[4] + var st = settings.UnitProfiles[unit_name][1] + var addr = st[0] + var port = st[1] + var broad = st[2] + var bind = st[3] var sock: = SocketUDP.new() sock.set_broadcast_enabled(broad) var rc = Error.OK if not bind else sock.bind(port, addr) @@ -154,9 +154,9 @@ func create_socket_udp(unit_name: StringName) -> SocketUDP: ## [param unit_name] - Уникальное имя устройства[br] func create_socket_tcp(unit_name: StringName) -> SocketTCP: - var st = settings.UnitProfiles[unit_name] - var addr = st[1] - var port = st[2][0] + var st = settings.UnitProfiles[unit_name][1] + var addr = st[0] + var port = st[1] var sock: = SocketTCP.new() sock.unit_name = unit_name var rc: = sock.listen(port, addr) @@ -169,13 +169,14 @@ func create_socket_tcp(unit_name: StringName) -> SocketTCP: ## [param unit_name] - Уникальное имя устройства[br] func create_serial(unit_name: StringName) -> SocketSerial: - var st = settings.UnitProfiles[unit_name] - var port = st[1] - var baud = st[2][0] + var st = settings.UnitProfiles[unit_name][1] var serial: = SocketSerial.new() - serial.port = port - serial.baudrate = baud + serial.port = st[0] + serial.baudrate = st[2] + serial.parity = SocketSerial.parity_code.get(st[3], SocketSerial.PARITY_NONE) serial.timeout = 20000 + serial.bytesize = st[4] + serial.stopbits = st[5] return serial @@ -214,28 +215,28 @@ func _ready() -> void: var bind_modbuses: = [] for unit_name in settings.UnitProfiles: - var unit_profile = settings.UnitProfiles[unit_name] - var proto = unit_profile[0] + var unit_profile = settings.UnitProfiles[unit_name][1] + var proto = settings.UnitProfiles[unit_name][0] if proto in UDPRX_PROTO: var new_unit = UDPRX_PROTO[proto].new(unit_name) units[unit_name] = new_unit units_udprx[unit_name] = new_unit - dst_ports[unit_name] = unit_profile[2][0] + dst_ports[unit_name] = unit_profile[1] if proto in UDPTX_PROTO: var new_unit = UDPTX_PROTO[proto].new(unit_name) units[unit_name] = new_unit units_udp[unit_name] = new_unit - dst_ports[unit_name] = unit_profile[2][0] - dst_addrs[unit_name] = unit_profile[1] + dst_ports[unit_name] = unit_profile[1] + dst_addrs[unit_name] = unit_profile[0] if proto in UDPJSON_PROTO: var new_unit = UDPJSON_PROTO[proto].new(unit_name) units[unit_name] = new_unit units_udp[unit_name] = new_unit - dst_ports[unit_name] = unit_profile[2][1] - dst_addrs[unit_name] = unit_profile[1] + dst_ports[unit_name] = unit_profile[1] + dst_addrs[unit_name] = unit_profile[0] if proto in TCP_PROTO: var unit_tcp = TCP_PROTO[proto].new(unit_name) @@ -244,8 +245,8 @@ func _ready() -> void: if proto in MODBUS_PROTO: var unit_modbus = MODBUS_PROTO[proto].new(unit_name) - unit_modbus.port = unit_profile[1] - unit_modbus.params = unit_profile[2] + unit_modbus.port = unit_profile[0] + unit_modbus.params = unit_profile.slice(1) units[unit_name] = unit_modbus units_modbus[unit_name] = unit_modbus bind_modbuses.append([unit_modbus, unit_name]) @@ -270,8 +271,8 @@ func _ready() -> void: u.connect('command_fail', Callable(logger_page, 'on_command_fail')) for key in settings.UnitProfiles: - var item = settings.UnitProfiles[key] - var addr_port: = StringName('%s:%d' % [item[1], item[2][0]]) + var item = settings.UnitProfiles[key][1] + var addr_port: = StringName('%s:%d' % [item[0], item[1]]) addr_port_to_unit_name[addr_port] = StringName(key) diff --git a/scripts/settings.gd b/scripts/settings.gd index a7326b0a..823ecd03 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -6,34 +6,34 @@ class_name uarep_settings extends Node var settings_program: Dictionary @export var UnitProfiles: Dictionary[StringName, Array] = { \ - # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий - 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], - 'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'], - 'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'], - 'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'], - 'уарэп-яу07-2в': ['yau07tx', '10.1.1.22', [50022], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-2н': ['yau07tx', '10.1.1.21', [50021], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-2к': ['yau07tx', '10.1.1.23', [50023], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-4в': ['yau07tx', '10.1.1.42', [50042], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-4н': ['yau07tx', '10.1.1.41', [50041], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-4к': ['yau07tx', '10.1.1.43', [50043], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-1в': ['yau07tx', '10.1.1.12', [50012], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-1н': ['yau07tx', '10.1.1.11', [50011], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-1к': ['yau07tx', '10.1.1.13', [50013], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-3в': ['yau07tx', '10.1.1.32', [50032], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-3н': ['yau07tx', '10.1.1.31', [50031], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'навигация': ['udprx','*', [60000], true, true, 'IP-адрес на котором принимают сообщения от навигации'], + # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Внешнее | Комментарий + 'уарэп-яу07-частный': ['yau07rx', ['10.1.1.2', 50002, false, true], 'IP-адрес для приёма частных сообщений от ЯУ-07'], + 'уарэп-яу07-общий': ['yau07rx', ['*', 50000, true, true], 'IP-адрес для приёма широковещательных сообщений от ЯУ-07'], + 'уарэп-капсрпб': ['json-capsrpb', ['127.0.0.1', 42023, 42022, false, true], 'IP-адрес для приёма сообщений от службы \"МП550\"'], + 'уарэп-эмс': ['yau07tx', ['10.1.1.52', 50052, false, false], 'IP-адрес прибора УФ'], + 'уарэп-яу07-2в': ['yau07tx', ['10.1.1.22', 50022, false, false], 'IP-адрес прибора ПРД-В'], + 'уарэп-яу07-2н': ['yau07tx', ['10.1.1.21', 50021, false, false], 'IP-адрес прибора ПРД-Н'], + 'уарэп-яу07-2к': ['yau07tx', ['10.1.1.23', 50023, false, false], 'IP-адрес прибора ПРД-К'], + 'уарэп-яу07-4в': ['yau07tx', ['10.1.1.42', 50042, false, false], 'IP-адрес прибора ПРД-В'], + 'уарэп-яу07-4н': ['yau07tx', ['10.1.1.41', 50041, false, false], 'IP-адрес прибора ПРД-Н'], + 'уарэп-яу07-4к': ['yau07tx', ['10.1.1.43', 50043, false, false], 'IP-адрес прибора ПРД-К'], + 'уарэп-яу07-1в': ['yau07tx', ['10.1.1.12', 50012, false, false], 'IP-адрес прибора ПРД-В'], + 'уарэп-яу07-1н': ['yau07tx', ['10.1.1.11', 50011, false, false], 'IP-адрес прибора ПРД-Н'], + 'уарэп-яу07-1к': ['yau07tx', ['10.1.1.13', 50013, false, false], 'IP-адрес прибора ПРД-К'], + 'уарэп-яу07-3в': ['yau07tx', ['10.1.1.32', 50032, false, false], 'IP-адрес прибора ПРД-В'], + 'уарэп-яу07-3н': ['yau07tx', ['10.1.1.31', 50031, false, false], 'IP-адрес прибора ПРД-Н'], + 'уарэп-яу07-3к': ['yau07tx', ['10.1.1.33', 50033, false, false], 'IP-адрес прибора ПРД-Н'], + 'навигация': ['udprx', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], # Название: [ Протокол, Адрес, Порт получения, Комментарий ] - 'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'], + 'уарэп-5п28': [ '5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], # Название: [ протокол, путь, [адрес modbus, скорость, чётность, бит на символ, стоп битов, время на ожидание ответа в мкс] комментарий ] - 'уарэп-щ3': ['mbcs', '/dev/ttyUSB0', [7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'], + 'уарэп-щ3': ['mbcs', ['/dev/ttyUSB0', 7, 19200, 'N', 8, 1, 50000], 'Параметры клиента Modbus Serial'], # Название: [ Протокол, Имя порта, Скорость, Чётность, ??, Комментарий - 'уарэп-спт25-1': ['spt25', '/dev/ttyUSB1', [19200, false, false], 'Адрес прибора СПТ-25 (G1)'], - 'уарэп-спт25-2': ['spt25', '/dev/ttyUSB2', [19200, false, false], 'Адрес прибора СПТ-25 (G2)'], + 'уарэп-спт25-1': ['spt25', ['/dev/ttyUSB1', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G1)'], + 'уарэп-спт25-2': ['spt25', ['/dev/ttyUSB2', 0, 19200, 'N', 8, 1], 'Прибор СПТ-25 (G2)'], } ## Параметры цели. @@ -56,9 +56,9 @@ func _ready() -> void: if Engine.is_editor_hint(): return var settings_file = get_settings_file_path() - var abs_path = ProjectSettings.globalize_path(settings_file) + var abs_path: = ProjectSettings.globalize_path(settings_file) log.info('Путь к файлу настроек: \"%s\"' % abs_path) - var file = FileAccess.open(settings_file, FileAccess.READ) + var file: = FileAccess.open(settings_file, FileAccess.READ) if not file: log.info('Не удалось открыть файл настроек, будут использованы настройики по умолчанию') return @@ -70,36 +70,31 @@ func _ready() -> void: return var json_data = json_conv.get_data() settings_program.merge(json_data) - for key in UnitProfiles.keys(): + for key: StringName in UnitProfiles.keys(): if not json_data.has(key): continue - var temp_array = [] - var set_from_file = true - if typeof(json_data[key][0]) == typeof(UnitProfiles[key][1]): - temp_array.append(json_data[key][0]) - else: - set_from_file = false - if len(json_data[key]) < len(UnitProfiles[key][2]): - log.info('Не удалось прочитать значение \"%s\", ошибка в содержании файла настроек' % key) + var vj = json_data[key] + var vp = UnitProfiles[key][1] + if vp.size() != vj.size(): + log.error('Не удалось прочитать настройки для \"%s\"' % key) continue - temp_array.append([]) - for i in len(json_data[key]) - 1: - if tools.type_is_num(json_data[key][i+1]) and tools.type_is_num(UnitProfiles[key][2][i]): - if typeof(UnitProfiles[key][2][i]) == TYPE_INT: - temp_array[1].append(int(json_data[key][i+1])) - elif typeof(UnitProfiles[key][2][i]) == TYPE_FLOAT: - temp_array[1].append(float(json_data[key][i+1])) - else: - set_from_file = false - elif typeof(json_data[key][i+1]) == typeof(UnitProfiles[key][2][i]): - temp_array[1].append(json_data[key][i+1]) + var parse_ok: = true + for i in vp.size(): + if tools.type_is_num(vj[i]) and tools.type_is_num(vp[i]): + if typeof(vp[i]) == TYPE_INT: + vp[i] = int(vj[i]) + elif typeof(vp[i]) == TYPE_FLOAT: + vp[i] = float(vj[i]) + elif typeof(vp[i]) == typeof(vj[i]): + vp[i] = vj[i] else: - set_from_file = false - if set_from_file: - UnitProfiles[key][1] = temp_array[0] - UnitProfiles[key][2] = temp_array[1] - else: - log.info('Не удалось прочитать значение \"%s\" из файла настроек, будет использовано значение по умолчанию' % key) + var tp: = type_string(typeof(vp[i])) + var tj: = type_string(typeof(vj[i])) + log.error('%s: ожидается тип \"%s\", но прочитан тип \"%s\" [%d]' % [key, tp, tj, i]) + parse_ok = false + break + if parse_ok: + UnitProfiles[key][1].assign(vp) ## Возвращает полный путь к файлу с настройками