Hallo! Ich habe folgendes Problem: Ich möchte die Daten einer GPS-Maus in Visual-Basic 2008 (Visual Studio 2008) einlesen. Maus: Navilock NL-402U, USB, installiert einen virtuellen COM-Port (COM19) In Visual Basic habe ich einen serialport1 in mein Form gezogen und dort die Eckdaten festgelegt. Wenn ich mit serialport1.open () den Port in VB öffne und mit daten = serialport1.readexisting() die Daten auslese, kommen auch munter Datensätze an. Wenn ich aber das VB-Programm beende (egal ob mit serialport1.close() oder ohne), bekomme ich nach einem neuen Start des VB Progs keine Daten mehr. Das gleiche, wenn ich innerhalb des Progs den Port schließe und wieder öffne. Es gibt keine Fehlermeldung, an der seriellen Schnittstelle werden einfach keine Daten gelesen. Das einzige was ich machen kann, ist den USB-Stecker ziehen und wieder verbinden, dann geht es wieder, bis ich das Prog einmal beendet habe. Andere PC-Programme haben übrigens keine Schwierigkeiten mit der Maus... Ich weiss nicht mehr weiter, habt ihr Ideen? MFG JueLue
evtl das Port vor jedem Öffnen erneut initialisieren könnte helfen. Hatte vor gefühlten 20 Jahren ähnliche Probleme
... vielen Dank für die superschnelle Antwort! Wie mache ich das (Port initialisieren) in VB? Habe schon gesucht, kann nichts finden. MFG JueLue
Im Object Browser im Menü Ansicht oder mit F2 gibt es eine Liste was ein Object kann. Eine Schöne Übersicht ist das. With CreateObject("MSCOMMLib.MSComm") .CommPort = 1 .Settings = "9600,n,8,1" End With Eventuell müssen .CTSHolding = True/False .DSRHolding = True/False .DTREnable = True/False und andere Properties einmal durchgeschüttelt werden. Gelegentlich wollten einige Dinge bei mir auch nicht funktionieen wie sie sollten. Ich kam darauf, den Com-Port mit With CreateObject("Scripting.FileSystemObject") Call .OpenTextFile("COM1") 'oder Call .CreateTextFile("COM1") End With zur Arbeit zu bewegen.
... Ich habe das alles mal durchprobiert, kein Erfolg. Ich habe ein anderes VB-Prog laufen lassen, dass einkommende Daten aus beliebigen COM-Ports anzeigt. Das gleiche Spiel. Stellt man den Com-Port ein und drück connect, läuft beim ersten Mal alles super, die Daten der Maus werden angezeigt, sobald man einmal Disconnect drückt, kann man so oft man will connect drücken, man kommt nicht mehr an die Daten heran. Da hilft dann nur noch USB-Stecker ziehen und wieder einstecken. Könnte also ein Problem der Maus bzw. des Virtuellen-Port-Treibers sein. Was mich nur wundert ist, dass kommerzielle Programme auf meinem PC da kein Problem mit haben (Google-Earth, Navis usw.) Ratlos... JueLue
Hast du das Serial-Objekt schon mal durchforstet, ob es da sowas wie einen Error State gibt, der gelöscht werden möchte?
Else Somwhere wrote: > Im Object Browser im Menü Ansicht oder mit F2 gibt es eine Liste was ein > Object kann. Eine Schöne Übersicht ist das. > > With CreateObject("MSCOMMLib.MSComm") > .CommPort = 1 > .Settings = "9600,n,8,1" > End With Was ist denn das, etwa noch VB <= 6??? Lasse mich gern belehren, aber imho ist es jedenfalls kein VB 2008.
Severino R. wrote: > Else Somwhere wrote: >> Im Object Browser im Menü Ansicht oder mit F2 gibt es eine Liste was ein >> Object kann. Eine Schöne Übersicht ist das. >> >> With CreateObject("MSCOMMLib.MSComm") >> .CommPort = 1 >> .Settings = "9600,n,8,1" >> End With > > Was ist denn das, etwa noch VB <= 6??? > Lasse mich gern belehren, aber imho ist es jedenfalls kein VB 2008. Ja, auch VB6.0 gibt es noch. Allerdings sagt mir meine bescheidene BASIC-Karriere, dass es evtl. sinnvoll sein kann, das erzeugte Objekt auch irgendwo abzulegen und dann zu benutzen...
1 | com = CreateObject(...) |
2 | With com |
3 | .CommPort = 1 |
4 | ... |
5 | End With |
Danach mit 'com' weiterbasteln.
Sven P. wrote: > Ja, auch VB6.0 gibt es noch. Aber es geht ja um: > Ich möchte die Daten einer GPS-Maus in Visual-Basic 2008 (Visual > Studio 2008) einlesen. > Allerdings sagt mir meine bescheidene BASIC-Karriere, dass es evtl. > sinnvoll sein kann, das erzeugte Objekt auch irgendwo abzulegen und dann > zu benutzen... > >
1 | > com = CreateObject(...) |
2 | > With com |
3 | > .CommPort = 1 |
4 | > ... |
5 | > End With |
6 | > |
> Danach mit 'com' weiterbasteln.
Das kommt dann noch dazu!
Aber in VB2008 ist es etwas anders!
Das Objekt existiert bereits, weil es auf der Form platziert wurde.
ReceiveTreshold sollte glaub ich auf 1 gestellt sein. Ansonsten wirst du nie etwas empfangen.
Severino R. wrote: > Das kommt dann noch dazu! > Aber in VB2008 ist es etwas anders! > Das Objekt existiert bereits, weil es auf der Form platziert wurde. Mag ja sein, aber mit 'With CreateObject(...)' wird ganz bestimmt nicht das Objekt angesprochen (und dann initialisiert), welches sich auf dem Formular befindet, sondern ein neues. Dadurch bleibt das auf dem Formular befindliche uninitialisiert.
Layouter wrote: > ReceiveTreshold sollte glaub ich auf 1 gestellt sein. Das Ding heisst ReceivedBytesThreshold und hat als Default den Wert 1. > Ansonsten wirst du nie etwas empfangen. Stimmt so nicht. Es müssen sonst halt nur mehr Zeichen empfangen werden, bevor das DataReceived Ereignis auftritt. JueLue liest ja mit: daten = serialport1.readexisting() da wird halt einfach gelesen, was im Buffer ist.
Sven P. wrote: > Mag ja sein, aber mit 'With CreateObject(...)' wird ganz bestimmt nicht > das Objekt angesprochen (und dann initialisiert), welches sich auf dem > Formular befindet, sondern ein neues. Dadurch bleibt das auf dem > Formular befindliche uninitialisiert. Eben. Und das COM-Object, welches mit CreateObject erstellt wird, hat mit dem SerialPort gar nichts zu tun:
1 | CreateObject-Funktion (Visual Basic) |
2 | Erstellt einen Verweis auf ein COM-Objekt und gibt diesen zurück... |
Sven P. wrote:
> Unterm Strich benutzt er also ein uninitialisiertes Objekt.
Nein, das Ding ist eine Referenz auf ein instanziiertes Objekt, das mit
Default-Eigenschaften initialisiert ist.
... Vielen Dank für die rege Beteiligung. Ich bin relativer VB Anfänger. Wie ich geschrieben habe, läuft der Empfang der Daten ja zunächst problemlos. Auch Fehlermeldungen liefert der Serial-Port wenn überhaupt nur einen Pufferüberlauf, wenn ich die Daten nicht auslese. Probleme treten ja erst dann auf, wenn ich den Port das erste mal schließe, weil ich das Prog verlasse. Danach erst, also beim erneuten Öffnen gibt es Probleme. Auch hier keinerlei Fehlermeldungen, der Status der Serial-Port ist ok, es kommen einfach keine Daten. JueLue
Severino R. wrote: > Sven P. wrote: >> Unterm Strich benutzt er also ein uninitialisiertes Objekt. > > Nein, das Ding ist eine Referenz auf ein instanziiertes Objekt, das mit > Default-Eigenschaften initialisiert ist. Ja, aber wenn er ebendieses initialisiert und später das Dingen weiterbenutzt, welches sich auf dem Formular befindet, dann benutzt er ein nicht-initialisiertes (i.S.v. mit Standardwerten belegt). Er hat ja insgesamt zwei Instanzen: Die, die das Ressourcengedöhns auf dem Formular erzeugt, und die, die er in 'With CreateObject(...)' erzeugt, initialisiert und danach vergisst.
... > Er hat ja insgesamt zwei Instanzen: Die, die das Ressourcengedöhns auf > dem Formular erzeugt, und die, die er in 'With CreateObject(...)' > erzeugt, initialisiert und danach vergisst. Das alles habe ich nur einmal getestet, kein Unterschied. In meinem Prog gibt es nur den SerialPort1, den ich auf das Form gezogen habe, dort habe ich in den Eigenschaften Portnummer usw. angepasst. Im eigentlichen Programm wird der Port nur geöffnet, Daten ausgelesen und wieder geschlossen. Ich sags nochmal, zunächst läuft ja alles Top, nur beim erneuten öffnen ist alles vorbei. JueLue
Sven P. wrote: > Er hat ja insgesamt zwei Instanzen: Die, die das Ressourcengedöhns auf > dem Formular erzeugt, und die, die er in 'With CreateObject(...)' > erzeugt, initialisiert und danach vergisst. Vergiss endlich die Sache mit CreateObject. Das verwendet JueLue ja gar nicht, das hat Else Somwhere mit seinem VB6 Zeugs (?) eingebracht. JueLue beendet das VB Programm und startet es erneut, und nun klappt's nicht mehr. @ JueLue: Kannst Du wenigstens etwas senden? Gibt es die Möglichkeit, Deinem GPS-Ding (weshalb muss es eigentlich Maus heissen?) etwas zu senden und festzustellen, ob er es empfangen hat?
Ja, tschuldigung, dass ich mit meinem Versuch zu helfen für Verwirrung sorgte. Genau, vergesst mein CreateObject. Natürlich kann man auch das Object nutzen welches von der Form zur Verfügung gestellt wird. Also With MSComm1 beispielsweise. Ich nutze hier gerne VBScript 5.6 und VB6. Damit ich ein Object nicht mit Set x = Nothing ordentlich terminieren muss benutze ich eben diese With-Konstruktion und spare mir dann auch noch den namen des Objects im weiteren Verlauf zu benutzen. Da ich nicht wissen kann ob der Standardname des Objects beibehalten wurde gab ich hier CreateObject an um es eigentlich zu verdeutlichen. Ich konnte ja nicht ahnen dass das so sehr irritiert. Die CreateObject-Methode funktioniert oftmals auch nur auf dem lokalen PC, beispielsweise wenn man das Winsock Object benutzt. Weil CreateObject den Lizenzschlüssen aus der Registry nicht mit einbindet. Der wird nur mit eingebunden wenn man das Object aus einer Form benutzt.
... Gibt es denn eine Möglichkeit, die USB-Erkennung von VB aus auszulösen, also so, als würde man den USB-Stecker herausziehen und wieder einstecken? JueLue
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.