USB - A/D-Interface von BMC Messsysteme GmbH

Fragen zu Raspberry, FritzBox, Microcontroller, UART, etc...
Antworten
Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Di 18. Jun 2013, 09:34

Hallo Forum,

bei mir auf dem Tisch liegt ein A/D-Interface der Firma BMC Messsysteme GmbH (http://www.bmcm.de/ger/pr-usb-ad.html) das ich über Gambas ansprechen möchte.

Bildschirmfoto USB-AD.png
Bildschirmfoto USB-AD.png (135.44 KiB) 8658 mal betrachtet


Die vom Hersteller angebotenen Treiber für Linux-Systeme konnte ich mit Hilfe eines Linux-Menschen installieren. Doch bei der Frage wie man nun das Teil über Gambas anspricht, konnte er mir auch nicht weiterhelfen.

Könnt Ihr mir da weiterhelfen ?

Aus der Installationsanleitung für die Treiber:

Bildschirmfoto include.png
Bildschirmfoto include.png (70.76 KiB) 8658 mal betrachtet



Hier mein kläglicher Versuch mit Fehlermeldung :( .

Bildschirmfoto Gambas.png
Bildschirmfoto Gambas.png (44.08 KiB) 8658 mal betrachtet


Wäre super wenn mir jemand weiterhelfen könnte :) .


Besten Dank schon mal im Voraus
Gruss Praktikant


PS: Die Datenblätter

Das Interface: http://www.bmcm.de/ger/dld.php?action=g ... st&lang=de
Die Treiber: http://www.bmcm.de/ger/dld.php?action=g ... .5&lang=de

tux_
Moderator
Beiträge: 944
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von tux_ » Di 18. Jun 2013, 09:52

Gambas unterstuetzt den Aufruf von Funktionen aus externen C-Bibliotheken (denn darum handelt es sich bei der Schnittstelle, die in einem der Photos oben abgebildet ist) - es braucht lediglich etwas Assistenz deinerseits.

Es gibt drei Seiten in der Gambas-Dokumentation[0][1][2] ueber das EXTERN-Schluesselwort und Konsorten und deren Einsatz. Nicht erschrecken, an diesem Punkt ist die Dokumentation auszerordentlich extensiv.

Als erstes musst du die Schnittstelle analysieren:
* Welche externe(n) Bibliothek(en)?
* Welche Funktion(en)?
* Fuer jede Funktion: Wie sieht ihre Signatur aus? Wie muss sie auf Gambas-Datentypen abgebildet werden?

In diesem Fall handelt es sich um die Bibliothek "libad4" und die Funktion "ad_open", sie gibt einen int32_t zurueck (Integer ist der zugehoerige Gambas-Datentyp). Sie erwartet einen const char * als Parameter, das ist in Gambas ein String.

Das Ergebnis ist folgendes:

Code: Alles auswählen

Extern ad_open(sName As String) As Integer In "libad4"

Public Sub Form_Open()
  Dim adh As Integer

  adh = ad_open("usb-ad")
  If adh = -1 Then Error.Raise("Failed to open USB-AD device")
End


Eine Anmerkung zum Quelltext: "adh" ist die C-Art Variablen zu nennen. In Gambas gibt es andere Konventionen. Es steht dir natuerlich frei, ihr nicht zu folgen, aber man wuerde in Gambas statt "adh" eher "iHandle" o.ae. schreiben.

Ich bin zuversichtlich, dass es funktioniert. Allerdings habe ich diese Bibliothek nicht vorliegen (noch die Hardware), um einen wirklichen Test durchzufuehren.

[0] http://gambasdoc.org/help/lang/extdecl?v3
[1] http://gambasdoc.org/help/cat/externfunc?v3
[2] http://gambasdoc.org/help/howto/extern?v3

PS: Du solltest auf Gambas3 umsteigen, wenn es irgend moeglich ist.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Di 18. Jun 2013, 14:18

Hallo tux,

besten Dank für die prompte Hilfe :D und die Ausführungen.

Gambas meldet leider :

Library nicht gefunden.png
Library nicht gefunden.png (30.58 KiB) 8652 mal betrachtet


... ich hab dann in den von Dir angegebenen Links gesucht und auch im Nezt gestöbert, bin aber nicht recht schlaug geworden. Wie und wo setzt man den Pfad? Unter "Projekteigenschaften / Bibliothek" gehts auch nicht:


libad4 so exportiert keine Klasse.png
libad4 so exportiert keine Klasse.png (49.14 KiB) 8652 mal betrachtet


Weisst Du weiter?

Danke und Gruss

PS: Habe Gambas3 installiert :!:

tux_
Moderator
Beiträge: 944
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von tux_ » Di 18. Jun 2013, 14:35

Die Bibliotheken die im o.g. Fenster eingetragen werden koennen, sind Gambas-Bibliotheken. Diese haben mit dem aktuellen Fall nichts zu tun.

Wenn du die libad4 korrekt installiert hast (als /usr/local/lib/libad4.so), dann ist die einzige Moeglichkeit fuer einen Fehlschlag wie unteren (No such file or directory), dass der dynamische Linker nicht angewiesen ist, Bibliotheken unter /usr/local/lib zu suchen. Das ist eher ungewoehnlich... Hast du bei der Installation der Bibliotheken auch das "sudo ldconfig" sicher nicht vergessen? (Seite 18 im angegebenen Handbuch)

Wenn nicht, koenntest du versuchen, unter "Project" -> "Properties" -> "Environment" und dort in der unteren Haelfte "Environment variables" ein Datenpaar einzutragen:

Variable: LD_LIBRARY_PATH
Value: /usr/local/lib

Die Angaben sind aus der englischen IDE. Wie die Menupunkte auf deutsch heiszen, weisz ich nicht. Dies setzt temporaer den bevorzugten Pfad fuer dynamische Bibliotheken auf den Ort, an dem die Bibliothek installiert sein sollte. Ich moechte nur wissen, ob es so geht. Das ist natuerlich keine dauerhafte Loesung. (Die Sache mit den Umgebungsvariablen war in Gambas2 noch nicht moeglich, wenn ich mich recht entsinne, aber das ist ja kein Problem mehr.)
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Mi 19. Jun 2013, 16:08

Hallo tux,

Danke für den Tip:

Umgebungsvariablen.png
Umgebungsvariablen.png (12.65 KiB) 8642 mal betrachtet



Jetzt zeigt sich leider folgende Meldung:

falsche EFL Klasse.png
falsche EFL Klasse.png (28.47 KiB) 8642 mal betrachtet



Es scheint Probleme zu geben mit der Architektur. Der Treiber ist für 32Bit gemacht :( .
Weisst Du Abhilfe?

Doku Ausschnitt.png
Doku Ausschnitt.png (74.9 KiB) 8642 mal betrachtet


Danke und Gruss

tux_
Moderator
Beiträge: 944
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von tux_ » Mi 19. Jun 2013, 17:05

Es ist normalerweise moeglich, ein 32-Bit-Programm auf einem 64-Bit-Rechner laufen zu lassen - das ergaben zumindest meine Recherchen. Das Problem in diesem Fall ist allerdings, dass du unter Gambas bist. Der Gambas-Interpreter ist ein 64-Bit-Programm und er kann keine 32-Bit-Bibliothek laden.

Was du versuchen koenntest, ist, ein 32-Bit-Gambas zu installieren, d.h. Gambas komplett deinstallieren und dann eine 32-Bit-Version installieren. Ich fuerchte aber, dass du danach Probleme haben wirst, mit anderen Komponenten zu arbeiten, weil jede Komponente Abhaengigkeiten mitbringt, die wiederum nur als 32-Bit-Bibliotheken aufgeloest werden duerfen.

Wahrscheinlich ist es einen Versuch wert, da deine Paketverwaltung diese ganzen Abhaengigkeiten sicher automatisch haendelt.

Ich kann garnicht verstehen, warum der Hardwarehersteller keine 64-Bit-Version der Bibliothek anbietet... Es waere natuerlich das einfachste, dort mal um eine solche Version zu bitten...
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Do 20. Jun 2013, 08:32

Hallo tux,

ich werde mich erstmal an den Hersteller wenden. Der soll ein 64-Bit Treiber herausrücken. Mal sehn ...

Auf jeden Fall: Besten Dank für die prompte Hilfe und Gruss
Praktikant :)

PS: Sollte ich das Problem gelöst kriegen, so werde ich das hier posten.

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Fr 28. Jun 2013, 09:17

Hallo tux, hallo Forum,

der Hersteller meint nur: "Es steht kein 64er-Treiber zur Verfügung. Erstellen Sie eine 32-Bit-Applikation." :( .

Aber ich habe doch ein Workaround gefunden mit dem ich weiter komme. Dank der sachkundigen Hilfe eines Kollegen konnte ich ein C-Programm schreiben, das den 32-Bit-Treiber händelt. Dieses Programm wird von Gambas aufgerufen und übergibt die von der Hardware eingelesenen Daten an Gambas weiter.
Ein erstes Testprogramm hat den Beweis erbracht! :D Nun kann die Arbeit beginnen ...

Gruss Praktikant

tux_
Moderator
Beiträge: 944
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von tux_ » Fr 28. Jun 2013, 10:10

Hmm. Sollte ich jemals Messsysteme brauchen, dann kaufe ich sie nicht von diesem Hersteller...

Nicht die schoenste Loesung, aber auch die beste, die mir einfaellt.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Mo 12. Aug 2013, 14:21

Hallo tux,

in der Zwischenzeit habe ich Gambas auf einem 32Bit-Rechner installiert und konnte den Treiber für den USB-AD-Wandler direkt von Gambas aus ansprechen. So wie Du es oben geschildert hast :D .

Es gelang mir auch die beiden Treiberfunktionen:
ad_open() und ad_close() gemäss Deinem Beispiel aufzurufen.

Code: Alles auswählen

Extern ad_open(sName As String) As Integer In "libad4"
Extern ad_close(sName As Integer) As Integer In "libad4"

Public Sub Form_Open()
  Dim adh As Integer

  adh = ad_open("usb-ad")
  If adh = -1 Then
    Print "Fehler"
  Else
    Print "Ok"
  Endif

  ad_close(adh)

End


Doch mit der Funktion " ad_discrete_in() " tue ich mich echt schwehr. Ich blicke bei der Pointergeschichte nicht durch. Auch mit den Links die Du mir oben gegeben hast komme ich nicht weiter. Kannst Du mir helfen?
Danke schon mal im Voraus und Gruss
Praktikant :D



ad_discrete_in.jpg
Auszug aus dem Datenblatt
ad_discrete_in.jpg (57.2 KiB) 8396 mal betrachtet

tux_
Moderator
Beiträge: 944
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von tux_ » Mo 12. Aug 2013, 17:06

Auch dafuer hat Gambas gesorgt. Die Funktion VarPtr() [0] liefert die Speicheradresse des "Variablen-Kerns" einer Gambas-Variable (drum herum sind noch Verwaltungsdaten von Gambas, aber an dieser Stelle liegt der Wert der Variablen). Ein Wert, den eine C-Bibliothek dorthin schreibt, wird im Gambas-Programm dann erscheinen.

Code: Alles auswählen

Extern ad_discrete_in(iHandle As Integer, iChannel As Integer, iRange As Integer, pResult As Pointer) As Integer In "libad4"
...
Dim iResult As Integer

' Die Variable iHandle ist der Rueckgabewert von ad_open()
If ad_discrete_in(iHandle, ???, ???, VarPtr(iResult)) < 0 Then
  Error "Fehler"
Endif
' iResult traegt jetzt den Wert, den ad_discrete_in() dort eingetragen hat.
Print "Gelesen: ", iResult
...


Welche Parameter bei iChannel und iRange zu uebergeben sind, weiszt du sicher am besten. Es kann wohl auch nicht schaden, dafuer symbolische Konstanten zu etablieren:

Code: Alles auswählen

Private Const AD_CHA_TYPE_ANALOG_IN As Integer = ???


Die Fragezeichen muessten dann durch den numerischen Wert, der sicherlich im Header der Bibliothek zu finden ist, ersetzt werden.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Praktikant
Foriker
Beiträge: 11
Registriert: Mo 17. Jun 2013, 09:53
Kontaktdaten:

Re: USB - A/D-Interface von BMC Messsysteme GmbH

Beitrag von Praktikant » Mo 26. Aug 2013, 08:30

Hallo tux,
mit etwas Verspätung, besten Dank für Deine Antwort :) ! Hat mir sehr geholfen!

Gruss

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast