From ff73887eb7eee75df722b199d78fe666befb3616 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 29 Oct 2024 11:05:43 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=9F=D1=80=D0=BE=D0=B4=D0=BE=D0=BB=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=AD=D0=9C=D0=A1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс/эмс.gd | 7 ++++++- scripts/network.gd | 4 ++-- scripts/settings.gd | 4 ++-- scripts/tcp5p28.gd | 9 +++++---- scripts/yau07.gd | 3 ++- scripts/yems-boards.gd | 40 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 10 deletions(-) diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index ece1cdbe..b2a7bc45 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -373,5 +373,10 @@ func on_row_pressed(i_row: int, tbl): func on_data_ems_received(unit): - print_debug(unit.status) + for board in g_boards.values(): + board.set_status(unit.status) + for i_row in range($scrollin/tbl_in.get_rows_count()): + var state_pic = ($tbl_input.get_node2(4, i_row)).get_sprite() + var dev = $tbl_input.get_node_user_data(4, i_row)[0] + print_debug(dev) diff --git a/scripts/network.gd b/scripts/network.gd index a5143aee..ca2ac0e2 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -152,10 +152,10 @@ func poll_receive(sock: Socket, tick: int) -> bool: var port: = sock.get_packet_port() var addr_port: = [addr, port] if addr_port in units: - units[addr_port].parse(data, tick) + units[addr_port].parse(data) return false if port in unit_keys: - units[unit_keys[port]].parse(data, tick) + units[unit_keys[port]].parse(data) return false diff --git a/scripts/settings.gd b/scripts/settings.gd index 3fc72773..f92c6d5b 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -6,9 +6,9 @@ class_name rep_settings extends Node @export var UnitProfiles: = { \ # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], - 'уарэп-яу07-общий': ['yau07rx', '10.1.1.255', [50000], true, 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', [50027], false, false, 'IP-адрес ЯУ-07 прибора УФ'], + 'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'], 'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], 'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], 'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], diff --git a/scripts/tcp5p28.gd b/scripts/tcp5p28.gd index 9da29d39..a7b8fb63 100644 --- a/scripts/tcp5p28.gd +++ b/scripts/tcp5p28.gd @@ -49,8 +49,8 @@ class TCP5P28 extends unit.Unit: func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) - func parse(data: PackedByteArray, now_tick: int): - rx_tick = now_tick + func parse(data: PackedByteArray): + rx_tick = tick if not online: online = true emit_signal('line_changed', self) @@ -65,8 +65,9 @@ class TCP5P28 extends unit.Unit: if cmd_type == CMD_TYPE_IN and external_cu: set_interfer(data) - func process(now_tick: int): - if online and ((now_tick - rx_tick) > ONLINE_TIMEOUT): + func process(delta: int): + tick += delta + if online and ((tick - rx_tick) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) if len(tx_stack): diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 470fbfe3..99cc1f99 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -208,7 +208,8 @@ class YaU07 extends unit.Unit: if byte_i < len_rx_data: status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора" i += 1 - + emit_signal('data_received', self) + if rx_data_len == (status_len + 6): return true # Нет поля "ответ на команду", разбор пакета завершить diff --git a/scripts/yems-boards.gd b/scripts/yems-boards.gd index 5d585ac2..d67f29af 100644 --- a/scripts/yems-boards.gd +++ b/scripts/yems-boards.gd @@ -7,9 +7,49 @@ class EmsBoard: var base_addr_isa: int ## Базовый адрес ячейки isa. var in_tbl: Array var out_tbl: Array + var online: bool + var ems_load: bool func _init(id, base_addr, in_table, out_table): id_board = id in_tbl = in_table out_tbl = out_table base_addr_isa = base_addr + + func set_status(status): + var offset = 0 + if id_board == 1: offset = 26 + elif id_board == 2: offset = 52 + var bit_online = 0 + id_board + var bit_load = 3 + id_board + online = (status[0] >> bit_online) & 1 + ems_load = (status[0] >> bit_load) & 1 + var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \ + (status[4 + offset] << 24) | (status[5 + offset] << 32)) + var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \ + (status[10 + offset] << 24) | (status[11 + offset] << 32)) + var out_blank = int(status[13 + offset] | (status[14 + offset] << 8) | (status[15 + offset] << 16) | \ + (status[16 + offset] << 24) | (status[17 + offset] << 32)) + var out_imp = int(status[19 + offset] | (status[20 + offset] << 8) | (status[21 + offset] << 16)| \ + (status[22 + offset] << 24) | (status[23 + offset] << 32)) + var out_kz = int(status[25 + offset] | (status[26 + offset] << 8)) + if id_board > 0: + out_kz = 0 + + for in_dev in in_devs.values(): + if (in_blank >> (in_dev.id - 1)) & 1: + in_dev.state = 1 + elif (in_imp >> (in_dev.id - 1)) & 1: + in_dev.state = 2 + else: + in_dev.state = 0 + + for out_dev in out_devs.values(): + if (out_kz >> (out_dev.id - 1)) & 1: + out_dev.state = 3 + elif (out_blank >> (out_dev.id - 1)) & 1: + out_dev.state = 1 + elif (out_imp >> (out_dev.id - 1)) & 1: + out_dev.state = 2 + else: + out_dev.state = 0 From e3f2b4fff6a43d47df63db4e0e2b7417822fd301 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 29 Oct 2024 11:53:34 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F.=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=BA=D0=B0=20=D0=B4=D0=B5=D0=BB=D1=8C=D1=82=D1=8B?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=82=D0=B8=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс/эмс.gd | 11 +++++++---- scenes/эмс/эмс.tscn | 2 +- scripts/network.gd | 5 ++--- scripts/spt25.gd | 3 +-- scripts/tcp5p28.gd | 5 ++--- scripts/unit.gd | 1 - scripts/yau07.gd | 10 ++++------ 7 files changed, 17 insertions(+), 20 deletions(-) diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index c0b71e7e..c78d884e 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -376,7 +376,10 @@ func on_data_ems_received(unit): for board in g_boards.values(): board.set_status(unit.status) for i_row in range($scrollin/tbl_in.get_rows_count()): - var state_pic = ($tbl_input.get_node2(4, i_row)).get_sprite() - var dev = $tbl_input.get_node_user_data(4, i_row)[0] - print_debug(dev) - + var state_pic = ($scrollin/tbl_in.get_node2(4, i_row)) + var dev = $scrollin/tbl_in.get_node_user_data(4, i_row)[0] + state_pic.set_frame(dev.state) + for i_row in range($scrollout/tbl_out.get_rows_count()): + var state_pic = ($scrollout/tbl_out.get_node2(4, i_row)) + var dev = $scrollout/tbl_out.get_node_user_data(4, i_row)[0] + state_pic.set_frame(dev.state) diff --git a/scenes/эмс/эмс.tscn b/scenes/эмс/эмс.tscn index 5be27bce..1c570bfa 100644 --- a/scenes/эмс/эмс.tscn +++ b/scenes/эмс/эмс.tscn @@ -2,7 +2,7 @@ [ext_resource type="Script" path="res://scenes/эмс/эмс.gd" id="1_mk57x"] [ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat/button-flat.tscn" id="2_eju8r"] -[ext_resource type="Texture2D" uid="uid://dd60btbqnpiqw" path="res://data/document-new-0.png" id="3_w7rqa"] +[ext_resource type="Texture2D" uid="uid://nm7cpjw6rs51" path="res://data/document-new-0.png" id="3_w7rqa"] [ext_resource type="Texture2D" uid="uid://coqg6wsftvtxr" path="res://data/document-save-0.png" id="4_gyaoq"] [ext_resource type="Texture2D" uid="uid://cywuevvpkxl7v" path="res://data/edit-copy-0.png" id="5_dxpqo"] [ext_resource type="Texture2D" uid="uid://7h55yvh84cve" path="res://data/connect.png" id="6_axj2m"] diff --git a/scripts/network.gd b/scripts/network.gd index 7a485909..5e501148 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,4 +1,3 @@ -@tool class_name rep_network extends Node @@ -152,10 +151,10 @@ func poll_receive(sock: Socket, tick: int) -> bool: var port: = sock.get_packet_port() var addr_port: = [addr, port] if addr_port in units: - units[addr_port].parse(data) + units[addr_port].parse(data, tick) return false if port in unit_keys: - units[unit_keys[port]].parse(data) + units[unit_keys[port]].parse(data, tick) return false diff --git a/scripts/spt25.gd b/scripts/spt25.gd index f9c492b3..1e2366d3 100644 --- a/scripts/spt25.gd +++ b/scripts/spt25.gd @@ -25,8 +25,7 @@ class SPT25 extends unit.Unit: emit_signal('line_changed', self) emit_signal('data_received', rx_data) - func process(delta: float): - tick += delta + func process(tick: int): if (tick - tx_tick) > req_period: tx_tick = tick return Error.OK diff --git a/scripts/tcp5p28.gd b/scripts/tcp5p28.gd index a7b8fb63..c505f886 100644 --- a/scripts/tcp5p28.gd +++ b/scripts/tcp5p28.gd @@ -49,7 +49,7 @@ class TCP5P28 extends unit.Unit: func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) - func parse(data: PackedByteArray): + func parse(data: PackedByteArray, tick: int): rx_tick = tick if not online: online = true @@ -65,8 +65,7 @@ class TCP5P28 extends unit.Unit: if cmd_type == CMD_TYPE_IN and external_cu: set_interfer(data) - func process(delta: int): - tick += delta + func process(tick: int): if online and ((tick - rx_tick) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) diff --git a/scripts/unit.gd b/scripts/unit.gd index 099722c0..714df005 100644 --- a/scripts/unit.gd +++ b/scripts/unit.gd @@ -8,7 +8,6 @@ class Unit: signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных signal data_received(unit) ## Вызывается по приёму данных - var tick = 0.0 ## Текущее тик-время в мс. var tx_data: = PackedByteArray() ## Буфер отправленный. var tx_len = 0 ## Длина последнего отправленного пакета. var online: bool diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 99cc1f99..6a97fedd 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -2,8 +2,8 @@ class_name yau_07 extends Node ## Протокол ячейки ЯУ-07. -const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды -const RESEND_TIMEOUT = 0.3 ## Задержка для повторной отправки команды, секунды +const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды +const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, секунды const RETRY_COUNT = 5 ## Количество повторных отправок const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм @@ -48,11 +48,9 @@ class YaU07 extends unit.Unit: self.name = nm tx_data.resize(BUFFER_SIZE) tx_data.fill(0) - tick = 0.0 - func process(delta: float): - tick += delta + func process(tick: float): if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) @@ -181,7 +179,7 @@ class YaU07 extends unit.Unit: ## [param rx_data] - Принятые данные.[br] ## Возвращает [b]true[/b] - Данные обработаны успешно.[br] ## Возвращает [b]false[/b] - Данные не обработаны из за ошибки.[br] - func parse(rx_data: PackedByteArray) -> bool: + func parse(rx_data: PackedByteArray, tick: int) -> bool: cmd_tick_rx = tick From 082c8701359c7317d66e0c85694bfc3617ad13ad Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 29 Oct 2024 13:33:33 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F.=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D1=83=D1=81=D1=82=D1=8B=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/yau07.gd | 2 +- scripts/yems-boards.gd | 6 +++--- shaders/select_tr.gdshader | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 6a97fedd..8dfce781 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -207,7 +207,7 @@ class YaU07 extends unit.Unit: status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора" i += 1 emit_signal('data_received', self) - + if rx_data_len == (status_len + 6): return true # Нет поля "ответ на команду", разбор пакета завершить diff --git a/scripts/yems-boards.gd b/scripts/yems-boards.gd index d67f29af..208c1cfb 100644 --- a/scripts/yems-boards.gd +++ b/scripts/yems-boards.gd @@ -15,7 +15,7 @@ class EmsBoard: in_tbl = in_table out_tbl = out_table base_addr_isa = base_addr - + func set_status(status): var offset = 0 if id_board == 1: offset = 26 @@ -35,7 +35,7 @@ class EmsBoard: var out_kz = int(status[25 + offset] | (status[26 + offset] << 8)) if id_board > 0: out_kz = 0 - + for in_dev in in_devs.values(): if (in_blank >> (in_dev.id - 1)) & 1: in_dev.state = 1 @@ -43,7 +43,7 @@ class EmsBoard: in_dev.state = 2 else: in_dev.state = 0 - + for out_dev in out_devs.values(): if (out_kz >> (out_dev.id - 1)) & 1: out_dev.state = 3 diff --git a/shaders/select_tr.gdshader b/shaders/select_tr.gdshader index 6dcdba3e..3dac47fe 100644 --- a/shaders/select_tr.gdshader +++ b/shaders/select_tr.gdshader @@ -3,7 +3,7 @@ shader_type canvas_item; uniform vec4 color: source_color = vec4(1, 1, 1, 1); uniform vec4 color_up: source_color = vec4(1, 1, 1, 1); /* Цвет вспышки при обновлении */ const float ds = 0.01425; /* Относительное расстояние на котором выполняется сглаживание краёв */ -const float dsr = 12.125; +const float dsr = 12.125; const vec2 center = vec2(0.5, 0.5); /* Центр должен быть в (0.5, 0.5), но это не так */ const float radius = 0.075 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */ @@ -60,7 +60,7 @@ vec2 rotateUVmatrinx(vec2 uv, vec2 pivot, float rotation) void vertex() -{ +{ float dir = 0.0; dir += speed * TIME; VERTEX = rotateUVmatrinx(VERTEX, center, radians(dir)); @@ -70,7 +70,7 @@ void vertex() void fragment() { - + ivec2 isz = textureSize(TEXTURE, 0); vec2 uv = UV * vec2(float(isz.x), float(isz.y)); // координаты текущей точки в пикселях COLOR = vec4(0, 0, 0, 0.0); //texture(TEXTURE, UV); // Цвет текущей точки