From 091f07c4b519ca8d65a0874290b597121aaaf932 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 22 Nov 2024 10:22:16 +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 --- scenes/pribor-uyep/sch3-view.gd | 33 +++++++++++++++++++++++---------- scenes/журнал/журнал.gd | 2 +- scripts/capsrpb.gd | 10 +++++----- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/scenes/pribor-uyep/sch3-view.gd b/scenes/pribor-uyep/sch3-view.gd index b8e4e43a..9177230b 100644 --- a/scenes/pribor-uyep/sch3-view.gd +++ b/scenes/pribor-uyep/sch3-view.gd @@ -1,16 +1,19 @@ @tool -extends "res://scenes/контроль/элемент-я.gd" +class_name sch3_view + +extends 'res://scenes/контроль/элемент-я.gd' ## Дополнение №1 к протоколу №120-23900-18 ## информационного взаимодействия изделия 5П-28 ## с аппаратурой УА-РЭП на кораблях проекта 23900 -@export var base_input_address: = 0 ## Базовый адрес регистров входов -@export var base_holding_address: = 0 ## Базовый адрес регистров хранения -@export var regs_input_count: = 5 ## Количество регистров входов -@export var regs_holding_count: = 4 ## Количество регистров хранения -@export var modbus_address: = 3 ## Адрес устройства на шине Modbus +@export var base_input_address: = 0 ## Базовый адрес регистров входов +@export var base_holding_address: = 0 ## Базовый адрес регистров хранения +@export var regs_input_count: = 5 ## Количество регистров входов +@export var regs_holding_count: = 4 ## Количество регистров хранения +@export var modbus_address: = 3 ## Адрес устройства на шине Modbus +@export var request_period: = 1.0 ## Период отправки команд на шину Modbus var regs_input: = {} ## Регистры входные var regs_holding: = {} ## Регистры хранения @@ -32,15 +35,16 @@ class StackItem: func on_data_received(_data: PackedByteArray): pass +## Обработчик таймера func _on_timeout(unit_sch3) -> void: if write_stack.size(): var ad = write_stack.pop_front() if not unit_sch3.write(ad.addr, ad.data): write_stack.push_back(ad) - if (read_step == 0) and (input_stack.size() == 0): + if (read_step == 0) and (input_stack.size() == 0): var ad = StackItem.new(base_input_address, regs_input_count) input_stack.push_back(ad) - elif read_step == 1 and (holding_stack.size() == 0): + elif (read_step == 1) and (holding_stack.size() == 0): var ad = StackItem.new(base_holding_address, regs_holding_count) holding_stack.push_back(ad) if input_stack.size(): @@ -55,7 +59,10 @@ func _on_timeout(unit_sch3) -> void: read_step %= 2 -func on_toggled_switch(val: bool, unit_sch3: sch_3.Sch3, meta: Array): +## Вызывается при изменении состояния выключателя[br] +## [param val] - Состояние выключателя[br] +## [param meta] - Адреса регистров и индексы битов назначенных выключателю[br] +func on_toggled_switch(val: bool, meta: Array): var on_addr = meta[0] var on_bit = meta[1] var off_addr = meta[2] @@ -118,12 +125,15 @@ func on_line_changed(unit_sch3: sch_3.Sch3): else: timer.start(request_period) - +## Вызывается по сигналу "приняты данные чтения регистров хранения"[br] +## [param base_addr] - Начальный адрес регистров.[br] +## [param data] - Массив значений прочитанных из регистров. func on_resp_holding(base_addr: int, data: Array): if (base_addr != base_holding_address) or (data.size() < regs_holding_count): return for i in data.size(): regs_holding[base_addr + i] = data[i] + # Разрешить работу выключателей только когда прочитано их реальное состояние if not switches_sync: switches_sync = true for item in get_tree().get_nodes_in_group('bits_items_switch'): @@ -139,6 +149,9 @@ func on_resp_holding(base_addr: int, data: Array): push_write_holding() +## Вызывается по сигналу "приняты данные чтения регистров входов".[br] +## [param base_addr] - Начальный адрес регистров.[br] +## [param data] - Массив значений прочитанных из регистров.[br] func on_resp_input(base_addr: int, data: Array): if (base_addr != base_input_address) or (data.size() < regs_input_count): return diff --git a/scenes/журнал/журнал.gd b/scenes/журнал/журнал.gd index ad400e81..6e7f7642 100644 --- a/scenes/журнал/журнал.gd +++ b/scenes/журнал/журнал.gd @@ -1,7 +1,7 @@ extends Panel -func on_line_changed(unit, addr): log.message(Logger.INFO, 'Состояние связи: %s %s' % [unit, addr]) +func on_line_changed(unit, addr): log.message(Logger.INFO, 'Изменение состояния: %s %s' % [unit, addr]) func on_command_fail(unit, addr): log.message(Logger.ERROR, 'Ошибка: команда не выполнена: %s %s' % [unit, addr]) 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.to_string(), msg]) diff --git a/scripts/capsrpb.gd b/scripts/capsrpb.gd index daa0cd6b..79343b5a 100644 --- a/scripts/capsrpb.gd +++ b/scripts/capsrpb.gd @@ -10,10 +10,10 @@ const BUFFER_SIZE = 2048 ## Размер приёмного буфера д class CapsRpb extends unit.Unit: - static var json_conv: = JSON.new() - var json_dic: Dictionary ## Аппарат для разбора сообщений. - var tick: = 0 ## Тик время последнего обновления, мс. - var tx_stack: Array ## Массив пакетов для отправки. + static var json_conv: = JSON.new() ## Аппарат для разбора сообщений. + var json_dic: Dictionary + var tick: = 0 ## Тик время последнего обновления, мс. + var tx_stack: Array ## Массив пакетов для отправки. func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) func _init(nm): self.name = nm @@ -41,4 +41,4 @@ class CapsRpb extends unit.Unit: tx_stack.remove_at(0) return Error.OK else: - return Error.ERR_UNAVAILABLE + return Error.ERR_BUSY