diff --git a/config/label_designs/TUBI RISCALDATI/ETA013.prn b/config/label_designs/TUBI RISCALDATI/ETA013.prn
deleted file mode 100644
index e8c0318..0000000
Binary files a/config/label_designs/TUBI RISCALDATI/ETA013.prn and /dev/null differ
diff --git a/config/label_designs/TUBI RISCALDATI/ETACL.btw b/config/label_designs/TUBI RISCALDATI/ETACL.btw
index da901da..f09ded0 100644
Binary files a/config/label_designs/TUBI RISCALDATI/ETACL.btw and b/config/label_designs/TUBI RISCALDATI/ETACL.btw differ
diff --git a/config/label_templates/ETACL.prn b/config/label_templates/ETACL.prn
index 61a184d..181835b 100644
--- a/config/label_templates/ETACL.prn
+++ b/config/label_templates/ETACL.prn
@@ -1,4 +1,4 @@
-SIZE 50.1 mm, 130 mm
+SIZE 50.1 mm, 130 mm
GAP 3 mm, 0 mm
SPEED 2
DENSITY 7
@@ -8,13 +8,12 @@ OFFSET 0 mm
SET PEEL OFF
SET CUTTER OFF
SET PARTIAL_CUTTER OFF
-SET TEAR ON
+SET TEAR ON
CLS
-DMATRIX 246,104,155,155,x4,14,14,"{RECIPE}{DD}{MO}{YY}{HH}{MI}{SN5}"
+DMATRIX 270,95,131,131,x3,22,22,"{RECIPE}-{DD}{MO}{YY}{SN5}"
CODEPAGE 1252
-TEXT 21,198,"0",270,7,7,"{RECIPE}{DD}{MO}{YY}{HH}{MI}{SN5}"
-DMATRIX 151,104,250,250,x4,14,14,"{RECIPE}{DD}{MO}{YY}{HH}{MI}{SN5}"
-DMATRIX 57,104,344,344,x4,14,14,"{RECIPE}{DD}{MO}{YY}{HH}{MI}{SN5}"
+TEXT 378,38,"ROMAN.TTF",90,1,7,"{RECIPE}-{DD}{MO}{YY}{SN5}"
+DMATRIX 175,95,226,226,x3,22,22,"{RECIPE}-{DD}{MO}{YY}{SN5}"
+DMATRIX 80,95,321,321,x3,22,22,"{RECIPE}-{DD}{MO}{YY}{SN5}"
BOX 8,16,394,242,3
PRINT 1,1
-
\ No newline at end of file
diff --git a/config/machine_settings/defaults.ini b/config/machine_settings/defaults.ini
index 9588f1a..f9fbf1f 100644
--- a/config/machine_settings/defaults.ini
+++ b/config/machine_settings/defaults.ini
@@ -1,13 +1,13 @@
[hardware_config]
; archive_synchronizer: present
; galaxy_camera: present
-; uvc_camera: absent
; label_printer: present
; multicomp: present
; neo_pixels: present
; remote_api: present
; screwdriver: present
; tecna_t3: present
+; uvc_camera: present
; vision_saver: present
; vision: present
@@ -27,10 +27,10 @@ balance_green: 1.0
balance_blue: 1.5
[uvc_camera]
-horizontal_resolution: 2448
-vertical_resolution: 2048
-exposure_time: 10000
-focus: 100
+horizontal_resolution: 3264
+vertical_resolution: 2448
+; exposure_time: 10000
+; focus: 100
[vision_saver]
time_format: %Y-%m-%d_%H-%M-%S
@@ -60,7 +60,7 @@ modify_pin: 603
select_pin: 603
[screwdriver]
-enable_pin: 0
+disable_pin: 0
status_pin: 0
[multicomp]
diff --git a/config/machine_settings/mino.ini b/config/machine_settings/mino.ini
index 36a8bdc..d891c0d 100644
--- a/config/machine_settings/mino.ini
+++ b/config/machine_settings/mino.ini
@@ -1,2 +1,26 @@
+[hardware_config]
+archive_synchronizer: present
+galaxy_camera: absent
+label_printer: present
+multicomp: present
+neo_pixels: present
+remote_api: present
+screwdriver: present
+tecna_t3: present
+uvc_camera: present
+vision_saver: present
+vision: present
+
[tecna_t3]
+model: t3l
port: /dev/ttyUSB0
+
+[multicomp]
+port: /dev/ttyACM0
+
+[neo_pixels]
+port: /dev/ttyACM1
+
+[archive_synchronizer]
+poll_time: 6
+hold_time: 1
diff --git a/config/machine_settings/this.ini b/config/machine_settings/this.ini
index 6777023..be27d2c 100644
--- a/config/machine_settings/this.ini
+++ b/config/machine_settings/this.ini
@@ -7,6 +7,7 @@ neo_pixels: present
remote_api: present
screwdriver: present
tecna_t3: present
+uvc_camera: present
vision_saver: present
vision: present
diff --git a/src/components/__init__.py b/src/components/__init__.py
index 4200b15..b19b0f1 100644
--- a/src/components/__init__.py
+++ b/src/components/__init__.py
@@ -10,5 +10,6 @@ from .serial_label_printer import Serial_Label_Printer
from .tecna_marposs_provaset_t3 import TecnaMarpossProvasetT3
from .tecna_screwdriver import TecnaScrewdriver
from .test_component import TestComponent
+from .uvc_camera import UVCCamera
from .vision import Vision
from .vision_saver import VisionSaver
diff --git a/src/components/archive_synchronizer.py b/src/components/archive_synchronizer.py
index bb9bb2a..d56512e 100644
--- a/src/components/archive_synchronizer.py
+++ b/src/components/archive_synchronizer.py
@@ -36,7 +36,6 @@ class ArchiveSynchronizer(Component):
self.gcs_bucket = None
@db.connection_context()
- @db.atomic()
def _get(self):
for record in Archive.select().where((Archive.archived != True) | (Archive.uploaded != True)): # using "is not True" breaks the query.
if not self.simulate:
diff --git a/src/components/dummies/cv2/__init__.py b/src/components/dummies/cv2/__init__.py
new file mode 100644
index 0000000..de79551
--- /dev/null
+++ b/src/components/dummies/cv2/__init__.py
@@ -0,0 +1 @@
+from .dummy_video_capture import DummyVideoCapture
diff --git a/src/components/dummies/cv2/dummy_video_capture.py b/src/components/dummies/cv2/dummy_video_capture.py
new file mode 100644
index 0000000..2fd92fe
--- /dev/null
+++ b/src/components/dummies/cv2/dummy_video_capture.py
@@ -0,0 +1,32 @@
+import logging
+
+import cv2
+from PyQt5.QtCore import QThread
+
+
+class DummyVideoCapture:
+ def __init__(self, device):
+ self.values = {}
+ self.sim_imgs = None
+ self.log = logging.getLogger(f"{self.__class__.__name__} ({id(self)}) (dummy)")
+ self.log.debug(f"__init__({device!r})")
+
+ def get(self, prop):
+ val = self.values.get(prop, 0)
+ self.log.debug(f"{self.__class__.__name__}.get() -> {val}")
+ return val
+
+ def set(self, prop, val):
+ self.values[prop] = val
+ self.log.debug(f"{self.__class__.__name__}.set({val}) -> {val}")
+
+ def read(self):
+ # self.log.debug(f"{self.__class__.__name__}.read()")
+ if self.sim_imgs is None:
+ return False, None
+ else:
+ img_path = next(self.sim_imgs)
+ self.log.debug(f"loading image {img_path}")
+ frame = cv2.cvtColor(cv2.imread(str(img_path)), cv2.COLOR_BGR2RGB)
+ QThread.msleep(1000)
+ return True, frame
diff --git a/src/components/tecna_marposs_provaset_t3l_registers.py b/src/components/tecna_marposs_provaset_t3l_registers.py
index 573cf02..b3d1a8f 100644
--- a/src/components/tecna_marposs_provaset_t3l_registers.py
+++ b/src/components/tecna_marposs_provaset_t3l_registers.py
@@ -159,9 +159,9 @@ registers = {
# Write 0 to start the selected program
# Write a different number from 1 to n max programs to start a specific program.
"Reset running test": [102 - 1, {"dt": "16bit_uint", }],
- "Activate specific digital output": [103 - 1, {"dt": "16bit_uint", }],
+ "Activate specific digital output": [103 - 1, {"dt": "16bit_uint", "o": 1, }],
# Write the number from 1 to 16 of the digital output to activate (must be set as Free in Settings)
- "Reset specific digital output": [104 - 1, {"dt": "16bit_uint", }],
+ "Reset specific digital output": [104 - 1, {"dt": "16bit_uint", "o": 1, }],
# Write the number from 1 to 16 of the digital output to reset (must be set as Free in Settings)
"Activate digital output (bit mask)": [105 - 1, {"dt": "16bit_uint", }],
# Write 1 in the bit corresponding to the output to be activated
diff --git a/src/components/tecna_marposs_provaset_t3p_registers.py b/src/components/tecna_marposs_provaset_t3p_registers.py
index 2788293..1632d9f 100644
--- a/src/components/tecna_marposs_provaset_t3p_registers.py
+++ b/src/components/tecna_marposs_provaset_t3p_registers.py
@@ -130,9 +130,9 @@ registers = {
# Write 0 to start the selected program
# Write a different number from 1 to n max programs to start a specific program.
"Reset running test": [102 - 1, {"dt": "16bit_uint", }],
- "Activate specific digital output": [103 - 1, {"dt": "16bit_uint", }],
+ "Activate specific digital output": [103 - 1, {"dt": "16bit_uint", "o": 1, }],
# Write the number from 1 to 8 of the digital output to activate (must be set as Free in Settings)
- "Reset specific digital output": [104 - 1, {"dt": "16bit_uint", }],
+ "Reset specific digital output": [104 - 1, {"dt": "16bit_uint", "o": 1, }],
# Write the number from 1 to 8 of the digital output to reset (must be set as Free in Settings)
"Activate digital output (bit mask)": [105 - 1, {"dt": "16bit_uint", }],
# Write 1 in the bit corresponding to the output to be activated
diff --git a/src/components/tecna_screwdriver.py b/src/components/tecna_screwdriver.py
index 2628660..ac51ef4 100644
--- a/src/components/tecna_screwdriver.py
+++ b/src/components/tecna_screwdriver.py
@@ -13,7 +13,7 @@ class TecnaScrewdriver(Component):
def config_changed(self):
super().config_changed()
- self.enable_pin = int(self.config[self.name]["enable_pin"])
+ self.disable_pin = int(self.config[self.name]["disable_pin"])
self.status_pin = int(self.config[self.name]["status_pin"])
self.status_pin_mask = 1 << self.status_pin
@@ -21,9 +21,9 @@ class TecnaScrewdriver(Component):
def enable(self, enabled=True):
self.enabled = enabled
if self.enabled:
- self.request.emit({"Activate specific digital output": self.enable_pin})
+ self.request.emit({"Reset specific digital output": self.disable_pin})
else:
- self.request.emit({"Reset specific digital output": self.enable_pin})
+ self.request.emit({"Activate specific digital output": self.disable_pin})
@Component.reconfig_on_error
def disable(self, disabled=True):
@@ -35,8 +35,6 @@ class TecnaScrewdriver(Component):
# READ INFO
if data is None or data[-1] is None:
return
- print(f"val {data[-1][list(self.sources)[0]]['Digital inputs status (mask)']:016b}")
- print(f"mask { self.status_pin_mask:016b}")
screwed_flag = bool(data[-1][list(self.sources)[0]]["Digital inputs status (mask)"] & self.status_pin_mask)
screwed = screwed_flag and not self.last_screwed
self.last_screwed = screwed_flag
@@ -44,6 +42,5 @@ class TecnaScrewdriver(Component):
self.disable()
self.enable()
info = {"screwed": screwed}
- print(info)
self.log.debug(str(info))
super()._get([info])
diff --git a/src/components/uvc_camera.py b/src/components/uvc_camera.py
index cfc04a1..2f55a37 100644
--- a/src/components/uvc_camera.py
+++ b/src/components/uvc_camera.py
@@ -10,9 +10,10 @@ from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QDialog, QFormLayout, QLabel, QMessageBox,
QPushButton, QSizePolicy, QSlider)
-
if "--sim-camera" in sys.argv:
- from components.dummies.gxpy import DummyCamera
+ from components.dummies.cv2 import DummyVideoCapture as VideoCapture
+else:
+ from cv2 import VideoCapture
from datetime import datetime
@@ -29,19 +30,20 @@ class UVCCamera(Component):
self._last_frame = None
def config_changed(self):
+ self.camera = VideoCapture(0)
+ if self.camera is None:
+ raise AssertionError(f"camera not detected: 0")
if self.simulate:
- self.device_manager = None
- self.camera = DummyCamera()
- self.sim_imgs = cycle(sorted(pathlib.Path("data/simulation_images/").glob("*.png")))
- else:
- self.camera = cv2.VideoCapture(0)
-
+ self.camera.sim_imgs = cycle(sorted(pathlib.Path("data/simulation_images/").glob("*.png")))
self.resolution = {
"w": int(self.round_4(self.config[self.name]["horizontal_resolution"])),
"h": int(self.round_4(self.config[self.name]["vertical_resolution"])),
}
self._period = int(self.config[self.name].get("frame_time_ms", 300)) / 1000
- self.exposure_time = int(self.config[self.name]["exposure_time"])
+ exposure_time = self.config[self.name].get("exposure_time", None)
+ self.exposure_time = int(exposure_time) if exposure_time is not None else None
+ focus = self.config[self.name].get("focus", None)
+ self.focus = int(focus) if focus is not None else None
self.roi = {
"x": int(self.round_4(self.config[self.name].get("horizontal_crop_offset", 0))),
"w": int(self.round_4(self.config[self.name].get("horizontal_crop_resolution", self.resolution["w"]))),
@@ -56,7 +58,36 @@ class UVCCamera(Component):
"b": float(self.config[self.name].get("balance_blue", 1)),
}
self.lock.lock()
-
+ self.camera.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc("M", "J", "P", "G"))
+ self.camera.set(cv2.CAP_PROP_FPS, 15)
+ self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, self.resolution["w"])
+ self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, self.resolution["h"])
+ self.camera.set(cv2.CAP_PROP_AUTOFOCUS, 1)
+ if self.exposure_time is not None:
+ self.camera.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0)
+ self.camera.set(cv2.CAP_PROP_EXPOSURE, self.exposure_time)
+ else:
+ self.camera.set(cv2.CAP_PROP_AUTO_EXPOSURE, 3)
+ if self.focus is not None:
+ self.camera.set(cv2.CAP_PROP_FOCUS, self.focus)
+ self.camera.set(cv2.CAP_PROP_AUTOFOCUS, 0)
+ else:
+ self.camera.set(cv2.CAP_PROP_AUTOFOCUS, 1)
+ self.camera.set(cv2.CAP_PROP_GAIN, 1.0)
+ if self.auto_white_balance: # ONCE
+ self.camera.set(cv2.CAP_PROP_AUTO_WB, 1)
+ QThread.msleep(3000)
+ self.balance["r"] = self.camera.get(cv2.CAP_PROP_WHITE_BALANCE_RED_V)
+ self.balance["g"] = 1.0 # self.camera.get(cv2.)
+ self.balance["b"] = self.camera.get(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U)
+ self.camera.set(cv2.CAP_PROP_AUTO_WB, 0)
+ else:
+ self.camera.set(cv2.CAP_PROP_WHITE_BALANCE_RED_V, self.balance["r"])
+ # self.camera.set(cv2., self.balance["g"])
+ self.camera.set(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U, self.balance["b"])
+ self.gamma_lut = self.camera.get(cv2.CAP_PROP_GAMMA)
+ self.contrast_lut = self.camera.get(cv2.CAP_PROP_CONTRAST)
+ # self.color_correction = self.camera.get(cv2.)
self.edits = None
self.lock.unlock()
self.edits_enabled = "--camera-edits" in sys.argv
@@ -69,20 +100,15 @@ class UVCCamera(Component):
@Component.reconfig_on_error
def _get(self):
+ # print("UVC CAMERA", str(int(QThread.currentThreadId())), flush=True)
frame = None
self.lock.lock()
- if self.simulate:
- img_path = next(self.sim_imgs)
- self.log.debug(f"loading image {img_path}")
- frame = cv2.cvtColor(cv2.imread(str(img_path)), cv2.COLOR_BGR2RGB)
- QThread.msleep(1000)
- else:
- self.camera.TriggerSoftware.send_command()
- frame = self.camera.read()
- if frame is not None:
- frame = np.rot90(frame, self.roi["r"])
+ ret, frame = self.camera.read()
+ if ret and not self.simulate:
+ frame = frame[self.roi["y"]:self.roi["y"] + self.roi["h"], self.roi["x"]:self.roi["x"] + self.roi["w"]]
+ frame = np.rot90(frame, self.roi["r"])
self.lock.unlock()
- if frame is None:
+ if not ret:
self.log.error("failed to get frame")
elif self.edits_enabled:
frame = self.edit(frame, self.edits)
diff --git a/src/main.py b/src/main.py
index 232fbcf..d0352ac 100644
--- a/src/main.py
+++ b/src/main.py
@@ -54,8 +54,8 @@ try:
# IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGHING
from components import (ArchiveSynchronizer, GalaxyCamera, Multicomp730424,
NeoPixels, Os_Label_Printer, RemoteAPI,
- TecnaMarpossProvasetT3, TecnaScrewdriver, Vision,
- VisionSaver)
+ TecnaMarpossProvasetT3, TecnaScrewdriver,
+ UVCCamera, Vision, VisionSaver)
from lib.db import Users
from lib.helpers import ConfigReader
from PyQt5.QtCore import QObject, QThread, pyqtSignal
@@ -86,6 +86,7 @@ try:
"remote_api": {"c": RemoteAPI, "k": {"main": self}},
"screwdriver": {"c": TecnaScrewdriver, "k": {"paused": True}},
"tecna_t3": {"c": TecnaMarpossProvasetT3, "k": {"paused": True}},
+ "uvc_camera": {"c": UVCCamera, "k": {"paused": True}},
"vision_saver": {"c": VisionSaver, "t": False},
"vision": {"c": Vision, "k": {"paused": True}},
}
@@ -119,7 +120,9 @@ try:
QMessageBox.critical(None, "Errore Banco", f"Non e stato possibile connettersi al banco:\n\n{e}")
quit()
# connect camera frames to vision
- if "vision" in self.components and "galaxy_camera" in self.components:
+ if "vision" in self.components and "uvc_camera" in self.components:
+ self.components["vision"].set_sources({"uvc_camera": self.components["uvc_camera"].out})
+ elif "vision" in self.components and "galaxy_camera" in self.components:
self.components["vision"].set_sources({"galaxy_camera": self.components["galaxy_camera"].out})
# connect tecna to screwdriver
if "screwdriver" in self.components and "tecna_t3" in self.components:
diff --git a/src/test/tdb.py b/src/test/tdb.py
new file mode 100644
index 0000000..5e4b773
--- /dev/null
+++ b/src/test/tdb.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+import faulthandler
+import signal
+import sys
+from uuid import uuid4 as uuid
+
+from peewee import AutoField, Model, TextField
+from playhouse.sqlite_ext import SqliteExtDatabase
+from PyQt5.QtCore import QObject, QThread, QTimer
+
+# SETUP QUITTING ON CTRL+C
+signal.signal(signal.SIGINT, quit)
+
+# SETUP FAULTHANDLER
+faulthandler.enable(file=sys.stderr, all_threads=True)
+
+
+db = SqliteExtDatabase(
+ "/tmp/tdb.sqlite3",
+ pragmas={ # see https://www.sqlite.org/pragma.html
+ "auto_vacuum": 1,
+ "busy_timeout": 5000,
+ "cache_size": round(-64e3),
+ "foreign_keys": 1,
+ "ignore_check_constraints": 0,
+ "journal_mode": "wal",
+ "synchronous": 0,
+ },
+ timeout=5
+)
+
+
+class BaseModel(Model):
+ """A base model that will use our Sqlite database."""
+
+ class Meta:
+ global db
+ database = db
+
+
+class Data(BaseModel):
+ id = AutoField(primary_key=True, unique=True, null=False)
+ data = TextField(null=True, default=lambda: uuid().hex)
+
+
+models_reference = {
+ "data": Data,
+}
+
+db.connect()
+db.create_tables(list(models_reference.values()))
+
+
+class Threaded(QObject):
+ def __init__(self):
+ super().__init__()
+ self._timer = QTimer()
+
+ @db.connection_context()
+ # @db.atomic()
+ def start(self):
+ while True:
+ data = Data()
+ data.save()
+ print(str(int(QThread.currentThreadId())), data.id, flush=True)
+ # QThread.msleep(2000)
+
+
+components = {1: Threaded()}
+threads = {}
+for component_name in components:
+ threads[component_name] = QThread()
+ threads[component_name].setTerminationEnabled(True)
+ components[component_name].moveToThread(threads[component_name])
+for component_name, thread in threads.items():
+ component = components[component_name]
+ thread.started.connect(component.start)
+ thread.start()
+ if "--debugger-workaround" in sys.argv:
+ QApplication.processEvents()
+ # QThread.msleep(1000)
+ QApplication.processEvents()
+while True:
+ data = Data()
+ data.save()
+ print("main", data.id, flush=True)
+ # QThread.msleep(2000)
diff --git a/src/test/test_import_tubi_riscaldati.csv b/src/test/test_import_tubi_riscaldati.csv
index 6f3021e..b93f61d 100644
--- a/src/test/test_import_tubi_riscaldati.csv
+++ b/src/test/test_import_tubi_riscaldati.csv
@@ -1,110 +1,110 @@
-codice_ricetta,codice_ricetta_cl,cliente,part_number,verifica_connettore_abilitata,connettore,verifica_codice_a_barre_abilitata,verifica_codice_a_barre_abilitata_cl,codice_a_barre,codice_a_barre_cl,verifica_resistenza_connettore_abilitata,scala_resistenza,resistenza_attesa,tolleranza_resistenza,prova_tenuta_abilitata,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotmento,stampa_etichetta_abilitata,modello_etichetta,modello_etichetta_cl
-R53926,R53926/CL,Merlo,,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54095,R54095/CL,Venieri,1803827-01,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53928,R53928/CL,Venieri,1803828,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53929,R53929/CL,Venieri,1803829,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54313,R54313/CL,Argo Tractors,6671546A3,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,10.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54314,R54314/CL,Argo Tractors,6671547A3,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.13,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54315,R54315/CL,Argo Tractors,6671549A3,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54020,R54020/CL,Argo Tractors,6703587A,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54021,R54021/CL,Argo Tractors,6703588A,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,9.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54026,R54026/CL,Argo Tractors,6703589A,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53645,R53645/CL,Argo Tractors,6688903,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,12.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53644,R53644/CL,Argo Tractors,6688905,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.1,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53643,R53643/CL,Argo Tractors,6688904,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-180.3.830,180.3.830/CL,Venieri,180.3.830,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-180.3.831,180.3.831/CL,Venieri,180.3.831,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54335,R54335/CL,Argo Tractors,6693686A1,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.34,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54336,R54336/CL,Argo Tractors,6691394A1,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.8,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54337,R54337/CL,Argo Tractors,6693687A3,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.95,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54732,R54732/CL,Argo Tractors,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54276,R54276/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53003548,53003548/CL,Manitou,53003548,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.25,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-5802969810,5802969810/CL,FPT,5802969810,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-5802933707,5802933707/CL,FPT,5802933707,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-5802933703,5802933703/CL,FPT,5802933703,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54815,R54815/CL,Avoni,R54815,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54817,R54817/CL,Avoni,R54817,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54819,R54819/CL,Avoni,R54819,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R55202,R55202/CL,Merlo,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-CHF-6156,CHF-6156/CL,Sutphen,CHF-6156,x,SCR3,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-CHF-6157,CHF-6157/CL,Sutphen,CHF-6157,x,SCR3,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-CHF-6158,CHF-6158/CL,Sutphen,CHF-6158,x,SCR3,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54783/1,R54783/1/CL,Irum,21.003808,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.15,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54785/1,R54785/1/CL,Irum,21.003809,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54784/1,R54784/1/CL,Irum,21.00381,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54674,R54674/CL,Merlo,125637,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.87,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54293,R54293/CL,FPT,5802933678,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54294,R54294/CL,FPT,5802933689,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54297,R54297/CL,FPT,5802969802,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54531,R54531/CL,FPT,5802969811,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54298,R54298/CL,FPT,5802933697,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54299,R54299/CL,FPT,5802933700,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3810,145-3810/CL,CRANE CARRIER,145-3810,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3811,145-3811/CL,CRANE CARRIER,145-3811,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3812,145-3812/CL,CRANE CARRIER,145-3812,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3813,145-3813/CL,CRANE CARRIER,145-3813,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.1,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3814,145-3814/CL,CRANE CARRIER,145-3814,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3815,145-3815/CL,CRANE CARRIER,145-3815,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3830,145-3830/CL,CRANE CARRIER,145-3830,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-145-3831,145-3831/CL,CRANE CARRIER,145-3831,x,SCR10,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-465-012,465-012/CL,INDIANA PHOENIX,465-012,x,SCR11,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-465-013,465-013/CL,INDIANA PHOENIX,465-013,x,SCR11,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-465-014,465-014/CL,INDIANA PHOENIX,465-014,x,SCR11,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R55177,R55177/CL,Avoni,R55177,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54824,R54824/CL,Avoni,R54824,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54826,R54826/CL,Avoni,R54826,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54828,R54828/CL,Avoni,R54828,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54842,R54842/CL,Deutz,R54842,x,SCR9,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R55144,R55144/CL,Deutz,R55144,x,SCR8,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R55145,R55145/CL,Deutz,R55145,x,SCR8,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54533,R54533/CL,FPT,5802938582,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54535,R54535/CL,FPT,5802970303,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54258/C1,R54258/C1/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54258/C2,R54258/C2/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.97,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54258/C3,R54258/C3/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,4.21,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54258/C4,R54258/C4/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.94,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54259/C1,R54259/C1/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54259/C2,R54259/C2/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.97,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54259/C3,R54259/C3/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,4.21,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54259/C4,R54259/C4/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.94,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54276/C1,R54276/C1/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54276/C2,R54276/C2/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.8,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54276/C3,R54276/C3/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54276/C4,R54276/C4/CL,Bimotor,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-1034955,1034955/CL,Hattat,1034955,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.45,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-1034956,1034956/CL,Hattat,1034956,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-1034957,1034957/CL,Hattat,1034957,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,10.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-1034982,1034982/CL,Hattat,1034982,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54915,R54915/CL,Himoinsa,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54916,R54916/CL,Himoinsa,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R55192,R55192/CL,Himoinsa,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-6703994,6703994/CL,Argo Tractors,6703994,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,4.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54788,R54788/CL,Venieri,,x,SCR8,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54789,R54789/CL,Venieri,,x,SCR8,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R54790,R54790/CL,Venieri,,x,SCR9,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-11519588,11519588/CL,Vanhool,11519588,x,SCR1,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-11519589,11519589/CL,Vanhool,11519589,x,SCR1,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,7.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-11519590,11519590/CL,Vanhool,11519590,x,SCR1,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,9.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53020608,53020608/CL,Manitou,53020608,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53020610,53020610/CL,Manitou,53020610,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53020612,53020612/CL,Manitou,53020612,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53027246,53027246/CL,Manitou,53027246,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53027247,53027247/CL,Manitou,53027247,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53027248,53027248/CL,Manitou,53027248,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53027252,53027252/CL,Manitou,53027252,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,20.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-53027253,53027253/CL,Manitou,53027253,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117342,117342/CL,Merlo,117342,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117343,117343/CL,Merlo,117343,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117344,117344/CL,Merlo,117344,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117345,117345/CL,Merlo,117345,x,SCR6,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117346,117346/CL,Merlo,117346,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117347,117347/CL,Merlo,117347,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,5.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117536,117536/CL,Merlo,117536,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-117537,117537/CL,Merlo,117537,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53861,R53861/CL,Argo Tractors,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,6.43,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53847,R53847/CL,Argo Tractors,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,3.47,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53848,R53848/CL,Argo Tractors,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,9.04,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53849,R53849/CL,Argo Tractors,,x,SCR2,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,9.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53919,R53919/CL,Merlo,124938,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,9.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
-R53920,R53920/CL,Merlo,124939,x,SCR7,x,,{DRW}-{ggmmaahhmmxxxxx},,x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+codice_ricetta,codice_ricetta_cl,cliente,part_number,verifica_connettore_abilitata,connettore,verifica_codice_a_barre_abilitata,verifica_codice_a_barre_abilitata_cl,codice_a_barre_cl_stampato,codice_a_barre_input,verifica_resistenza_connettore_abilitata,scala_resistenza,resistenza_attesa,tolleranza_resistenza,prova_tenuta_abilitata,tempo_pre_riempimento,pressione_pre_riempimento,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotmento,stampa_etichetta_abilitata,modello_etichetta,modello_etichetta_cl
+R53926,R53926/1,Merlo,,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54095,R54095/1,Venieri,1803827-01,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53928,R53928/1,Venieri,1803828,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53929,R53929/1,Venieri,1803829,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54313,R54313/1,Argo Tractors,6671546A3,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,10.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54314,R54314/1,Argo Tractors,6671547A3,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.13,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54315,R54315/1,Argo Tractors,6671549A3,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54020,R54020/1,Argo Tractors,6703587A,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54021,R54021/1,Argo Tractors,6703588A,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,9.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54026,R54026/1,Argo Tractors,6703589A,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53645,R53645/1,Argo Tractors,6688903,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,12.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53644,R53644/1,Argo Tractors,6688905,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.1,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53643,R53643/1,Argo Tractors,6688904,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+180.3.830,180.3.830/1,Venieri,180.3.830,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+180.3.831,180.3.831/1,Venieri,180.3.831,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54335,R54335/1,Argo Tractors,6693686A1,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.34,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54336,R54336/1,Argo Tractors,6691394A1,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.8,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54337,R54337/1,Argo Tractors,6693687A3,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.95,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54732,R54732/1,Argo Tractors,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54276,R54276/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53003548,53003548/1,Manitou,53003548,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.25,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+5802969810,5802969810/1,FPT,5802969810,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+5802933707,5802933707/1,FPT,5802933707,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+5802933703,5802933703/1,FPT,5802933703,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54815,R54815/1,Avoni,R54815,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54817,R54817/1,Avoni,R54817,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54819,R54819/1,Avoni,R54819,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R55202,R55202/1,Merlo,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+CHF-6156,CHF-6156/1,Sutphen,CHF-6156,x,SCR3,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+CHF-6157,CHF-6157/1,Sutphen,CHF-6157,x,SCR3,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+CHF-6158,CHF-6158/1,Sutphen,CHF-6158,x,SCR3,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54783/1,R54783/1/1,Irum,21.003808,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.15,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54785/1,R54785/1/1,Irum,21.003809,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54784/1,R54784/1/1,Irum,21.00381,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54674,R54674/1,Merlo,125637,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.87,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54293,R54293/1,FPT,5802933678,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54294,R54294/1,FPT,5802933689,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54297,R54297/1,FPT,5802969802,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54531,R54531/1,FPT,5802969811,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54298,R54298/1,FPT,5802933697,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54299,R54299/1,FPT,5802933700,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3810,145-3810/1,CRANE CARRIER,145-3810,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3811,145-3811/1,CRANE CARRIER,145-3811,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3812,145-3812/1,CRANE CARRIER,145-3812,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3813,145-3813/1,CRANE CARRIER,145-3813,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.1,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3814,145-3814/1,CRANE CARRIER,145-3814,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3815,145-3815/1,CRANE CARRIER,145-3815,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3830,145-3830/1,CRANE CARRIER,145-3830,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+145-3831,145-3831/1,CRANE CARRIER,145-3831,x,SCR10,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+465-012,465-012/1,INDIANA PHOENIX,465-012,x,SCR11,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+465-013,465-013/1,INDIANA PHOENIX,465-013,x,SCR11,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+465-014,465-014/1,INDIANA PHOENIX,465-014,x,SCR11,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R55177,R55177/1,Avoni,R55177,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54824,R54824/1,Avoni,R54824,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54826,R54826/1,Avoni,R54826,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54828,R54828/1,Avoni,R54828,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54842,R54842/1,Deutz,R54842,x,SCR9,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R55144,R55144/1,Deutz,R55144,x,SCR8,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R55145,R55145/1,Deutz,R55145,x,SCR8,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54533,R54533/1,FPT,5802938582,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54535,R54535/1,FPT,5802970303,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54258/C1,R54258/C1/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54258/C2,R54258/C2/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.97,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54258/C3,R54258/C3/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,4.21,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54258/C4,R54258/C4/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.94,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54259/C1,R54259/C1/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54259/C2,R54259/C2/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.97,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54259/C3,R54259/C3/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,4.21,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54259/C4,R54259/C4/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.94,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54276/C1,R54276/C1/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54276/C2,R54276/C2/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.8,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54276/C3,R54276/C3/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54276/C4,R54276/C4/1,Bimotor,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+1034955,1034955/1,Hattat,1034955,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.45,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+1034956,1034956/1,Hattat,1034956,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+1034957,1034957/1,Hattat,1034957,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,10.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+1034982,1034982/1,Hattat,1034982,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54915,R54915/1,Himoinsa,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54916,R54916/1,Himoinsa,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R55192,R55192/1,Himoinsa,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+6703994,6703994/1,Argo Tractors,6703994,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,4.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54788,R54788/1,Venieri,,x,SCR8,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54789,R54789/1,Venieri,,x,SCR8,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R54790,R54790/1,Venieri,,x,SCR9,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+11519588,11519588/1,Vanhool,11519588,x,SCR1,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+11519589,11519589/1,Vanhool,11519589,x,SCR1,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,7.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+11519590,11519590/1,Vanhool,11519590,x,SCR1,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,9.4,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53020608,53020608/1,Manitou,53020608,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53020610,53020610/1,Manitou,53020610,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53020612,53020612/1,Manitou,53020612,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53027246,53027246/1,Manitou,53027246,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53027247,53027247/1,Manitou,53027247,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53027248,53027248/1,Manitou,53027248,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53027252,53027252/1,Manitou,53027252,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,20.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+53027253,53027253/1,Manitou,53027253,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,0.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117342,117342/1,Merlo,117342,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117343,117343/1,Merlo,117343,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.0,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117344,117344/1,Merlo,117344,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117345,117345/1,Merlo,117345,x,SCR6,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,2.3,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117346,117346/1,Merlo,117346,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.6,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117347,117347/1,Merlo,117347,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,5.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117536,117536/1,Merlo,117536,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+117537,117537/1,Merlo,117537,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,6.9,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53861,R53861/1,Argo Tractors,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,6.43,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53847,R53847/1,Argo Tractors,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,3.47,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53848,R53848/1,Argo Tractors,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,9.04,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53849,R53849/1,Argo Tractors,,x,SCR2,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,9.7,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53919,R53919/1,Merlo,124938,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,9.5,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
+R53920,R53920/1,Merlo,124939,x,SCR7,x,,{RECIPE}-{DD}{MO}{YY}{SN5},{RECIPE}/1-{DD}{MO}{YY}{SN5},x,500.0,8.2,20.0,x,0,1000,5,20,5,5,5,30,15000,30,1,100,x,ETA013.prn,ETACL.prn
diff --git a/src/ui/test/test.py b/src/ui/test/test.py
index 3571607..4b8257b 100755
--- a/src/ui/test/test.py
+++ b/src/ui/test/test.py
@@ -48,14 +48,18 @@ class Test(Widget):
"print": {"label_printer", },
"connector": {"multicomp", },
"resistance": {"multicomp", },
- "vision": {"galaxy_camera", "vision", "vision_saver", }, # "neo_pixels", },
+ "vision": {("uvc_camera", "galaxy_camera", ), "vision", "vision_saver", }, # "neo_pixels", },
"screws": {"screwdriver", "tecna_t3", },
}
self.unsupported_steps = set()
for step_name, dependencies in self.steps_dependencies.items():
for dependency in dependencies:
- if dependency not in self.components or not self.components[dependency].ready:
- self.unsupported_steps.add(step_name)
+ if isinstance(dependency, tuple):
+ if all([d not in self.components or not self.components[d].ready for d in dependency]):
+ self.unsupported_steps.add(step_name)
+ else:
+ if dependency not in self.components or not self.components[dependency].ready:
+ self.unsupported_steps.add(step_name)
# INIT CYCLE STATES
self.cycle_available_steps = {
# "assembly_1": Test_Assembly(img_path=self.select_step_img("assembly_1"), text=u"INSERIRE SENSORE", widget=None),
@@ -290,13 +294,29 @@ class Test(Widget):
unsupported_steps.add(step.type)
else:
for dependency in self.steps_dependencies.get(step.type, []):
- if dependency not in self.components:
- unsupported_steps.add(step.type)
+ if isinstance(dependency, tuple):
+ if all([d not in self.components for d in dependency]):
+ unsupported_steps.add(step.type)
+ else:
+ unready = set()
+ for d in dependency:
+ if d in self.components:
+ if not self.components[d].ready:
+ self.components[d].reconfigure()
+ if not self.components[d].ready:
+ unready.add(d)
+ else:
+ unready.add(d)
+ if unready == set(dependency):
+ missing_components.add(" or ".join(dependency))
else:
- if not self.components[dependency].ready:
- self.components[dependency].reconfigure()
+ if dependency not in self.components:
+ unsupported_steps.add(step.type)
+ else:
if not self.components[dependency].ready:
- missing_components.add(dependency)
+ self.components[dependency].reconfigure()
+ if not self.components[dependency].ready:
+ missing_components.add(dependency)
if len(unsupported_steps):
QMessageBox.critical(None, "Errore Ricetta", f"Questa ricetta contiene uno o piu step non supportati da questo banco:\n{', '.join(sorted(unsupported_steps))}\nModificare la ricetta adeguatamente.")
if len(missing_components):
diff --git a/src/ui/test_vision/test_vision.py b/src/ui/test_vision/test_vision.py
index c97a774..dbaf5d7 100644
--- a/src/ui/test_vision/test_vision.py
+++ b/src/ui/test_vision/test_vision.py
@@ -32,15 +32,22 @@ class Test_Vision(Test_Test):
if self.run_once is True and self.done is True and self.done_ok is True:
return
# setup camera-vision loop
- self.components["galaxy_camera"].set_period(period=None) # only get frame on request
- self.components["galaxy_camera"].add_sources({"test_vision": self.request_frame})
+ if "uvc_camera" in self.components:
+ self.components["uvc_camera"].set_period(period=None) # only get frame on request
+ self.components["uvc_camera"].add_sources({"test_vision": self.request_frame})
+ elif "galaxy_camera" in self.components:
+ self.components["galaxy_camera"].set_period(period=None) # only get frame on request
+ self.components["galaxy_camera"].add_sources({"test_vision": self.request_frame})
self.request_frame_connection = self.components["vision"].out.connect(self.request_frame) # request new frame as soon as vision finishes
self.get_connection = self.components["vision"].out.connect(self.get)
if "neo_pixels" in self.components and self.components["neo_pixels"].ready:
self.components["neo_pixels"].set_all_pixel_color("#ffffff")
self.components["vision"].set_recipe(self.step.spec.get("recipe", None))
self.components["vision"].resume()
- self.components["galaxy_camera"].resume()
+ if "uvc_camera" in self.components:
+ self.components["uvc_camera"].resume()
+ elif "galaxy_camera" in self.components:
+ self.components["galaxy_camera"].resume()
self.request_frame.emit() # request first frame
# DETECTIONS TABLE
# hide previous results
@@ -48,11 +55,17 @@ class Test_Vision(Test_Test):
def stop(self):
# disable camera-vision loop
- self.components["galaxy_camera"].pause()
+ if "uvc_camera" in self.components:
+ self.components["uvc_camera"].pause()
+ elif "galaxy_camera" in self.components:
+ self.components["galaxy_camera"].pause()
self.components["vision"].pause()
self.disconnect(self.get_connection)
self.disconnect(self.request_frame_connection)
- self.components["galaxy_camera"].remove_sources(["test_vision", ])
+ if "uvc_camera" in self.components:
+ self.components["uvc_camera"].remove_sources(["test_vision", ])
+ elif "galaxy_camera" in self.components:
+ self.components["galaxy_camera"].remove_sources(["test_vision", ])
super().stop()
# def reset(self):