usb-5862 tbt

This commit is contained in:
germano 2023-01-03 17:57:14 +01:00
parent ae8561c05a
commit 001f71b8dc
14 changed files with 314 additions and 204 deletions

View File

@ -13,6 +13,7 @@ galaxy_camera: absent
; uvc_camera: present
; vision_saver: present
; vision: present
digital_io: absent
[galaxy_camera]
horizontal_resolution: 2448

View File

@ -0,0 +1,31 @@
[machine]
description = ST-TEN-4 - TERMOFORMATURA MAPPANO
[hardware_config]
archive_synchronizer: present
; galaxy_camera: present
uvc_camera: present
label_printer: present
neo_pixels: present
remote_api: absent
tecna_t3: present
vision_saver: absent
vision: absent
screwdriver: present
[tecna_t3]
port: COM4
model: t3l
[neo_pixels]
port: COM5
[recipe]
recipe_name_field: codice_ricetta
part_number_field: codice_prodotto
label_template_field: modello_etichetta
description_field: descrizione
[label_printer]
platform: windows
printer: zd420

View File

@ -0,0 +1,35 @@
[machine]
description = ST-TEN-5 IVECO DAILY ELETTRICO
[hardware_config]
archive_synchronizer: present
; galaxy_camera: present
uvc_camera: present
label_printer: present
neo_pixels: present
remote_api: absent
tecna_t3: present
vision_saver: absent
vision: absent
screwdriver: present
digital_io: present
[tecna_t3]
port: COM4
model: t3l
[neo_pixels]
port: COM5
[recipe]
recipe_name_field: codice_ricetta
part_number_field: codice_prodotto
label_template_field: modello_etichetta
description_field: descrizione
[label_printer]
platform: windows
printer: zd420
[digital_io]
id: USB-5862,BID#0

View File

@ -0,0 +1,35 @@
[machine]
description = ST-TEN-6 DOPPIA PROVA PRESSIONE 6/20 BAR
[hardware_config]
archive_synchronizer: present
; galaxy_camera: present
uvc_camera: present
label_printer: present
neo_pixels: present
remote_api: absent
tecna_t3: present
vision_saver: absent
vision: absent
screwdriver: present
digital_io: present
[tecna_t3]
port: COM4
model: t3l
[neo_pixels]
port: COM5
[recipe]
recipe_name_field: codice_ricetta
part_number_field: codice_prodotto
label_template_field: modello_etichetta
description_field: descrizione
[label_printer]
platform: windows
printer: zd420
[digital_io]
id: USB-5860,BID#0

View File

@ -1,33 +0,0 @@
[machine]
description = ~~~~~~~~~~ THIS ~~~~~~~~~~
[hardware_config]
archive_synchronizer: present
galaxy_camera: present
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
saver: present
saver_label_template: 6
saver_print_on_fail: yes
saver_label_count: 1
[multicomp]
port: /dev/ttyACM0
[neo_pixels]
port: /dev/ttyACM1
[archive_synchronizer]
poll_time: 6
hold_time: 1

View File

@ -1,6 +1,7 @@
#!/bin/bash -x
cd "$(dirname "$0")"
#source "./venv/bin/activate" || source "./venv/Scripts/activate" || :
source "./venv/bin/activate" || source "./venv/Scripts/activate" || :
#python3 -m pip install --upgrade qt5-tools
#"$(python3 -c "import sys; print(sys.path[-1])")/qt5_applications/Qt/bin/designer" $*
$(pwd)/venv/lib/python3.9/site-packages/qt5_applications/Qt/bin/designer $*
"$(python3 -c "import sys; print(sys.path[-1])")/qt5_applications/Qt/bin/designer" $*
#$(pwd)/venv/lib/python3.9/site-packages/qt5_applications/Qt/bin/designer $*
#$(pwd)/venv/lib/python3.8/site-packages/qt5_applications/Qt/bin/designer $*

View File

@ -140,7 +140,8 @@ class Component(QObject):
self._set_requestors.connect(self._do_set_requestors)
self._set_period.connect(self._do_set_period)
if self.config is not None:
self.config.updated.connect(self.reconfigure)
if self.config.updated is not None:
self.config.updated.connect(self.reconfigure)
self._do_reconfigure()
self._init_periodic()
self._started = True

View File

@ -23,13 +23,7 @@ else:
import lib.dummies.libbiodaq as libbiodaq
class USB_5860(Component):
class DioPortDir(Enum):
Input = 0x00
LoutHin = 0x0F
LinHout = 0xF0
Output = 0xFF
class USB_586x(Component):
class DeviceInformation(ctypes.Structure):
_fields_ = [
('DeviceNumber', ctypes.c_uint32),
@ -38,13 +32,23 @@ class USB_5860(Component):
('Description', ctypes.c_wchar_p)
]
def __init__(self, bench, name, config):
super().__init__(bench, name, config)
def __init__(self, config):
super().__init__(config)
self.mutex = QMutex()
# DEVICE INFORMATION
self.id=config.id
if "5860" in self.id:
self.type = "5860"
self.in_size = 1
self.out_size = 1
if "5862" in self.id:
self.type = "5862"
self.in_size = 2
self.out_size = 2
self.info = self.DeviceInformation()
self.info.Description = "USB-5860,BID#0"
#self.info.DeviceNumber = -1
self.info.Description = config.id
# self.info.DeviceNumber = -1
self.info.DeviceMode = 1
self.info.ModuleIndex = 0
# DIGITAL INPUTS CLASS
@ -87,8 +91,9 @@ class USB_5860(Component):
self.do_init_status = self.do_setSelectedDevice(self.do_ctrl, ctypes.byref(self.info))
# SET ALL RELAYS OFF
for bit in range(0, 8):
self.set_bit(0, bit, False)
for bit in range(0, self.out_size*8):
self.set_bit(int(bit/8), bit%8, False)
self.state_delay = 1
self.last_get = None
self.state_count = None
@ -134,19 +139,20 @@ class USB_5860(Component):
self.mutex.lock()
read = []
if win:
ret=self.di_read(0, 1 )
if ret[0]== ErrorCode.Success:
self.buffer=ret[1]
byte = self.buffer[0]
read.append([bool(byte & m) for m in self.masks])
ret = self.di_read(0, self.in_size)
if ret[0] == ErrorCode.Success:
self.buffer = ret[1]
for byte_num in range(len(self.buffer)):
byte = self.buffer[byte_num]
read.append([bool(byte & m) for m in self.masks])
else:
self.buffer = None
else:
self.di_read(self.di_ctrl, 0, 1, self.buffer)
for byte in range(len(self.buffer)):
byte = ~int.from_bytes(self.buffer[byte], "little")
for byte_num in range(len(self.buffer)):
byte = int.from_bytes(self.buffer[byte_num], "little")
read.append([bool(byte & m) for m in self.masks])
self.mutex.unlock()

