Ich musste gerade etwas rumprobieren bis ich endlich geschafft habe ein
Korad 3005P unter Linux anzusteuern. Vielleicht interessiert das ja noch
jemand anderes. .-)
Das Korad KA3005P hat keinen normalen USB-RS232 Adapter eingebaut.
Es wird stattdessen ein 8051 kompatibler Microcontroller von Nuvoton
verwendet. (Typenbezeichnung ist aber abgeschliffen)
Dieser Controller emuliert ein USB-CDC device. Deshalb besteht der
Windows treiber nur aus einem inf-File welcher das System auffordert
usbser.sys zu verwenden.
Auch Linux hat einen solchen treiber, der das Korad aber nicht
richtig erkennt.
So meldet sich das Korad KA3005P am USB-Bus nach dem einschalten:
kernel: usb 1-2.2: new full-speed USB device number 12 using ehci-pci
kernel: usb 1-2.2: New USB device found, idVendor=0416, idProduct=5011
kernel: usb 1-2.2: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
kernel: usb 1-2.2: Product: USB Virtual COM
kernel: usb 1-2.2: Manufacturer: USB Vir
kernel: usb 1-2.2: SerialNumber: NT2009101400
Man kann dem entnehmen wie die VID und PID ist, und das derzeit noch
kein Treiber geladen wurde.
Wir muessen uns nun eine Datei "/etc/udev/rules.d/91-korad.rules"
mit folgenden Inhalt erstellen:
ACTION=="add", ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011",
RUN+="/bin/sh -c 'echo 0416 5011 > /sys\
/bus/usb-serial/drivers/generic/new_id'", SYMLINK+="korad"
Danach muss der udev angewiesen werden seine Konfiguration neu
einzulesen:
udevadm control --reload-rules && udevadm trigger
Schaltet man jetzt das Korad ein so wird ein neues Device angelegt und
ein link /dev/korad darauf angelegt.
Es ist nun moeglich z.B mit Minicom dieses Device zu oeffnen:
Dort senden: *IDN?
Antwort: KORADKA3005PV2.0
Senden: OUT1
Ausgangsspannung wird eingeschaltet.
Senden: VOUT1?
Antwoert: 12.00
Senden: OUT0
Ausgangsspannung wird abgeschaltet.
Ab jetzt ist die erstellung eines eigenen Programm zur Ansteuerung des
Netzteils eine leichte uebung welche ich dem geneigten Leser ueberlasse.
(wollte ich schon immer mal sagen)
Olaf
> Schaltet man jetzt das Korad ein so wird ein neues Device angelegt und> ein link /dev/korad darauf angelegt.
Prinzipiell ja, greift aber zu kurz wenn man 2 Korad anschließt.
> Prinzipiell ja, greift aber zu kurz wenn man 2 Korad anschließt.
Darum kann ich mich ja immer noch kuemmern wenn es soweit ist.
Ich denke aber das ich bis auf weiteres mit einem Netzteil auskomme.
War schon genug Aufwand rauszubekommen wie das Teil ueber USB seine
Schnittstelle realisiert. Ich war schon kurz davor einen ESP8266
einzubauen und das Teil ueber UDP anzusteuern. :)
Olaf
> hast Du geplant, Dein Programm Interessenten zur Verfügung zu stellen?
Nein, eigentlich nicht. Das ist bei Linux zu komplex geworden
weil Software nicht mehr auf jedem System einfach so laeuft
da es zuviele unterschiedliche Librayversionen und sonstige
Abhaengikeiten gibt.
Und ich meine Qt kann auch nicht statisch linken ohne das man vorher
einen riesen Aufwand treibt.
Ist aber eigentlich Schade, ich habs gerade noch etwas verbessert. :)
Olaf
> Das ist bei Linux zu komplex geworden weil Software nicht mehr auf> jedem System einfach so laeuft da es zuviele unterschiedliche> Librayversionen und sonstige Abhaengikeiten gibt.
Gerade bei Linux ist das einfach: Ordentlich programmieren, Source code
verteilen, freuen. Unter Winblöd ist das erfahrungsgemäß wesentlich
nerviger.
Olaf schrieb:>> hast Du geplant, Dein Programm Interessenten zur Verfügung zu> stellen?>> Nein, eigentlich nicht.
Das eigene Programm zeigen aber nicht zur verfügung stellen... Du sagst
damit quasi "Schaut mal, was ihr nicht haben könnt!". Sowas macht man
eigentlich nicht.
> "Schaut mal, was ihr nicht haben könnt!".
Das ist aber Interpretationssache. :) Ich dachte eher ihr freut euch zu
sehen das es relativ einfach ist das Teil ueber usb anzusteuern.
Das geht sogar erstaunlich schnell. Das Programm vermittelt am PC das
Gefuehl direkt am Netzteil zu sitzen.
> Sowas macht man eigentlich nicht.
Wenn du dich besser fuehlst haenge ich es dir mal an. Wuerde mich aber
wundern wenn es ausserhalb meines Systems laeuft. Vermutlich kommen da
sofort ein halbes Dutzend beschwerden weil bei dir irgendwelche Libaries
nicht vorhanden oder auf einem anderen Versionsstand sind.
Olaf
p.s: Es ist zwingend notwendig das /dev/korad wie in meinem ersten
Posting beschrieben, existiert!
Hallo Olaf,
erst mal herzlichen Dank für die Datei.
Natürlich ist Dein Weg - und die Screenshots als Appetitanreger - recht
motivierend, aber nicht jeder muss unbedingt das Rad neu erfinden.
Mir persönlich gefällt Dein sich steig entwickelndes Programm sehr gut,
und es könnte für Linux- und Korad-Nutzer ein wertvolles Werkzeug sein.
Du wirst wohl recht haben, das es recht viele Schwierigkeiten mit dem
ZIP-File geben könnte, nachdem es sich um ein Binary handelt.
Für die individuelle Anpassung wären die Sourcen leichter anzupassen.
Es ist aber Deine Entscheidung, ob Du diese freigeben willst.
> Wuerde mich aber wundern wenn es ausserhalb meines Systems laeuft.
Hättest Du meinen Kommentar oben richtig gelesen hättest Du den
Quellcode eingepackt und nicht irgendein plattformabhängiges Binary.
Ersterer funktioniert(tm) wahrscheinlich(tm) problemarm(tm), letzteres
will kein normaldenkender Mensch freiwillig ausführen.
olaf schrieb:> Wenn du dich besser fuehlst haenge ich es dir mal an. Wuerde mich aber> wundern wenn es ausserhalb meines Systems laeuft.
Ist schon in Ordnung, das war eher als "für nächstes mal" gedacht. Ein
Binary ist für einige sicher auch OK. Ich verwende aber nur noch
Anwendungen, wo ich den Quellcode dazu habe.
Mal sehen, gegen was es gelinkt ist:
1
/opt/korad$ file korad
2
korad: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c1ecc370e7661866aca27c30c50f09abb5d63c7a, stripped
Die libc sachen sind auf dem Ubuntu schon drauf. Auf dem System hier hab
ich leider gerad keine grafische Oberfläche, deshalb hab ich qt noch
nicht installiert. 6 Libraries sind aber keine grosse Sache. Mal sehen:
Die Libraries sind also gröstenteils da, nur vereinzelt (bei
libqwt6abi1), könnte mann das mit nem symlink lösen, also soweit kein
problem.
Es wäre natürlich schöner, wenn das statisch gelinkt wäre, und nur die
qt libraries dynamisch, man könnte dann statische qt libraries
mitliefern und beim Kompilieren den RUNPATH/RPATH entschprechend setzen,
damit es überall läuft.
Linux experten wie ich können das aber nachträglich noch hinbiegen, ist
nur etwas aufwendiger.
Ein paar unterverzeichnisse anlegen:
1
/opt/korad$ mkdir bin
2
/opt/korad$ mkdir lib
3
/opt/korad$ mv korad bin/
RUNPATH patchen, damit es im lib verzeichnis über dem binari nach den
libs sucht, und libs kopieren:
Optional den Interpreter ändern, damit auch dort die in lib/ verwendet
wird. Leider geht "$ORIGIN" hier vermutlich nicht, da das von der libc
interpretiert wird, warend .interp schon vorhär vom kernel interpretiert
wird. Ich kann es auf "../lib/ld.so" ändern, aber das geht nur, wen man
es von bin/ aus startet:
Jetzt platziere ich statdessen ein Wrapperscript, das das Programm dan
startet. Ich könnte einfach vorher cd nutzen, aber das ist nicht ideal,
weil das Programm dann nicht in anderen CWDs gestartet werden kann. Ich
kann den Interpreter/dynamic linker/loader/.interp/ld.so aber auch
explizit aufrufen und das Programm laden lassen, was beide Probleme
löst:
Fehlen nurnoch die statischen QT libraries. Das muss ich aber auf's
Wochenende verschieben. Da wo ich gerade bin funkt mir eine Firewall
beim git clone dazwischen, und heute Abend kommt noch mein
librem5-devkit an, da hab ich keine Zeit.
Theoretisch könnte man statt statisch zu linken oder die Libs einzeln
herauszusuchen auch Container verwenden, deshalb sind Docker, Snap und
co. bei Firmen so beliebt.
Wenn dieses Kapitalismus- & Geheimhaltungsmentalität nicht überall wäre,
wäre die Wellt ein besserer Ort.
DPA schrieb:> Ist schon in Ordnung, das war eher als "für nächstes mal" gedacht. Ein> Binary ist für einige sicher auch OK. Ich verwende aber nur noch> Anwendungen, wo ich den Quellcode dazu habe.>> Mal sehen, gegen was es gelinkt ist:> ..
Danke, sehr lehrreich!
(soooo tief stecke ich in Linux scheinbar doch nicht drin...)
Bitte weiter so.
Hast du dir schon mal sigrok in Verbindung mit smuview angeschaut?
https://sigrok.org/https://github.com/knarfS/smuview
Damit kannst du den KA3005 auch steuern und musst das Rad nicht neu
erfinden.
Bonus: Es unterstützt nicht nur den KA3005, sondern diverse Geräte.
> Es wäre natürlich schöner, wenn das statisch gelinkt wäre, und nur die> qt libraries dynamisch, man könnte dann statische qt libraries
Das denke ich auch gelegentlich. Aber soweit ich weiss, mal irgendwo
gelesen hab, ist es nicht damit getan mal nur irgendwo einen
Compilerschalter zu setzen. Man muss dazu wohl angeblich Qt selber
compilieren um die Libaries zu erzeugen. Und das ist mir dann ein
bisschen zuviel Aufwand.
Olaf
> Und warum veröffentlichst du nicht einfach den Sourcecode?
Weil ich das einfach nicht moechte.
Aber eigentlich wollte ich noch auf eine interessante negative
Eigenschaft
von dem USB-Anschluss am Netzteil hinweisen.
Wenn ich mein Programm laufen habe dann findet ein dauerhafter
Datenaustausch mit dem Netzteil statt. Solange das der Fall ist, ist die
Eingabe direkt am Geraet gesperrt. Das ist eigentlich auch okay so und
kennt man ja von diversen anderen Messgeraeten an HPIB auch.
Aber wenn man das Netzteil einfach nur einschaltet ohne das ich es
fernsteuern moechte dann verbindet es sich ueber USB mit dem Computer,
der Computer richtet wie im ersten Posting angeben einen Zugriff ein und
dabei scheinen auch schon Daten mit dem Netzteil ausgetauscht zu werden.
Das fuehrt dann dazu das das Netzteil fuer 10-20s nach dem einschalten
nicht bedienbar ist. Erst nach Ablauf der Zeit troetet es einmal kurz
und ist dann normal von Hand bedienbar. Das ist natuerlich etwas
unschoen wenn man das USB-Kabel dauerhaft drin lassen will.
Olaf
Olaf schrieb:> und dabei scheinen auch schon Daten mit dem Netzteil ausgetauscht zu> werden.
Das dürfte die unsägliche Plug&Play-Unterstützung für serielle Mäuse
sein, die Windows aus unerfindlichen Gründen immer noch mitbringt.
Rufus Τ. F. schrieb:> Olaf schrieb:>> und dabei scheinen auch schon Daten mit dem Netzteil ausgetauscht zu>> werden.>> Das dürfte die unsägliche Plug&Play-Unterstützung für serielle Mäuse> sein, die Windows aus unerfindlichen Gründen immer noch mitbringt.
Er nutzt aber Linux. Und selbst unter Windows könnte man das
deaktivieren.
Rufus Τ. F. schrieb:> Christian R. schrieb:>> Er nutzt aber Linux.>> Hmm. Das hab' ich dann wohl übersehen. Aber warum sollte Linux "einen> Zugriff" einrichten?
Wäre mir auch neu, dass udev irgendwas tut. Meiner Erfahrung nach öffnet
das nicht mal die Schnittstelle. Es muss also sein Programm sein, was
mindestens die Schnittstelle öffnet.
> Er nutzt aber Linux. Und selbst unter Windows könnte man das> deaktivieren.
yo, das tut er. :)
Linux muss an der Stelle aber nicht besser sein.
Es kann z.B sein das da irgendein getty drauf laeuft und dem "user" die
uebliche Begruessungsmelung schickt sobald ein neuer Port auftaucht.
Muss ich bei Gelegenheit mal nachgehen wenn es mich genug genervt hat.
Olaf
olaf schrieb:> Linux muss an der Stelle aber nicht besser sein.> Es kann z.B sein das da irgendein getty drauf laeuft und dem "user" die> uebliche Begruessungsmelung schickt sobald ein neuer Port auftaucht.
Zumindest auf sysvinit systemen muss man das explizit für jedes tty in
der /etc/inittab eintragen. Standardmässig sind dort normalerweise nur
/dev/tty[1-6] eingetragen, und die kommen eigentlich immer von fbcon.
Hallo Olaf,
wenn du dein Programm als binär Version verteilen willst, dann kannst du
das am besten als AppImage machen. Speziell für Qt gibt es dafür
linuxdeployqt (https://github.com/probonopd/linuxdeployqt), welches das
Erstellen eines AppImages wirklich sehr einfach macht!
Das AppImage erstellst du am besten unter einer alten Linux Distribution
(z.B. Ubuntu 14.04 LTS), damit es auf so vielen Systemen wie möglich
läuft.
Ich bin der Autor vom oben erwähnten SmuView
(https://sigrok.org/wiki/SmuView), von dem es jetzt auch Binaries für
Windows und Linux gibt: https://github.com/knarfS/smuview/releases
Für die AppImages habe ich ebenfalls linuxdeployqt verwendet.
Der nächste Meilenstein für SmuView wird eine Automatisierung der
verbundenen Geräte sein. Damit kannst du dann komplexe Messungen mit
mehrere Geräten vornehmen und z.B. DC-to-DC Converter charakterisieren.
Ich hoffe das hilft dir beim Qt/C++ entwickeln weiter.
Viele Grüße
Frank
Dirk schrieb:> Ich hoffe Du benutzt die kommerziele Version Qt, ansonsten muss doch der> Code offen liegen oder verstehe ich Lizenzbestimmungen falsch?
Bei der LGPL darfst du dynamisch gegen die Library linken, ohne den Code
offenlegen zu müssen. Anders würde es aussehen, wenn es statisch gegen
QT gelinkt wäre, was hier aber nicht der fall ist. Bezüglich welche
version, da kein qt code mithochgeladen wurde, keine. Wäre qt unter der
gpl statt der lgpl, würde es anders aussehen.
Da SmuView unter der GPLv3 lizenziert ist, sind die statisch gelinkten
Windows Executables kein Problem.
Wie es aber aussieht, wenn Olaf seine Closed Source Software als
AppImage verteilt (im AppImage befinden sich alle notwendigen Qt
Libraries), kann ich nicht sagen.
> Wie es aber aussieht, wenn Olaf seine Closed Source Software als> AppImage verteilthttps://www.qt.io/licensing/
BTW: Ganz schoen dreist teuer so eine kommerzielle Lizenz. Faengt ab
459$ pro Monat an. Einmalig scheint mir das ja durchaus okay zu sein,
aber jeden Monat?
Olaf
Olaf schrieb:>> Wie es aber aussieht, wenn Olaf seine Closed Source Software als>> AppImage verteilt>> https://www.qt.io/licensing/
Der Link hilft bei der Fragestellung überhaupt nicht weiter. Wenn dann
hättest du die für den Fall gültige Lizenz verlinken müssen:
https://www.gnu.org/licenses/lgpl-3.0.de.html
Ich traue mich aber trotzdem nicht eine Aussage bzgl. Closed Source und
AppImage zu treffen.
> BTW: Ganz schoen dreist teuer so eine kommerzielle Lizenz. Faengt ab> 459$ pro Monat an. Einmalig scheint mir das ja durchaus okay zu sein,> aber jeden Monat?
Nein, für den gebotenen Umfang und im Vergleich zu anderen Frameworks
ist der Preis im Rahmen.
Olaf schrieb:>> Wie es aber aussieht, wenn Olaf seine Closed Source Software als>> AppImage verteilt>> https://www.qt.io/licensing/>> BTW: Ganz schoen dreist teuer so eine kommerzielle Lizenz. Faengt ab> 459$ pro Monat an. Einmalig scheint mir das ja durchaus okay zu sein,> aber jeden Monat?>> Olaf
Es gibt aber quasi keine Umstände, unter denen du die kommerzielle
Lizenz brauchst, zumindest wenn du nur die LGPL-Module verwenden willst.
Auch wenn die Webseite versucht, es anders darzustellen, brauchst du die
eigentlich nur, wenn du modifizierte Versionen des Frameworks als
Closed Source verteilen willst.
Selbst statisch linken geht LGPL-kompatibel, wenn man unbedingt will ...
man muss dann eben die Linker-Befehlszeile und die Object Files
mitverteilen.
AppImage sollte kein Problem sein, wer paranoid ist kann ja ein
Shellskript beilegen, was das Image extrahiert, die .so-Dateien
austauscht, und neu packt. Das ist auf jeden Fall LGPL-kompatibel.
Sven B. schrieb:> AppImage sollte kein Problem sein, wer paranoid ist kann ja ein> Shellskript beilegen, was das Image extrahiert, die .so-Dateien> austauscht, und neu packt. Das ist auf jeden Fall LGPL-kompatibel.
Daran habe ich nicht gedacht, aber das erfüllt auf jeden Fall die
Forderungen der LGPL.
olaf schrieb:> Man muss dazu wohl angeblich Qt selber> compilieren um die Libaries zu erzeugen. Und das ist mir dann ein> bisschen zuviel Aufwand.
Wenn es das nur ist ...
Welche Qt Version darf es denn sein? Du Verwendest Ubuntu, oder? Wenn
das schöne Programm am Ende für uns alle nutzbar wird, dann will ich das
Bereitstellen einer statischen Lib für Win und Linux gerne machen.
VG
Jörg
> Es gibt aber quasi keine Umstände, unter denen du die kommerzielle> Lizenz brauchst, zumindest wenn du nur die LGPL-Module verwenden willst.
Ich brauche die sicherlich nicht. Aber wenn man so eine kleine
5-10personen Entwicklerbude ist dann kann man sich sicher auch mal
einmal fuer ein paar Tausend Euro so eine Lizenz kaufen, aber jeden
Monat 500Kroeten rueberschieben ist schon eine Menge.
> Welche Qt Version darf es denn sein? Du Verwendest Ubuntu, oder?
Centos 7.4 64Bit.
Olaf
Olaf schrieb:>> Es gibt aber quasi keine Umstände, unter denen du die kommerzielle>> Lizenz brauchst, zumindest wenn du nur die LGPL-Module verwenden willst.>> Ich brauche die sicherlich nicht. Aber wenn man so eine kleine> 5-10personen Entwicklerbude ist dann kann man sich sicher auch mal> einmal fuer ein paar Tausend Euro so eine Lizenz kaufen, aber jeden> Monat 500Kroeten rueberschieben ist schon eine Menge.
Auch die Entwicklerbude braucht die Lizenz nicht. Für was denn?
Noch mal zurück zu der seriellen Schnittstelle, die beim Einstecken des
USB Kabels (unbeabsichtigt) etwas auszugeben scheint. Unter openSUSE ist
daran meist der ModemManager schuld:
https://www.freedesktop.org/wiki/Software/ModemManager/
DPA schrieb:> Fehlen nurnoch die statischen QT libraries.
Dynamisch QT Libraries zu erstellen, die gegen alle anderen Libraries
statisch gelinken sind, ist doch aufwendiger, als ich zunächst dachte.
Die -static-runtime option funktioniert nur unter Windows, und das zeug
brauch Stunden für jeden Build. Ich experimentiere gerade mit wrapper
scripts für gcc und den -Bstatic + -Bdynamic Optionen, um die Menge
externer Libraries zu reduzieren.
Was ist'n jetzt mit dem Source? Dein ausführbares Kompilat interessiert
keinen Mensch. Wir sind Techies und Frickler und keine doofen "Windows
Power User".
Weiß ich.
Ich dachte eigentlich, der Thread-Eröffner reagiert und präsentiert,
ähem... dem geneigten Leser den Code, den er ihm, wenn ich das richtig
verstanden habe... mit Loriot-artigem Duktus - ja sowieso schon immer
mal überlassen wollte...