Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/components/tecna_marposs_provaset_t3.py
This commit is contained in:
stten7 2025-03-21 09:03:09 +01:00
commit 12692bb95b
37 changed files with 337 additions and 110 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

View File

@ -8,7 +8,7 @@
height="590"
viewBox="0 0 902 590"
sodipodi:docname="18JA712CP.svg"
inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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,12 +26,12 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.3830508"
inkscape:cx="450.81495"
inkscape:cy="295"
inkscape:window-width="2490"
inkscape:window-height="1016"
inkscape:window-x="70"
inkscape:window-y="27"
inkscape:cx="450.45345"
inkscape:cy="294.63849"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g1" />
<g
@ -62,8 +62,8 @@
preserveAspectRatio="none"
xlink:href="img/arw-yel-down.png"
id="sensor_3"
x="341.79031"
y="208.93405"
x="726.4472"
y="271.11542"
inkscape:label="sensor_3"
inkscape:svg-dpi="1" />
</g>

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 217 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 109 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 297 KiB

View File

@ -0,0 +1,29 @@
CT~~CD,~CC^~CT~
^XA
~TA000
~JSN
^LT0
^MNW
^MTT
^PON
^PMN
^LH0,0
^JMA
^PR2,2
~SD22
^JUS
^LRN
^CI27
^PA0,1,1,0
^XZ
^XA
^MMT
^PW679
^LL200
^LS0
^FO24,83^GE96,96,48^FS
^FO184,83^GE96,96,48^FS
^FO344,83^GE96,96,48^FS
^FO504,83^GE96,96,48^FS
^PQ1,0,1,Y
^XZ

View File

@ -0,0 +1,33 @@
CT~~CD,~CC^~CT~
^XA
~TA000
~JSN
^LT0
^MNW
^MTT
^PON
^PMN
^LH0,0
^JMA
^PR2,2
~SD20
^JUS
^LRN
^CI27
^PA0,1,1,0
^XZ
^XA
^MMT
^PW320
^LL1039
^LS0
^FT37,57^A0N,24,23^FH\^CI28^FD{RECIPE}^FS^CI27
^FT250,38^A0N,16,15^FH\^CI28^FDVEROX^FS^CI27
^FT34,92^A0N,24,23^FH\^CI28^FDFED^FS^CI27
^BY2,3,58^FT37,173^BCN,,Y,N
^FH\^FD>:{RECIPE}^FS
^BY2,3,54^FT82,282^BCN,,Y,N
^FH\^FD>:{SN}^FS
^FT34,357^A0N,24,23^FH\^CI28^FD{DATE}{SN}^FS^CI27
^PQ1,0,1,Y
^XZ

View File

@ -0,0 +1,18 @@
CT~~CD,~CC^~CT~
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR2,2~SD25^JUS^LRN^CI0^XZ
^XA
^MMT
^PW325
^LL1119
^LS0
^FT293,694^A0I,25,21^FH\^FD{DD}/{MO}/{YY}^FS
^FT145,694^A0I,25,21^FH\^FD{HH}:{MI}:{SS}^FS
^FT291,1032^A0I,25,24^FH\^FDNumero Disegno^FS
^FT293,725^A0I,25,24^FH\^FDData/Ora Prova^FS
^FT293,771^A0I,25,24^FH\^FDN. Pezzo:^FS
^FT185,770^A0I,25,24^FH\^FD{SN5}^FS
^BY120,120^FT289,883^BXI,6,200,0,0,1,~
^FH\^FD{PART}{MO}{YY}{SN5}^FS
^FT291,832^A0I,25,24^FH\^FD{PART}{MO}{YY}{SN5}^FS
^LRY^FO144,863^GB168,0,163^FS^LRN
^PQ1,0,1,Y^XZ

View File

@ -1,34 +0,0 @@
CT~~CD,~CC^~CT~
^XA
~TA000
~JSN
^LT0
^MNW
^MTT
^PON
^PMN
^LH0,0
^JMA
^PR2,2
~SD20
^JUS
^LRN
^CI27
^PA0,1,1,0
^XZ
^XA
^MMT
^PW320
^LL1039
^LS0
^FT9,46^A0N,24,23^FH\^CI28^FD{RECIPE}^FS^CI27
^FT250,38^A0N,16,15^FH\^CI28^FDVEROX^FS^CI27
^FT9,80^A0N,24,23^FH\^CI28^FDFED^FS^CI27
^BY2,3,58^FT65,166^BCN,,Y,N
^FH\^FD>:{RECIPE}^FS
^BY2,3,54^FT131,259^BCN,,Y,N
^FH\^FD>:{SN}^FS
^FT9,316^A0N,24,23^FH\^CI28^FD{DATE}^FS^CI27
^FT109,321^A0N,24,23^FH\^CI28^FD{SN}^FS^CI27
^PQ1,0,1,Y
^XZ