View File

@ -79,6 +79,7 @@ try:
try:
# READ CONFIG
self.config = ConfigReader()
self.config["autotest_done"]=False
# INIT COMPONENT
self.components_specs = {
"archive_synchronizer": {"c": ArchiveSynchronizer},
@ -142,9 +143,6 @@ try:
self.main_window.archive_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Archive(hide_cloud_image="vision_saver" not in self().components)))
if "--archive" in sys.argv:
self.main_window.archive_a.trigger()
# self.main_window.autotests_archive_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Autotests_Archive()))
# if "--autotests-archive" in sys.argv:
# self.main_window.autotests_archive_a.trigger()
self.main_window.about_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(About()))
if "--about" in sys.argv:
self.main_window.about_a.trigger()

View File

@ -10,6 +10,7 @@ pillow
pycoral
pymodbus
pyqt5
pyqt5-tools
pyserial
pyserial-asyncio
requests

View File

@ -1,18 +0,0 @@
import time
from src.components.usb_5860 import USB_5860
digital_io = USB_5860(None, None, None)
digital_io.start()
out_val = 0
while True:
res = digital_io.set_bit(0, 0, out_val)
input_data = digital_io.get()
print("in:{} out:{}".format(bytes(input_data[0]), out_val))
time.sleep(1)
if out_val == 0:
out_val = 1
else:
out_val = 0

32
src/test/test_usb586x.py Normal file
View File

@ -0,0 +1,32 @@
import sys
import time
from src.components.usb_586x import USB_586x
class config:
id = None
updated= None
if "--5862" in sys.argv:
config.id = "USB-5860,BID#0"
out_size = 16
else:
config.id = "USB-5860,BID#0"
out_size = 8
digital_io = USB_586x(config)
digital_io.start()
out_num = 0
while True:
out_bit = out_num % 8
out_byte = int(out_num/8)
res = digital_io.set_bit(out_byte, out_bit, 1)
time.sleep(0.5)
res2 = digital_io.set_bit(out_byte, out_bit, 0)
input_data = digital_io.get()
print("in:{} out:{}".format(bytes(input_data[0]), out_num))
time.sleep(0.5)
out_num += 1
if out_num == out_size:
out_num = 0

View File

@ -6,27 +6,45 @@
<rect>
<x>0</x>
<y>0</y>
<width>955</width>
<height>161</height>
<width>1221</width>
<height>252</height>
</rect>
</property>
<property name="windowTitle">
<string>Leak Step Editor</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="title">
<string>Elettrovalvole</string>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<item row="1" column="1">
<widget class="QSpinBox" name="relay_config">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Configurazione relè</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="font">
<font>
@ -39,13 +57,6 @@
<string>Pre-Riempimento</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="3" column="1">
<widget class="QSpinBox" name="pre_filling_pressure_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="pre_filling_time_sb">
<property name="maximum">
@ -81,10 +92,117 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="pre_filling_pressure_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="2">
<item>
<widget class="QGroupBox" name="groupBox_7">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="title">
<string>Riempimento</string>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>PR+ Pressione Max</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>T1: Riempimento</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_20">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="settling_pressure_min_percent_sb">
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="filling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>PR- Pressione Min</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="settling_pressure_max_percent_sb">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_26">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_27">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>T2: Assestamento</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="settling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_25">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="font">
<font>
@ -187,107 +305,7 @@
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QGroupBox" name="groupBox_7">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="title">
<string>Riempimento</string>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>PR+ Pressione Max</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>T1: Riempimento</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_20">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="settling_pressure_min_percent_sb">
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="filling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>PR- Pressione Min</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="settling_pressure_max_percent_sb">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_26">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_27">
<property name="text">
<string>%</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>T2: Assestamento</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="settling_time_sb">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_25">
<property name="text">
<string>s</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="3">
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="font">
<font>

View File

@ -96,7 +96,8 @@ class Test(Widget):
self.autotest_cycle_steps = None
if "--no-autotest" not in sys.argv:
self.autotest_period = 12 * 60 * 60 * 1000
self.request_autotest("init")
if not self.config["autotest_done"]:
self.request_autotest("init")
else:
self.autotest_period = None
# INIT TEST DATA
@ -223,6 +224,7 @@ class Test(Widget):
self.autotesting = False
self.autotesting_reason = None
self.cycle_index = -1
self.config["autotest_done"] = True
if not self.autotesting:
if len(self.cycle_steps):
# goto next step in cycle_steps