From 2f9ee6afad9b28da5a08a44cbc3eda9ba6d98963 Mon Sep 17 00:00:00 2001 From: stten5 Date: Tue, 30 Jan 2024 12:12:01 +0100 Subject: [PATCH 1/4] STTEN5 no box --- config/machine_settings/st-ten-5.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/machine_settings/st-ten-5.ini b/config/machine_settings/st-ten-5.ini index 578e8f4..f5bae30 100644 --- a/config/machine_settings/st-ten-5.ini +++ b/config/machine_settings/st-ten-5.ini @@ -9,9 +9,9 @@ extra_label_printer: present remote_api: absent tecna_t3: present digital_io: present -digital_io_flush_blow: present +#digital_io_flush_blow: present barcode_recipe_selection: present -external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH +#external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH show_instructions: yes [tecna_t3] From 3de0a8e726d8ce8e93afcca21f74be69bde39b8b Mon Sep 17 00:00:00 2001 From: stten5 Date: Tue, 3 Sep 2024 09:07:56 +0200 Subject: [PATCH 2/4] 6744/6743 --- .../st-ten-5/5803036743.svg | 3390 ++++++++++++++++- .../st-ten-5/5803036744.svg | 3390 ++++++++++++++++- 2 files changed, 6720 insertions(+), 60 deletions(-) diff --git a/config/instruction_images/st-ten-5/5803036743.svg b/config/instruction_images/st-ten-5/5803036743.svg index 7a3b3cd..cc00cb9 100644 --- a/config/instruction_images/st-ten-5/5803036743.svg +++ b/config/instruction_images/st-ten-5/5803036743.svg @@ -8,7 +8,7 @@ height="407" viewBox="0 0 1334 407" sodipodi:docname="5803036743.svg" - inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" + inkscape:version="1.2.2 (732a01da63, 2022-12-09)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -26,14 +26,15 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="1.1566717" - inkscape:cx="667.86453" + inkscape:cx="668.72908" inkscape:cy="203.16914" - inkscape:window-width="2490" - inkscape:window-height="1016" - inkscape:window-x="70" - inkscape:window-y="27" + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="-8" + inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="g1" /> + inkscape:current-layer="g1" + showgrid="false" /> - - + inkscape:current-layer="g1" + showgrid="false" /> - - From 0f8db554c4ee7c66165818ce0655c71e124678c0 Mon Sep 17 00:00:00 2001 From: stten5 Date: Tue, 3 Sep 2024 11:05:55 +0200 Subject: [PATCH 3/4] dev --- .../st-ten-5/5803036734.svg | 2033 ++++++++++++++++- .../st-ten-5/5803036735.svg | 1876 ++++++++++++++- config/machine_settings/defaults.ini | 2 +- config/machine_settings/st-ten-5.ini | 10 +- 4 files changed, 3887 insertions(+), 34 deletions(-) diff --git a/config/instruction_images/st-ten-5/5803036734.svg b/config/instruction_images/st-ten-5/5803036734.svg index c1b3d13..db5c65c 100644 --- a/config/instruction_images/st-ten-5/5803036734.svg +++ b/config/instruction_images/st-ten-5/5803036734.svg @@ -8,7 +8,7 @@ height="344" viewBox="0 0 1323 344" sodipodi:docname="5803036734.svg" - inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" + inkscape:version="1.2.2 (732a01da63, 2022-12-09)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -28,12 +28,13 @@ inkscape:zoom="1.1662887" inkscape:cx="661.50002" inkscape:cy="172.34155" - inkscape:window-width="2490" - inkscape:window-height="1016" - inkscape:window-x="70" - inkscape:window-y="27" + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="-8" + inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="g1" /> + inkscape:current-layer="g1" + showgrid="false" /> + inkscape:current-layer="g1" + showgrid="false" /> Date: Tue, 18 Mar 2025 17:45:09 +0100 Subject: [PATCH 4/4] stten5 --- config/machine_settings/st-ten-5.ini | 12 +- src/ui/recipe_selection/recipe_selection.py | 131 +++++++++++++++++++- 2 files changed, 133 insertions(+), 10 deletions(-) diff --git a/config/machine_settings/st-ten-5.ini b/config/machine_settings/st-ten-5.ini index 0d70eab..cfc7447 100644 --- a/config/machine_settings/st-ten-5.ini +++ b/config/machine_settings/st-ten-5.ini @@ -10,10 +10,10 @@ extra_label_printer: present remote_api: absent tecna_t3: present digital_io: present -digital_io_flush_blow: present +#digital_io_flush_blow: present barcode_recipe_selection: present enforce_piece_removal: yes -external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH +#external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH show_instructions: yes [tecna_t3] @@ -88,6 +88,8 @@ pressione_di_test_delta_massimo_2: 200 tempo_svuotamento_2: 1 pressione_svuotamento_2: 100 +tester_discharge_enable: yes + stampa_etichetta_abilitata: x modello_etichetta: ETA30x16_203dpi.prn descrizione: inserire descrizione ricetta @@ -100,10 +102,10 @@ filling_time: 15 settling_time: 10 settling_pressure_min_percent: 5 settling_pressure_max_percent: 5 -test_pressure: 5000 +test_pressure: 5900 test_time: 10 -test_pressure_qpos: 8 -test_pressure_qneg: 12 +test_pressure_qpos: 4 +test_pressure_qneg: 7 test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) (positive mbar) test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) (negative mbar) flush_time: 1 diff --git a/src/ui/recipe_selection/recipe_selection.py b/src/ui/recipe_selection/recipe_selection.py index 7f60919..2cf046c 100755 --- a/src/ui/recipe_selection/recipe_selection.py +++ b/src/ui/recipe_selection/recipe_selection.py @@ -304,11 +304,132 @@ class Recipe_Selection(Widget): # EXPORT RECIPES TABLE TO CSV FILE def export_recipes(self, csv_path=None): - export_recipes( - config=self.config, - csv_path=csv_path, - logger=self.log, - ) + if csv_path is None: + csv_path, _ = QFileDialog.getSaveFileName( + None, + "Esportazione ricette", + "ricette.csv", + "CSV data (*.csv);;All Files (*)", + ) + csv_path = str(csv_path) + if not len(csv_path): + return + if not csv_path.lower().endswith(".csv"): + csv_path += ".csv" + csv_dir = os.path.dirname(csv_path) + if len(csv_dir): + os.makedirs(csv_dir, exist_ok=True) + recipe_name_field = self.config.get("recipe", {}).get("recipe_name_field", "codice_ricetta").strip() + barcode_enable_field = self.config.get("recipe", {}).get("barcode_enable_field", "verifica_codice_a_barre_abilitata").strip() + barcode_serial_field = self.config.get("recipe", {}).get("barcode_serial_field", "codice_a_barre").strip() + print_template_field = self.config.get("recipe", {}).get("label_template_field", "modello_etichetta").strip() + data = [] + fieldnames = [ + recipe_name_field, + "cliente", + "part_number", + "dimensione_lotto_abilitata", + "dimensione_lotto", + "verifica_connettore_abilitata", + "connettore", + barcode_enable_field, + barcode_serial_field, + "verifica_resistenza_connettore_abilitata", + "scala_resistenza", + "r nominale", + "tolleranza_resistenza_pos", + "tolleranza_resistenza_neg", + "avvitatura_abilitata", + "viti", + "prova_tenuta_abilitata", + "tempo_pre_riempimento", + "pressione_pre_riempimento", + "tempo_riempimento", + "tempo_assestamento", + "percentuale_minima_pressione_assestamento", + "percentuale_massima_pressione_assestamento", + "tempo_di_test", + "pressione_di_test_delta_minimo", + "pressione_di_test", + "pressione_di_test_delta_massimo", + "tempo_svuotamento", + "pressione_svuotamento", + "prova_tenuta_abilitata_2", + "tempo_pre_riempimento_2", + "pressione_pre_riempimento_2", + "tempo_riempimento_2", + "tempo_assestamento_2", + "percentuale_minima_pressione_assestamento_2", + "percentuale_massima_pressione_assestamento_2", + "tempo_di_test_2", + "pressione_di_test_delta_minimo_2", + "pressione_di_test_2", + "pressione_di_test_delta_massimo_2", + "tempo_svuotamento_2", + "pressione_svuotamento_2", + "test_visione_abilitato", + "ricetta_visione", + "stampa_etichetta_abilitata", + print_template_field, + ] + for recipe in list(Recipes.select()): + steps = recipe.get_steps_map() + exportable = { + recipe_name_field: recipe.name, + "cliente": recipe.client, + "part_number": recipe.part_number, + # "dimensione_lotto_abilitata": "x" if recipe.spec["count"] else "", + # "dimensione_lotto": steps["count"].spec["amount"], + "verifica_connettore_abilitata": "x" if recipe.spec["connector"] else "", + "connettore": steps["connector"].spec["connector"], + barcode_enable_field: "x" if recipe.spec["barcodes"] else "", + barcode_serial_field: steps["barcodes"].spec["serial"], + "verifica_resistenza_connettore_abilitata": "x" if recipe.spec["resistance"] else "", + "scala_resistenza": steps["resistance"].spec["scale"], + "r nominale": steps["resistance"].spec["expected"], + "tolleranza_resistenza_pos": steps["resistance"].spec["tolerance_pos"], + "tolleranza_resistenza_neg": steps["resistance"].spec["tolerance_neg"], + # "avvitatura_abilitata": "x" if recipe.spec["screws"] else "", + # "viti": steps["screws"].spec["quantity"], + "prova_tenuta_abilitata": "x" if recipe.spec["leak_1"] else "", + "tempo_pre_riempimento": steps["leak_1"].spec["pre_filling_time"], + "pressione_pre_riempimento": steps["leak_1"].spec["pre_filling_pressure"], + "tempo_riempimento": steps["leak_1"].spec["filling_time"], + "tempo_assestamento": steps["leak_1"].spec["settling_time"], + "percentuale_minima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_min_percent"], + "percentuale_massima_pressione_assestamento": steps["leak_1"].spec["settling_pressure_max_percent"], + "tempo_di_test": steps["leak_1"].spec["test_time"], + "pressione_di_test_delta_minimo": steps["leak_1"].spec["test_pressure_qneg"], + "pressione_di_test": steps["leak_1"].spec["test_pressure"], + "pressione_di_test_delta_massimo": steps["leak_1"].spec["test_pressure_qpos"], + "tempo_svuotamento": steps["leak_1"].spec["flush_time"], + "pressione_svuotamento": steps["leak_1"].spec["flush_pressure"], + "prova_tenuta_abilitata_2": "x" if recipe.spec["leak_2"] else "", + "tempo_pre_riempimento_2": steps["leak_2"].spec["pre_filling_time"], + "pressione_pre_riempimento_2": steps["leak_2"].spec["pre_filling_pressure"], + "tempo_riempimento_2": steps["leak_2"].spec["filling_time"], + "tempo_assestamento_2": steps["leak_2"].spec["settling_time"], + "percentuale_minima_pressione_assestamento_2": steps["leak_2"].spec["settling_pressure_min_percent"], + "percentuale_massima_pressione_assestamento_2": steps["leak_2"].spec["settling_pressure_max_percent"], + "tempo_di_test_2": steps["leak_2"].spec["test_time"], + "pressione_di_test_delta_minimo_2": steps["leak_2"].spec["test_pressure_qneg"], + "pressione_di_test_2": steps["leak_2"].spec["test_pressure"], + "pressione_di_test_delta_massimo_2": steps["leak_2"].spec["test_pressure_qpos"], + "tempo_svuotamento_2": steps["leak_2"].spec["flush_time"], + "pressione_svuotamento_2": steps["leak_2"].spec["flush_pressure"], + "test_visione_abilitato": recipe.spec["vision"], + "ricetta_visione": steps["vision"].spec["recipe"], + "stampa_etichetta_abilitata": "x" if recipe.spec["print"] else "", + print_template_field: steps["print"].spec["template"], + } + data.append(exportable) + if len(data): + self.log.info(f"recipes: exporting recipes to {csv_path}") + with open(csv_path, "w", newline="") as f: + w = csv.DictWriter(f, fieldnames, extrasaction="ignore") + w.writeheader() + w.writerows(data) + self.log.info(f"recipes: exported {len(data)} rows.") def delete_recipes(self): ret = QMessageBox.warning(