Forum: PC Hard- und Software wine USB mit IXXAT oder Kvaser USB 2 CAN converter


von Martin G. (Firma: www.engyneer.at) (martin_g697)


Lesenswert?

Hat es jemand geschafft Ixxat oder Kvaser USB zu CAN converter brauchbar 
zu machen für in wine installierte SW?

Ich hab da Ubuntu am Heimlaptop und wollte über CAN bus mit meiner 
Maschine reden.

Die Ixxat und Kvaser stellen Treiber für Linux bereit.

Aber z.B. die SW Composer mit der man Motorservotreiber von Elmo 
einstellen kann, ist nur für Windows geschrieben.

Sie lässt sich zwar im wine betreiben, aber ich bekomme keine 
Kommunikation zustande.

Ixxat canAnalyser mini sagt, er findet keinen USB2CAN controller.

Hat das jemand geschafft über wine das USB zum laufen zu bringen?

von Daniel A. (daniel-a)


Lesenswert?

Ich denke das wird so nichts. Die Programme/Libraries/Treiber scheinen 
nicht nur über libusb mit den Geräten zu kommunizieren, sondern diese 
Geräte haben eigene Windows USB Treiber. Da es libusb unter fast allen 
Systemen gibt, hätte man sonst darüber gehen können, aber bei Geräte 
spezifischen Treibern wie hier kann man leider an der stelle nichts 
machen.

Bei Linux gibt es wenigstens eine standardisierte API, aber unter 
Windows kann ich nichts derartiges finden. Da gibt es CANAL oder neu 
vscp[1], CANlib[2], VCI[3], etc. Die API von CANAL und CANLib sehen sehr 
einfach aus, und könnte ich vermutlich in ein zwei Stunden 
implementieren, wenn ich irgendwelche CAN Devices und ein Program zum 
testen hätte. Das Problem ist nur, dieser "SW Composer", und was für 
Programme du sonst noch gerne nutzen würdest, welche Devices 
unterstützen diese, über welche Libs greifen diese darauf zu? Es wäre 
sinnlos die falschen Libs zu ersetzen/implementieren. Eine Liste, welche 
DLLs die Programme suchen, die du willst, wäre hier nützlich, um 
zurückverfolgen zu können wo man was implementieren muss. Ansonsten ist 
das ganze Unterfangen absolut aussichtslos.

1) https://www.8devices.com/products/usb2can -> 
https://www.8devices.com/media/products/usb2can/downloads/CANAL_API.pdf 
-> 
https://github.com/krumboeck/usb2can_canal/blob/master/CANAL/CANAL/win32/usb2can.def 
-> 
https://github.com/grodansparadis/vscp/blob/master/src/vscp/drivers/level1/usb2can/usb2can/win32/usb2can.def 
bzw. 
https://github.com/grodansparadis/vscp/blob/3ec15a8d22adfedcbda2f24ef265b9fd20030af9/src/vscp/drivers/level1/ixxat_vc2/win32/ixxatvcidrv.def
2) 
https://www.kvaser.com/kvaser/site/canlib-webhelp/page_core_api_calls.html
3) 
https://www.ixxat.com/products/products-industrial/pc-interfaces/pc-can-interfaces/windows

von Martin G. (Firma: www.engyneer.at) (martin_g697)


Lesenswert?

wow. Wenn ich das rein finanziell überdenke, dann ist es günstiger einen 
Windows PC zu kaufen und da die Programme laufen zu lassen...

Aber das ist Hobby und da zählt kein Geld oder Zeit...

Dieser Composer von Elmo kann 3 Sachen verwenden:
Kvaser Treiber über den Kvaser eigenen Treiber, und Ixxat Treiber über 
VCI Treiber, oder Softing mit einem mir unbekannten Treiber.

Ich würde gerne Kvaser oder IXXAT erst mal zum Laufen bringen.

Ich habe da was gefunden:
https://github.com/brentr/wineftd2xx
Das ist für die Intronix Logic analyser. Ein FTDI Treiber.
Ich werd daraus nicht schlau. also das ist eine DLL die dem wine 
vorgaukelt ein echter Treiber zu sein und benutzt die Linux treiber? 
Aber ich verstehe noch nicht wie das funktioniert.
Sowas ähnliches müssten wir auch für die USB2CAN Treiber machen...

