diff --git a/config/label_designs/SATIL/R5_30x17_203dpi.nlbl b/config/label_designs/SATIL/R5_30x17_203dpi.nlbl index 2b3be99..50a477a 100644 Binary files a/config/label_designs/SATIL/R5_30x17_203dpi.nlbl and b/config/label_designs/SATIL/R5_30x17_203dpi.nlbl differ diff --git a/config/label_templates/st-ten-9/R5_30x17_203dpi.prn b/config/label_templates/st-ten-9/R5_30x17_203dpi.prn index e362bad..4e45b02 100644 --- a/config/label_templates/st-ten-9/R5_30x17_203dpi.prn +++ b/config/label_templates/st-ten-9/R5_30x17_203dpi.prn @@ -21,11 +21,12 @@ ^PW256 ^LL144 ^LS0 -^FT29,119^BQN,2,3 -^FH\^FDLA,{PART}{SN5}{DATE}{TIME}^FS -^FT237,104^A0I,23,23^FH\^CI28^FD{PART}^FS^CI27 -^FT237,75^A0I,23,23^FH\^CI28^FDNum:{SN5}^FS^CI27 -^FT237,47^A0I,23,23^FH\^CI28^FD{DATE}^FS^CI27 -^FT237,18^A0I,23,23^FH\^CI28^FD{TIME}^FS^CI27 +^FT156,132^BQN,2,3 +^FH\^FDLA,{PART}_{SN5}_{DATE}_{TIME}^FS +^FT61,47^A0N,23,23^FH\^CI28^FD{PART}^FS^CI27 +^FT19,72^A0N,23,23^FH\^CI28^FDNum:{SN5}^FS^CI27 +^FT19,97^A0N,23,23^FH\^CI28^FD{DATE}^FS^CI27 +^FT19,122^A0N,23,23^FH\^CI28^FD{TIME}^FS^CI27 +^FO19,21^GFA,169,248,8,:Z64:eJxFz7ENAyEMBdCPrnCZEVgjRQQrUaY46RjtRmGElFec4vgbrNA82Rhji+qAnax60ar6pbulaAOkT7dzmsIxBX0v7X3Y2+zrRv656trf6BP9/T/rl+kLopyjQG6fs28fKgMeW1SoRV6Pyis7j56i0BdLa0Ec7g8asjdJ:20D6 ^PQ1,0,1,Y ^XZ diff --git a/config/machine_settings/defaults.ini b/config/machine_settings/defaults.ini index 971177b..c63aa8d 100644 --- a/config/machine_settings/defaults.ini +++ b/config/machine_settings/defaults.ini @@ -124,7 +124,7 @@ warning_img: pid_mode: 0 # 0=FAST 1=MEDIUM 2=SLOW 4 = FIXED 5 = AUTOMATIC 6 = FLOW 7 = LEAK WITH FLOW pid_level: 1 pid_speed: 1 -tecna_discharge_enable: no +tester_discharge_enable: no tempo_pre_riempimento: 0 pressione_pre_riempimento: 1000 diff --git a/config/machine_settings/st-ten-1-linux.ini b/config/machine_settings/st-ten-1-linux.ini index 9a43767..ca9bcc0 100644 --- a/config/machine_settings/st-ten-1-linux.ini +++ b/config/machine_settings/st-ten-1-linux.ini @@ -43,7 +43,7 @@ pressione_di_test_delta_massimo: 30 tempo_svuotamento: 1 pressione_svuotamento: 100 canale_di_prova: 0 -tecna_discharge_enable: yes +tester_discharge_enable: yes [autotest_leak] enabled: true diff --git a/config/machine_settings/st-ten-2-linux.ini b/config/machine_settings/st-ten-2-linux.ini index 7b91d90..f08d687 100644 --- a/config/machine_settings/st-ten-2-linux.ini +++ b/config/machine_settings/st-ten-2-linux.ini @@ -48,7 +48,7 @@ pressione_di_test_delta_massimo: 30 tempo_svuotamento: 1 pressione_svuotamento: 100 canale_di_prova: 0 -tecna_discharge_enable: yes +tester_discharge_enable: yes [autotest_leak] enabled: true diff --git a/config/machine_settings/st-ten-2.ini b/config/machine_settings/st-ten-2.ini index 7f25cae..66f2020 100644 --- a/config/machine_settings/st-ten-2.ini +++ b/config/machine_settings/st-ten-2.ini @@ -48,7 +48,7 @@ pressione_di_test_delta_massimo: 30 tempo_svuotamento: 1 pressione_svuotamento: 100 canale_di_prova: 0 -tecna_discharge_enable: yes +tester_discharge_enable: yes [autotest_leak] enabled: true diff --git a/config/machine_settings/st-ten-3.ini b/config/machine_settings/st-ten-3.ini index 11fd7f8..115ad9b 100644 --- a/config/machine_settings/st-ten-3.ini +++ b/config/machine_settings/st-ten-3.ini @@ -39,7 +39,7 @@ pressione_di_test_delta_massimo: 30 tempo_svuotamento: 1 pressione_svuotamento: 100 canale_di_prova: 0 -tecna_discharge_enable: yes +tester_discharge_enable: yes [autotest_leak] enabled: true diff --git a/config/machine_settings/st-ten-8.ini b/config/machine_settings/st-ten-8.ini index 0d7936a..4f581f2 100644 --- a/config/machine_settings/st-ten-8.ini +++ b/config/machine_settings/st-ten-8.ini @@ -52,7 +52,7 @@ label_template_field: modello_etichetta description_field: descrizione [recipes_defaults] -tecna_discharge_enable: yes +tester_discharge_enable: yes dimensione_lotto_abilitata: x tempo_pre_riempimento: 0 pressione_pre_riempimento: 1000 diff --git a/config/machine_settings/st-ten-9.ini b/config/machine_settings/st-ten-9.ini index 5a18ece..f16601c 100644 --- a/config/machine_settings/st-ten-9.ini +++ b/config/machine_settings/st-ten-9.ini @@ -1,8 +1,8 @@ [machine] -description = ST-TEN-9 SATIL SRL - BANCO COLLAUDO TUBI R5 +description = ST-TEN-9 SATIL SRL - BANCO PROVA TENUTA 10 BAR [hardware_config] -archive_synchronizer: present +archive_synchronizer: absent label_printer: present remote_api: absent tecna_t3: absent @@ -47,8 +47,8 @@ label_template_field: modello_etichetta description_field: descrizione [recipes_defaults] -tecna_discharge_enable: yes -dimensione_lotto_abilitata: x +tester_discharge_enable: yes +dimensione_lotto_abilitata: tempo_pre_riempimento: 0 pressione_pre_riempimento: 0 tempo_riempimento: 5 @@ -62,17 +62,17 @@ pressione_di_test_delta_massimo: 20 # -mbar tempo_svuotamento: 1 pressione_svuotamento: 100 canale_di_prova: 1 -modello_etichetta: satil_30x17.prn +modello_etichetta: R5_30x17_203dpi.prn [autotest_leak] enabled: true pre_filling_time: 0 -pre_filling_pressure: 1000 +pre_filling_pressure: 0 filling_time: 10 settling_time: 10 settling_pressure_min_percent: 5 settling_pressure_max_percent: 5 -test_pressure: 7000 +test_pressure: 5000 test_time: 10 test_pressure_qpos: 10 #Q+ Upper test leak limit test_pressure_qneg: 30 #Q- Lower test leak limit diff --git a/open_osk.bat b/open_osk.bat new file mode 100644 index 0000000..0816ab6 --- /dev/null +++ b/open_osk.bat @@ -0,0 +1 @@ +osk diff --git a/src/components/furness_controls_fco730_registers.py b/src/components/furness_controls_fco730_registers.py index a8fd113..381f29a 100644 --- a/src/components/furness_controls_fco730_registers.py +++ b/src/components/furness_controls_fco730_registers.py @@ -59,14 +59,23 @@ registers = { '4': 'ATTESA RESET', '5': 'ATTESA START', '6': 'ERRORE', - '7': 'pressure_high', - '8': 'pressure_low', + '7': 'PRESSIONE ALTA', + '8': 'PRESSIONE BASSA', '9': 'jig_delay', '10': 'prefilling', '11': 'SCARICO', '12': 'reserverd', '13': 'sequence_delay', '14': 'jig_open' + }, + "status_result":{ + '0': 'PASSED', + '1': 'NEGATIVE FAIL', + '2': 'POSITIVE FAIL', + '3': 'RESERVED', + '4': 'PRESSURE GROSS FAIL', + '5': 'RESET DURING TEST', + '6': 'GLOBAL FAIL', } } diff --git a/src/components/furness_controls_leak_tester.py b/src/components/furness_controls_leak_tester.py index 578645e..7547209 100644 --- a/src/components/furness_controls_leak_tester.py +++ b/src/components/furness_controls_leak_tester.py @@ -3,19 +3,22 @@ import sys import time from collections import OrderedDict +from PyQt5.QtCore import QMutex + from components.component import Component from components.furness_controls_fco730_registers import registers as fco730_registers from components.furness_controls_fco780_registers import registers as fco780_registers + if "--sim-furness-controls" in sys.argv: from components.dummies.serial import serial else: import serial -ETX=b'\x03' -EOT=b'\x04' -ENQ=b'\x05' -ACK=b'\x06' -NACK=b'\x15' +ETX = b'\x03' +EOT = b'\x04' +ENQ = b'\x05' +ACK = b'\x06' +NACK = b'\x15' class FurnessControlsLeakTester(Component): @@ -29,14 +32,15 @@ class FurnessControlsLeakTester(Component): self.timeout = None self.parity = None self.conn = None + self.lock = QMutex() self.stopbits = None self.baudrate = None self.port = None self.model = None self.settings = None self.commands = None - self.id1=b'0' - self.id2=b'1' + self.id1 = b'0' + self.id2 = b'1' def config_changed(self): super().config_changed() @@ -77,22 +81,30 @@ class FurnessControlsLeakTester(Component): @Component.reconfig_on_error def _get(self): # READ INFO - current_status=self.get_status() + current_status = self.get_status() info = { - "Real time test pressure output":current_status["pressure_reading"], - "Real time differential pressure output":0, - "Real time pressure line regulator":0, - "Active alarm flags":0, - "Active test program number":0, - "Running test: active phase":current_status["current_stage"], - "Running test: measured leak":current_status["leak_reading"], - "Running test: test type":0, - "Running test: sequence index":0, - "Digital inputs status (mask)":0, + "Real time test pressure output": current_status["pressure_reading"], + "Real time differential pressure output": 0, + "Real time pressure line regulator": 0, + "Active alarm flags": 0, + "Active test program number": 0, + "Running test: active phase": current_status["current_stage"], + "Running test: measured leak": current_status["leak_reading"], + "Running test: test type": 0, + "Running test: sequence index": 0, + "Digital inputs status (mask)": 0, } + + if current_status['new_result_available'] == '1': # NEW TEST RESULT AVAILABLE + last_test_result = self.get_last_result() # READ RESULT TO RESET AVAILABLE FLAG + info.update({"Running test: result": last_test_result['status'], + "Running test: filling pressure": current_status["pressure_reading"], + "Running test: pressure at the end of settling": current_status["pressure_reading"], + + }) for round_me in ["measured leak"]: if round_me in info.keys(): - info.update({round_me:float(f"{info[round_me]:.2f}")}) + info.update({round_me: float(f"{info[round_me]:.2f}")}) self.log.debug(str(info)) super()._get([info]) @@ -101,63 +113,99 @@ class FurnessControlsLeakTester(Component): self.send_command("start_test") def stop_test(self): - self.log.warning("stopping test") - self.current_status = self.get_status() - if self.current_status['current_stage'] in ('standby','awaiting_start'): + self.log.warning("resetting state...") + current_status = self.get_status() + if current_status['status'] in ('ready_to_start',): self.log.info("ready to start") + elif current_status['status'] in ('pressure_high', 'pressure_low', 'fault'): + self.log.info(f"{current_status['status']}, performing self check to reset") + elif current_status['status'] == "testing": + self.log.info("stop running test") + self.send_command("reset_test") else: - self.log.warning("not ready to start, performing self check to reset") - self.send_command("self_check") + self.log.error(f"unknown state {current_status['status']}") + time.sleep(2) def get_status(self): - status_str=str(self.send_enquiry("current_status"),encoding="ascii") - status_str+='z' # dummy terminator - status_vars=OrderedDict( - { - 'a':'counter', - 'b':'product_number', - 'c':'step_number', - 'd':'new_result_available', - 'e':'mode', - 'f':'status', - 'g':'pressure_reading', - 'i':'leak_reading', - 'k':'current_stage', - 'z':'dummy' - }) - status_decoded={} - for tag,param in status_vars.items(): - next_tag=list(status_vars)[list(status_vars.keys()).index(tag) + 1] - match=re.search(f"{tag}([0-9.-]+){next_tag}",status_str) - value=None + status_str = str(self.send_enquiry("current_status"), encoding="ascii") + status_str += 'z' # dummy terminator + status_vars = OrderedDict( + { + 'a': 'counter', + 'b': 'product_number', + 'c': 'step_number', + 'd': 'new_result_available', + 'e': 'mode', + 'f': 'status', + 'g': 'pressure_reading', + 'h': 'pressure_units', + 'i': 'leak_reading', + 'j': 'leak_offset', + 'k': 'current_stage', + 'z': 'dummy' + }) + status_decoded = {} + for tag, param in status_vars.items(): + next_tag = list(status_vars)[list(status_vars.keys()).index(tag) + 1] + match = re.search(f"{tag}([0-9.-]+){next_tag}", status_str) + value = None if match is not None: - value=match.group(1) + value = match.group(1) if param == 'status': value = self.enums['status_status'][value] - if param == 'current_stage': + elif param == 'current_stage': value = self.enums['status_current_stage'][value] + elif param == 'pressure_reading': + value = f"{float(value) * 1000:.1f}" - status_decoded[param]=value - if next_tag =='z': + status_decoded[param] = value + if next_tag == 'z': break return status_decoded + def get_last_result(self): + res_str = str(self.send_enquiry("last_test_result"), encoding="ascii") + res_str += 'z' # dummy terminator + status_vars = OrderedDict( + { + 'a': 'counter', + 'b': 'step_number', + 'c': 'product_number', + 'd': 'status', + 'z': 'dummy' + }) + res_decoded = {} + for tag, param in status_vars.items(): + next_tag = list(status_vars)[list(status_vars.keys()).index(tag) + 1] + match = re.search(f"{tag}([0-9.-]+){next_tag}", res_str) + value = None + if match is not None: + value = match.group(1) + if param == 'status': + value = self.enums['status_result'].get(value, 'NOK') + + res_decoded[param] = value + if next_tag == 'z': + break + + return res_decoded + def write_recipe(self, recipe, step, table=None): # PREPARE DATA - product_id='"'+recipe.part_number[:16]+'"' - product_id=product_id.encode("ascii") - test_press_bar=step.spec["test_pressure"]/1000 - prefill_press_bar=step.spec["pre_filling_pressure"]/1000 - tolerance=int(step.spec["settling_pressure_min_percent"]) - fail_pos=test_press_bar+(int(step.spec["test_pressure_qpos"])/1000) - fail_neg=test_press_bar+(int(step.spec["test_pressure_qneg"])/1000) - fill_time=float(step.spec["filling_time"]) - stab_time=float(step.spec["settling_time"]) - test_time=float(step.spec["test_time"]) - prefill_time=float(step.spec["pre_filling_time"]) - vent_time=float(step.spec["flush_time"]) + product_id = '"' + recipe.part_number[:16] + '"' + product_id = product_id.encode("ascii") + test_press_bar = step.spec["test_pressure"] / 1000 + prefill_press_bar = step.spec["pre_filling_pressure"] / 1000 + tolerance = int(step.spec["settling_pressure_min_percent"]) + fail_pos = test_press_bar + (int(step.spec["test_pressure_qpos"]) / 1000) + fail_neg = test_press_bar + (int(step.spec["test_pressure_qneg"]) / 1000) + fill_time = float(step.spec["filling_time"]) + stab_time = float(step.spec["settling_time"]) + test_time = float(step.spec["test_time"]) + prefill_time = float(step.spec["pre_filling_time"]) + vent_time = float(step.spec["flush_time"]) # SEND RECIPE PARAMETERS self.send_command("change_cur_prod_50") self.send_product_tag("product_id", product_id) @@ -175,57 +223,60 @@ class FurnessControlsLeakTester(Component): self.send_product_tag("fail_low", f"{fail_neg:3.1f}") self.send_product_tag("outputs_a_h", f"{int(0b01000000)}") + self.get_last_result() # CLEAR POSSIBLE NEW RESULT AVAILABLE FLAG - def send_command(self,command): + def send_command(self, command): if type(command) is str: - command=self.commands[command] - out_bytes= bytearray() + command = self.commands[command] + out_bytes = bytearray() out_bytes.extend(EOT) out_bytes.extend(self.id1) out_bytes.extend(self.id2) out_bytes.extend(command) out_bytes.extend(ETX) - checksum=self.calc_checksum(out_bytes) + checksum = self.calc_checksum(out_bytes) out_bytes.append(checksum) - + self.lock.lock() self.conn.write(out_bytes) - response = self.conn.read(100) + response = self.conn.read(1) + self.lock.unlock() if response == ACK: return True else: self.log.error(f"SEND COMMAND({command}):{response}") return None - def send_enquiry(self,enquiry): + def send_enquiry(self, enquiry): if type(enquiry) is str: - enquiry=self.commands[enquiry] - out_bytes=bytearray(EOT) + enquiry = self.commands[enquiry] + out_bytes = bytearray(EOT) out_bytes.extend(self.id1) out_bytes.extend(self.id2) out_bytes.extend(enquiry) out_bytes.extend(ENQ) checksum = self.calc_checksum(out_bytes) out_bytes.append(checksum) - + self.lock.lock() self.conn.write(out_bytes) response = self.conn.read(100) + self.lock.unlock() if len(response): read_checksum = response[-1] else: read_checksum = None - calculated_checksum = self.calc_checksum(response[0:-1],start_idx=0) + calculated_checksum = self.calc_checksum(response[0:-1], start_idx=0) if read_checksum != calculated_checksum: - self.log.error(f"SEND ENQUIRY:{response}") + self.log.error(f"ENQUIRY RESPONSE CHECKSUM:{read_checksum}!={calculated_checksum}") return None else: - response = response[:-2] #strip checksum & ETX + response = response[:-2] # strip checksum & ETX return response - def send_product_tag(self,tag,tag_data): + def send_product_tag(self, tag, tag_data): self.log.info(f"Sending tag:{tag}={tag_data}") - command=bytearray(self.commands["product_data"]) + command = bytearray(self.commands["product_data"]) if type(tag_data) is str: - tag_data=bytearray(tag_data,encoding="ascii") + tag_data = bytearray(tag_data, encoding="ascii") command.extend(self.product_tags[tag]) command.extend(tag_data) self.send_command(command) diff --git a/src/components/tecna_marposs_provaset_t3.py b/src/components/tecna_marposs_provaset_t3.py index 22be9d2..35d10ae 100644 --- a/src/components/tecna_marposs_provaset_t3.py +++ b/src/components/tecna_marposs_provaset_t3.py @@ -300,7 +300,7 @@ class TecnaMarpossProvasetT3(ModbusComponent): "PSQ - Next sequence program PSOUT mode": 0, "RAMPS: T1 configuration": pid_ramps, "PID: pressure correction": 100, - "Various flags": 0b0000000000010000 if self.config["recipes_defaults"]["tecna_discharge_enable"]=="yes" else 0b0000000000000000 + "Various flags": 0b0000000000010000 if self.config["recipes_defaults"]["tester_discharge_enable"]=="yes" else 0b0000000000000000 } if self.model == "t3p": diff --git a/src/ui/about/about.ui b/src/ui/about/about.ui index 54b403b..4cec820 100644 --- a/src/ui/about/about.ui +++ b/src/ui/about/about.ui @@ -78,41 +78,27 @@ - - - Telefono: - - - - - - - +39 0118000876 - - - - P.IVA: - + 11836090016 - + Indirizzo: - + Via Vittime delle Foibe, 10 10036 - Settimo Torinese (TO) diff --git a/src/ui/imgs/r5.png b/src/ui/imgs/r5.png new file mode 100644 index 0000000..84d2b0b Binary files /dev/null and b/src/ui/imgs/r5.png differ diff --git a/src/ui/login/login.py b/src/ui/login/login.py index 7a17829..bbc0d52 100755 --- a/src/ui/login/login.py +++ b/src/ui/login/login.py @@ -60,4 +60,4 @@ class Login(Widget): def show_osk(self): self.password_le.setFocus() if platform.system().lower() == 'windows': - subprocess.Popen(["osk.bat"]) # OPEN ON SCREEN KEYBOARD + subprocess.Popen(["open_osk.bat"]) # OPEN ON SCREEN KEYBOARD diff --git a/src/ui/recipe_selection/recipe_selection.py b/src/ui/recipe_selection/recipe_selection.py index 35cb8c3..352b656 100755 --- a/src/ui/recipe_selection/recipe_selection.py +++ b/src/ui/recipe_selection/recipe_selection.py @@ -57,6 +57,13 @@ class Recipe_Selection(Widget): } filters = {"archived": False} step_defaults = self.read_steps(self.config.get("recipes_defaults", noner), noner) + custom_label_folder=f"config/label_templates/{str(self.config.machine_id)}/" + standard_label_folder=f"config/label_templates/" + if os.path.exists(custom_label_folder): + label_folder = custom_label_folder + else: + label_folder = standard_label_folder + step_defaults.update({ "vision": { # "recipe": sorted(glob("*.ini", root_dir="./config/vision/recipes/")), # only in python3.10 @@ -64,7 +71,7 @@ class Recipe_Selection(Widget): }, "print": { # "template": sorted(glob("*.prn", root_dir="./config/label_templates/")), # only in python3.10 - "template": sorted(map(os.path.basename, glob("./config/label_templates/*.prn"))), + "template": sorted(map(os.path.basename, glob(f"{label_folder}*.prn"))), }, }), self.crud = Crud( diff --git a/src/ui/test/test.py b/src/ui/test/test.py index 3260f29..f1dd5c1 100755 --- a/src/ui/test/test.py +++ b/src/ui/test/test.py @@ -110,6 +110,7 @@ class Test(Widget): self.cycle_steps = None self.cycle_index = -1 self.print_step = None + self.last_label = None self.require_discard_piece = False # SETUP AUTOTEST self.autotest_request = False @@ -193,7 +194,7 @@ class Test(Widget): self.recipe_selection_mode = "barcode" self.change_recipe() def reprint_label(self): - self.print(self.archived, self.print_step.spec.get("template", "EtichettaR5")) + self.print(self.last_label, self.print_step.spec.get("template", "EtichettaR5")) def fail_cycle(self): self.next(action="fail") @@ -326,6 +327,7 @@ class Test(Widget): self.next_timer.start(0) if self.step.type == "done": self.archived = self.done() + self.last_label=copy.deepcopy(self.archived) self.next_timer.start(500) elif self.step.type == "print": compiled_label = self.print(self.archived, self.step.spec.get("template", "EtichettaR5")) @@ -532,9 +534,9 @@ class Test(Widget): self.data.get("recipe",{}).get("spec",{}).pop("available_steps",None) for leak in ["leak_1","leak_2"]: if leak in self.data.keys(): - results={k:self.data[leak]["results"]["tecna_t3"][k] for k in ["Running test: result"]} + results={k:self.data[leak]["results"][self.tester_component][k] for k in ["Running test: result"]} - results.update({k:round(float(self.data[leak]["results"]["tecna_t3"][k]),2) for k in ["Running test: filling pressure", + results.update({k:round(float(self.data[leak]["results"][self.tester_component][k]),2) for k in ["Running test: filling pressure", "Running test: measured leak", "Running test: pressure at the end of settling"]} ) @@ -586,9 +588,13 @@ class Test(Widget): def print(self, archived, label): self.log.info("cycle print") + if archived is None: + self.log.error("attempting to print empty label") + return None + if archived.label is not None: # raise AssertionError("this should never happen") - self.log.debug("ERROR cycle printed already compiled label") + self.log.info("printing already compiled label") # LABEL PRINT recipe = archived.test_data.get("recipe", {}) diff --git a/src/ui/test_leak/test_leak.py b/src/ui/test_leak/test_leak.py index 8f82dd0..d4e61b3 100644 --- a/src/ui/test_leak/test_leak.py +++ b/src/ui/test_leak/test_leak.py @@ -108,7 +108,7 @@ class Test_Leak(Test_Test): if self.step.spec.get("autotest", False): # IF AUTOTESTING UPLOAD RECIPE EVERY TIME self.recipe_written = False - if self.parent.config["hardware_config"].get("second_leak_test", None): # IF SECOND LEAK TEST ENABLED UPLOAD RECIPE EVERY TIME + if self.parent.config["hardware_config"].get("second_leak_test", "absent") == "present": # IF SECOND LEAK TEST ENABLED UPLOAD RECIPE EVERY TIME self.recipe_written = False if not self.recipe_written: @@ -253,6 +253,10 @@ class Test_Leak(Test_Test): "ATTESA START", "END TEST, WAITING THE START OF A NEW TEST" "FINE TEST", + "STANDBY", + "PRESSIONE BASSA", + "PRESSIONE ALTA", + "ERRORE" }: self.start_b.setEnabled(True) diff --git a/src/ui/test_leak/test_leak.ui b/src/ui/test_leak/test_leak.ui index 1142b44..a40af41 100644 --- a/src/ui/test_leak/test_leak.ui +++ b/src/ui/test_leak/test_leak.ui @@ -491,6 +491,7 @@ 20 + 75 true @@ -961,6 +962,7 @@ 20 + 75 true @@ -1437,6 +1439,7 @@ 20 + 75 true @@ -1468,6 +1471,7 @@ 12 + 75 true @@ -1487,6 +1491,7 @@ 12 + 75 true @@ -1534,6 +1539,7 @@ 12 + 75 true @@ -1552,6 +1558,7 @@ 20 + 50 false @@ -1570,6 +1577,7 @@ border: 1px solid black; 16 + 50 false @@ -1589,6 +1597,7 @@ border: 1px solid black; 20 + 50 false @@ -1613,6 +1622,7 @@ border: 1px solid black; 20 + 50 false @@ -1631,6 +1641,7 @@ border: 1px solid black; 16 + 50 false @@ -1644,6 +1655,7 @@ border: 1px solid black; 16 + 50 false @@ -1663,6 +1675,7 @@ border: 1px solid black; 20 + 50 false @@ -1703,6 +1716,7 @@ border: 1px solid black; 20 + 50 false @@ -1720,7 +1734,8 @@ border: 1px solid black; - 16 + 20 + 50 false @@ -1739,6 +1754,7 @@ border: 1px solid black; 16 + 50 false @@ -1752,6 +1768,7 @@ border: 1px solid black; 16 + 50 false @@ -1771,6 +1788,7 @@ border: 1px solid black; 16 + 50 false @@ -1806,6 +1824,7 @@ border: 1px solid black; 16 + 50 false @@ -1828,6 +1847,7 @@ border: 1px solid black; 20 + 50 false @@ -1864,6 +1884,7 @@ border: 1px solid black; 48 + 50 false @@ -1885,6 +1906,7 @@ border: 1px solid black; 16 + 50 false @@ -1901,6 +1923,7 @@ border: 1px solid black; 16 + 50 false @@ -1917,6 +1940,7 @@ border: 1px solid black; 16 + 50 false @@ -1930,6 +1954,7 @@ border: 1px solid black; 16 + 50 false @@ -1946,6 +1971,7 @@ border: 1px solid black; 16 + 50 false @@ -1962,6 +1988,7 @@ border: 1px solid black; 16 + 50 false @@ -1975,6 +2002,7 @@ border: 1px solid black; 16 + 50 false @@ -1991,6 +2019,7 @@ border: 1px solid black; 16 + 50 false @@ -2013,6 +2042,7 @@ border: 1px solid black; 20 + 50 false @@ -2031,6 +2061,7 @@ border: 1px solid black; 16 + 50 false @@ -2044,6 +2075,7 @@ border: 1px solid black; 16 + 50 false @@ -2066,6 +2098,7 @@ border: 1px solid black; 20 + 50 false @@ -2090,6 +2123,7 @@ border: 1px solid black; 20 + 50 false @@ -2108,6 +2142,7 @@ border: 1px solid black; 16 + 50 false @@ -2121,6 +2156,7 @@ border: 1px solid black; 16 + 50 false @@ -2133,7 +2169,8 @@ border: 1px solid black; - 16 + 20 + 50 false @@ -2151,7 +2188,8 @@ border: 1px solid black; - 16 + 20 + 50 false @@ -2170,6 +2208,7 @@ border: 1px solid black; 16 + 50 false @@ -2186,6 +2225,7 @@ border: 1px solid black; 16 + 50 false @@ -2202,6 +2242,7 @@ border: 1px solid black; 16 + 50 false