Forum: PC-Programmierung Visual Basic GPS ComPort


von Jürgen L. (juelue)


Lesenswert?

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

von Strabe (Gast)


Lesenswert?

evtl das Port vor jedem Öffnen erneut initialisieren könnte helfen. 
Hatte vor gefühlten 20 Jahren ähnliche Probleme

von Jürgen L. (juelue)


Lesenswert?

... vielen Dank für die superschnelle Antwort!
Wie mache ich das (Port initialisieren) in VB? Habe schon gesucht, kann 
nichts finden.
MFG
JueLue

von Else Somwhere (Gast)


Lesenswert?

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.

von Jürgen L. (juelue)


Lesenswert?

...
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

von Karl H. (kbuchegg)


Lesenswert?

Hast du das Serial-Objekt schon mal durchforstet, ob es da sowas wie 
einen Error State gibt, der gelöscht werden möchte?

von Severino R. (severino)


Lesenswert?

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.

von Sven P. (Gast)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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.

von Layouter (Gast)


Lesenswert?

ReceiveTreshold sollte glaub ich auf 1 gestellt sein. Ansonsten wirst du 
nie etwas empfangen.

von Sven P. (Gast)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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...

von Sven P. (Gast)


Lesenswert?

Unterm Strich benutzt er also ein uninitialisiertes Objekt.

von Severino R. (severino)


Lesenswert?

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.

von Jürgen L. (juelue)


Lesenswert?

... 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

von Sven P. (Gast)


Lesenswert?

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.

von Jürgen L. (juelue)


Lesenswert?

...
> 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

von Severino R. (severino)


Lesenswert?

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?

von Else Somwhere (Gast)


Lesenswert?

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.

von Jürgen L. (juelue)


Lesenswert?

...
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
Noch kein Account? Hier anmelden.