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):