diff --git a/config/instruction_images/st-ten-12/DEFAULT.svg b/config/instruction_images/st-ten-12/DEFAULT.svg
new file mode 100644
index 0000000..facc0bb
--- /dev/null
+++ b/config/instruction_images/st-ten-12/DEFAULT.svg
@@ -0,0 +1,49 @@
+
+
+
+
diff --git a/config/instruction_images/st-ten-12/img/arw-yel-down.png b/config/instruction_images/st-ten-12/img/arw-yel-down.png
new file mode 100644
index 0000000..bb3c668
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/arw-yel-down.png differ
diff --git a/config/instruction_images/st-ten-12/img/mb1.png b/config/instruction_images/st-ten-12/img/mb1.png
new file mode 100644
index 0000000..731a437
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/mb1.png differ
diff --git a/config/instruction_images/st-ten-12/img/mi1.PNG b/config/instruction_images/st-ten-12/img/mi1.PNG
new file mode 100644
index 0000000..6b0f9d9
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/mi1.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/mi2.PNG b/config/instruction_images/st-ten-12/img/mi2.PNG
new file mode 100644
index 0000000..9db21ff
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/mi2.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/ok.png b/config/instruction_images/st-ten-12/img/ok.png
new file mode 100644
index 0000000..d576b7d
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/ok.png differ
diff --git a/config/instruction_images/st-ten-12/img/rb1.PNG b/config/instruction_images/st-ten-12/img/rb1.PNG
new file mode 100644
index 0000000..3050451
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/rb1.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/rb2.PNG b/config/instruction_images/st-ten-12/img/rb2.PNG
new file mode 100644
index 0000000..4bf5efc
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/rb2.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/rm1.PNG b/config/instruction_images/st-ten-12/img/rm1.PNG
new file mode 100644
index 0000000..33f0eeb
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/rm1.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/rm2.PNG b/config/instruction_images/st-ten-12/img/rm2.PNG
new file mode 100644
index 0000000..ef1496a
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/rm2.PNG differ
diff --git a/config/instruction_images/st-ten-12/img/tape_black.png b/config/instruction_images/st-ten-12/img/tape_black.png
new file mode 100644
index 0000000..0d51c4b
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/tape_black.png differ
diff --git a/config/instruction_images/st-ten-12/img/tape_white.png b/config/instruction_images/st-ten-12/img/tape_white.png
new file mode 100644
index 0000000..d4b64f0
Binary files /dev/null and b/config/instruction_images/st-ten-12/img/tape_white.png differ
diff --git a/config/instruction_images/st-ten-13/DEFAULT.svg b/config/instruction_images/st-ten-13/DEFAULT.svg
new file mode 100644
index 0000000..facc0bb
--- /dev/null
+++ b/config/instruction_images/st-ten-13/DEFAULT.svg
@@ -0,0 +1,49 @@
+
+
+
+
diff --git a/config/instruction_images/st-ten-13/img/arw-yel-down.png b/config/instruction_images/st-ten-13/img/arw-yel-down.png
new file mode 100644
index 0000000..bb3c668
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/arw-yel-down.png differ
diff --git a/config/instruction_images/st-ten-13/img/mb1.png b/config/instruction_images/st-ten-13/img/mb1.png
new file mode 100644
index 0000000..731a437
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/mb1.png differ
diff --git a/config/instruction_images/st-ten-13/img/mi1.PNG b/config/instruction_images/st-ten-13/img/mi1.PNG
new file mode 100644
index 0000000..6b0f9d9
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/mi1.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/mi2.PNG b/config/instruction_images/st-ten-13/img/mi2.PNG
new file mode 100644
index 0000000..9db21ff
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/mi2.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/ok.png b/config/instruction_images/st-ten-13/img/ok.png
new file mode 100644
index 0000000..d576b7d
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/ok.png differ
diff --git a/config/instruction_images/st-ten-13/img/rb1.PNG b/config/instruction_images/st-ten-13/img/rb1.PNG
new file mode 100644
index 0000000..3050451
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/rb1.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/rb2.PNG b/config/instruction_images/st-ten-13/img/rb2.PNG
new file mode 100644
index 0000000..4bf5efc
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/rb2.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/rm1.PNG b/config/instruction_images/st-ten-13/img/rm1.PNG
new file mode 100644
index 0000000..33f0eeb
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/rm1.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/rm2.PNG b/config/instruction_images/st-ten-13/img/rm2.PNG
new file mode 100644
index 0000000..ef1496a
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/rm2.PNG differ
diff --git a/config/instruction_images/st-ten-13/img/tape_black.png b/config/instruction_images/st-ten-13/img/tape_black.png
new file mode 100644
index 0000000..0d51c4b
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/tape_black.png differ
diff --git a/config/instruction_images/st-ten-13/img/tape_white.png b/config/instruction_images/st-ten-13/img/tape_white.png
new file mode 100644
index 0000000..d4b64f0
Binary files /dev/null and b/config/instruction_images/st-ten-13/img/tape_white.png differ
diff --git a/config/instruction_images/st-ten-5/5802850935.tubo.svg b/config/instruction_images/st-ten-5/5802850935.tubo.svg
deleted file mode 100644
index cb6ed4a..0000000
--- a/config/instruction_images/st-ten-5/5802850935.tubo.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
diff --git a/config/machine_settings/hostnames.ini b/config/machine_settings/hostnames.ini
index 788e34b..dfdc1c7 100644
--- a/config/machine_settings/hostnames.ini
+++ b/config/machine_settings/hostnames.ini
@@ -10,3 +10,6 @@ st-ten-8: st-ten-8
ST-TEN-9: st-ten-9
st-ten-10: st-ten-10
st-ten-11: st-ten-11
+st-ten-12: st-ten-12
+st-ten-13: st-ten-13
+
diff --git a/config/machine_settings/st-ten-12.ini b/config/machine_settings/st-ten-12.ini
new file mode 100644
index 0000000..73492b3
--- /dev/null
+++ b/config/machine_settings/st-ten-12.ini
@@ -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
\ No newline at end of file
diff --git a/config/machine_settings/st-ten-13.ini b/config/machine_settings/st-ten-13.ini
new file mode 100644
index 0000000..2e9ae3b
--- /dev/null
+++ b/config/machine_settings/st-ten-13.ini
@@ -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
\ No newline at end of file
diff --git a/src/ui/diagnostics/diagnostics.py b/src/ui/diagnostics/diagnostics.py
new file mode 100644
index 0000000..a6a8986
--- /dev/null
+++ b/src/ui/diagnostics/diagnostics.py
@@ -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
\ No newline at end of file
diff --git a/src/ui/diagnostics/diagnostics.ui b/src/ui/diagnostics/diagnostics.ui
new file mode 100644
index 0000000..48fc5a4
--- /dev/null
+++ b/src/ui/diagnostics/diagnostics.ui
@@ -0,0 +1,47 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 600
+ 600
+
+
+
+
+ 600
+ 600
+
+
+
+ Form
+
+
+ -
+
+
+ -
+
+
+ INPUTS
+
+
+
+ -
+
+
+ OUTPUTS
+
+
+
+ -
+
+
+
+
+
+
+