diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index 40c729a7..acd59501 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -1,35 +1,39 @@ @tool class_name pribor_uf extends 'res://scenes/контроль/прибор.gd' +signal control_is_over(device_name: String) # Когда контроль завершен enum STATE_VAL {NONE = 0, GOOD = 1, ERROR = 2} -const DEV_LIST = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0'] -const USB_TRACKERBALL = '13ba:0018' -const REVFF = '(rev ff)' +const DEV_LIST: Array = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0'] +const USB_TRACKERBALL: String = '13ba:0018' +const REVFF: String = '(rev ff)' +var unit_uf: Object var ctrl_pos = 100 func _ready() -> void: - if Engine.is_editor_hint(): - return - var unit_uf: = network.get_unit_instance('уарэп-эмс') + if Engine.is_editor_hint(): return + signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device')) + unit_uf = network.get_unit_instance('уарэп-эмс') unit_uf.connect('line_changed', on_line_changed) - control_vk() - on_line_changed(unit_uf) + on_line_changed() + #control_vk() + control_ems(unit_uf.status) + status_uf() find_labels(self) -func on_timer(unit_name: StringName): - var unit_uf = network.get_unit_instance(unit_name) - if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б - control_ems(unit_uf.status) # проверка ЭМС ячеек +func _on_start_contol_device(): + on_line_changed() + control_ems(unit_uf.status) # проверка ЭМС ячеек status_uf() # отслеживание состояния прибора -func on_line_changed(unit_uf): +func on_line_changed(): if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.GOOD + $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD ## заглушка для зеленения ВК-110 else: $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.ERROR $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.NONE @@ -38,6 +42,7 @@ func on_line_changed(unit_uf): $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.NONE + $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.NONE func control_vk() -> void: @@ -76,14 +81,13 @@ func control_vk() -> void: else: $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR - $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD ## заглушка для зеленения ВК-110 - func control_ems(status: Array) -> void: - $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if ((status[0] >> 0) & 1) and ((status[0] >> 3) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if ((status[0] >> 1) & 1) and ((status[0] >> 4) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if ((status[0] >> 2) & 1) and ((status[0] >> 5) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.GOOD if ((status[2] >> 6) & 1) else STATE_VAL.ERROR + if status: + $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if ((status[0] >> 0) & 1) and ((status[0] >> 3) & 1) else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if ((status[0] >> 1) & 1) and ((status[0] >> 4) & 1) else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if ((status[0] >> 2) & 1) and ((status[0] >> 5) & 1) else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.GOOD if ((status[2] >> 6) & 1) else STATE_VAL.ERROR func status_uf() -> void: @@ -103,6 +107,7 @@ func status_uf() -> void: $lbl_header2.text = 'Прибор неисправен' $lbl_header2.modulate = Color.RED $lbl_header2.visible = true + emit_signal('control_is_over', unit_uf.name) func find_labels(node1: Node): diff --git a/scenes/pribor-uf/pribor-uf.tscn b/scenes/pribor-uf/pribor-uf.tscn index 82ceaaf2..8e281371 100644 --- a/scenes/pribor-uf/pribor-uf.tscn +++ b/scenes/pribor-uf/pribor-uf.tscn @@ -150,13 +150,10 @@ offset_top = 1009.0 offset_right = 757.0 offset_bottom = 1064.0 theme_override_font_sizes/font_size = 22 -text = "Состояние неизвестно..." +text = "Ожидание запуска контроля" horizontal_alignment = 1 vertical_alignment = 1 -[node name="timer" type="Timer" parent="."] -autostart = true - [node name="line" type="Line2D" parent="."] position = Vector2(195, 950) scale = Vector2(1.03548, 1) @@ -164,5 +161,3 @@ points = PackedVector2Array(-8, 0, 61.8069, 0, 608, 0) width = 2.0 default_color = Color(1, 1, 1, 0.352941) metadata/_edit_lock_ = true - -[connection signal="timeout" from="timer" to="." method="on_timer" binds= [&"уарэп-эмс"]] diff --git a/scenes/контроль/control_prd.gd b/scenes/контроль/control_prd.gd index 08306016..6e9a9d74 100644 --- a/scenes/контроль/control_prd.gd +++ b/scenes/контроль/control_prd.gd @@ -4,6 +4,7 @@ var base_style: StyleBoxFlat var tween var pulsing: bool = false var original_text: String +var flag_control_is_over: bool = false func _ready(): @@ -41,6 +42,7 @@ func _setup_signals() -> void: func _on_pressed(): disabled = true text = "Идет выполнение контроля" + flag_control_is_over = false _start_pulse() @@ -72,7 +74,20 @@ func _stop_pulse(): func _on_status_change(): - _stop_pulse() + if not flag_control_is_over: + _stop_pulse() + + +func _on_stop_control(): + var time_dict = Time.get_datetime_dict_from_system() + text = 'Контроль выполнен %02d:%02d/%02d.%02d' % [ + time_dict.hour, + time_dict.minute, + time_dict.day, + time_dict.month] + disabled = false + tooltip_text = 'Нажать для повторного контроля ' + flag_control_is_over = true func _exit_tree() -> void: diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index f917b9b3..58bc869e 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -57,7 +57,7 @@ const PRIBORS_RES = \\ var ctl_btn_state := false var cur_pribor_node = null var check_ready_control: Dictionary = {} -var device_wait_control_result:Array = ['1н', '2н', '3н', '4н', '1в', '2в', '3в', '4в', '1к', '2к', '3к', '4к',] +var device_wait_control_result:Array = ['1н', '2н', '3н', '4н', '1в', '2в', '3в', '4в', '1к', '2к', '3к', '4к'] func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online) @@ -107,6 +107,7 @@ func _ready(): prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over')) if item == 'уарэп-эмс': signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node)) + # Пиктограммы приборов, которые отображают состояние подключения только for pribor_node in get_tree().get_nodes_in_group('pribor_pics'): var unit_name = pribor_node.get_meta('unit_name') @@ -198,14 +199,7 @@ func on_control_is_over(pribor_name: String) -> void: check_ready_control[pribor_name] = true if not _is_all_control_complete(): return # После завершения контроля всех приборов - var time_dict = Time.get_datetime_dict_from_system() - $control_prd_button.text = 'Контроль выполнен %02d:%02d/%02d.%02d' % [ - time_dict.hour, - time_dict.minute, - time_dict.day, - time_dict.month] - $control_prd_button.disabled = false - $control_prd_button.tooltip_text = 'Нажать для повторного контроля ' + $control_prd_button._on_stop_control() func _is_all_control_complete() -> bool: @@ -549,12 +543,10 @@ texture_normal = ExtResource("2_0nvm1") stretch_mode = 0 script = ExtResource("3_4pt7j") state_colors = [Color(1, 1, 1, 1), Color(0, 1, 0, 1), Color(1, 0, 0, 1)] -state = 1 metadata/unit_name = ["уарэп-эмс"] metadata/online_proc = "on_line_changed" [node name="label" type="Label" parent="pribor_uf"] -self_modulate = Color(0, 1, 0, 1) layout_mode = 0 offset_left = 15.0 offset_top = -44.0 diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 58ca196c..bbef429b 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -867,15 +867,16 @@ func on_mode_changed(in_tree: bool) -> void: constants.ADDR_UG_LITERA_1, DATA_EXIT_CONTOL_ISA, constants.ADDR_UG_LITERA_2, DATA_EXIT_CONTOL_ISA, constants.ADDR_UG_LITERA_3, DATA_EXIT_CONTOL_ISA]]) - flags.control_is_over = false flags.no_trust_yau07 = false flags.only_fs = false flags.ecm_is_comming = false flags.in_control = false progress_value = 0 - machine_timer.stop() _handle_fs_turn_off_state() - restore_default_states() + if not machine_timer.is_stopped(): + flags.control_is_over = false + restore_default_states() + machine_timer.stop() else: ## При нажатии на режим контроль _set_status('Ожидание запуска контроля')