Merge remote-tracking branch 'origin/master'

This commit is contained in:
neo-dl 2022-07-27 17:13:25 +02:00
commit 6c154ab2df
8 changed files with 162 additions and 472 deletions

View File

@ -54,22 +54,27 @@ class ModbusComponent(Component):
self.lock.unlock() self.lock.unlock()
def _read(self, register, count=1): def _read(self, register, count=1):
while True:
self.lock.lock() self.lock.lock()
read = self.client.read_holding_registers(register, count=count) read = self.client.read_holding_registers(register, count=count)
self.lock.unlock() self.lock.unlock()
if read.isError(): if read.isError():
self.log.exception(traceback.format_exception(type(read), read, read.__traceback__)) self.log.exception(traceback.format_exception(type(read), read, read.__traceback__))
# raise read # raise read
return None else:
break
return read return read
def _write(self, register, value): def _write(self, register, value):
while True:
self.lock.lock() self.lock.lock()
wrote = self.client.write_registers(register, value, skip_encode=True) wrote = self.client.write_registers(register, value, skip_encode=True)
self.lock.unlock() self.lock.unlock()
if wrote.isError(): if wrote.isError():
# self.log.exception(traceback.format_exception(type(wrote), wrote, wrote.__traceback__)) self.log.exception(traceback.format_exception(type(wrote), wrote, wrote.__traceback__))
raise wrote # raise wrote
else:
break
def _decode(self, read, *args, data_type="16bit_uint", gain=1, offset=0, **kwargs): def _decode(self, read, *args, data_type="16bit_uint", gain=1, offset=0, **kwargs):
decoder = BinaryPayloadDecoder.fromRegisters(read.registers, byteorder=self.byteorder, wordorder=self.wordorder) decoder = BinaryPayloadDecoder.fromRegisters(read.registers, byteorder=self.byteorder, wordorder=self.wordorder)

View File

@ -26,6 +26,8 @@ class Editor(Widget):
if autocomplete is None: if autocomplete is None:
return return
for k, v in autocomplete.items(): for k, v in autocomplete.items():
if k not in self.spec:
continue
w = self.spec[k] w = self.spec[k]
if isinstance(w, QCheckBox): if isinstance(w, QCheckBox):
w.setChecked(bool(v)) w.setChecked(bool(v))

View File

@ -6,366 +6,14 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>845</width> <width>94</width>
<height>696</height> <height>18</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Editor</string> <string>Editor</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout"/>
<item row="2" column="3">
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Scarico</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Tempo</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_30">
<property name="text">
<string>Pressione</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="flush_pressure_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="flush_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_18">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_31">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QGroupBox" name="groupBox_7">
<property name="title">
<string>Riempimento</string>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Soglia min</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Tempo</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_20">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="settling_pressure_min_percent_sb">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="filling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Soglia max</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="settling_pressure_max_percent_sb">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_26">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_27">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Assestamento</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="settling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_25">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0" colspan="4">
<widget class="QGroupBox" name="groupBox_6">
<property name="title">
<string>Visione</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Ricetta visione</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="vision_recipe_cb"/>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Pre-Riempimento</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="3" column="1">
<widget class="QSpinBox" name="pre_filling_pressure_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="pre_filling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Tempo</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_19">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Pressione</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Test</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="3" column="3">
<widget class="QLabel" name="label_22">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Delta min</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QSpinBox" name="test_pressure_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="test_pressure_max_delta_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QSpinBox" name="test_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLabel" name="label_24">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Delta max</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLabel" name="label_23">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Tempo</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QSpinBox" name="test_pressure_min_delta_sb">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Pressione</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_28">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Ricetta</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>N° disegno</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Descrizione</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QPlainTextEdit" name="description_pte"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Cliente</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="client_le"/>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="part_number_le"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>

View File

