mikrocontroller.net

Forum: Projekte & Code SmuView - Eine sigrok GUI für Netzteil, Multimeter und mehr


Autor: Frank S. (knarfs)
Datum:
Angehängte Dateien:

Bewertung
10 lesenswert
nicht lesenswert
Hallo Zusammen,

ich mochte gern mein Projekt SmuView vorstellen:

https://sigrok.org/wiki/SmuView
https://github.com/knarfS/smuview

SmuView ist eine GUI, welche die sigrok Library verwendet und es 
ermöglicht Netzteile, elektronische Lasten, Multimeter, LCR Meter, 
Waagen, usw. zu steuern und Daten zu erfassen.
Das SMU in SmuView steht für Source Measure Unit. Aktuell wird das noch 
nicht erfüllt, doch ich arbeite daran ;)

Leider werden momentan noch nicht alle Netzteile und Lasten unterstützt, 
da eine Codeanpassung in der sigrok Library notwendig ist (fehlender 
Mutex). Die unterstützten Geräte sind im Wiki (s.o.) gelistet.
Damit die Liste erweitert werden kann, bin ich auf Unterstützung 
angewiesen, um die Änderungen in sigrok zu testen.

SmuView befindet sich in einem frühen Entwicklungsstadium und ist 
sicherlich noch nicht fehlerfrei, aber bei meinen Tests auf 
verschiedenen Plattformen lief es stabil.

Was bereits geht:
- Steuerung von Geräten
- Daten der Geräte erfassen
- Multiplikation, Division, Integration über Zeit von einen oder 
mehreren Daten-Kanälen.
- Diverse Darstellungen der Kanäle (Panels, Plots, Listen, ...)
- Export der gesammelten Daten als CSV

Was ich noch implementieren will:
- Verbesserung der GUI (z.B. der Plot-Ansicht)
- Programmierbarkeit der angeschlossenen Geräte mithilfe eines 
Flowgraphs
- Programmierbarkeit der angeschlossenen Geräte mithilfe eines Python 
Scripts

Executables der letzten Entwicklerversion können hier herunter geladen 
werden:

https://github.com/knarfS/smuview/releases/

Sicherlich habe ich einiges vergessen, aber da werdet ihr hoffentlich 
nach hacken. Ich freue auf eure Reaktionen.


Viele Grüße
Frank

Autor: Gerd E. (robberknight)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht interessant aus.

Kann ich mir damit auch berechnete Werte als Grafik plotten lassen?

Sagen wir mal ich möchte die Effizienz eines DC/DC-Wandlers vermessen. 
Ich schließe 4 von Sigrok unterstützte Multimeter an (Spannung und Strom 
Eingang, Spannung und Strom Ausgang). Jetzt möchte ich gerne einen 
X/Y-Plot angezeigt bekommen, in dem ich z.B. Leistung Ausgang und die 
Effizienz sehe. Also keine direkt von einem der Multimeter abrufbare 
Größe, sondern eine, die aus mehreren Messwerten durch einfache 
mathematische Operationen berechnet werden muss.

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Kann ich mir damit auch berechnete Werte als Grafik plotten lassen?

Ja das funktioniert.
Die Kanäle für Widerstand, Leistung, sowie Ah und Wh (siehe Bild oben) 
werden z.B. bei Netzteile und Lasten automatisch berechnet und sind 
natürlich plotbar oder können bei weiteren "MathChannels" verwendet 
werden.

> Sagen wir mal ich möchte die Effizienz eines DC/DC-Wandlers vermessen.
> Ich schließe 4 von Sigrok unterstützte Multimeter an (Spannung und Strom
> Eingang, Spannung und Strom Ausgang). Jetzt möchte ich gerne einen
> X/Y-Plot angezeigt bekommen, in dem ich z.B. Leistung Ausgang und die
> Effizienz sehe. Also keine direkt von einem der Multimeter abrufbare
> Größe, sondern eine, die aus mehreren Messwerten durch einfache
> mathematische Operationen berechnet werden muss.

Das war der ursprüngliche Gedanke bei dem Projekt. Damit das aber gut 
funktioniert fehlt noch die Programmierbarkeit (s.o.).
X/Y-Graphen sind schon implementiert.

Autor: Gerd E. (robberknight)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank S. schrieb:
> Das war der ursprüngliche Gedanke bei dem Projekt.

sehr gut

> Damit das aber gut
> funktioniert fehlt noch die Programmierbarkeit (s.o.).

wie darf ich das verstehen?

