Visual Basic GPS ComPort

OP #1216654
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
Gast #1216829
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.
OP #1217022
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
#1217278
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.
Gast #1217282
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.
#1217305
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.
Gast #1217423
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.
#1217483
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.
#1217486
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...
OP #1217547
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
Gast #1217552
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.
OP #1217560
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
#1217563
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?
Gast #1217689
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren