Merge remote-tracking branch 'origin/master'
49
config/instruction_images/st-ten-12/DEFAULT.svg
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="1200"
|
||||||
|
height="700"
|
||||||
|
viewBox="0 0 1200 700"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
|
||||||
|
sodipodi:docname="DEFAULT.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#505050"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.0570734"
|
||||||
|
inkscape:cx="365.15913"
|
||||||
|
inkscape:cy="357.59106"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1023"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" /><defs
|
||||||
|
id="defs2" /><g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"><text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff7f2a;fill-opacity:1;stroke:#aa4400"
|
||||||
|
x="277.31964"
|
||||||
|
y="373.9111"
|
||||||
|
id="text226"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan224"
|
||||||
|
x="277.31964"
|
||||||
|
y="373.9111"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:#aa4400;fill:#ff7f2a">DISEGNO NON DISPONIBILE</tspan></text></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
BIN
config/instruction_images/st-ten-12/img/arw-yel-down.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
config/instruction_images/st-ten-12/img/mb1.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
config/instruction_images/st-ten-12/img/mi1.PNG
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
config/instruction_images/st-ten-12/img/mi2.PNG
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
config/instruction_images/st-ten-12/img/ok.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
config/instruction_images/st-ten-12/img/rb1.PNG
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
config/instruction_images/st-ten-12/img/rb2.PNG
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
config/instruction_images/st-ten-12/img/rm1.PNG
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
config/instruction_images/st-ten-12/img/rm2.PNG
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
config/instruction_images/st-ten-12/img/tape_black.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
config/instruction_images/st-ten-12/img/tape_white.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
49
config/instruction_images/st-ten-13/DEFAULT.svg
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="1200"
|
||||||
|
height="700"
|
||||||
|
viewBox="0 0 1200 700"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
|
||||||
|
sodipodi:docname="DEFAULT.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#505050"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.0570734"
|
||||||
|
inkscape:cx="365.15913"
|
||||||
|
inkscape:cy="357.59106"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1023"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" /><defs
|
||||||
|
id="defs2" /><g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"><text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff7f2a;fill-opacity:1;stroke:#aa4400"
|
||||||
|
x="277.31964"
|
||||||
|
y="373.9111"
|
||||||
|
id="text226"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan224"
|
||||||
|
x="277.31964"
|
||||||
|
y="373.9111"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:#aa4400;fill:#ff7f2a">DISEGNO NON DISPONIBILE</tspan></text></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
BIN
config/instruction_images/st-ten-13/img/arw-yel-down.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
config/instruction_images/st-ten-13/img/mb1.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
config/instruction_images/st-ten-13/img/mi1.PNG
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
config/instruction_images/st-ten-13/img/mi2.PNG
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
config/instruction_images/st-ten-13/img/ok.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
config/instruction_images/st-ten-13/img/rb1.PNG
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
config/instruction_images/st-ten-13/img/rb2.PNG
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
config/instruction_images/st-ten-13/img/rm1.PNG
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
config/instruction_images/st-ten-13/img/rm2.PNG
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
config/instruction_images/st-ten-13/img/tape_black.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
config/instruction_images/st-ten-13/img/tape_white.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
|
@ -10,3 +10,6 @@ st-ten-8: st-ten-8
|
||||||
ST-TEN-9: st-ten-9
|
ST-TEN-9: st-ten-9
|
||||||
st-ten-10: st-ten-10
|
st-ten-10: st-ten-10
|
||||||
st-ten-11: st-ten-11
|
st-ten-11: st-ten-11
|
||||||
|
st-ten-12: st-ten-12
|
||||||
|
st-ten-13: st-ten-13
|
||||||
|
|
||||||
|
|
|
||||||
93
config/machine_settings/st-ten-12.ini
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
[machine]
|
||||||
|
description = ST-TEN-12 AUTOMATICO
|
||||||
|
instruction_folder = st-ten-12
|
||||||
|
image_for_warning= st-ten-12
|
||||||
|
|
||||||
|
[hardware_config]
|
||||||
|
archive_synchronizer: present
|
||||||
|
uvc_camera: absent
|
||||||
|
label_printer: present
|
||||||
|
neo_pixels: absent
|
||||||
|
remote_api: absent
|
||||||
|
tecna_t3: present
|
||||||
|
vision_saver: absent
|
||||||
|
vision: absent
|
||||||
|
screwdriver: absent
|
||||||
|
digital_io: present
|
||||||
|
barcode_recipe_selection: present
|
||||||
|
fixture_id: present
|
||||||
|
discard_box: absent
|
||||||
|
enforce_piece_removal: yes
|
||||||
|
|
||||||
|
[tecna_t3]
|
||||||
|
port: COM4
|
||||||
|
model: t3p
|
||||||
|
|
||||||
|
[label_printer]
|
||||||
|
platform: windows
|
||||||
|
printer: zd421
|
||||||
|
|
||||||
|
[digital_io]
|
||||||
|
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
||||||
|
id: USB-5862,BID#0
|
||||||
|
|
||||||
|
[fixture_rfid]
|
||||||
|
port: COM5
|
||||||
|
|
||||||
|
[recipe]
|
||||||
|
recipe_name_field: codice_ricetta
|
||||||
|
part_number_field: codice_prodotto
|
||||||
|
label_template_field: modello_etichetta
|
||||||
|
description_field: descrizione
|
||||||
|
|
||||||
|
[recipes_defaults]
|
||||||
|
tester_discharge_enable: yes
|
||||||
|
dimensione_lotto_abilitata: x
|
||||||
|
tempo_pre_riempimento: 0
|
||||||
|
pressione_pre_riempimento: 1000
|
||||||
|
tempo_riempimento: 15
|
||||||
|
tempo_assestamento: 15
|
||||||
|
tempo_di_test: 10
|
||||||
|
n_componenti:1
|
||||||
|
percentuale_minima_pressione_assestamento: 5
|
||||||
|
percentuale_massima_pressione_assestamento: 5
|
||||||
|
pressione_di_test_delta_minimo: 30
|
||||||
|
pressione_di_test: 7000
|
||||||
|
pressione_di_test_delta_massimo: 30
|
||||||
|
tempo_svuotamento: 0
|
||||||
|
pressione_svuotamento: 100
|
||||||
|
canale_di_prova: 1
|
||||||
|
prova_tenuta_abilitata_2:
|
||||||
|
tempo_pre_riempimento_2: 0
|
||||||
|
pressione_pre_riempimento_2: 1000
|
||||||
|
tempo_riempimento_2: 20
|
||||||
|
tempo_assestamento_2: 20
|
||||||
|
tempo_di_test_2: 10
|
||||||
|
percentuale_minima_pressione_assestamento_2: 5
|
||||||
|
percentuale_massima_pressione_assestamento_2: 5
|
||||||
|
pressione_di_test_delta_minimo_2: 30
|
||||||
|
pressione_di_test_2: 15000
|
||||||
|
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
|
||||||
|
|
||||||
|
[autotest_leak]
|
||||||
|
enabled: true
|
||||||
|
pre_filling_time: 0
|
||||||
|
pre_filling_pressure: 1000
|
||||||
|
filling_time: 10
|
||||||
|
settling_time: 10
|
||||||
|
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_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
|
||||||
|
flush_pressure: 100
|
||||||
|
relay_config: 1
|
||||||
93
config/machine_settings/st-ten-13.ini
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
[machine]
|
||||||
|
description = ST-TEN-13 AUTOMATICO
|
||||||
|
instruction_folder = st-ten-13
|
||||||
|
image_for_warning= st-ten-13
|
||||||
|
|
||||||
|
[hardware_config]
|
||||||
|
archive_synchronizer: present
|
||||||
|
uvc_camera: absent
|
||||||
|
label_printer: present
|
||||||
|
neo_pixels: absent
|
||||||
|
remote_api: absent
|
||||||
|
tecna_t3: present
|
||||||
|
vision_saver: absent
|
||||||
|
vision: absent
|
||||||
|
screwdriver: absent
|
||||||
|
digital_io: present
|
||||||
|
barcode_recipe_selection: present
|
||||||
|
fixture_id: present
|
||||||
|
discard_box: absent
|
||||||
|
enforce_piece_removal: yes
|
||||||
|
|
||||||
|
[tecna_t3]
|
||||||
|
port: COM4
|
||||||
|
model: t3p
|
||||||
|
|
||||||
|
[label_printer]
|
||||||
|
platform: windows
|
||||||
|
printer: zd421
|
||||||
|
|
||||||
|
[digital_io]
|
||||||
|
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
||||||
|
id: USB-5862,BID#0
|
||||||
|
|
||||||
|
[fixture_rfid]
|
||||||
|
port: COM5
|
||||||
|
|
||||||
|
[recipe]
|
||||||
|
recipe_name_field: codice_ricetta
|
||||||
|
part_number_field: codice_prodotto
|
||||||
|
label_template_field: modello_etichetta
|
||||||
|
description_field: descrizione
|
||||||
|
|
||||||
|
[recipes_defaults]
|
||||||
|
tester_discharge_enable: yes
|
||||||
|
dimensione_lotto_abilitata: x
|
||||||
|
tempo_pre_riempimento: 0
|
||||||
|
pressione_pre_riempimento: 1000
|
||||||
|
tempo_riempimento: 15
|
||||||
|
tempo_assestamento: 15
|
||||||
|
tempo_di_test: 10
|
||||||
|
n_componenti:1
|
||||||
|
percentuale_minima_pressione_assestamento: 5
|
||||||
|
percentuale_massima_pressione_assestamento: 5
|
||||||
|
pressione_di_test_delta_minimo: 30
|
||||||
|
pressione_di_test: 7000
|
||||||
|
pressione_di_test_delta_massimo: 30
|
||||||
|
tempo_svuotamento: 0
|
||||||
|
pressione_svuotamento: 100
|
||||||
|
canale_di_prova: 1
|
||||||
|
prova_tenuta_abilitata_2:
|
||||||
|
tempo_pre_riempimento_2: 0
|
||||||
|
pressione_pre_riempimento_2: 1000
|
||||||
|
tempo_riempimento_2: 20
|
||||||
|
tempo_assestamento_2: 20
|
||||||
|
tempo_di_test_2: 10
|
||||||
|
percentuale_minima_pressione_assestamento_2: 5
|
||||||
|
percentuale_massima_pressione_assestamento_2: 5
|
||||||
|
pressione_di_test_delta_minimo_2: 30
|
||||||
|
pressione_di_test_2: 15000
|
||||||
|
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
|
||||||
|
|
||||||
|
[autotest_leak]
|
||||||
|
enabled: true
|
||||||
|
pre_filling_time: 0
|
||||||
|
pre_filling_pressure: 1000
|
||||||
|
filling_time: 10
|
||||||
|
settling_time: 10
|
||||||
|
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_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
|
||||||
|
flush_pressure: 100
|
||||||
|
relay_config: 1
|
||||||
66
src/ui/diagnostics/diagnostics.py
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from PyQt5 import QtGui, QtCore
|
||||||
|
from PyQt5.QtCore import pyqtSlot, pyqtSignal
|
||||||
|
from PyQt5.QtWidgets import QTableWidgetItem, QPushButton, QHeaderView, QLabel
|
||||||
|
from src.ui import Widget
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Diagnostics(Widget):
|
||||||
|
def __init__(self, parent):
|
||||||
|
super().__init__()
|
||||||
|
self.sensor_changed = pyqtSignal(int, bool)
|
||||||
|
self.parent = parent
|
||||||
|
self.simulate = "--sim-io" in sys.argv
|
||||||
|
self.inputs = self.parent.config["digital_inputs"]
|
||||||
|
self.color_red = "#f00"
|
||||||
|
self.color_green = "#0f0"
|
||||||
|
headers_in = ["INPUT", "STATUS"]
|
||||||
|
|
||||||
|
self.latch_in = [False for _ in range(len(self.inputs))]
|
||||||
|
self.in_states = [False for _ in range(len(self.inputs))]
|
||||||
|
|
||||||
|
r = 0
|
||||||
|
if self.simulate:
|
||||||
|
self.in_buttons = [QPushButton() for _ in range(len(self.inputs))]
|
||||||
|
for input_name, input_idx in self.inputs.items():
|
||||||
|
for c, header in enumerate(headers_in):
|
||||||
|
if header == "STATUS":
|
||||||
|
if self.simulate:
|
||||||
|
self.in_buttons[r].setCheckable(True)
|
||||||
|
self.in_buttons[r].setText("ON" if self.in_states[r] else "OFF")
|
||||||
|
self.input_tb.setCellWidget(r, c, self.in_buttons[r])
|
||||||
|
indexb = QtCore.QPersistentModelIndex(self.input_tb.model().index(r, c))
|
||||||
|
self.in_buttons[r].clicked.connect(lambda *args, index=indexb: self.in_bit_toggle(index))
|
||||||
|
else:
|
||||||
|
w = QLabel()
|
||||||
|
w.setPixmap(self.ICON_KO)
|
||||||
|
self.input_tb.setCellWidget(r, c, w)
|
||||||
|
elif header == "INPUT":
|
||||||
|
i = QTableWidgetItem()
|
||||||
|
i.setText(str(input_idx))
|
||||||
|
self.input_tb.setItem(r, c, i)
|
||||||
|
r += 1
|
||||||
|
if not self.simulate:
|
||||||
|
self.parent.components["digital_io"].update.connect(self.update)
|
||||||
|
|
||||||
|
def in_bit_toggle(self, bit_num):
|
||||||
|
bit_num = bit_num.row()
|
||||||
|
byte_idx = int(bit_num / 8)
|
||||||
|
bit_idx = bit_num % 8
|
||||||
|
self.in_states[bit_num] = not self.in_states[bit_num]
|
||||||
|
self.in_buttons[bit_num].setText("ON" if self.in_states[bit_num] else "OFF")
|
||||||
|
self.sensor_changed.emit(bit_num, self.in_states[bit_num])
|
||||||
|
|
||||||
|
@pyqtSlot(dict)
|
||||||
|
def update(self, data):
|
||||||
|
r = 0
|
||||||
|
for input_name, input_idx in self.inputs.items():
|
||||||
|
item = self.input_tb.cellWidget(r, 1)
|
||||||
|
input_idx = int(input_idx)
|
||||||
|
if self.in_states[r]:
|
||||||
|
item.setPixmap(self.ICON_OK)
|
||||||
|
else:
|
||||||
|
item.setPixmap(self.ICON_KO)
|
||||||
|
r += 1
|
||||||
47
src/ui/diagnostics/diagnostics.ui
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Form</class>
|
||||||
|
<widget class="QWidget" name="Form">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>600</width>
|
||||||
|
<height>600</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>600</width>
|
||||||
|
<height>600</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QTableWidget" name="input_tb"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>INPUTS</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>OUTPUTS</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QTableWidget" name="output_tb"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||