Meinst Du damit daß der momentan z.B. noch keinen automatischen Sweep 
der El. Last macht? Es wäre für mich momentan durchaus zu verschmerzen 
das einmal manuell durchzkurbeln.

Oder gibt es noch andere Probleme die zum "gut funktioniert" fehlen?

Bevor ich meine E-Last fernsteuern kann, müsste ich das Sigrok zuerst um 
GPIB-Adapter allgemein und dann Support für meine konkrete Last 
(Kikusui) erweitern. Das wäre doch noch nen Stück Arbeit.

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Meinst Du damit daß der momentan z.B. noch keinen automatischen Sweep
> der El. Last macht? Es wäre für mich momentan durchaus zu verschmerzen
> das einmal manuell durchzkurbeln.

Ja, das habe ich damit gemeint. Manuell ist kein Problem.
Wenn du auch die Eingangsspannung in die Charakterisierung einbeziehen 
willst, dann ist die Automatisierung von großem Vorteil.

> Bevor ich meine E-Last fernsteuern kann, müsste ich das Sigrok zuerst um
> GPIB-Adapter allgemein und dann Support für meine konkrete Last
> (Kikusui) erweitern. Das wäre doch noch nen Stück Arbeit.

GPIB-Adapter werden von sigrok unter Linux über linux-gpib unterstützt. 
Ich selbst habe einen Agilent 82357B China Klon erfolgreich im Einsatz.

Autor: Gerd E. (robberknight)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank S. schrieb:
> Manuell ist kein Problem.

klingt gut. Werde das dann mal ausprobieren.

> Wenn du auch die Eingangsspannung in die Charakterisierung einbeziehen
> willst, dann ist die Automatisierung von großem Vorteil.

Klar, mit 2 Parametern macht das keinen Spaß mehr.

Dann reicht aber auch der X/Y-Plot nicht mehr, dann brauchst Du einen 
3D-Plot.

> GPIB-Adapter werden von sigrok unter Linux über linux-gpib unterstützt.
> Ich selbst habe einen Agilent 82357B China Klon erfolgreich im Einsatz.

Ist das nicht ein ständiger Ärger mit den Kerneltreibern für die? 
Außerdem sind die ziemlich teuer wenn man mehrere davon haben möchte.

Ich dachte daher eher an sowas hier:
https://sigrok.org/wiki/Galvant_GPIBUSB

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
>> GPIB-Adapter werden von sigrok unter Linux über linux-gpib unterstützt.
>> Ich selbst habe einen Agilent 82357B China Klon erfolgreich im Einsatz.
>
> Ist das nicht ein ständiger Ärger mit den Kerneltreibern für die?

Da in keiner mir bekannten Linux Distribution linux-gpib dabei sind, 
muss selber compiliert werden. Der Aufwand ist gering, muss aber nach 
jedem Kernel Update erneut gemacht werden. Das nervt ein bisschen...

> Außerdem sind die ziemlich teuer wenn man mehrere davon haben möchte.

Mein Adapter hat ca. 80€ gekostet (eBay) und es sind 2 Geräte daran 
angeschlossen (1x HP6632B und 1x HP3478A). Funktioniert super, obwohl 
der Adapter nur ein China Klon ist :)

Autor: Gerd E. (robberknight)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich wollte es mal ausprobieren. Das einzige von Sigrok fertig 
unterstützte Multimeter was ich auf die schnelle auftreiben konnte, war 
ein Agilent U1252A mit passendem USB-Adapter.

Mit sigrok-cli getestet - funktioniert

Im smuview:
"Add new device"
Driver: agilent-dmm
Interface: Serial port, /dev/ttyUSB0
-> Scan

Das smuview beendet sich dann, auf der Konsole kommt:
Configurable::init(): Init  "Agilent U1252A"  - key  "Data Source"
Configurable::init(): Init  "Agilent U1252A"  - key  "Samplerate"
Trying to close device  "Agilent U1252A V0.89 (/dev/ttyUSB0)"
Caught exception: std::bad_cast

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Das smuview beendet sich dann, auf der Konsole kommt:
>
> Configurable::init(): Init  "Agilent U1252A"  - key  "Data Source"
> Configurable::init(): Init  "Agilent U1252A"  - key  "Samplerate"
> Trying to close device  "Agilent U1252A V0.89 (/dev/ttyUSB0)"
> Caught exception: std::bad_cast
> 