@ -51,6 +51,34 @@ class Recipe_Selection(Widget):
autocomplete={ autocomplete={
"spec": { "spec": {
"step_editors": { "step_editors": {
"leak_1": {
"pre_filling_time": 1,
"pre_filling_pressure": 1000,
"filling_time": 1,
"settling_time": 1,
"settling_pressure_min_percent": 5,
"settling_pressure_max_percent": 5,
"test_time": 5,
"test_pressure_min_delta": 100,
"test_pressure": 1000,
"test_pressure_max_delta": 100,
"flush_time": 1,
"flush_pressure": 100,
},
"leak_2": {
"pre_filling_time": 1,
"pre_filling_pressure": 1000,
"filling_time": 1,
"settling_time": 1,
"settling_pressure_min_percent": 5,
"settling_pressure_max_percent": 5,
"test_time": 5,
"test_pressure_min_delta": 100,
"test_pressure": 1000,
"test_pressure_max_delta": 100,
"flush_time": 1,
"flush_pressure": 100,
},
"vision": { "vision": {
# "recipe": sorted(glob("*.ini", root_dir="./config/vision/recipes/")), # only in python3.10 # "recipe": sorted(glob("*.ini", root_dir="./config/vision/recipes/")), # only in python3.10
"recipe": sorted(map(os.path.basename, glob("./config/vision/recipes/*.ini"))), "recipe": sorted(map(os.path.basename, glob("./config/vision/recipes/*.ini"))),

View File

@ -60,7 +60,7 @@ class Recipe_Spec_And_Step_Editor(Editor):
def do_autocomplete(self, autocomplete): def do_autocomplete(self, autocomplete):
if autocomplete is None: if autocomplete is None:
return return
step_editors_autocomplete = autocomplete.pop("step_editors", None) step_editors_autocomplete = autocomplete.get("step_editors", None)
super().do_autocomplete(autocomplete) super().do_autocomplete(autocomplete)
if step_editors_autocomplete is not None: if step_editors_autocomplete is not None:
for step_name, map in self.map.items(): for step_name, map in self.map.items():

View File

@ -44,7 +44,7 @@ class Test(Widget):
"done": Test_Assembly(self.select_step_img("success"), u"COLLAUDO COMPLETATO"), "done": Test_Assembly(self.select_step_img("success"), u"COLLAUDO COMPLETATO"),
"emergency": Test_Assembly(self.select_step_img("reset_emergency"), u"EMERGENZA INTERVENUTA - RIPRISTINARE PULSANTE E SELEZIONARE \"RESET EMERGENZA\" DAL MEN\u00d9 \"STRUMENTI\""), "emergency": Test_Assembly(self.select_step_img("reset_emergency"), u"EMERGENZA INTERVENUTA - RIPRISTINARE PULSANTE E SELEZIONARE \"RESET EMERGENZA\" DAL MEN\u00d9 \"STRUMENTI\""),
"fail": Test_Assembly(self.select_step_img("fail"), u"CICLO INTERROTTO"), "fail": Test_Assembly(self.select_step_img("fail"), u"CICLO INTERROTTO"),
"leak": Test_Assembly(None, u"ESECUZIONE TEST IN CORSO - ATTENDERE", Test_Leak(components=self.components, recipe=self.recipe, step=self.step)), "leak": Test_Assembly(None, u"PREMERE START PER COMINCIARE LA PROVA TENUTA E ATTENDERE IL SUO COMPLETAMENTO", Test_Leak(components=self.components, recipe=self.recipe, step=self.step)),
"print": Test_Assembly(self.select_step_img("print"), u"STAMPA ETICHETTA IN CORSO"), "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()), "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)), "vision": Test_Assembly(None, u"VERIFICARE CONTROLLO CON TELECAMERA", Test_Vision(components=self.components, recipe=self.recipe, step=self.step)),

View File

@ -58,7 +58,10 @@ class Test_Leak(Test_Test):
"Running test: test type": self.test_type_l, "Running test: test type": self.test_type_l,
"Running test: sequence index": self.sequence_index_l, "Running test: sequence index": self.sequence_index_l,
}.items(): }.items():
l.setText(str(d.get(k, "-"))) v = d.get(k, "-")
if type(v) is float:
v = round(v, 2)
l.setText(str(v))
super().visualize(data) super().visualize(data)
def save_last(self): def save_last(self):

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>881</width> <width>305</width>
<height>614</height> <height>459</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -518,86 +518,7 @@
<string>PROVA TENUTA</string> <string>PROVA TENUTA</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Stato strumento</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Pressione del circuito</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_5">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Perdita</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="regulated_pressure_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="test_phase_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="circuit_pressure_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="instrument_status_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="font"> <property name="font">
<font> <font>
@ -614,7 +535,41 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Pressione del circuito</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>24</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Fase del test</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_7"> <widget class="QLabel" name="label_7">
<property name="font"> <property name="font">
<font> <font>
@ -631,15 +586,22 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="2" column="1">
<widget class="QLabel" name="test_type_l"> <widget class="QLabel" name="leak_l">
<property name="text"> <property name="text">
<string>-</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="1" column="1">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="circuit_pressure_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
@ -648,21 +610,34 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>Fase del test</string> <string>Perdita</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="0" column="3" rowspan="6">
<widget class="QLabel" name="leak_l"> <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"> <property name="text">
<string>-</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="3" column="1">
<widget class="QLabel" name="regulated_pressure_l">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="font"> <property name="font">
<font> <font>
@ -679,21 +654,50 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="3" column="2">
<widget class="QLabel" name="sequence_index_l"> <widget class="QLabel" name="label">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>mbar</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLabel" name="test_phase_l">
<property name="font">
<font>
<pointsize>24</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text"> <property name="text">
<string>-</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2" rowspan="7"> <item row="4" column="1" colspan="2">
<widget class="QLabel" name="img_l"> <widget class="QLabel" name="test_type_l">
<property name="sizePolicy"> <property name="text">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <string>-</string>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QLabel" name="sequence_index_l">
<property name="text"> <property name="text">
<string>-</string> <string>-</string>
</property> </property>
@ -1169,7 +1173,7 @@
<string notr="true">background-color:rgb(85, 255, 127);</string> <string notr="true">background-color:rgb(85, 255, 127);</string>
</property> </property>
<property name="text"> <property name="text">
<string>AVVIA PROVA TENUTA</string> <string>START</string>
</property> </property>
</widget> </widget>
</item> </item>