From 0e303abf197659e910f6205ec810c3138646f2ab Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 4 Jul 2025 13:46:17 +0300 Subject: [PATCH] =?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=A93=20=D0=A7=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=B8=D0=BD=D0=BF=D1=83=D1=82=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uyep/sch3-view.gd | 43 ++++++++++++++------------------- scripts/sch3.gd | 5 ---- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/scenes/pribor-uyep/sch3-view.gd b/scenes/pribor-uyep/sch3-view.gd index 9fe5654..1f5a4d9 100644 --- a/scenes/pribor-uyep/sch3-view.gd +++ b/scenes/pribor-uyep/sch3-view.gd @@ -77,8 +77,7 @@ func _enter_tree() -> void: unit_sch3.regs_input_count = regs_input_count unit_sch3.request_period = request_period unit_sch3.reconnect_period = reconnect_period - unit_sch3.connect('read', on_read.bind(unit_sch3)) - unit_sch3.connect('read_input', on_input) + unit_sch3.connect('read_input', on_input.bind(unit_sch3)) unit_sch3.connect('error', on_error.bind(unit_sch3)) unit_sch3.connect('line_changed', on_line_changed_sch3) @@ -98,23 +97,34 @@ func _exit_tree() -> void: if Engine.is_editor_hint(): return var unit_key = settings.get_unit_key(unit_name) var unit_sch3 = network.units[unit_key] - unit_sch3.disconnect('read', on_read.bind(unit_sch3)) unit_sch3.disconnect('read_input', on_input.bind(unit_sch3)) external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false) unit_sch3.disconnect('error', on_error) unit_sch3.disconnect('line_changed', on_line_changed_sch3) -## Вызывается по сигналу "приняты данные чтения регистров хранения"[br] +## Вызывается по сигналу "приняты данные чтения регистров входов".[br] ## [param base_addr] - Начальный адрес регистров.[br] -## [param data] - Массив значений прочитанных из регистров. -func on_read(base_addr: int, data: Array, unit_sch3): - if (base_addr != base_holding_address) or (data.size() < regs_holding_count): +## [param data] - Массив значений прочитанных из регистров.[br] +func on_input(base_addr: int, data: Array, unit_sch3): + if !is_inside_tree(): return + if (base_addr != base_input_address) or (data.size() < regs_input_count): + return + # "Для контроля состояния управляющего элемента подачи электроэнергии на приборы ..." + # "Для контроля подачи электроэнергии на приборы ..." + # Таблицы 3.13 и 3.14. Ecли значения соответствующих битов в этих + # регистрах равны, то "исправно". + var items = get_tree().get_nodes_in_group('bits_items_good') for i in data.size(): - regs_holding[base_addr + i] = data[i] + regs_input[base_addr + i] = data[i] # Разрешить работу выключателей только когда прочитано их реальное состояние if not switches_sync: + regs_holding[0] = regs_input[0] + regs_holding[1] = regs_input[1] + for i in 16: + regs_holding[2] = tools.set_bit(regs_holding[0], i, not ((regs_holding[0] >> i) & 1)) + regs_holding[3] = tools.set_bit(regs_holding[1], i, not ((regs_holding[1] >> i) & 1)) if not external_ctl: if regs_holding.has(0) and regs_holding.has(2): regs_holding[0] = regs_holding[0] | 1 @@ -131,23 +141,6 @@ func on_read(base_addr: int, data: Array, unit_sch3): item.disabled = false regs_holding[byte1] = tools.set_bit(regs_holding[byte1], bit1, not val0) unit_sch3.push_write_holding(regs_holding) - - -## Вызывается по сигналу "приняты данные чтения регистров входов".[br] -## [param base_addr] - Начальный адрес регистров.[br] -## [param data] - Массив значений прочитанных из регистров.[br] -func on_input(base_addr: int, data: Array): - if !is_inside_tree(): - return - if (base_addr != base_input_address) or (data.size() < regs_input_count): - return - # "Для контроля состояния управляющего элемента подачи электроэнергии на приборы ..." - # "Для контроля подачи электроэнергии на приборы ..." - # Таблицы 3.13 и 3.14. Ecли значения соответствующих битов в этих - # регистрах равны, то "исправно". - var items = get_tree().get_nodes_in_group('bits_items_good') - for i in data.size(): - regs_input[base_addr + i] = data[i] # Таблица 3.15, Регистр PowerState $margin/vbox/grid1/lbl_freq.text = '%d' % (regs_input[4] & 0x1ff) $margin/vbox/grid1/lbl_freq.self_modulate = Color.WHITE diff --git a/scripts/sch3.gd b/scripts/sch3.gd index abedfbf..acb767d 100644 --- a/scripts/sch3.gd +++ b/scripts/sch3.gd @@ -70,11 +70,6 @@ class Sch3 extends unit.Unit: mbc.request_read_input(base_input_address, regs_input_count) cmd_state = CmdState.WAIT tx_tick = tick - step_fsm = Sch3Fsm.READ_HOLDING - elif step_fsm == Sch3Fsm.READ_HOLDING: - mbc.request_read(base_holding_address, regs_holding_count) - cmd_state = CmdState.WAIT - tx_tick = tick step_fsm = Sch3Fsm.WRITE elif step_fsm == Sch3Fsm.CONNECT: try_disconnect()