Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
51fe8bc283
@ -13,36 +13,36 @@ vision_saver: absent
|
|||||||
vision: absent
|
vision: absent
|
||||||
screwdriver: absent
|
screwdriver: absent
|
||||||
digital_io: present
|
digital_io: present
|
||||||
|
#digital_io_flush_blow: present
|
||||||
barcode_recipe_selection: present
|
barcode_recipe_selection: present
|
||||||
fixture_id: present
|
fixture_id: present
|
||||||
discard_box: present
|
discard_box: present
|
||||||
enforce_piece_removal: yes
|
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
|
||||||
|
|
||||||
[tecna_t3]
|
[tecna_t3]
|
||||||
port: COM4
|
port: COM4
|
||||||
model: t3l
|
model: t3p
|
||||||
|
|
||||||
[label_printer]
|
[label_printer]
|
||||||
platform: windows
|
platform: windows
|
||||||
printer: zd421
|
printer: zd421
|
||||||
|
|
||||||
[digital_io]
|
[digital_io]
|
||||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
|
||||||
id_flush_blow: USB-5860,BID#0
|
|
||||||
blow_on: 3 # INPUT VALVE TO SERVICE AIR
|
|
||||||
out_channel_select: 2 # AIR OUT VALVE (0=CH1, 1=CH2)
|
|
||||||
in_channel_select: 0 # AIR IN VALVE (0=CH1, 1=CH2)
|
|
||||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
|
||||||
blow_led:7 # CLEAN INDICATOR
|
|
||||||
ch1_led:6 # CHANNEL 1 ACTIVE INDICATOR
|
|
||||||
ch2_led:5 # CHANNEL 2 ACTIVE INDICATOR
|
|
||||||
flush_led:4 # FLUSH INDICATOR
|
|
||||||
|
|
||||||
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
||||||
id_fixture: USB-5862,BID#0
|
id_fixture: USB-5862,BID#0
|
||||||
discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING
|
discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING
|
||||||
|
|
||||||
|
[digital_io_flush_blow]
|
||||||
|
id: USB-5860,BID#0
|
||||||
|
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||||
|
blow_on: 0 # INPUT VALVE TO SERVICE AIR
|
||||||
|
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||||
|
blow_led:4 # CLEAN INDICATOR
|
||||||
|
ch1_led:3 # CHANNEL 1 ACTIVE INDICATOR
|
||||||
|
flush_led:2 # FLUSH INDICATOR
|
||||||
|
|
||||||
|
|
||||||
[fixture_rfid]
|
[fixture_rfid]
|
||||||
port: COM5
|
port: COM5
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ tempo_svuotamento_2: 1
|
|||||||
pressione_svuotamento_2: 100
|
pressione_svuotamento_2: 100
|
||||||
canale_di_prova_2: 2
|
canale_di_prova_2: 2
|
||||||
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
||||||
pid_pressure_correction: 110
|
pid_pressure_correction: 105
|
||||||
|
|
||||||
[autotest_leak]
|
[autotest_leak]
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@ -316,6 +316,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||||||
self.log.debug(str(spec))
|
self.log.debug(str(spec))
|
||||||
for register, value in spec.items():
|
for register, value in spec.items():
|
||||||
self.write(register, value)
|
self.write(register, value)
|
||||||
|
pass
|
||||||
|
|
||||||
@db.connection_context()
|
@db.connection_context()
|
||||||
def store_recipes(self, recipes):
|
def store_recipes(self, recipes):
|
||||||
|
|||||||
@ -316,7 +316,7 @@ registers = {
|
|||||||
"PB - Burst pressure": [743 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
"PB - Burst pressure": [743 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
||||||
"BD - Burst drop / PD - Delta Aperture": [744 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
"BD - Burst drop / PD - Delta Aperture": [744 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
||||||
"FSL - Discharge limit": [745 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
"FSL - Discharge limit": [745 - 1, {"dt": "16bit_uint", "f": 1505, }],
|
||||||
"PID: pressure correction": [746 - 1, {"dt": "16bit_uint", "g": 100, }],
|
"PID: pressure correction": [746 - 1, {"dt": "16bit_uint", "g": 110, }],
|
||||||
# Offset electronic regulator Format: xx.xx%
|
# Offset electronic regulator Format: xx.xx%
|
||||||
"PR+ - Max pressure tolerance % (P+)": [747 - 1, {"dt": "16bit_uint", "g": 10, }],
|
"PR+ - Max pressure tolerance % (P+)": [747 - 1, {"dt": "16bit_uint", "g": 10, }],
|
||||||
# Format: x.x %
|
# Format: x.x %
|
||||||
|
|||||||
10
src/main.py
10
src/main.py
@ -69,7 +69,7 @@ try:
|
|||||||
TecnaMarpossProvasetT3, FurnessControlsLeakTester, TecnaScrewdriver, USB_586x, RFID_PN532)
|
TecnaMarpossProvasetT3, FurnessControlsLeakTester, TecnaScrewdriver, USB_586x, RFID_PN532)
|
||||||
from lib.db import Users
|
from lib.db import Users
|
||||||
from lib.helpers import ConfigReader
|
from lib.helpers import ConfigReader
|
||||||
from PyQt5.QtCore import QObject, QThread, pyqtSignal
|
from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot
|
||||||
from PyQt5.QtWidgets import QApplication, QMessageBox
|
from PyQt5.QtWidgets import QApplication, QMessageBox
|
||||||
from ui import About, Archive, Login, Main_Window, Test, Users_Management, Recipe_Selection, \
|
from ui import About, Archive, Login, Main_Window, Test, Users_Management, Recipe_Selection, \
|
||||||
Barcode_Recipe_Selection
|
Barcode_Recipe_Selection
|
||||||
@ -88,6 +88,7 @@ try:
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
# print(f"MAIN {int(QThread.currentThreadId())}", flush=True)
|
# print(f"MAIN {int(QThread.currentThreadId())}", flush=True)
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.tag_loaded_recipe = None
|
||||||
self.do.connect(self._do)
|
self.do.connect(self._do)
|
||||||
try:
|
try:
|
||||||
# READ CONFIG
|
# READ CONFIG
|
||||||
@ -138,6 +139,10 @@ try:
|
|||||||
self.threads[component_name] = QThread()
|
self.threads[component_name] = QThread()
|
||||||
self.threads[component_name].setTerminationEnabled(True)
|
self.threads[component_name].setTerminationEnabled(True)
|
||||||
self.components[component_name].moveToThread(self.threads[component_name])
|
self.components[component_name].moveToThread(self.threads[component_name])
|
||||||
|
|
||||||
|
if "fixture_id" in self.components.keys():
|
||||||
|
self.components["fixture_id"].new_id_signal.connect(self.load_recipe_from_rfid)
|
||||||
|
|
||||||
for component_name, thread in self.threads.items():
|
for component_name, thread in self.threads.items():
|
||||||
component = self.components[component_name]
|
component = self.components[component_name]
|
||||||
thread.started.connect(component.start)
|
thread.started.connect(component.start)
|
||||||
@ -263,6 +268,9 @@ try:
|
|||||||
def reprint_label(self):
|
def reprint_label(self):
|
||||||
self.main_window.centralWidget().reprint_label()
|
self.main_window.centralWidget().reprint_label()
|
||||||
|
|
||||||
|
@pyqtSlot(str)
|
||||||
|
def load_recipe_from_rfid(self, data):
|
||||||
|
self.tag_loaded_recipe = data
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
|
|||||||
@ -55,6 +55,8 @@ class Barcode_Recipe_Selection(Test_Test):
|
|||||||
self.barcode_input_l.setPalette(self.status_palettes[None])
|
self.barcode_input_l.setPalette(self.status_palettes[None])
|
||||||
self.barcode_input_l.setPlainText("")
|
self.barcode_input_l.setPlainText("")
|
||||||
self.barcode_input_l.setFocus()
|
self.barcode_input_l.setFocus()
|
||||||
|
if self.parent.tag_loaded_recipe is not None:
|
||||||
|
self.get(self.parent.tag_loaded_recipe)
|
||||||
self.focus_timer.start(500)
|
self.focus_timer.start(500)
|
||||||
|
|
||||||
def debounce(self):
|
def debounce(self):
|
||||||
|
|||||||
@ -88,8 +88,10 @@ class Recipe_Selection(Widget):
|
|||||||
"spec": {
|
"spec": {
|
||||||
"count": len(self.config.get("recipes_defaults", noner)["dimensione_lotto_abilitata"]) and "count" not in self.unsupported_steps,
|
"count": len(self.config.get("recipes_defaults", noner)["dimensione_lotto_abilitata"]) and "count" not in self.unsupported_steps,
|
||||||
"connector": len(self.config.get("recipes_defaults", noner)["verifica_connettore_abilitata"]) and "connector" not in self.unsupported_steps,
|
"connector": len(self.config.get("recipes_defaults", noner)["verifica_connettore_abilitata"]) and "connector" not in self.unsupported_steps,
|
||||||
"barcodes": len(self.config.get("recipes_defaults", noner)["verifica_codice_a_barre_abilitata"]) and "barcodes" not in self.unsupported_steps,
|
"barcodes": len(
|
||||||
"resistance": len(self.config.get("recipes_defaults", noner)["verifica_resistenza_connettore_abilitata"]) and "resistance" not in self.unsupported_steps,
|
self.config.get("recipes_defaults", noner)["verifica_codice_a_barre_abilitata"]) and "barcodes" not in self.unsupported_steps,
|
||||||
|
"resistance": len(
|
||||||
|
self.config.get("recipes_defaults", noner)["verifica_resistenza_connettore_abilitata"]) and "resistance" not in self.unsupported_steps,
|
||||||
"screws": len(self.config.get("recipes_defaults", noner)["avvitatura_abilitata"]) and "screws" not in self.unsupported_steps,
|
"screws": len(self.config.get("recipes_defaults", noner)["avvitatura_abilitata"]) and "screws" not in self.unsupported_steps,
|
||||||
"instruction": len(self.config.get("recipes_defaults", noner)["istruzione_abilitata"]) and "instruction" not in self.unsupported_steps,
|
"instruction": len(self.config.get("recipes_defaults", noner)["istruzione_abilitata"]) and "instruction" not in self.unsupported_steps,
|
||||||
"leak_1": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata"]) and "leak_1" not in self.unsupported_steps,
|
"leak_1": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata"]) and "leak_1" not in self.unsupported_steps,
|
||||||
@ -127,9 +129,9 @@ class Recipe_Selection(Widget):
|
|||||||
self.crud.db_tw.setColumnWidth(4, 200)
|
self.crud.db_tw.setColumnWidth(4, 200)
|
||||||
self.crud.db_tw.setColumnWidth(5, 400)
|
self.crud.db_tw.setColumnWidth(5, 400)
|
||||||
if session.is_admin:
|
if session.is_admin:
|
||||||
self.import_b.clicked.connect(lambda checked, self=weakref.ref(self): self().import_recipes())
|
self.import_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().import_recipes())
|
||||||
self.export_b.clicked.connect(lambda checked, self=weakref.ref(self): self().export_recipes())
|
self.export_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes())
|
||||||
self.delete_all_b.clicked.connect(lambda checked, self=weakref.ref(self): self().delete_recipes())
|
self.delete_all_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().delete_recipes())
|
||||||
else:
|
else:
|
||||||
self.import_b.setVisible(False)
|
self.import_b.setVisible(False)
|
||||||
self.export_b.setVisible(False)
|
self.export_b.setVisible(False)
|
||||||
@ -215,8 +217,10 @@ class Recipe_Selection(Widget):
|
|||||||
"pre_filling_pressure": int(row.get("pressione_pre_riempimento", defaults["pressione_pre_riempimento"])),
|
"pre_filling_pressure": int(row.get("pressione_pre_riempimento", defaults["pressione_pre_riempimento"])),
|
||||||
"filling_time": int(row.get("tempo_riempimento", defaults["tempo_riempimento"])),
|
"filling_time": int(row.get("tempo_riempimento", defaults["tempo_riempimento"])),
|
||||||
"settling_time": int(self.get_def(row, "tempo_assestamento")),
|
"settling_time": int(self.get_def(row, "tempo_assestamento")),
|
||||||
"settling_pressure_min_percent": int(row.get("percentuale_minima_pressione_assestamento", defaults["percentuale_minima_pressione_assestamento"])),
|
"settling_pressure_min_percent": int(
|
||||||
"settling_pressure_max_percent": int(row.get("percentuale_massima_pressione_assestamento", defaults["percentuale_massima_pressione_assestamento"])),
|
row.get("percentuale_minima_pressione_assestamento", defaults["percentuale_minima_pressione_assestamento"])),
|
||||||
|
"settling_pressure_max_percent": int(
|
||||||
|
row.get("percentuale_massima_pressione_assestamento", defaults["percentuale_massima_pressione_assestamento"])),
|
||||||
"test_time": int(row.get("tempo_di_test", defaults["tempo_di_test"])),
|
"test_time": int(row.get("tempo_di_test", defaults["tempo_di_test"])),
|
||||||
"test_pressure_qneg": int(row.get("pressione_di_test_delta_minimo", defaults["pressione_di_test_delta_minimo"])),
|
"test_pressure_qneg": int(row.get("pressione_di_test_delta_minimo", defaults["pressione_di_test_delta_minimo"])),
|
||||||
"test_pressure": int(row.get("pressione_di_test", defaults["pressione_di_test"])),
|
"test_pressure": int(row.get("pressione_di_test", defaults["pressione_di_test"])),
|
||||||
@ -232,8 +236,10 @@ class Recipe_Selection(Widget):
|
|||||||
"pre_filling_pressure": int(row.get("pressione_pre_riempimento_2", defaults["pressione_pre_riempimento_2"])),
|
"pre_filling_pressure": int(row.get("pressione_pre_riempimento_2", defaults["pressione_pre_riempimento_2"])),
|
||||||
"filling_time": int(row.get("tempo_riempimento_2", defaults["tempo_riempimento_2"])),
|
"filling_time": int(row.get("tempo_riempimento_2", defaults["tempo_riempimento_2"])),
|
||||||
"settling_time": int(row.get("tempo_assestamento_2", defaults["tempo_assestamento_2"])),
|
"settling_time": int(row.get("tempo_assestamento_2", defaults["tempo_assestamento_2"])),
|
||||||
"settling_pressure_min_percent": int(row.get("percentuale_minima_pressione_assestamento_2", defaults["percentuale_minima_pressione_assestamento_2"])),
|
"settling_pressure_min_percent": int(
|
||||||
"settling_pressure_max_percent": int(row.get("percentuale_massima_pressione_assestamento_2", defaults["percentuale_massima_pressione_assestamento_2"])),
|
row.get("percentuale_minima_pressione_assestamento_2", defaults["percentuale_minima_pressione_assestamento_2"])),
|
||||||
|
"settling_pressure_max_percent": int(
|
||||||
|
row.get("percentuale_massima_pressione_assestamento_2", defaults["percentuale_massima_pressione_assestamento_2"])),
|
||||||
"test_time": int(row.get("tempo_di_test_2", defaults["tempo_di_test_2"])),
|
"test_time": int(row.get("tempo_di_test_2", defaults["tempo_di_test_2"])),
|
||||||
"test_pressure_qneg": int(row.get("pressione_di_test_delta_minimo_2", defaults["pressione_di_test_delta_minimo_2"])),
|
"test_pressure_qneg": int(row.get("pressione_di_test_delta_minimo_2", defaults["pressione_di_test_delta_minimo_2"])),
|
||||||
"test_pressure": int(row.get("pressione_di_test_2", defaults["pressione_di_test_2"])),
|
"test_pressure": int(row.get("pressione_di_test_2", defaults["pressione_di_test_2"])),
|
||||||
@ -278,7 +284,6 @@ class Recipe_Selection(Widget):
|
|||||||
description_field = self.config.get("recipe", {}).get("description_field", "descrizione").strip()
|
description_field = self.config.get("recipe", {}).get("description_field", "descrizione").strip()
|
||||||
barcode_enable_field = self.config.get("recipe", {}).get("barcode_enable_field", "verifica_codice_a_barre_abilitata").strip()
|
barcode_enable_field = self.config.get("recipe", {}).get("barcode_enable_field", "verifica_codice_a_barre_abilitata").strip()
|
||||||
|
|
||||||
|
|
||||||
with open(csv_path, "r", encoding="utf-8-sig") as f:
|
with open(csv_path, "r", encoding="utf-8-sig") as f:
|
||||||
reader = csv.DictReader(f)
|
reader = csv.DictReader(f)
|
||||||
count = 0
|
count = 0
|
||||||
@ -311,9 +316,11 @@ class Recipe_Selection(Widget):
|
|||||||
recipe.description = row.get(description_field, defaults["descrizione"])
|
recipe.description = row.get(description_field, defaults["descrizione"])
|
||||||
recipe.spec = {
|
recipe.spec = {
|
||||||
"count": len(row.get("dimensione_lotto_abilitata", defaults["dimensione_lotto_abilitata"])) and "count" not in self.unsupported_steps,
|
"count": len(row.get("dimensione_lotto_abilitata", defaults["dimensione_lotto_abilitata"])) and "count" not in self.unsupported_steps,
|
||||||
"connector": len(row.get("verifica_connettore_abilitata", defaults["verifica_connettore_abilitata"])) and "connector" not in self.unsupported_steps,
|
"connector": len(
|
||||||
|
row.get("verifica_connettore_abilitata", defaults["verifica_connettore_abilitata"])) and "connector" not in self.unsupported_steps,
|
||||||
"barcodes": len(row.get(barcode_enable_field, defaults["verifica_codice_a_barre_abilitata"])) and "barcodes" not in self.unsupported_steps,
|
"barcodes": len(row.get(barcode_enable_field, defaults["verifica_codice_a_barre_abilitata"])) and "barcodes" not in self.unsupported_steps,
|
||||||
"resistance": len(row.get("verifica_resistenza_connettore_abilitata", defaults["verifica_resistenza_connettore_abilitata"])) and "resistance" not in self.unsupported_steps,
|
"resistance": len(row.get("verifica_resistenza_connettore_abilitata",
|
||||||
|
defaults["verifica_resistenza_connettore_abilitata"])) and "resistance" not in self.unsupported_steps,
|
||||||
"screws": len(row.get("avvitatura_abilitata", defaults["avvitatura_abilitata"])) and "screws" not in self.unsupported_steps,
|
"screws": len(row.get("avvitatura_abilitata", defaults["avvitatura_abilitata"])) and "screws" not in self.unsupported_steps,
|
||||||
"instruction": len(row.get("istruzione_abilitata", defaults["istruzione_abilitata"])) and "instruction" not in self.unsupported_steps,
|
"instruction": len(row.get("istruzione_abilitata", defaults["istruzione_abilitata"])) and "instruction" not in self.unsupported_steps,
|
||||||
"leak_1": len(row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "leak_1" not in self.unsupported_steps,
|
"leak_1": len(row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "leak_1" not in self.unsupported_steps,
|
||||||
|
|||||||
@ -155,6 +155,7 @@ class Test(Widget):
|
|||||||
|
|
||||||
if "fixture_id" in self.components.keys():
|
if "fixture_id" in self.components.keys():
|
||||||
self.components["fixture_id"].new_id_signal.connect(self.load_recipe_from_rfid)
|
self.components["fixture_id"].new_id_signal.connect(self.load_recipe_from_rfid)
|
||||||
|
self.tag_loaded_recipe = self.main_window.tag_loaded_recipe
|
||||||
|
|
||||||
# TESTING
|
# TESTING
|
||||||
if "--test" in sys.argv:
|
if "--test" in sys.argv:
|
||||||
@ -622,7 +623,7 @@ class Test(Widget):
|
|||||||
psetmaxp_a = leak_test_1_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_1_step_spec.get("test_pressure_qpos", 0) / 100)
|
psetmaxp_a = leak_test_1_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_1_step_spec.get("test_pressure_qpos", 0) / 100)
|
||||||
psetminp2_a = leak_test_2_step_spec.get("settling_pressure_min_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qneg", 0) / 100)
|
psetminp2_a = leak_test_2_step_spec.get("settling_pressure_min_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qneg", 0) / 100)
|
||||||
psetmaxp2_a = leak_test_2_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qpos", 0) / 100)
|
psetmaxp2_a = leak_test_2_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qpos", 0) / 100)
|
||||||
leak_test_1_results["Running test: pressure at the end of measure"] = leak_test_1_results["Running test: pressure at the end of settling"] - leak_test_1_results["Running test: measured leak"]
|
leak_test_1_results["Running test: pressure at the end of measure"] = leak_test_1_results["Running test: pressure at the end of settling"] + leak_test_1_results["Running test: measured leak"]
|
||||||
printer_fields = self.print_step.spec
|
printer_fields = self.print_step.spec
|
||||||
context = {
|
context = {
|
||||||
# RECIPE DATA
|
# RECIPE DATA
|
||||||
@ -717,13 +718,16 @@ class Test(Widget):
|
|||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def load_recipe_from_rfid(self, data):
|
def load_recipe_from_rfid(self, data):
|
||||||
|
if data not in(None,''):
|
||||||
|
self.tag_loaded_recipe = data
|
||||||
if self.step.type == "barcode_recipe_selection":
|
if self.step.type == "barcode_recipe_selection":
|
||||||
if data is not None:
|
if data is not None:
|
||||||
self.cycle_available_steps["barcode_recipe_selection"].widget.get(data)
|
self.cycle_available_steps["barcode_recipe_selection"].widget.get(data)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# fixture removed
|
# fixture removed
|
||||||
|
self.tag_loaded_recipe = None
|
||||||
self.fail_cycle()
|
self.fail_cycle()
|
||||||
self.change_recipe()
|
self.change_recipe()
|
||||||
else:
|
|
||||||
if data is not None:
|
|
||||||
self.set_recipe_mode_barcode()
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user