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):
|
||||||
|
|||||||
@ -60,4 +60,4 @@ class Login(Widget):
|
|||||||
def show_osk(self):
|
def show_osk(self):
|
||||||
self.password_le.setFocus()
|
self.password_le.setFocus()
|
||||||
if platform.system().lower() == 'windows':
|
if platform.system().lower() == 'windows':
|
||||||
subprocess.Popen(["open_osk.bat"]) # OPEN ON SCREEN KEYBOARD
|
subprocess.Popen(["open_osk.bat"]) # OPEN ON SCREEN KEYBOARD
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class Recipe_Selection(Widget):
|
|||||||
global noner
|
global noner
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.config = config
|
self.config = config
|
||||||
self.second_leak_test_enabled=self.config["hardware_config"]["second_leak_test"] == "present"
|
self.second_leak_test_enabled = self.config["hardware_config"]["second_leak_test"] == "present"
|
||||||
self.defaults = self.config.get("recipes_defaults", noner)
|
self.defaults = self.config.get("recipes_defaults", noner)
|
||||||
self.unsupported_steps = unsupported_steps
|
self.unsupported_steps = unsupported_steps
|
||||||
if not self.second_leak_test_enabled:
|
if not self.second_leak_test_enabled:
|
||||||
@ -57,8 +57,8 @@ class Recipe_Selection(Widget):
|
|||||||
}
|
}
|
||||||
filters = {"archived": False}
|
filters = {"archived": False}
|
||||||
step_defaults = self.read_steps(self.config.get("recipes_defaults", noner), noner)
|
step_defaults = self.read_steps(self.config.get("recipes_defaults", noner), noner)
|
||||||
custom_label_folder=f"config/label_templates/{str(self.config.machine_id)}/"
|
custom_label_folder = f"config/label_templates/{str(self.config.machine_id)}/"
|
||||||
standard_label_folder=f"config/label_templates/"
|
standard_label_folder = f"config/label_templates/"
|
||||||
if os.path.exists(custom_label_folder):
|
if os.path.exists(custom_label_folder):
|
||||||
label_folder = custom_label_folder
|
label_folder = custom_label_folder
|
||||||
else:
|
else:
|
||||||
@ -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)
|
||||||
@ -156,7 +158,7 @@ class Recipe_Selection(Widget):
|
|||||||
|
|
||||||
def check_selected(self, selected=None):
|
def check_selected(self, selected=None):
|
||||||
if selected is not None and len(selected) == 1:
|
if selected is not None and len(selected) == 1:
|
||||||
selected = selected[0] - 1 # - 1 because rn starts from 1 (filters line)
|
selected = selected[0] - 1 # - 1 because rn starts from 1 (filters line)
|
||||||
if selected >= 0 and selected < len(self.crud.data_index):
|
if selected >= 0 and selected < len(self.crud.data_index):
|
||||||
selected = self.crud.data_index[selected]
|
selected = self.crud.data_index[selected]
|
||||||
if selected is not None:
|
if selected is not None:
|
||||||
@ -174,8 +176,8 @@ class Recipe_Selection(Widget):
|
|||||||
if self.selected is not None:
|
if self.selected is not None:
|
||||||
self.ok.emit(self.crud.db.table_model.get_by_id(self.selected))
|
self.ok.emit(self.crud.db.table_model.get_by_id(self.selected))
|
||||||
|
|
||||||
def get_def(self,dict,key):
|
def get_def(self, dict, key):
|
||||||
val=dict.get(key,self.defaults[key])
|
val = dict.get(key, self.defaults[key])
|
||||||
return val if val != "" else self.defaults[key]
|
return val if val != "" else self.defaults[key]
|
||||||
|
|
||||||
def read_steps(self, row, defaults=None):
|
def read_steps(self, row, defaults=None):
|
||||||
@ -183,7 +185,7 @@ class Recipe_Selection(Widget):
|
|||||||
global noner
|
global noner
|
||||||
defaults = self.config.get("recipes_defaults", noner)
|
defaults = self.config.get("recipes_defaults", noner)
|
||||||
barcode_serial_field = self.config.get("recipe", {}).get("barcode_serial_field", "codice_a_barre").strip()
|
barcode_serial_field = self.config.get("recipe", {}).get("barcode_serial_field", "codice_a_barre").strip()
|
||||||
decsep= locale.localeconv()["decimal_point"]
|
decsep = locale.localeconv()["decimal_point"]
|
||||||
rcsv = row.get("r nominale", defaults["r nominale"]).replace(" ", "").replace(",", decsep).replace("Ω", "").replace("?", "")
|
rcsv = row.get("r nominale", defaults["r nominale"]).replace(" ", "").replace(",", decsep).replace("Ω", "").replace("?", "")
|
||||||
if rcsv == "":
|
if rcsv == "":
|
||||||
rcsv = "999"
|
rcsv = "999"
|
||||||
@ -192,7 +194,7 @@ class Recipe_Selection(Widget):
|
|||||||
"count": {
|
"count": {
|
||||||
"amount": row.get("dimensione_lotto", defaults["dimensione_lotto"]),
|
"amount": row.get("dimensione_lotto", defaults["dimensione_lotto"]),
|
||||||
"warning_img": row.get("immagine_warning", ""),
|
"warning_img": row.get("immagine_warning", ""),
|
||||||
"require_discard_piece": row.get("richiedi_inserimento_scarto",defaults["richiedi_inserimento_scarto"])
|
"require_discard_piece": row.get("richiedi_inserimento_scarto", defaults["richiedi_inserimento_scarto"])
|
||||||
},
|
},
|
||||||
"connector": {
|
"connector": {
|
||||||
"connector": row.get("connettore", defaults["connettore"]),
|
"connector": row.get("connettore", defaults["connettore"]),
|
||||||
@ -203,8 +205,8 @@ class Recipe_Selection(Widget):
|
|||||||
"resistance": {
|
"resistance": {
|
||||||
"scale": locale.atof(row.get("scala_resistenza", defaults["scala_resistenza"])),
|
"scale": locale.atof(row.get("scala_resistenza", defaults["scala_resistenza"])),
|
||||||
"expected": locale.atof(rcsv),
|
"expected": locale.atof(rcsv),
|
||||||
"tolerance_pos": locale.atof(self.get_def(row,"tolleranza_resistenza_pos")),
|
"tolerance_pos": locale.atof(self.get_def(row, "tolleranza_resistenza_pos")),
|
||||||
"tolerance_neg": locale.atof(self.get_def(row,"tolleranza_resistenza_neg")),
|
"tolerance_neg": locale.atof(self.get_def(row, "tolleranza_resistenza_neg")),
|
||||||
},
|
},
|
||||||
"screws": {
|
"screws": {
|
||||||
"quantity": row.get("viti", defaults["viti"])
|
"quantity": row.get("viti", defaults["viti"])
|
||||||
@ -214,9 +216,11 @@ class Recipe_Selection(Widget):
|
|||||||
"pre_filling_time": int(row.get("tempo_pre_riempimento", defaults["tempo_pre_riempimento"])),
|
"pre_filling_time": int(row.get("tempo_pre_riempimento", defaults["tempo_pre_riempimento"])),
|
||||||
"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"])),
|
||||||
@ -249,7 +255,7 @@ class Recipe_Selection(Widget):
|
|||||||
},
|
},
|
||||||
"print": {
|
"print": {
|
||||||
"template": row.get(print_template_field, defaults["modello_etichetta"]),
|
"template": row.get(print_template_field, defaults["modello_etichetta"]),
|
||||||
"labeltxt_1": row.get("testo_etich_1",""),
|
"labeltxt_1": row.get("testo_etich_1", ""),
|
||||||
"labeltxt_2": row.get("testo_etich_2", ""),
|
"labeltxt_2": row.get("testo_etich_2", ""),
|
||||||
"labeltxt_3": row.get("testo_etich_3", ""),
|
"labeltxt_3": row.get("testo_etich_3", ""),
|
||||||
"labeltxt_4": row.get("testo_etich_4", ""),
|
"labeltxt_4": row.get("testo_etich_4", ""),
|
||||||
@ -278,12 +284,11 @@ 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
|
||||||
for ucrow in reader:
|
for ucrow in reader:
|
||||||
row= dict((k.lower(), v) for k, v in ucrow.items())
|
row = dict((k.lower(), v) for k, v in ucrow.items())
|
||||||
recipe_name = row.get(recipe_name_field, defaults["codice_ricetta"])
|
recipe_name = row.get(recipe_name_field, defaults["codice_ricetta"])
|
||||||
steps_specs = self.read_steps(row, defaults=defaults)
|
steps_specs = self.read_steps(row, defaults=defaults)
|
||||||
try:
|
try:
|
||||||
@ -299,7 +304,7 @@ class Recipe_Selection(Widget):
|
|||||||
recipe_is_new = True
|
recipe_is_new = True
|
||||||
for step_name, step_spec in steps_specs.items():
|
for step_name, step_spec in steps_specs.items():
|
||||||
step = steps[step_name]
|
step = steps[step_name]
|
||||||
#step.type = re.sub(r"^(.*)_[0-9]+$", r"\1", step_name)
|
# step.type = re.sub(r"^(.*)_[0-9]+$", r"\1", step_name)
|
||||||
step.type = step_name
|
step.type = step_name
|
||||||
step.spec = step_spec
|
step.spec = step_spec
|
||||||
if recipe_is_new:
|
if recipe_is_new:
|
||||||
@ -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 self.step.type == "barcode_recipe_selection":
|
if data not in(None,''):
|
||||||
if data is not None:
|
self.tag_loaded_recipe = data
|
||||||
self.cycle_available_steps["barcode_recipe_selection"].widget.get(data)
|
if self.step.type == "barcode_recipe_selection":
|
||||||
|
if data is not None:
|
||||||
|
self.cycle_available_steps["barcode_recipe_selection"].widget.get(data)
|
||||||
else:
|
else:
|
||||||
# fixture removed
|
pass
|
||||||
self.fail_cycle()
|
|
||||||
self.change_recipe()
|
|
||||||
else:
|
else:
|
||||||
if data is not None:
|
# fixture removed
|
||||||
self.set_recipe_mode_barcode()
|
self.tag_loaded_recipe = None
|
||||||
|
self.fail_cycle()
|
||||||
|
self.change_recipe()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user