Рефактор

This commit is contained in:
sasha80
2024-11-22 10:22:16 +03:00
parent 83e7800135
commit 091f07c4b5
3 changed files with 29 additions and 16 deletions

View File

@@ -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

View File

@@ -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])

View File

@@ -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