Hast du selber compiliert?
Ich kann mir gerade nicht vorstellen, wo der Cast schief läuft.
Wenn du Zeit und Lust hast, wäre es super, wenn du mit dem gdb einen 
Backtrace erstellen könntest, damit ich den Fehler nachvollziehen und 
fixen kann.

Ganz oben auf meiner ToDo-Liste steht boost:stacktrace, damit bei 
Abstürzen automatisch ein Stacktrace erstellt wird...

Autor: Gerd E. (robberknight)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
So, ich hoffe Du hast ausreichend Bildschirmbreite um dieses 
Musterbeispiel eines C++-Stacktraces in all seiner Schönheit zu 
bewundern ;)
#0  0x00007ffff4d6a170 in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*)) (obj=0x14e7750, tinfo=0x7ffff505b750 <typeinfo for std::bad_cast>, dest=0x7ffff4d68460 <std::bad_cast::~bad_cast()>) at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:77
#1  0x00000000007867a2 in Glib::VariantBase::cast_dynamic<Glib::Variant<unsigned int> >(Glib::VariantBase const&) (v=...) at /usr/include/glibmm-2.4/glibmm/variant.h:644
#2  0x0000000000787a74 in Glib::VariantBase::cast_dynamic<Glib::Variant<unsigned long> >(Glib::VariantBase const&) (v=...) at /usr/include/glibmm-2.4/glibmm/variant.h:220
#3  0x0000000000788c6b in sv::devices::properties::UInt64Property::list_config() (this=0x1590790) at /home/gerd/opensource/smuview/src/devices/properties/uint64property.cpp:88
#4  0x0000000000788e08 in sv::devices::properties::UInt64Property::UInt64Property(std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey) (this=0x1590790, configurable=..., config_key=<optimized out>) at /home/gerd/opensource/smuview/src/devices/properties/uint64property.cpp:41
#5  0x00000000007777d3 in __gnu_cxx::new_allocator<sv::devices::properties::UInt64Property>::construct<sv::devices::properties::UInt64Property, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(sv::devices::properties::UInt64Property*, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (this=<optimized out>, __p=0x1590790) at /usr/include/c++/8/new:169
#6  0x00000000007777d3 in std::allocator_traits<std::allocator<sv::devices::properties::UInt64Property> >::construct<sv::devices::properties::UInt64Property, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::allocator<sv::devices::properties::UInt64Property>&, sv::devices::properties::UInt64Property*, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=..., __p=0x1590790) at /usr/include/c++/8/bits/alloc_traits.h:475
#7  0x00000000007777d3 in std::_Sp_counted_ptr_inplace<sv::devices::properties::UInt64Property, std::allocator<sv::devices::properties::UInt64Property>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::allocator<sv::devices::properties::UInt64Property>, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=..., this=0x1590780) at /usr/include/c++/8/bits/shared_ptr_base.h:541
#8  0x00000000007777d3 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<sv::devices::properties::UInt64Property, std::allocator<sv::devices::properties::UInt64Property>, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::_Sp_make_shared_tag, sv::devices::properties::UInt64Property*, std::allocator<sv::devices::properties::UInt64Property> const&, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=..., this=<optimized out>) at /usr/include/c++/8/bits/shared_ptr_base.h:658
#9  0x00000000007777d3 in std::__shared_ptr<sv::devices::properties::UInt64Property, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<sv::devices::properties::UInt64Property>, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::_Sp_make_shared_tag, std::allocator<sv::devices::properties::UInt64Property> const&, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=..., __tag=..., this=<optimized out>) at /usr/include/c++/8/bits/shared_ptr_base.h:1324
#10 0x00000000007777d3 in std::shared_ptr<sv::devices::properties::UInt64Property>::shared_ptr<std::allocator<sv::devices::properties::UInt64Property>, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::_Sp_make_shared_tag, std::allocator<sv::devices::properties::UInt64Property> const&, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=..., __tag=..., this=<optimized out>) at /usr/include/c++/8/bits/shared_ptr.h:360
#11 0x00000000007777d3 in std::allocate_shared<sv::devices::properties::UInt64Property, std::allocator<sv::devices::properties::UInt64Property>, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::allocator<sv::devices::properties::UInt64Property> const&, std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) (__a=...)
    at /usr/include/c++/8/bits/shared_ptr.h:707
