Рефактор
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user