View File

@ -47,7 +47,7 @@
^FT207,888^A0N,25,25^FH\^CI28^FD{TSET} s^FS^CI27
^FT145,705^A0N,25,25^FH\^CI28^FD{PTEST} mbar^FS^CI27
^FT31,236^BXN,6,200,0,0,1,_,1
^FH\^FD{BCODE}^FS
^FT29,287^A0N,25,25^FH\^CI28^FD{BCODE}^FS^CI27
^FH\^FD{PART}{MO}{YY}{SN5}^FS
^FT29,287^A0N,25,25^FH\^CI28^FD{PART}{MO}{YY}{SN5}^FS^CI27
^PQ1,0,1,Y
^XZ

View File

@ -92,8 +92,8 @@ settling_pressure_min_percent: 5
settling_pressure_max_percent: 5
test_pressure: 7000
test_time: 10
test_pressure_qpos: 10 #Q+ Upper test leak limit
test_pressure_qneg: 30 #Q- Lower test leak limit
test_pressure_qpos: 22 #Q+ Upper test leak limit
test_pressure_qneg: 32 #Q- Lower test leak limit
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
flush_time: 1

View File

@ -20,7 +20,7 @@ discard_box: absent
#enforce_piece_removal: yes
[tecna_t3]
port: /dev/ttyUSB0
port: /dev/ttyUSB1
model: t3l
[label_printer]
@ -34,7 +34,7 @@ risoluzione:203
id: USB-5862,BID#0
[fixture_rfid]
port: ttyUSB1 #correct way to declare usb in linux
port: ttyUSB0 #correct way to declare usb in linux
[recipe]
recipe_name_field: codice_ricetta
@ -73,8 +73,8 @@ pressione_di_test_delta_massimo_2: 30
tempo_svuotamento_2: 0
pressione_svuotamento_2: 100
canale_di_prova_2: 2
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
pid_pressure_correction: 105
modello_etichetta: Errecinque_standard.prn
pid_pressure_correction: 98
barcode_format: {PART}{MO}{YY}{SN5}
[autotest_leak]
@ -85,10 +85,10 @@ filling_time: 10
settling_time: 10
settling_pressure_min_percent: 5
settling_pressure_max_percent: 5
test_pressure: 7000
test_pressure: 5900
test_time: 10
test_pressure_qpos: 5 #Q+ Upper test leak limit
test_pressure_qneg: 17 #Q- Lower test leak limit
test_pressure_qpos: 3.5 #Q+ Upper test leak limit
test_pressure_qneg: 6.5 #Q- Lower test leak limit
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
flush_time: 1

View File

@ -98,7 +98,7 @@ settling_pressure_max_percent: 5
test_pressure: 7000
test_time: 10
test_pressure_qpos: 8 #Q+ Upper test leak limit
test_pressure_qneg: 12 #Q- Lower test leak limit
test_pressure_qneg: 13 #Q- Lower test leak limit
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
flush_time: 1

View File

@ -16,7 +16,7 @@ class Os_Label_Printer(Component):
def __init__(self, config=None, name=None):
super().__init__(config=config, name=name, threaded=False)
self.simulate = False
if "--sim-os-label-printer" in sys.argv:
if "--sim-printer" in sys.argv:
self.simulate = True
def config_changed(self):

View File