#12 0x00000000007777d3 in std::make_shared<sv::devices::properties::UInt64Property, std::shared_ptr<sv::devices::Configurable>, sv::devices::ConfigKey&>(std::shared_ptr<sv::devices::Configurable>&&, sv::devices::ConfigKey&) () at /usr/include/c++/8/bits/shared_ptr.h:723
#13 0x00000000007777d3 in sv::devices::Configurable::init() (this=0x1062ba0) at /home/gerd/opensource/smuview/src/devices/configurable.cpp:108
#14 0x000000000077e5b8 in sv::devices::Configurable::create<std::shared_ptr<sigrok::Device>&, QString, sv::devices::DeviceType&>(std::shared_ptr<sigrok::Device>&, QString&&, sv::devices::DeviceType&) () at /usr/include/c++/8/bits/shared_ptr_base.h:513
#15 0x000000000077e5b8 in sv::devices::HardwareDevice::init() (this=0x13be590) at /home/gerd/opensource/smuview/src/devices/hardwaredevice.cpp:107
#16 0x000000000074c324 in sv::devices::MeasurementDevice::create<std::shared_ptr<sigrok::Context>&, std::shared_ptr<sigrok::HardwareDevice>&>(std::shared_ptr<sigrok::Context>&, std::shared_ptr<sigrok::HardwareDevice>&) () at /usr/include/c++/8/ext/atomicity.h:82
#17 0x000000000074c324 in sv::DeviceManager::driver_scan[abi:cxx11](std::shared_ptr<sigrok::Driver>, std::map<sigrok::ConfigKey const*, Glib::VariantBase, std::less<sigrok::ConfigKey const*>, std::allocator<std::pair<sigrok::ConfigKey const* const, Glib::VariantBase> > >) (this=0x7fffffffd090, sr_driver=std::shared_ptr<sigrok::Driver> (use count 4, weak count 1) = {...}, drvopts=...)
    at /home/gerd/opensource/smuview/src/devicemanager.cpp:265
#18 0x00000000007aa141 in sv::ui::dialogs::ConnectDialog::scan_pressed() (this=0x7fffffffc0b0) at /usr/include/c++/8/ext/atomicity.h:96
#19 0x00007ffff52e384e in QMetaObject::activate(QObject*, int, int, void**) () at /lib64/libQt5Core.so.5
#20 0x00007ffff6082b91 in QAbstractButtonPrivate::emitPressed() () at /lib64/libQt5Widgets.so.5
#21 0x00007ffff60832e5 in QAbstractButton::mousePressEvent(QMouseEvent*) () at /lib64/libQt5Widgets.so.5
#22 0x00007ffff5fda10f in QWidget::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#23 0x00007ffff5f9a565 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#24 0x00007ffff5fa1ec8 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#25 0x000000000074b9fb in Application::notify(QObject*, QEvent*) (this=<optimized out>, receiver=<optimized out>, event=<optimized out>) at /home/gerd/opensource/smuview/src/application.cpp:42
#26 0x00007ffff52bb676 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5
#27 0x00007ffff5fa11bd in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /lib64/libQt5Widgets.so.5
#28 0x00007ffff5ff43f8 in QWidgetWindow::handleMouseEvent(QMouseEvent*) () at /lib64/libQt5Widgets.so.5
#29 0x00007ffff5ff6f9e in QWidgetWindow::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#30 0x00007ffff5f9a565 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#31 0x00007ffff5fa1c80 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#32 0x000000000074b9fb in Application::notify(QObject*, QEvent*) (this=<optimized out>, receiver=<optimized out>, event=<optimized out>) at /home/gerd/opensource/smuview/src/application.cpp:42
#33 0x00007ffff52bb676 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5
#34 0x00007ffff5856183 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /lib64/libQt5Gui.so.5
#35 0x00007ffff5858285 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /lib64/libQt5Gui.so.5
#36 0x00007ffff58333bb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Gui.so.5
#37 0x00007fffdf119b6f in QPAEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5XcbQpa.so.5
#38 0x00007ffff52ba5bb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5
#39 0x00007ffff618bafd in QDialog::exec() () at /lib64/libQt5Widgets.so.5
#40 0x00000000007579a9 in sv::MainWindow::on_action_add_device_tab_triggered() (this=0x7fffffffd0d0) at /home/gerd/opensource/smuview/src/mainwindow.cpp:327
#41 0x00000000007d62b5 in sv::MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/gerd/opensource/smuview/build/smuview_autogen/UVLADIE3JM/moc_mainwindow.cpp:86
#42 0x00007ffff52e384e in QMetaObject::activate(QObject*, int, int, void**) () at /lib64/libQt5Core.so.5
#43 0x00007ffff6082896 in QAbstractButton::clicked(bool) () at /lib64/libQt5Widgets.so.5
#44 0x00007ffff6082abe in QAbstractButtonPrivate::emitClicked() () at /lib64/libQt5Widgets.so.5
#45 0x00007ffff6083f13 in QAbstractButtonPrivate::click() () at /lib64/libQt5Widgets.so.5
#46 0x00007ffff60840e5 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /lib64/libQt5Widgets.so.5
#47 0x00007ffff6171ede in QToolButton::mouseReleaseEvent(QMouseEvent*) () at /lib64/libQt5Widgets.so.5
#48 0x00007ffff5fd9658 in QWidget::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#49 0x00007ffff6171f87 in QToolButton::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#50 0x00007ffff5f9a565 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#51 0x00007ffff5fa1ec8 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#52 0x000000000074b9fb in Application::notify(QObject*, QEvent*) (this=<optimized out>, receiver=<optimized out>, event=<optimized out>) at /home/gerd/opensource/smuview/src/application.cpp:42
#53 0x00007ffff52bb676 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5
#54 0x00007ffff5fa11bd in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /lib64/libQt5Widgets.so.5
#55 0x00007ffff5ff43f8 in QWidgetWindow::handleMouseEvent(QMouseEvent*) () at /lib64/libQt5Widgets.so.5
#56 0x00007ffff5ff6f9e in QWidgetWindow::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#57 0x00007ffff5f9a565 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#58 0x00007ffff5fa1c80 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#59 0x000000000074b9fb in Application::notify(QObject*, QEvent*) (this=<optimized out>, receiver=<optimized out>, event=<optimized out>) at /home/gerd/opensource/smuview/src/application.cpp:42
#60 0x00007ffff52bb676 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5
#61 0x00007ffff5856183 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /lib64/libQt5Gui.so.5
#62 0x00007ffff5858285 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /lib64/libQt5Gui.so.5
#63 0x00007ffff58333bb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Gui.so.5
#64 0x00007fffdf119b6f in QPAEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5XcbQpa.so.5
#65 0x00007ffff52ba5bb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5
#66 0x00007ffff52c2686 in QCoreApplication::exec() () at /lib64/libQt5Core.so.5
#67 0x00000000004cafac in main (argc=<optimized out>, argv=<optimized out>) at /home/gerd/opensource/smuview/main.cpp:212
#68 0x00007ffff438f11b in __libc_start_main () at /lib64/libc.so.6
#69 0x000000000074ae9a in _start () at /home/gerd/opensource/smuview/src/application.cpp:49

