USB - A/D-Interface von BMC Messsysteme GmbH
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
USB - A/D-Interface von BMC Messsysteme GmbH
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.
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:
Hier mein kläglicher Versuch mit Fehlermeldung .
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
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.
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:
Hier mein kläglicher Versuch mit Fehlermeldung .
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
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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:
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.
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
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!
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
Hallo tux,
besten Dank für die prompte Hilfe und die Ausführungen.
Gambas meldet leider :
... 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:
Weisst Du weiter?
Danke und Gruss
PS: Habe Gambas3 installiert
besten Dank für die prompte Hilfe und die Ausführungen.
Gambas meldet leider :
... 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:
Weisst Du weiter?
Danke und Gruss
PS: Habe Gambas3 installiert
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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.)
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!
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
Hallo tux,
Danke für den Tip:
Jetzt zeigt sich leider folgende Meldung:
Es scheint Probleme zu geben mit der Architektur. Der Treiber ist für 32Bit gemacht .
Weisst Du Abhilfe?
Danke und Gruss
Danke für den Tip:
Jetzt zeigt sich leider folgende Meldung:
Es scheint Probleme zu geben mit der Architektur. Der Treiber ist für 32Bit gemacht .
Weisst Du Abhilfe?
Danke und Gruss
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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...
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!
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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.
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.
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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! Nun kann die Arbeit beginnen ...
Gruss Praktikant
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! Nun kann die Arbeit beginnen ...
Gruss Praktikant
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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.
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!
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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 .
Es gelang mir auch die beiden Treiberfunktionen:
ad_open() und ad_close() gemäss Deinem Beispiel aufzurufen.
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
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 .
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
Danke schon mal im Voraus und Gruss
Praktikant
Re: USB - A/D-Interface von BMC Messsysteme GmbH
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.
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:
Die Fragezeichen muessten dann durch den numerischen Wert, der sicherlich im Header der Bibliothek zu finden ist, ersetzt werden.
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
...
Code: Alles auswählen
Private Const AD_CHA_TYPE_ANALOG_IN As Integer = ???
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
-
- Foriker
- Beiträge: 11
- Registriert: Mo 17. Jun 2013, 10:53
- Kontaktdaten:
Re: USB - A/D-Interface von BMC Messsysteme GmbH
Hallo tux,
mit etwas Verspätung, besten Dank für Deine Antwort ! Hat mir sehr geholfen!
Gruss
mit etwas Verspätung, besten Dank für Deine Antwort ! Hat mir sehr geholfen!
Gruss
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste