Доработка. Отображение состояния СПТ-25 в режиме Контроль
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
Reference in New Issue
Block a user