Im Wine lässt sich COmposer locker installieren und er läuft auch. Aber 
er erkennt den VCI Treiber nicht. Sogar Ixxats eigener Canalyser erkennt 
nichts.
Wie sehe ich welche dll er benutzen will?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wäre es nicht weniger Aufwand, die Funktion von "Composer" selbst als 
Linux-Programm nachzubauen? Dann würde der ganze 
Wine-Treiber-DLL-Wasauchimmer-Kram einfach wegfallen ...

von DPA (Gast)


Lesenswert?

Martin G. schrieb:
> Im Wine lässt sich COmposer locker installieren und er läuft auch. Aber
> er erkennt den VCI Treiber nicht. Sogar Ixxats eigener Canalyser erkennt
> nichts.
> Wie sehe ich welche dll er benutzen will?

Es gibt mehrere Möglichkeiten:

 1) Am effektivsten wäre wohl die Anwendung in Wine von der Konsole aus 
zu starten, und vorher die Environmentvariable "WINEDEBUG=+loaddll" zu 
setzen [1]. So sieht man welche DLLs wann tatsächlich gestartet werden. 
Schreibe die Ausgabe am besten gleich auch noch in eine Datei: 
"WINEDEBUG=+loaddll wine anwendung.exe 2>&1 | tee winelog.log". Stelle 
vorher sicher, dass die Anwendung mit "wine anwendung.exe" gestartet 
werden kann. Falls das nicht geht, prüfe, ob das current working 
directory und das WINEPREFIX stimmen. Danach kann man die Datei mit den 
Ausgaben noch weiter durchsuchen, z.B. so: "grep -i can winelog.log" 
oder "grep -i vci winelog.log".

 2) Man könnte z.B. mit "strings anwendung.exe | grep '.dll$'" in einer 
.exe oder .dll alle Strings ausgeben, die mit .dll enden, womit man dann 
die meisten DLLs haben sollte. Die DLLs können aber auch DLLs nachladen.

Die canlib API von Kvaser scheint mir im vergleich zu VCI einfacher. 
Könntest du nachsehen, ob bei "grep 'canlib.*.dll' 
pfad/zum/verzeichnis/" auf das Verzeichnis, wo das Programm mit all 
seinen DLLs, das du nutzen willst, installiert wurde, etwas findet? Das 
wäre dann nämlich ein gutes Indiz, dass die canlib32.dll verwendet 
wurde. Dann könnte man in einem nächsten schritt mal eine dummy dll 
erstellen, und von der Anwendung laden lassen, und dann Schließlich die 
Funktionen implementieren. Bei der DLL kann man die Funktionssignaturen 
und Konstanten ziemlich leicht in der SDK von Kvaser in der canlib.h 
nachlesen.

1) https://wiki.winehq.org/Wine_User%27s_Guide

von DPA (Gast)


Lesenswert?

Martin G. schrieb:
> Ein FTDI Treiber.
> Ich werd daraus nicht schlau. also das ist eine DLL die dem wine
> vorgaukelt ein echter Treiber zu sein und benutzt die Linux treiber?

Wine unterstützt keine Treiber. Programme sprechen normalerweise nicht 
direkt mit Geräten, stattdessen verwenden sie die API einer DLL, die zum 
Treiber gehört, die dann die Kommunikation mit dem Kernel/Treiber usw. 
übernimmt. Wine kann eigene .dll und .dll.so statt der nativen laden, 
die die selbe API exportiert. Letztere können auf Linux APIs und 
Libraries zurückgreifen, und mit diesen die API der DLL implementieren.

von Martin G. (Firma: www.engyneer.at) (martin_g697)


Lesenswert?

Danke für die Tipps mit WINEDEBUG...
Werd's weiter versuchen.


Rufus Τ. F. schrieb:
> Wäre es nicht weniger Aufwand, die Funktion von "Composer" selbst als
> Linux-Programm nachzubauen? Dann würde der ganze
> Wine-Treiber-DLL-Wasauchimmer-Kram einfach wegfallen ...

Leider sendet der Composer sehr viele Daten, mit Befehl-Paketen, die 
nicht beschrieben sind im Benutzerhandbuch.
Irgendwie schafft er es den Servo zu tunen und alles einzustellen, aber 
es ist nicht richtig beschrieben, sondern "der macht das schon".

Ich würde das Tunen gerne selber machen, denn zur Zeit sind die Teile 
ziemlich laut eingestellt. (lautes Rauschen im Pos-Regelbetrieb)
Ich denke die Strommessung ist zu rauschbehaftet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.