Ich war eben auch mal so frei in dem UInt64Property::list_config() ein 
gvar.get_type_string() nach dem ersten next_value() einzubauen: ich 
bekomme dann "{sv}" zurück, also anscheinend ein string variant 
dictionary. Daß sich das nicht so einfach in UInt64 casten lässt wundert 
mich nicht. Ein gvar.print(true) gibt "{'samplerate-steps', <[uint64 1, 
20, 1]>}" zurück.

Mir scheint es also als ob das Sigrok sich hier die Freiheit nimmt diese 
Daten noch eine Stufe weiter zu verschachteln. Verwendete libsigrok ist 
libsigrok-0.5.1-1.fc28.x86_64 so wie bei Fedora 28 gepackaged.

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, danke!
Den Fehler werde ich in den nächsten Tagen fixen und dir dann Bescheid 
geben. Sollte kein großes Ding sein.

Allerdings sind die beiden ConfigKeys der Agilent DMMs (Samplerate und 
DataSource) in SmuView noch nicht konfigurierbar (steht aber ebenfalls 
auf der ToDo Liste).

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Gerd,

der Fehler sollte behoben sein.

Viele Grüße
Frank

Autor: Frank S. (knarfs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die angehängten Bilder zeigen die Charakterisierung eines 
Buck-Converters mit einem LM2596 (Eingangsspannung 8V, Ausgangsspannung 
5V, Ausgangsstrom 0-2A).

Ich habe hier meinen experimentellen "Flow Controller" Code verwendet 
(siehe Bild SmuView-DCDC-Load.png) um die Last von 0A bis 2A 
durchzufahren.
Natürlich kann der Ausgangsstrom auch von Hand hoch gedreht werden.

Da nicht die P-Kanäle des Netzteils und der Last genommen wurden, sind 
P_in und P_out berechnet.
Die Beschriftungen der Plots sind nicht immer aussagekräftig 
(ToDo-Liste...).

Verwendete Geräte: HP 6632B (Netzteil), Arachnid Labs ReLoadPro (Last), 
EEVBlog 121GW (U_in), HP 3478A (I_in), Metex M-3860M (U_out). I_out 
wurde mit der ReloadPro gemessen.

Autor: Alexander B. (tecnologic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Zusammen,

könnte ich darüber auch eigene Netzteile/Geräte einbinden? Wir basteln 
gerade an einem leistungsfähigen DC/DC für Server-NTs als "LaborNT" und 
ich suche noch ein Gui dafür. Wenn ich über Uart/Usb seriell oder 
ähnliches dein SmuView nutzen könnte wäre das natürlich top. Gibt es 
dort irgend welche Informationen wie man eigene Geräte einbinden kann?

Wir wollen solche Effizienz Untersuchungen mit Motoren machen und 
brauchen deshalb etwas andere Leistungen als ein Übliches LaborNT.

Gruß

Alex

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Alex,

Alexander B. schrieb:
> könnte ich darüber auch eigene Netzteile/Geräte einbinden? Wir basteln
> gerade an einem leistungsfähigen DC/DC für Server-NTs als "LaborNT" und
> ich suche noch ein Gui dafür. Wenn ich über Uart/Usb seriell oder
> ähnliches dein SmuView nutzen könnte wäre das natürlich top. Gibt es
> dort irgend welche Informationen wie man eigene Geräte einbinden kann?

Die Geräte werden nicht direkt von SmuView angesprochen sondern durch 
die sigrok Bibliothek. Dort musst du dann auch einen Treiber 
implementieren.

Wenn dein Netzteil SCPI (oder einen SCPI-ähnlichen Dialekt) spricht, 
dann musst du im vorhandenen "scpi-pps"-Treiber 
(https://github.com/sigrokproject/libsigrok/tree/master/src/hardware/scpi-pps) 
nur ein paar Definitionen hinzufügen.

Viele Grüße
Frank

Autor: Alexander B. (tecnologic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Frank,

Das scpi Protokoll sieht gut aus das kann ich einbauen.

Danke

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerd,

kommt der Pull Request ("add .spec-file to package smuview for Fedora") 
von dir?
Wenn ja, würde ich ein paar Dinge ändern (automatisches setzten der 
Version, des Git Hashes, ...), die du dann testen müsstest.

Grüße
Frank

Autor: Gerd E. (robberknight)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist von mir.

Wenn Du Verbesserungsvorschläge hast - immer her damit.

Diskutieren wir am besten im Pull-Request auf github selbst, dort passt 
es denke ich am besten hin.

Autor: Sebastian E. (s-engel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

das Projekt gefällt mir sehr gut.
Werde das mal antesten, wobei ich anscheinend bisher nur mein Multimeter 
(Voltcraft VC-820) einbinden kann.

Durch dein Projekt habe ich zudem überlegt eine Hardware-API für das 
Netzteil "ELV DPS 5315" zu schreiben. Ich wollte da eh was machen und 
sigrok bietet da denke ich eine ideale Plattform.
In wie weit lässt sich dann, sofern das mit der API klappt, das Netzteil 
in SmuView integrieren?

Vg
Sebastian

Autor: Frank S. (knarfs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Sebastian,

Sebastian E. schrieb:
> das Projekt gefällt mir sehr gut.

Danke :)

> Durch dein Projekt habe ich zudem überlegt eine Hardware-API für das
> Netzteil "ELV DPS 5315" zu schreiben. Ich wollte da eh was machen und
> sigrok bietet da denke ich eine ideale Plattform.
> In wie weit lässt sich dann, sofern das mit der API klappt, das Netzteil
> in SmuView integrieren?

Da ich mit SmuView nur die (generische) API von sigrok einbinde, sollte 
das ohne Probleme funktionieren. D.h. die Integration ist so gut wie der 
Treiber in sigrok.
Evtl. müssen noch GUI Elemente für fehlende Optionen eingebaut werden 
(bei dem DPS5315 z.B. Serienbetrieb der 2 Kanäle), aber das ist eine 
Kleinigkeit.

Allerdings muss in sigrok in den Treiber ein Mutex eingebaut werde, 
damit Messwerte über die API gesendet werden können und gleichzeitig 
Einstellungen geändert werden können (zwei Threads in SmuView).
Der Mutex ist von mir schon in den Treibern für die Korad KAxxxxP 
Netzteile und dem generischen Treiber "scpi-pps" (getestet mit einem HP 
6632B) eingebaut.

Wenn du Fragen zu den Treiber hast, kannst du dich einfach hier melden.

Viele Grüße
Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.