Рефактор
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
|
||||
|
||||
Reference in New Issue
Block a user