wip
This commit is contained in:
parent
c450ab75c1
commit
1edfb24415
@ -556,7 +556,7 @@ class Vision(Component):
|
||||
zone = self.zones[item_name]
|
||||
items[str(item_name)] = {
|
||||
"center": zone["center"],
|
||||
"size": [s + 100 for s in zone["size"]],
|
||||
"size": zone["size"],
|
||||
"shape": zone["shape"],
|
||||
**style,
|
||||
"border_color": Qt.green if item["ok"] else Qt.red,
|
||||
|
||||
@ -61,26 +61,6 @@ if admin is None or not admin.is_admin:
|
||||
Users.register(username="USER", password="user")
|
||||
|
||||
|
||||
# Recipes.replace(
|
||||
# id=0,
|
||||
# name="Ferrari 923578",
|
||||
# client="Ferrari",
|
||||
# part_number="923578",
|
||||
# spec={"steps": []},
|
||||
# description="Tubo plastica doppia biforcazione con termorestringente centrale",
|
||||
# archived=False,
|
||||
# ).execute()
|
||||
# Recipes.replace(
|
||||
# id=1,
|
||||
# name="BLOW-BY 5802814210",
|
||||
# client="",
|
||||
# part_number="5802814210",
|
||||
# spec={"steps": []},
|
||||
# description="Tubo blow-by",
|
||||
# archived=False,
|
||||
# ).execute()
|
||||
|
||||
|
||||
if True:
|
||||
# crud_db must be imported after db and models_reference are available
|
||||
from .crud_db import Crud_DB
|
||||
|
||||
@ -77,7 +77,7 @@ try:
|
||||
self.config = ConfigReader()
|
||||
# INIT COMPONENT
|
||||
self.components_specs = {
|
||||
# "archive_synchronizer": {"c": ArchiveSynchronizer},
|
||||
"archive_synchronizer": {"c": ArchiveSynchronizer},
|
||||
"galaxy_camera": {"c": GalaxyCamera, "k": {"paused": True}},
|
||||
"label_printer": {"c": Os_Label_Printer, "t": False},
|
||||
"neo_pixels": {"c": NeoPixels, "t": False},
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import os
|
||||
import sys
|
||||
from glob import iglob
|
||||
from glob import glob
|
||||
|
||||
from lib.db import Recipes, Users
|
||||
from PyQt5.QtCore import QTimer, pyqtSignal
|
||||
@ -51,8 +52,8 @@ class Recipe_Selection(Widget):
|
||||
"spec": {
|
||||
"step_editors": {
|
||||
"vision": {
|
||||
# "recipe": iglob("*.ini", root_dir="./config/vision/recipes/"), # only in python3.10
|
||||
"recipe": list(iglob("./config/vision/recipes/*.ini")),
|
||||
# "recipe": sorted(glob("*.ini", root_dir="./config/vision/recipes/") + glob("*.INI", root_dir="./config/vision/recipes/")), # only in python3.10
|
||||
"recipe": sorted(map(os.path.basename, glob("./config/vision/recipes/*.ini") + glob("./config/vision/recipes/*.INI"))),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -48,7 +48,6 @@ class Test(Widget):
|
||||
"print": Test_Assembly(self.select_step_img("print"), u"STAMPA ETICHETTA IN CORSO"),
|
||||
"select_recipe": Test_Assembly(None, u"SELEZIONARE IL CODICE DA COLLAUDARE", Recipe_Selection()),
|
||||
"vision": Test_Assembly(None, u"VERIFICARE CONTROLLO CON TELECAMERA", Test_Vision(components=self.components, recipe=self.recipe, step=self.step)),
|
||||
"wait_start": Test_Assembly(self.select_step_img("wait_start"), u"PREMERE START PER INIZIARE PROVA TENUTA"),
|
||||
"wait": Test_Assembly(self.select_step_img("wait"), u"ATTENDERE - PAUSA INTER CICLO"),
|
||||
None: Test_Assembly(self.select_step_img("warning"), u"ATTENZIONE - LA RICETTA SELEZIONATA NON CONTIENE FASI DI TEST"),
|
||||
}
|
||||
@ -296,7 +295,7 @@ class Test(Widget):
|
||||
"TTEST": str(self.data.get("leak", [{}, {}])[0].get("step", {}).get("spec", {}).get("test_time", "-")),
|
||||
"MAXLEAK": str(self.data.get("leak", [{}, {}])[0].get("step", {}).get("spec", {}).get("test_pressure_max_delta", "-")),
|
||||
"PTESTMIN": str(self.data.get("leak", [{}, {}])[0].get("step", {}).get("spec", {}).get("test_pressure_min_delta", "-")),
|
||||
"RESULT_L1": "ESITO",
|
||||
"RESULT_L1": "ESITO" + str(" FORZATO" if self.data.get("overridden", False) else ""),
|
||||
"RESULT_L2": str("CONFORME" if self.data.get("leak", [{}, {}])[0].get("results", {}).get("ok", False) else "SCARTO"),
|
||||
}
|
||||
self.components["label_printer"].print_label("EtichettaR5", context=context)
|
||||
|
||||
@ -26,8 +26,7 @@ class Test_Barcodes(Test_Test):
|
||||
# super().stop()
|
||||
|
||||
def get(self, data=None, override=False):
|
||||
if self.ok_timer.isActive():
|
||||
# avoid proccessing if completed
|
||||
if self.done: # avoid proccessing if completed
|
||||
return
|
||||
if data is None:
|
||||
data = self.barcodes_le.text()
|
||||
|
||||
@ -32,6 +32,12 @@
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Stato</string>
|
||||
</property>
|
||||
|
||||
@ -15,7 +15,6 @@ class Test_Leak(Test_Test):
|
||||
self.components["tecna_t3"].write_recipe(self.recipe, self.step)
|
||||
self.get_connection = self.components["tecna_t3"].out.connect(self.get)
|
||||
self.components["tecna_t3"].resume()
|
||||
self.components["tecna_t3"].start_test()
|
||||
|
||||
def stop(self):
|
||||
# disable tes loop
|
||||
@ -25,8 +24,7 @@ class Test_Leak(Test_Test):
|
||||
super().stop()
|
||||
|
||||
def get(self, data=None, override=False):
|
||||
if self.ok_timer.isActive():
|
||||
# avoid proccessing if completed
|
||||
if self.done: # avoid proccessing if completed
|
||||
return
|
||||
if data is None or data[-1] is None:
|
||||
super().get(None, override=override)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>322</width>
|
||||
<width>244</width>
|
||||
<height>456</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -475,32 +475,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<widget class="QPushButton" name="save_b">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>SALVA IMMAGINE</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QPushButton" name="override_b">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>FORZA ACCETTAZIONE</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
@ -1150,6 +1124,19 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="override_b">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>FORZA ACCETTAZIONE</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@ -21,6 +21,7 @@ class Test_Test(Widget):
|
||||
self.ok_counter = 0
|
||||
self.ok_counter_limit = 1
|
||||
# setup controls
|
||||
self.done = False
|
||||
self.ok_timer = QTimer()
|
||||
self.ok_timer.setSingleShot(True)
|
||||
self.ok_timer.setInterval(2000)
|
||||
@ -65,6 +66,8 @@ class Test_Test(Widget):
|
||||
self.recipe = recipe
|
||||
self.step = step
|
||||
self.ok_counter = 0
|
||||
self.done = False
|
||||
self.override_b.setEnabled(True)
|
||||
self.visualize()
|
||||
# start test
|
||||
self.start_time = timing()
|
||||
@ -78,8 +81,7 @@ class Test_Test(Widget):
|
||||
pass
|
||||
|
||||
def get(self, data=None, override=False, fail=False):
|
||||
if self.ok_timer.isActive() or self.ko_timer.isActive():
|
||||
# avoid proccessing if completed
|
||||
if self.done: # avoid proccessing if completed
|
||||
return
|
||||
if data is None:
|
||||
data = self.last if self.last is not None else {}
|
||||
@ -113,9 +115,13 @@ class Test_Test(Widget):
|
||||
self.ok_counter = 0
|
||||
# check if completed
|
||||
if fail:
|
||||
self.done = True
|
||||
self.override_b.setEnabled(False)
|
||||
self.stop()
|
||||
self.ko_timer.start()
|
||||
elif self.ok_counter >= self.ok_counter_limit:
|
||||
self.done = True
|
||||
self.override_b.setEnabled(False)
|
||||
self.stop()
|
||||
self.ok_timer.start()
|
||||
self.visualize(self.last)
|
||||
|
||||
@ -22,7 +22,8 @@ class Test_Vision(Test_Test):
|
||||
self.components["galaxy_camera"].add_sources({"test_vision": self.request_frame})
|
||||
self.request_frame_connection = self.components["vision"].out.connect(self.request_frame) # request new frame as soon as vision finishes
|
||||
self.get_connection = self.components["vision"].out.connect(self.get)
|
||||
self.components["vision"].set_recipe(self.step.spec.get("recipe", "1.ini"))
|
||||
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
||||
self.components["vision"].set_recipe(self.step.spec.get("recipe", None))
|
||||
self.components["vision"].resume()
|
||||
self.components["galaxy_camera"].resume()
|
||||
self.request_frame.emit() # request first frame
|
||||
@ -37,8 +38,7 @@ class Test_Vision(Test_Test):
|
||||
super().stop()
|
||||
|
||||
def get(self, data=None, override=False):
|
||||
if self.ok_timer.isActive():
|
||||
# avoid proccessing if completed
|
||||
if self.done: # avoid proccessing if completed
|
||||
return
|
||||
if data is None or data[-1] is None:
|
||||
super().get(None, override=override)
|
||||
@ -72,6 +72,15 @@ class Test_Vision(Test_Test):
|
||||
))
|
||||
else:
|
||||
img = self.status_imgs_full[None]
|
||||
if self.done:
|
||||
if data.get("overridden", False):
|
||||
self.components["neo_pixels"].set_all_pixel_color("#ffff00")
|
||||
elif self.ok_counter >= self.ok_counter_limit:
|
||||
self.components["neo_pixels"].set_all_pixel_color("#00ff00")
|
||||
else:
|
||||
self.components["neo_pixels"].set_all_pixel_color("#ff0000")
|
||||
else:
|
||||
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
||||
super().visualize(data, img=img)
|
||||
|
||||
def save_last(self):
|
||||
@ -81,4 +90,11 @@ class Test_Vision(Test_Test):
|
||||
def emit_ok(self):
|
||||
self.last.pop("frame", None)
|
||||
self.last.pop("render", None)
|
||||
self.ok.emit(self.last)
|
||||
super().emit_ok()
|
||||
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
||||
|
||||
def emit_ko(self):
|
||||
self.last.pop("frame", None)
|
||||
self.last.pop("render", None)
|
||||
super().emit_ko()
|
||||
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user