70 lines
3.2 KiB
GDScript
70 lines
3.2 KiB
GDScript
@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
|