wip
This commit is contained in:
parent
cc59c09fd5
commit
fa9921c9bc
@ -2,7 +2,7 @@
|
|||||||
tecna_t3: present
|
tecna_t3: present
|
||||||
neo_pixels: present
|
neo_pixels: present
|
||||||
galaxy_camera: present
|
galaxy_camera: present
|
||||||
multimeter: absent
|
multicomp: present
|
||||||
|
|
||||||
[galaxy_camera]
|
[galaxy_camera]
|
||||||
horizontal_resolution: 2448
|
horizontal_resolution: 2448
|
||||||
@ -45,6 +45,10 @@ admin_pin: 603
|
|||||||
modify_pin: 603
|
modify_pin: 603
|
||||||
select_pin: 603
|
select_pin: 603
|
||||||
|
|
||||||
|
[multicomp]
|
||||||
|
port: COM3
|
||||||
|
baudrate: 115200
|
||||||
|
|
||||||
[neo_pixels]
|
[neo_pixels]
|
||||||
port: COM1
|
port: COM1
|
||||||
baudrate: 9600
|
baudrate: 9600
|
||||||
|
|||||||
@ -1,2 +1,5 @@
|
|||||||
[tecna_t3]
|
[tecna_t3]
|
||||||
port: /dev/ttyUSB0
|
port: /dev/ttyUSB0
|
||||||
|
|
||||||
|
[multicomp]
|
||||||
|
port: /dev/ttyUSB1
|
||||||
|
|||||||
@ -2,11 +2,12 @@ from .archive_synchronizer import ArchiveSynchronizer
|
|||||||
from .consumer import Consumer
|
from .consumer import Consumer
|
||||||
from .galaxy_camera import GalaxyCamera
|
from .galaxy_camera import GalaxyCamera
|
||||||
from .modbus_component import ModbusComponent
|
from .modbus_component import ModbusComponent
|
||||||
|
from .multicomp_730424 import Multicomp730424
|
||||||
from .neo_pixels import NeoPixels
|
from .neo_pixels import NeoPixels
|
||||||
from .os_label_printer import Os_Label_Printer
|
from .os_label_printer import Os_Label_Printer
|
||||||
from .remote_api import RemoteAPI
|
from .remote_api import RemoteAPI
|
||||||
from .serial_label_printer import Serial_Label_Printer
|
from .serial_label_printer import Serial_Label_Printer
|
||||||
from .tecna_marposs_provaset_t3p import TecnaMarpossProvasetT3P
|
from .tecna_marposs_provaset_t3p import TecnaMarpossProvasetT3P
|
||||||
from .test_component import TestComponent
|
from .test_component import TestComponent
|
||||||
#from .vision import Vision
|
from .vision import Vision
|
||||||
from .vision_saver import VisionSaver
|
from .vision_saver import VisionSaver
|
||||||
|
|||||||
@ -1,33 +1,70 @@
|
|||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
if "--sim-multimeter" in sys.argv:
|
if "--sim-serial" in sys.argv:
|
||||||
from components.dummies.serial import serial
|
from components.dummies.serial import serial
|
||||||
else:
|
else:
|
||||||
import serial
|
import serial
|
||||||
|
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
|
||||||
|
|
||||||
from .component import Component
|
from .component import Component
|
||||||
|
|
||||||
|
|
||||||
class SerialMultimeter(Component):
|
class Multicomp730424(Component):
|
||||||
def __init__(self, config=None, name=None):
|
def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True):
|
||||||
super().__init__(config=config, name=name, threaded=False)
|
self.conn = None
|
||||||
|
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||||
|
|
||||||
def write(self, command):
|
def config_changed(self):
|
||||||
try:
|
self.port = self.config[self.name]["port"]
|
||||||
conn = serial.Serial(
|
self.baudrate = int(self.config[self.name]["baudrate"])
|
||||||
self.address,
|
self.stopbits = getattr(serial, self.config[self.name].get("stopbits", "stopbits_one").upper())
|
||||||
|
self.parity = getattr(serial, self.config[self.name].get("parity", "parity_none").upper())
|
||||||
|
self.bytesize = getattr(serial, self.config[self.name].get("bytesize", "eightbits").upper())
|
||||||
|
if self.conn is not None:
|
||||||
|
self.conn.close()
|
||||||
|
self.conn = serial.Serial(
|
||||||
|
self.port,
|
||||||
baudrate=self.baudrate,
|
baudrate=self.baudrate,
|
||||||
stopbits=self.stopbits,
|
stopbits=self.stopbits,
|
||||||
parity=self.parity,
|
parity=self.parity,
|
||||||
bytesize=self.bytesize,
|
bytesize=self.bytesize,
|
||||||
)
|
)
|
||||||
conn.write(bytes(command, encoding="ascii"))
|
|
||||||
conn.close()
|
def set_resistance_scale(self, resistance):
|
||||||
except serial.serialutil.SerialException as e:
|
self.write(f"CONF:RES {resistance}")
|
||||||
QMessageBox.critical(
|
|
||||||
None,
|
def read(self):
|
||||||
"Errore Connessione Multimetro",
|
try:
|
||||||
"Non e stato possibile connettersi al multimetro digitale.\n Verificare che lo strumento sia acceso e collegato\nErrore: " + str(e)
|
response = self.conn.readline()
|
||||||
)
|
except serial.serialutil.SerialException:
|
||||||
|
self.log.exception(traceback.format_exc())
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
decoded = response.decode("ascii")
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
return response
|
||||||
|
try:
|
||||||
|
value = float(decoded)
|
||||||
|
except ValueError:
|
||||||
|
return decoded
|
||||||
|
return value
|
||||||
|
|
||||||
|
def write(self, command):
|
||||||
|
try:
|
||||||
|
self.conn.write(f"{command}\n".encode("ascii"))
|
||||||
|
except serial.serialutil.SerialException:
|
||||||
|
self.log.exception(traceback.format_exc())
|
||||||
|
|
||||||
|
def _get(self):
|
||||||
|
info = {}
|
||||||
|
try:
|
||||||
|
for value_name, command in {
|
||||||
|
"scale": "CONF:RES?",
|
||||||
|
"measure": "MEAS?",
|
||||||
|
}.items():
|
||||||
|
self.write(command)
|
||||||
|
info[value_name] = self.read()
|
||||||
|
except serial.serialutil.SerialException:
|
||||||
|
self.log.exception(traceback.format_exc())
|
||||||
|
self.log.debug(str(info))
|
||||||
|
super()._get([info])
|
||||||
|
|||||||
@ -48,7 +48,6 @@ class NeoPixels(Component):
|
|||||||
response = self.conn.readline()
|
response = self.conn.readline()
|
||||||
if response != b"ok\n":
|
if response != b"ok\n":
|
||||||
self.log.error(response.strip())
|
self.log.error(response.strip())
|
||||||
# self.conn.close()
|
|
||||||
except serial.serialutil.SerialException:
|
except serial.serialutil.SerialException:
|
||||||
self.log.exception(traceback.format_exc())
|
self.log.exception(traceback.format_exc())
|
||||||
|
|
||||||
|
|||||||
21
src/main.py
21
src/main.py
@ -52,8 +52,8 @@ logging.basicConfig(
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGHING
|
# IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGHING
|
||||||
from components import (ArchiveSynchronizer, GalaxyCamera, NeoPixels,
|
from components import (ArchiveSynchronizer, GalaxyCamera, Multicomp730424,
|
||||||
Os_Label_Printer, RemoteAPI,
|
NeoPixels, Os_Label_Printer, RemoteAPI,
|
||||||
TecnaMarpossProvasetT3P, VisionSaver)
|
TecnaMarpossProvasetT3P, VisionSaver)
|
||||||
from lib.db import Users
|
from lib.db import Users
|
||||||
from lib.helpers import ConfigReader
|
from lib.helpers import ConfigReader
|
||||||
@ -78,22 +78,13 @@ try:
|
|||||||
# INIT COMPONENT
|
# INIT COMPONENT
|
||||||
self.components_specs = {
|
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},
|
"label_printer": {"c": Os_Label_Printer, "t": False},
|
||||||
"neo_pixels": {"c": NeoPixels, "t": False},
|
"multicomp": {"c": Multicomp730424, "k": {"paused": True}},
|
||||||
"remote_api": {"c": RemoteAPI, "k": {"main": self}},
|
"remote_api": {"c": RemoteAPI, "k": {"main": self}},
|
||||||
"tecna_t3": {"c": TecnaMarpossProvasetT3P, "k": {"paused": True}},
|
|
||||||
"vision_saver": {"c": VisionSaver, "t": False},
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
for component_name in list(self.components_specs):
|
||||||
for key in self.components_specs.copy().keys():
|
if self.config.get("hardware_config", {}).get(component_name, None) != "present":
|
||||||
if key in self.config["hardware_config"].keys() and self.config["hardware_config"][key] != "present":
|
self.components_specs.pop(component_name)
|
||||||
self.components_specs.pop(key)
|
|
||||||
if self.config["hardware_config"]["vision"] is "present":
|
|
||||||
from src.components.vision import Vision
|
|
||||||
self.components_specs["vision"]= {"c": Vision, "k": {"paused": True}}
|
|
||||||
|
|
||||||
self.components = {}
|
self.components = {}
|
||||||
self.threads = {}
|
self.threads = {}
|
||||||
for component_name, spec in self.components_specs.items():
|
for component_name, spec in self.components_specs.items():
|
||||||
|
|||||||
@ -14,14 +14,15 @@ conn = serial.Serial(
|
|||||||
timeout=1
|
timeout=1
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_list = (("*IDN?\n", True), # QUERY ID
|
cmd_list = [
|
||||||
("CONF:RES 500\n", False), # SET RESISTANCE MEASURE, 500 Ohm range
|
["*IDN?\n", True], # QUERY ID
|
||||||
("MEAS?\n", True), # GET MEASURE
|
["CONF:RES 500\n", False], # SET RESISTANCE MEASURE, 500 Ohm range
|
||||||
("MEAS?\n", True), # GET MEASURE
|
["MEAS?\n", True], # GET MEASURE
|
||||||
("MEAS?\n", True)) # GET MEASURE
|
["MEAS?\n", True], # GET MEASURE
|
||||||
|
["MEAS?\n", True], # GET MEASURE
|
||||||
|
]
|
||||||
|
|
||||||
for cmditem in cmd_list:
|
for [cmd, expect_response] in cmd_list:
|
||||||
cmd, expect_response = cmditem
|
|
||||||
conn.write(bytes(cmd, encoding="ascii"))
|
conn.write(bytes(cmd, encoding="ascii"))
|
||||||
if expect_response:
|
if expect_response:
|
||||||
response = conn.readline()
|
response = conn.readline()
|
||||||
|
|||||||
@ -20,6 +20,7 @@ from .recipe_selection import Recipe_Selection
|
|||||||
from .recipe_spec_and_step_editor import Recipe_Spec_And_Step_Editor
|
from .recipe_spec_and_step_editor import Recipe_Spec_And_Step_Editor
|
||||||
from .recipe_spec_editor import Recipe_Spec_Editor
|
from .recipe_spec_editor import Recipe_Spec_Editor
|
||||||
from .recipes_management import Recipes_Management
|
from .recipes_management import Recipes_Management
|
||||||
|
from .resistance_step_editor import Resistance_Step_Editor
|
||||||
from .steps_management import Steps_Management
|
from .steps_management import Steps_Management
|
||||||
from .test import Test
|
from .test import Test
|
||||||
from .test_admin_permission import Test_Admin_Permission
|
from .test_admin_permission import Test_Admin_Permission
|
||||||
@ -28,6 +29,7 @@ from .test_autotest import Test_Autotest
|
|||||||
from .test_barcodes import Test_Barcodes
|
from .test_barcodes import Test_Barcodes
|
||||||
from .test_home import Test_Home
|
from .test_home import Test_Home
|
||||||
from .test_leak import Test_Leak
|
from .test_leak import Test_Leak
|
||||||
|
from .test_resistance import Test_Resistance
|
||||||
from .test_test import Test_Test
|
from .test_test import Test_Test
|
||||||
from .test_vision import Test_Vision
|
from .test_vision import Test_Vision
|
||||||
from .users_management import Users_Management
|
from .users_management import Users_Management
|
||||||
|
|||||||
@ -2,6 +2,7 @@ from lib.db import Steps
|
|||||||
from ui.editor import Editor
|
from ui.editor import Editor
|
||||||
from ui.helpers import replace_widget
|
from ui.helpers import replace_widget
|
||||||
from ui.leak_step_editor import Leak_Step_Editor
|
from ui.leak_step_editor import Leak_Step_Editor
|
||||||
|
from ui.resistance_step_editor import Resistance_Step_Editor
|
||||||
from ui.vision_step_editor import Vision_Step_Editor
|
from ui.vision_step_editor import Vision_Step_Editor
|
||||||
|
|
||||||
|
|
||||||
@ -27,6 +28,12 @@ class Recipe_Spec_And_Step_Editor(Editor):
|
|||||||
"widget": "leak_editor_2_w",
|
"widget": "leak_editor_2_w",
|
||||||
"editor": Leak_Step_Editor(),
|
"editor": Leak_Step_Editor(),
|
||||||
},
|
},
|
||||||
|
"resistance": {
|
||||||
|
"type": "resistance",
|
||||||
|
"enable": self.resistance_eabled_cb,
|
||||||
|
"widget": "resistance_editor_w",
|
||||||
|
"editor": Resistance_Step_Editor(),
|
||||||
|
},
|
||||||
"vision": {
|
"vision": {
|
||||||
"type": "vision",
|
"type": "vision",
|
||||||
"enable": self.vision_enabled_cb,
|
"enable": self.vision_enabled_cb,
|
||||||
|
|||||||
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>739</width>
|
<width>292</width>
|
||||||
<height>190</height>
|
<height>152</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
@ -169,6 +169,49 @@ Fasi di Test</string>
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_6">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Test resistenza</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="horizontalSpacer_11">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>66</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<spacer name="horizontalSpacer_12">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>65</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QCheckBox" name="resistance_eabled_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fase Abilitata</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="3">
|
||||||
|
<widget class="QWidget" name="resistance_editor_w" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="tab_4">
|
<widget class="QWidget" name="tab_4">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Test telecamera</string>
|
<string>Test telecamera</string>
|
||||||
|
|||||||
1
src/ui/resistance_step_editor/__init__.py
Normal file
1
src/ui/resistance_step_editor/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from .resistance_step_editor import Resistance_Step_Editor
|
||||||
11
src/ui/resistance_step_editor/resistance_step_editor.py
Normal file
11
src/ui/resistance_step_editor/resistance_step_editor.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from ui.editor import Editor
|
||||||
|
|
||||||
|
|
||||||
|
class Resistance_Step_Editor(Editor):
|
||||||
|
def __init__(self, cell_widget=None):
|
||||||
|
super().__init__(cell_widget=cell_widget)
|
||||||
|
self.spec.update({
|
||||||
|
"scale": self.scale_sb,
|
||||||
|
"expected": self.expected_sb,
|
||||||
|
"tolerance": self.tolerance_sb,
|
||||||
|
})
|
||||||
112
src/ui/resistance_step_editor/resistance_step_editor.ui
Normal file
112
src/ui/resistance_step_editor/resistance_step_editor.ui
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Resistance_Step_Editor</class>
|
||||||
|
<widget class="QWidget" name="Resistance_Step_Editor">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>197</width>
|
||||||
|
<height>130</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Resistance Step Editor</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Resistenza</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="expected_sb">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="scale_sb">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Scala</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_19">
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Valore atteso</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tolleranza</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="tolerance_sb">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>9999</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="label_20">
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import weakref
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from lib.db import Archive, Steps, Users
|
from lib.db import Archive, Steps, Users
|
||||||
@ -13,6 +14,7 @@ from ui.test_assembly import Test_Assembly
|
|||||||
from ui.test_autotest import Test_Autotest
|
from ui.test_autotest import Test_Autotest
|
||||||
from ui.test_barcodes import Test_Barcodes
|
from ui.test_barcodes import Test_Barcodes
|
||||||
from ui.test_leak import Test_Leak
|
from ui.test_leak import Test_Leak
|
||||||
|
from ui.test_resistance import Test_Resistance
|
||||||
from ui.test_vision import Test_Vision
|
from ui.test_vision import Test_Vision
|
||||||
from ui.widget import Widget
|
from ui.widget import Widget
|
||||||
|
|
||||||
@ -46,6 +48,7 @@ class Test(Widget):
|
|||||||
"fail": Test_Assembly(img_path=self.select_step_img("fail"), text=u"CICLO INTERROTTO", widget=None),
|
"fail": Test_Assembly(img_path=self.select_step_img("fail"), text=u"CICLO INTERROTTO", widget=None),
|
||||||
"leak": Test_Assembly(img_path=None, text=None, widget=Test_Leak(components=self.components, recipe=self.recipe, step=self.step)),
|
"leak": Test_Assembly(img_path=None, text=None, widget=Test_Leak(components=self.components, recipe=self.recipe, step=self.step)),
|
||||||
"print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", widget=None),
|
"print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", widget=None),
|
||||||
|
"resistance": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO RESISTENZA", widget=Test_Resistance(components=self.components, recipe=self.recipe, step=self.step)),
|
||||||
"select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", widget=Recipe_Selection()),
|
"select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", widget=Recipe_Selection()),
|
||||||
"vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step)),
|
"vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step)),
|
||||||
"wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", widget=None),
|
"wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", widget=None),
|
||||||
@ -68,17 +71,13 @@ class Test(Widget):
|
|||||||
# CONNECT CYCLE CONTROLS
|
# CONNECT CYCLE CONTROLS
|
||||||
self.cancel_b.clicked.connect(self.fail_cycle)
|
self.cancel_b.clicked.connect(self.fail_cycle)
|
||||||
self.change_recipe_b.clicked.connect(self.change_recipe)
|
self.change_recipe_b.clicked.connect(self.change_recipe)
|
||||||
for w in self.cycle_available_steps.values():
|
for step_name, w in self.cycle_available_steps.items():
|
||||||
if hasattr(w, "ok"):
|
if hasattr(w, "ok"):
|
||||||
# custom ok handlers should call next again
|
# custom ok handlers should call next again
|
||||||
if type(w.widget) is Recipe_Selection:
|
if isinstance(w.widget, (Recipe_Selection)):
|
||||||
w.ok.connect(self.set_recipe)
|
w.ok.connect(self.set_recipe)
|
||||||
elif type(w.widget) is Test_Barcodes:
|
elif isinstance(w.widget, (Test_Barcodes, Test_Leak, Test_Resistance, Test_Vision)):
|
||||||
w.ok.connect(self.set_barcodes)
|
w.ok.connect(lambda data=None, step_name=step_name, self=weakref.ref(self): self().set_step(step_name, data))
|
||||||
elif type(w.widget) is Test_Leak:
|
|
||||||
w.ok.connect(self.set_leak)
|
|
||||||
elif type(w.widget) is Test_Vision:
|
|
||||||
w.ok.connect(self.set_vision)
|
|
||||||
else:
|
else:
|
||||||
w.ok.connect(self.next)
|
w.ok.connect(self.next)
|
||||||
if hasattr(w, "ko"):
|
if hasattr(w, "ko"):
|
||||||
@ -247,32 +246,18 @@ class Test(Widget):
|
|||||||
self.recipe_l.setText("NON SELEZIONATA")
|
self.recipe_l.setText("NON SELEZIONATA")
|
||||||
self.recipe_l.setStyleSheet("QLabel { color: red; }")
|
self.recipe_l.setStyleSheet("QLabel { color: red; }")
|
||||||
|
|
||||||
def set_barcodes(self, barcodes=None):
|
def set_step(self, step_name, data=None):
|
||||||
if "barcodes" not in self.data:
|
if step_name not in self.data:
|
||||||
self.data["barcodes"] = {}
|
self.data[step_name] = {}
|
||||||
self.data["barcodes"].update(barcodes)
|
data["step"] = model_to_dict(self.step)
|
||||||
self.next()
|
self.data[step_name][len(self.data[step_name])] = data
|
||||||
|
self.data["overridden"] = self.data["overridden"] or data.get("overridden", False)
|
||||||
def set_leak(self, leak=None):
|
self.data["ok"] = self.data["ok"] and data.get("ok", False)
|
||||||
if "leak" not in self.data:
|
|
||||||
self.data["leak"] = {}
|
|
||||||
leak["step"] = model_to_dict(self.step)
|
|
||||||
self.data["leak"][len(self.data["leak"])] = leak
|
|
||||||
self.data["overridden"] = self.data["overridden"] or leak.get("overridden", False)
|
|
||||||
self.data["ok"] = self.data["ok"] and leak.get("ok", False)
|
|
||||||
self.next()
|
|
||||||
|
|
||||||
def set_vision(self, vision=None):
|
|
||||||
if "vision" not in self.data:
|
|
||||||
self.data["vision"] = {}
|
|
||||||
vision["step"] = model_to_dict(self.step)
|
|
||||||
self.data["vision"][len(self.data["vision"])] = vision
|
|
||||||
self.data["overridden"] = self.data["overridden"] or vision.get("overridden", False)
|
|
||||||
self.data["ok"] = self.data["ok"] and vision.get("ok", False)
|
|
||||||
self.next()
|
self.next()
|
||||||
|
|
||||||
def done(self, ok=True):
|
def done(self, ok=True):
|
||||||
self.log.info("cycle done")
|
self.log.info("cycle done")
|
||||||
|
if "vision" in self.data:
|
||||||
vision_test_1 = self.data.get("vision", {}).get(0, {})
|
vision_test_1 = self.data.get("vision", {}).get(0, {})
|
||||||
out_paths = self.components["vision_saver"].save(
|
out_paths = self.components["vision_saver"].save(
|
||||||
save_time=vision_test_1.get("time", None),
|
save_time=vision_test_1.get("time", None),
|
||||||
@ -280,7 +265,7 @@ class Test(Widget):
|
|||||||
# vision=vision_test_1.get("detections", None),
|
# vision=vision_test_1.get("detections", None),
|
||||||
)
|
)
|
||||||
self.log.info(f"cycle vision saved locally: {out_paths!r}")
|
self.log.info(f"cycle vision saved locally: {out_paths!r}")
|
||||||
for vision in self.data["vision"].values():
|
for vision in self.data.get("vision", {}).values():
|
||||||
vision.pop("frame", None)
|
vision.pop("frame", None)
|
||||||
vision.pop("render", None)
|
vision.pop("render", None)
|
||||||
archived = Archive.archive(self.recipe, self.data, ok and self.data["ok"], overridden=self.data["overridden"])
|
archived = Archive.archive(self.recipe, self.data, ok and self.data["ok"], overridden=self.data["overridden"])
|
||||||
|
|||||||
@ -21,7 +21,7 @@ class Test_Leak(Test_Test):
|
|||||||
self.stop_b.setEnabled(False)
|
self.stop_b.setEnabled(False)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
# disable tes loop
|
# disable test loop
|
||||||
self.components["tecna_t3"].stop_test()
|
self.components["tecna_t3"].stop_test()
|
||||||
self.components["tecna_t3"].pause()
|
self.components["tecna_t3"].pause()
|
||||||
self.disconnect(self.get_connection)
|
self.disconnect(self.get_connection)
|
||||||
|
|||||||
1
src/ui/test_resistance/__init__.py
Normal file
1
src/ui/test_resistance/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from .test_resistance import Test_Resistance
|
||||||
73
src/ui/test_resistance/test_resistance.py
Normal file
73
src/ui/test_resistance/test_resistance.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
from ui.test_test import Test_Test
|
||||||
|
|
||||||
|
|
||||||
|
class Test_Resistance(Test_Test):
|
||||||
|
def __init__(self, components=None, recipe=None, step=None):
|
||||||
|
super().__init__(components=components, recipe=recipe, step=step)
|
||||||
|
|
||||||
|
def start(self, recipe=None, step=None):
|
||||||
|
super().start(recipe=recipe, step=step)
|
||||||
|
# setup test loop
|
||||||
|
self.components["multicomp"].set_resistance_scale(self.step.spec.get("expected", 0))
|
||||||
|
self.get_connection = self.components["multicomp"].out.connect(self.get)
|
||||||
|
self.components["multicomp"].resume()
|
||||||
|
if self.step is not None:
|
||||||
|
self.expected_l.setText(str(self.step.spec.get("expected", "-")))
|
||||||
|
self.tolerance_l.setText(str(self.step.spec.get("tolerance", "-")))
|
||||||
|
else:
|
||||||
|
self.expected_l.setText("-")
|
||||||
|
self.tolerance_l.setText("-")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
# disable test loop
|
||||||
|
self.components["multicomp"].pause()
|
||||||
|
self.disconnect(self.get_connection)
|
||||||
|
self.expected_l.setText("-")
|
||||||
|
self.tolerance_l.setText("-")
|
||||||
|
super().stop()
|
||||||
|
|
||||||
|
def get(self, data=None, override=False):
|
||||||
|
if self.done: # avoid proccessing if completed
|
||||||
|
return
|
||||||
|
if data is None or data[-1] is None:
|
||||||
|
super().get(None, override=override)
|
||||||
|
return
|
||||||
|
data = data[-1]
|
||||||
|
result = data["multicomp"].get("measure", None)
|
||||||
|
expected = self.step.spec.get("expected", "-")
|
||||||
|
tolerance = self.step.spec.get("tolerance", "-")
|
||||||
|
if all([
|
||||||
|
isinstance(result, (int, float)),
|
||||||
|
isinstance(expected, (int, float)),
|
||||||
|
isinstance(tolerance, (int, float)),
|
||||||
|
abs(result - expected) <= tolerance
|
||||||
|
]):
|
||||||
|
ok = True
|
||||||
|
else:
|
||||||
|
ok = None
|
||||||
|
super().get([{
|
||||||
|
"time": data.get("time", None),
|
||||||
|
"results": {
|
||||||
|
"ok": ok,
|
||||||
|
"result": result,
|
||||||
|
"data": data["multicomp"],
|
||||||
|
},
|
||||||
|
}], override=override, fail=ok is False)
|
||||||
|
|
||||||
|
def visualize(self, data=None):
|
||||||
|
if data is None:
|
||||||
|
data = {}
|
||||||
|
d = data.get("results", {}).get("data", {})
|
||||||
|
for k, l in {
|
||||||
|
"scale": self.scale_l,
|
||||||
|
"measure": self.resistance_l,
|
||||||
|
}.items():
|
||||||
|
v = d.get(k, "-")
|
||||||
|
if type(v) is float:
|
||||||
|
v = round(v, 2)
|
||||||
|
l.setText(str(v))
|
||||||
|
super().visualize(data)
|
||||||
|
|
||||||
|
def save_last(self):
|
||||||
|
if self.last is None:
|
||||||
|
return
|
||||||
360
src/ui/test_resistance/test_resistance.ui
Normal file
360
src/ui/test_resistance/test_resistance.ui
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Test_Resistance</class>
|
||||||
|
<widget class="QWidget" name="Test_Resistance">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>301</width>
|
||||||
|
<height>324</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Test Resistance</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>PROVA RESISTENZA</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Scala misura</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QLabel" name="img_l">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="expected_l">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>20</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 255, 255);
|
||||||
|
border: 1px solid black;
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLabel" name="tolerance_l">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>20</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 255, 255);
|
||||||
|
border: 1px solid black;
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="scale_l">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>20</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 255, 255);
|
||||||
|
border: 1px solid black;
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Resistenza attesa</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tolleranza</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Resistenza effettiva</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="resistance_l">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>20</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 255, 255);
|
||||||
|
border: 1px solid black;
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ohm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Risultato</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QProgressBar" name="ok_counter_pb">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="format">
|
||||||
|
<string>%v / %m</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="state_l">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="12" 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="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>FORZA ACCETTAZIONE</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@ -34,6 +34,7 @@ class Test_Vision(Test_Test):
|
|||||||
self.components["galaxy_camera"].add_sources({"test_vision": self.request_frame})
|
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.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.get_connection = self.components["vision"].out.connect(self.get)
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
||||||
self.components["vision"].set_recipe(self.step.spec.get("recipe", None))
|
self.components["vision"].set_recipe(self.step.spec.get("recipe", None))
|
||||||
self.components["vision"].resume()
|
self.components["vision"].resume()
|
||||||
@ -113,12 +114,16 @@ class Test_Vision(Test_Test):
|
|||||||
img = self.status_imgs_full[None]
|
img = self.status_imgs_full[None]
|
||||||
if self.done:
|
if self.done:
|
||||||
if data.get("overridden", False):
|
if data.get("overridden", False):
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#ffff00")
|
self.components["neo_pixels"].set_all_pixel_color("#ffff00")
|
||||||
elif self.ok_counter >= self.ok_counter_limit:
|
elif self.ok_counter >= self.ok_counter_limit:
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#00ff00")
|
self.components["neo_pixels"].set_all_pixel_color("#00ff00")
|
||||||
else:
|
else:
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#ff0000")
|
self.components["neo_pixels"].set_all_pixel_color("#ff0000")
|
||||||
else:
|
else:
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
|
||||||
# DETECTIONS TABLE
|
# DETECTIONS TABLE
|
||||||
if results is not None:
|
if results is not None:
|
||||||
@ -201,8 +206,10 @@ class Test_Vision(Test_Test):
|
|||||||
|
|
||||||
def emit_ok(self):
|
def emit_ok(self):
|
||||||
super().emit_ok()
|
super().emit_ok()
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
||||||
|
|
||||||
def emit_ko(self):
|
def emit_ko(self):
|
||||||
super().emit_ko()
|
super().emit_ko()
|
||||||
|
if "neo_pixels" in self.components:
|
||||||
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
self.components["neo_pixels"].set_all_pixel_color("#000000")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user