Доработка. Отображение состояния СПТ-25 в режиме Контроль

This commit is contained in:
sasha80
2024-10-31 14:29:23 +03:00
parent ff8bd44446
commit a3ee95d95a
3 changed files with 42 additions and 11 deletions

View File

@@ -12,6 +12,7 @@ patch_margin_top = 30
patch_margin_right = 15
patch_margin_bottom = 10
script = ExtResource("2_ki0kf")
text = "заголовок"
[node name="header" type="Label" parent="."]
clip_contents = true
@@ -21,6 +22,6 @@ anchor_right = 1.0
offset_bottom = 22.0
grow_horizontal = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
text = "caption text"
text = "заголовок"
horizontal_alignment = 1
vertical_alignment = 1

View File

@@ -21,6 +21,19 @@ signal pressed(control: PanelContainer)
fname = v
$margin/vbox/title/fname.text = v
@export var state: int:
set(v):
state = v
if v == 0:
$margin/vbox/title/lbl_using.text = 'неизвестно'
$margin/vbox/title/lbl_using.self_modulate = Color.CADET_BLUE
elif v == 1:
$margin/vbox/title/lbl_using.text = 'используется'
$margin/vbox/title/lbl_using.self_modulate = Color.GREEN
elif v == 2:
$margin/vbox/title/lbl_using.text = 'отключено'
$margin/vbox/title/lbl_using.self_modulate = Color.WHITE
@export var state0: int:
set(v):
@@ -114,16 +127,23 @@ alignment = -1
[node name="title" type="GridContainer" parent="margin/vbox"]
layout_mode = 2
columns = 2
[node name="fname" type="Label" parent="margin/vbox/title"]
self_modulate = Color(1, 1, 1, 0.627451)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 6
size_flags_horizontal = 6
theme_override_font_sizes/font_size = 17
horizontal_alignment = 1
vertical_alignment = 1
[node name="lbl_using" type="Label" parent="margin/vbox/title"]
layout_mode = 2
size_flags_horizontal = 6
text = "неизвестно"
horizontal_alignment = 1
vertical_alignment = 1
[node name="table" type="GridContainer" parent="margin/vbox"]
layout_mode = 2
columns = 2

View File

@@ -14,7 +14,7 @@ func _enter_tree() -> void:
if Engine.is_editor_hint(): return
var unit_key = settings.get_unit_key(unit_name)
var unit = network.units[unit_key]
unit.connect('data_received', on_data_received)
unit.connect('data_received', on_data_received.bind(unit))
unit.connect('line_changed', on_line_changed)
@@ -24,11 +24,13 @@ func on_line_changed(unit):
$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_input2.state0 = STATE_VAL.NONE
$block_input1.state1 = STATE_VAL.NONE
$block_input2.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
@@ -39,19 +41,26 @@ func _exit_tree() -> void:
unit.disconnect('data_received', on_data_received)
func on_data_received(data):
func on_data_received(data: PackedByteArray, unit):
if data.size() <= 6:
push_error('ошибка: неверная длина данных %d байт %s' % [data.size(), unit])
return
# Сеть 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. Неисправность блока инвертора 1 канала
$block_input1.state1 = STATE_VAL.GOOD if (data[6] & (1 << 2)) == 0 else STATE_VAL.ERROR
# Перегрев 1 канала
# Сеть 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. Неисправность блока инвертора 2 канала
$block_input2.state1 = STATE_VAL.GOOD if (data[6] & (1 << 3)) == 0 else STATE_VAL.ERROR
# Перегрев 2 канала
# Сеть 2. Перегрев 2 канала
$block_input2.state2 = STATE_VAL.GOOD if (data[5] & (1 << 4)) == 0 else STATE_VAL.ERROR
# Неисправность, напряжение меньше номинального, напряжение выше номинального
@@ -61,6 +70,7 @@ func on_data_received(data):
# Критическая температура
$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 \