CallFunction kann Device nicht schliessen PB4.51
Verfasst: 06.02.2011 15:32
Hallo Leute,
ich habe eine automatische Adressprüfung für meine Velleman USB-Karte, mit der ich immer spiele.
Das hat mit PB 4.0 gut funktioniert. Aber mit 4.51 meldet er einen Lesefehler auf die Kartenadresse.
Siehe Code:
Wenn ich die Karte aber in der Schleife nicht schließe, liest das Programm aus allen offenen Kartenadressen den Analogwert.
D.H. von 0-3 werden alle Analogwerte gelesen und der höchste Wert in die Variable geschrieben (scheint zumindest so). Somit ist die Variable "ana1" immer > -1. Die Schleife geht bis 3 und so steht die Variable "erreicht" auch zum Schluß auf 3.
Meine Karte ist aber auf 0 Adressiert und ich kann nichts steuern, weil die falsche Karte angesprochen wird.
Ich hoffe das ist einigermassen verständlich formuliert.
Für mein Verständnis ist das ein Bug, aber falls ich doch irgendwie einen Programmierfehler eingebaut habe, dann bitte ich diesen Thread zu verschieben und mir eben per PN zu sagen wohin, damit ich´s finde.
Gruß Holger
ich habe eine automatische Adressprüfung für meine Velleman USB-Karte, mit der ich immer spiele.
Das hat mit PB 4.0 gut funktioniert. Aber mit 4.51 meldet er einen Lesefehler auf die Kartenadresse.
Siehe Code:
Code: Alles auswählen
If OpenLibrary(0,"k8055d.dll")
Debug "Dll geladen" ; Meldung DLL gefunden
For smer = 0 To 3 ;Es gibt 4 mögliche Kartenadressen 0-3
ana1=-1 ;Variable ana1 vor der Prüfung auf -1 setzen
CallFunction(0,"OpenDevice",smer)
delay(30) ;Atempause
ana1 = CallFunction(0,"ReadAnalogChannel",1) ;Ist der Wert > -1 hängt eine Karte dran
Debug ana1 ;Wert des analogen Kanals checken
Debug smer ;gerade geprüfte Kartenadresse darstellen
If ana1 >= 0 ;Ein analoger Wert am Kanal 1 gefunden?
erreicht = smer ;Karte gefunden! Adresse gleich meinem Schmiermerker
EndIf
Delay(50) ;langsam an nur zur Sicherheit
CallFunction(0, "CloseDevice", smer) ;Hier liegt das Problem, bei PB 4.0 gabs kein Gemecker, jetzt wird folgendes gemeldet: Ungültiger Speicherzugriff (Lesefehler an der Adresse 0)
;Meine Schleife fängt ja bei 0 an. Gemeint ist also die Kartenadresse.
Next
Else
debug "Keine Dll" ;-Meldung keine DLL gefunden
EndIf
End
D.H. von 0-3 werden alle Analogwerte gelesen und der höchste Wert in die Variable geschrieben (scheint zumindest so). Somit ist die Variable "ana1" immer > -1. Die Schleife geht bis 3 und so steht die Variable "erreicht" auch zum Schluß auf 3.
Meine Karte ist aber auf 0 Adressiert und ich kann nichts steuern, weil die falsche Karte angesprochen wird.
Ich hoffe das ist einigermassen verständlich formuliert.
Für mein Verständnis ist das ein Bug, aber falls ich doch irgendwie einen Programmierfehler eingebaut habe, dann bitte ich diesen Thread zu verschieben und mir eben per PN zu sagen wohin, damit ich´s finde.
Gruß Holger