@ -302,8 +302,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
recipe_barcode = f"j{recipe.part_number}"[:16].encode("ascii")
recipe_barcode += b"\x00" * (24 - len(recipe_barcode))
test_flags = 0b0110100001010000 if (step.spec.get("autotest", False) in ["ko_check"]) else 0b0110000001010000
pid_mode_text = "AUTO"
#pid_mode_text = step.spec["pid_mod_config"] # Get the selected text from the combobox
pid_mode_text = step.spec.get("pid_mod_config","AUTO") # Get the selected text from the combobox
pid_mode_value = { # Mapping of text to numeric values
"AUTO": 5,
"FAST": 0,

View File

@ -55,7 +55,7 @@ init_db()
# register or reset admin
admin = Users.get_user("ADMIN")
if admin is None or not admin.is_admin:
Users.register(username="ADMIN", password="123123", roles=["admin"])
Users.register(username="ADMIN", password="78900987", roles=["admin"])
# register or reset user
Users.register(username="USER", password="user")

View File

@ -255,9 +255,11 @@ try:
if session is not None:
if session.is_admin:
self.main_window.admin_m.menuAction().setVisible(True)
self.main_window.tag_a.setVisible(True)
else:
self.main_window.admin_m.menuAction().setVisible(False)
# open test
self.main_window.tag_a.setVisible(False)
# open test
self.main_window.open_tab(Test(self.config, self.components, self))
self.main_window.centralWidget().request_autotest("login")
else:

View File

@ -32,7 +32,7 @@ class Login(Widget):
# TESTING
if "--auto-login-admin" in sys.argv:
self.user_cb.setCurrentText("ADMIN")
self.password_le.setText("123123")
self.password_le.setText("78900987")
elif "--auto-login-user" in sys.argv or "--test" in sys.argv:
self.user_cb.setCurrentText("USER")
self.password_le.setText("user")

View File

@ -170,7 +170,10 @@ class Test(Widget):
self.autotesting_reason = None
self.autotest_cycle_steps = None
if "--no-autotest" not in sys.argv:
self.autotest_period = int(8.5 * 60 * 60 * 1000) # 8.5 HOURS
if "--test-autotest" in sys.argv:
self.autotest_period = int(60 * 1000) # 1 min
else:
self.autotest_period = int(8.5 * 60 * 60 * 1000) # 8.5 HOURS
# self.autotest_period = 12 * 60 * 60 * 1000 # 12 HOURS
# if not self.config["autotest_done"]:
# self.request_autotest("init")
@ -335,6 +338,7 @@ class Test(Widget):
if self.autotest_request is not False and self.autotest_cycle_steps is not None and not self.autotesting and (self.cycle_index == -1 or self.cycle_index + 1 >= len(self.cycle_steps)):
# if autotest was requested
# and if cycle_steps is not started or has ended
self.cycle_index = -1
self.autotesting = True
self.autotesting_reason = self.autotest_request
self.autotest_request = False
@ -808,7 +812,7 @@ class Test(Widget):
"OPERATOR": str(archived.user.username),
"BADGE_NUM": str(archived.user.badge_number),
#BARCODE
"BCODE": str(self.step.spec["barcode"]),
"BCODE": str(self.step.spec.get("barcode","")),
# RESULT
"RESULT": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO") + str(" FORZATO" if self.data.get("overridden", False) else ""),
@ -841,7 +845,7 @@ class Test(Widget):
def print_extra_labels(self):
# PRINT EXTRA LABELS IF NEEDED (BEFORE LEAK TEST)
if "extra_label_printer" in self.components.keys() and self.print_step is not None:
if "extra_label_printer" in self.components.keys() and self.print_step is not None and self.autotesting is False:
printer_fields = self.print_step.spec
if len(printer_fields["extra_label"]) > 0:
labels = printer_fields["extra_label"].split(",")

View File

@ -22,7 +22,7 @@ class Test_Admin_Permission(Widget):
self.cancel_b.clicked.connect(self.cancel)
# TESTING
if "--auto-accept-test-admin-permission" in sys.argv or "--test" in sys.argv:
self.password_le.setText("123123")
self.password_le.setText("78900987")
self.test_timer = QTimer()
self.test_timer.setSingleShot(True)
self.test_timer.timeout.connect(self.continue_b.clicked.emit)

View File

@ -58,7 +58,7 @@ class Test_Instructions(Test_Test):
self.svg_root = etree.parse(svg_path)
self.svg_str = etree.tostring(self.svg_root)
self.svg_str=etree.tostring(self.svg_root)
self.expected_input_state = True if step.step_type == "instruction" or "instruction_extra" else False
self.expected_input_state = True if step.step_type in ("instruction","instruction_extra") else False
self.monitored_ids=self.svg_root.xpath(f'''.//*[starts-with(@id, 'sensor_')]''')
self.warning_ids=self.svg_root.xpath(f'''.//*[starts-with(@id, 'warning_')]''')

View File

@ -103,7 +103,10 @@ class Test_Leak(Test_Test):
self.test_num_l.setText("2/2")
else:
self.test_num_l.setText("1/1")
self.template_print_l.setText(f"{self.parent.print_template}")
if self.step.spec.get("autotest", False):
self.template_print_l.setText(f"AUTOTEST")
else:
self.template_print_l.setText(f"{self.parent.print_template}")
self.recipe_pressure_l.setText(f"{self.step.spec['test_pressure']}")
self.leak_min_l.setText(f"{self.step.spec['test_pressure_qneg']}")
self.leak_max_l.setText(f"{self.step.spec['test_pressure_qpos']}")
@ -144,7 +147,8 @@ class Test_Leak(Test_Test):
super().visualize(None, img=self.status_imgs_full["calibrated-leak"])
else:
self.display_text(text="COLLEGARE GLI ATTACCHI PNEUMATICI E PREMERE START PER INIZIARE LA PROVA TENUTA")
self.template_print_l.setVisible(True)
self.template_label.setVisible(True)
if self.simulate:
QApplication.processEvents()
time.sleep(2)