Files
uarep-ctl/scenes/pribor-uyep/spt25-view.gd
2025-10-10 22:16:38 +03:00

70 lines
3.2 KiB
GDScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@tool
extends 'res://scenes/контроль/элемент-я.gd'
func on_line_changed(unit_instance):
if not unit_instance.online:
disable_all()
func on_settings_changed():
var external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false)
if external_ctl:
disable_all()
func disable_all():
state = STATE_VAL.NONE
$block_output.state0 = STATE_VAL.NONE
$block_output.state1 = STATE_VAL.NONE
$block_output.state2 = STATE_VAL.NONE
$block_input1.state = STATE_VAL.NONE
$block_input1.state0 = STATE_VAL.NONE
$block_input1.state1 = STATE_VAL.NONE
$block_input1.state2 = STATE_VAL.NONE
$block_input2.state = STATE_VAL.NONE
$block_input2.state0 = STATE_VAL.NONE
$block_input2.state1 = STATE_VAL.NONE
$block_input2.state2 = STATE_VAL.NONE
func on_data_received(data: PackedByteArray):
# Сеть 1. Использование
$block_input1.state = STATE_VAL.GOOD if data[4] & (1 << 5) else STATE_VAL.ERROR
# Сеть 1. Вход
$block_input1.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 1)) == 0) and ((data[4] & (1 << 3)) == 0) else STATE_VAL.ERROR
# Сеть 1. Неисправность блока инвертора 1 канала
$block_input1.state1 = STATE_VAL.GOOD if (data[6] & (1 << 2)) == 0 else STATE_VAL.ERROR
# Сеть 1. Перегрев 1 канала
$block_input1.state2 = STATE_VAL.GOOD if (data[5] & (1 << 3)) == 0 else STATE_VAL.ERROR
# Сеть 2. Использование
$block_input2.state = STATE_VAL.GOOD if data[4] & (1 << 6) else STATE_VAL.ERROR
# Сеть 2. Вход
$block_input2.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 2)) == 0) and ((data[4] & (1 << 4)) == 0) else STATE_VAL.ERROR
# Сеть 2. Неисправность блока инвертора 2 канала
$block_input2.state1 = STATE_VAL.GOOD if (data[6] & (1 << 3)) == 0 else STATE_VAL.ERROR
# Сеть 2. Перегрев 2 канала
$block_input2.state2 = STATE_VAL.GOOD if (data[5] & (1 << 4)) == 0 else STATE_VAL.ERROR
# Неисправность, напряжение меньше номинального, напряжение выше номинального
$block_output.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 0)) == 0) and ((data[4] & (1 << 7)) == 0) and ((data[5] & (1 << 2)) == 0) else STATE_VAL.ERROR
# Перегрузка и короткое замыкание по выходу
$block_output.state1 = STATE_VAL.GOOD if ((data[5] & (1 << 0)) == 0) and ((data[5] & (1 << 1)) == 0) else STATE_VAL.ERROR
# Критическая температура
$block_output.state2 = STATE_VAL.GOOD if ((data[5] & (1 << 5)) == 0) else STATE_VAL.ERROR
# Обобщённое состояние
state = STATE_VAL.GOOD \
if $block_input1.state1 == STATE_VAL.GOOD \
and $block_input1.state2 == STATE_VAL.GOOD \
and $block_input2.state0 == STATE_VAL.GOOD \
and $block_input2.state1 == STATE_VAL.GOOD \
and $block_input2.state2 == STATE_VAL.GOOD \
and $block_output.state0 == STATE_VAL.GOOD \
and $block_output.state1 == STATE_VAL.GOOD \
and $block_output.state2 == STATE_VAL.GOOD \
else STATE_VAL.ERROR