Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups microsoft.public.de.* 1 Forum > Newsgroup microsoft.public.de.german.entwickler.dotnet.vb
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup microsoft.public.de.german.entwickler.dotnet.vb Forum microsoft.public.de.german.entwickler.dotnet.vb

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 07-11-2008, 02:01 PM
Falk Espenhahn
 
Beiträge: n/a
Standard Timer

Hallo,

ich möchte meine Anwendung für einen Moment unterbrechen und wenn ich das
richtig verstehe kann ich das mit einem Timer tun. Der Timer wird aktiviert
indem ich die Enable Eigenschaft auf TRUE setzte und je nach eingestellter
Zeit wird eine Aktion ausgeführt nach dieser Zeit und das solange wie der
timer aktiv ist nur bei mir passiert nichts nachdem ich den Timer
vermeintlich aktiviert habe. Woran kann das liegen. Im konkreten Fall wird
über eine serielle Schnittstelle eine Zeichenkette gesendet wenn sich in
dieser Zeichenkette nicht bestimmte Zeichen befinden soll die Schnittstelle
geschlossen ein Timer aktiviert werden der auf 1000 Millisekunden
eingestellt ist und nach dieser Zeit soll die Schnittstelle wieder geöffnet
und ein weiterer Versuch unternohmen werden mit der übertragenen
Zeichenkette. Bloß bei mir funktioniert das nicht.


Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 07-11-2008, 03:00 PM
Thorsten Doerfler
 
Beiträge: n/a
Standard Re: Timer


"Falk Espenhahn" <spinosa*newsgroup.nospam> schrieb:
> ich möchte meine Anwendung für einen Moment unterbrechen und wenn ich das
> richtig verstehe kann ich das mit einem Timer tun.


Nein. Ein Timer löst im eingestellten Intervall das Timer.Tick Ereignis aus.
In diesem kannst Du Deinen Code ausführen.

Thorsten Dörfler

Mit Zitat antworten
  #3  
Alt 07-11-2008, 03:16 PM
Falk Espenhahn
 
Beiträge: n/a
Standard Re: Timer

wie kann ich es dann anstellen das er die Ausführung für einen Moment
unterbricht? Denn die Schnittstelle muß ja erst komplett geschlossen werden
um eine etwaige Ausnahme zu vermeiden.

"Thorsten Doerfler" <t.doerfler_nospam*bdsw.de> schrieb im Newsbeitrag
news:32991CBD-A87B-43B3-960A-30C0694E29AF*microsoft.com...
>
> "Falk Espenhahn" <spinosa*newsgroup.nospam> schrieb:
>> ich möchte meine Anwendung für einen Moment unterbrechen und wenn ich das
>> richtig verstehe kann ich das mit einem Timer tun.

>
> Nein. Ein Timer löst im eingestellten Intervall das Timer.Tick Ereignis
> aus. In diesem kannst Du Deinen Code ausführen.
>
> Thorsten Dörfler



Mit Zitat antworten
  #4  
Alt 07-11-2008, 03:46 PM
Martin H.
 
Beiträge: n/a
Standard Re: Timer

Hallo Falk,

Also: Wenn das Tick-Ereignis ausgelöst wird, dann wird natürlich Deine
Schnittstellenroutine unterbrochen. Im Timer-Ereignis schaltest Du dann
die Schnittstelle ab.

Beste Grüße,

Martin

On 11.07.2008 22:16, wrote Falk Espenhahn:
> wie kann ich es dann anstellen das er die Ausführung für einen Moment
> unterbricht? Denn die Schnittstelle muß ja erst komplett geschlossen werden
> um eine etwaige Ausnahme zu vermeiden.
>
> "Thorsten Doerfler"<t.doerfler_nospam*bdsw.de> schrieb im Newsbeitrag
> news:32991CBD-A87B-43B3-960A-30C0694E29AF*microsoft.com...
>> "Falk Espenhahn"<spinosa*newsgroup.nospam> schrieb:
>>> ich möchte meine Anwendung für einen Moment unterbrechen und wenn ich das
>>> richtig verstehe kann ich das mit einem Timer tun.

>> Nein. Ein Timer löst im eingestellten Intervall das Timer.Tick Ereignis
>> aus. In diesem kannst Du Deinen Code ausführen.
>>
>> Thorsten Dörfler

>
>


Mit Zitat antworten
  #5  
Alt 07-11-2008, 04:11 PM
Falk Espenhahn
 
Beiträge: n/a
Standard Re: Timer

Ich benutzte das Tick Eriegnis eigentlich dazu mich mit der Schnittstelle
wieder zu verbinden, denn ich schließe die Schnittstelle wenn der
fehlerhafte String erkannt wird und um ein vollständiges Schließen der
Schnittstelle zu gewährleisten will ich eine gewisse Zeit verstreichen
lassen bevor ich mich mit der Schnittstelle wieder verbinde. Und ich bin mir
nicht sicher ob ein Tick Ereignis ausgelöst wird weil garnichts passiert.
"Martin H." <hkshk*gmx.net> schrieb im Newsbeitrag
news:48777258$1*127.0.0.1...
> Hallo Falk,
>
> Also: Wenn das Tick-Ereignis ausgelöst wird, dann wird natürlich Deine
> Schnittstellenroutine unterbrochen. Im Timer-Ereignis schaltest Du dann
> die Schnittstelle ab.
>
> Beste Grüße,
>
> Martin
>
> On 11.07.2008 22:16, wrote Falk Espenhahn:
>> wie kann ich es dann anstellen das er die Ausführung für einen Moment
>> unterbricht? Denn die Schnittstelle muß ja erst komplett geschlossen
>> werden
>> um eine etwaige Ausnahme zu vermeiden.
>>
>> "Thorsten Doerfler"<t.doerfler_nospam*bdsw.de> schrieb im Newsbeitrag
>> news:32991CBD-A87B-43B3-960A-30C0694E29AF*microsoft.com...
>>> "Falk Espenhahn"<spinosa*newsgroup.nospam> schrieb:
>>>> ich möchte meine Anwendung für einen Moment unterbrechen und wenn ich
>>>> das
>>>> richtig verstehe kann ich das mit einem Timer tun.
>>> Nein. Ein Timer löst im eingestellten Intervall das Timer.Tick Ereignis
>>> aus. In diesem kannst Du Deinen Code ausführen.
>>>
>>> Thorsten Dörfler

>>
>>

>



Mit Zitat antworten
  #6  
Alt 07-11-2008, 04:42 PM
Peter Götz
 
Beiträge: n/a
Standard Re: Timer

Hallo Falk,

> ich möchte meine Anwendung für einen Moment
> unterbrechen und wenn ich das richtig verstehe
> kann ich das mit einem Timer tun.


Nein, der Timer unterbricht nicht die Programmausführung.
Der Timer löst einfach, nachdem er gestartet worden ist
im Abstand von Timer.Interval das Ereignis Timer.Tick
aus. In der Ereignisprozedur Timer_Tick kannst Du dann
irgendwelchen Code ausführen.

> Der Timer wird aktiviert indem ich die Enable Eigenschaft

auf TRUE setzte

Du kannst stattdessen auch einfach

Timer.Start

ausführen.

> und je nach eingestellter Zeit wird eine Aktion ausgeführt


Nach dieser Zeit (Timer.Interval) wird das Ereignis Timer.Tick
ausgelöst. Das bedeutet, Code welcher in Deiner
Sub Timer_Tick() steht wird ausgeführt. Das wiederholt sich
solange, bis Du Timer.Stop oder Timer.Enabled = False
machst.


> nach dieser Zeit und das solange wie der timer aktiv ist nur
> bei mir passiert nichts nachdem ich den Timer vermeintlich
> aktiviert habe.


Es passiert schon was.
Eben das Timer.Tick - Ereignis wird ausgelöst.

Hier mal ein Beispiel mit einem Windows.Forms.Timer.
' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents mTimer As System.Windows.Forms.Timer


Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

mTimer = _
New System.Windows.Forms.Timer

mTimer.Interval = 1000
mTimer.Start()
End Sub

Private Sub mTimer_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mTimer.Tick

Me.Text = Now.Second.ToString
End Sub

Private Sub Form1_FormClosing _
(ByVal sender As Object, _
ByVal e As FormClosingEventArgs _
) Handles Me.FormClosing

mTimer.Stop()
mTimer.Dispose()
End Sub
End Class
' \\\ E N T E

Im Beispiel wird in Form_Load, also gleich nach dem
Programmstart, der Timer mit einem Intervall von 1 Sek.
gestartet. Mit jedem Eintreten des Eregnisses Timer.Tick
wird der in der Sub Timer_Tick() stehende Code aus-
geführt, der jeweils die akt. Sekunde in der Titelleiste
der Form anzeigt.


> Woran kann das liegen.


Vermutlich daran, dass bei Dir in der Sub Timer_Tick
kein Code steht.

> Im konkreten Fall wird über eine serielle Schnittstelle
> eine Zeichenkette gesendet


Dein Ablauf ist mir nicht so recht klar.
Du sendest also erst mal irgendeine Zeichenkette
über Deine ser. Schnittstelle.

> wenn sich in dieser Zeichenkette nicht bestimmte
> Zeichen befinden


Jetzt prüfst Du, ob sich in der bereits gesendeten
Zeichenkette bestimmte Zeichen befinden.

> soll die Schnittstelle geschlossen


Falls in der bereits gesendeten Zeichenkette
bestimmte Zeichen enthalten waren, schliesst
Du die ser. Schnittstelle.

Warum?

> ein Timer aktiviert werden der auf 1000 Millisekunden
> eingestellt ist


Anschliessend startest Du einen Timer mit einem Intervall
von 1 Sekunde

> und nach dieser Zeit soll die Schnittstelle wieder geöffnet


und nach Ablauf dieser Sekunde soll Deine ser.
Schnittstelle wieder geöffnet werden?

> und ein weiterer Versuch unternohmen werden mit
> der übertragenen Zeichenkette.


Welcher Versuch soll mit der bereits übertragenen
Zeichenkette unternommen werden?

> Bloß bei mir funktioniert das nicht.


Aus Deiner Beschreibung lässt sich nicht erkennen, was
Du wirklich machen möchtest. Ich vermute mal, Du hast
sowohl die Funktionalität als auch die der ser. Schnittstelle
falsch verstanden.

Du solltest Dein Vorhaben mal etwas verständlicher
beschreiben, insbesondere was genau Du mit Deiner
ser. Schnittstelle machen möchtest.


Zum Thema ser. Schnittstelle schau Dir vielleicht schon
mal das Beispiel unter

www.gssg.de -> Visual Basic -> VB.net
-> Serial Port (RS232) Chat.

Mit diesem Beispiel kannst Du Texte von einer ser.
Schnittstelle zu einer anderen (entweder am gleichen
oder auch an einem anderen Rechner) senden bzw.
von der Gegenstelle empfangen.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


Mit Zitat antworten
  #7  
Alt 07-11-2008, 06:11 PM
Falk Espenhahn
 
Beiträge: n/a
Standard Re: Timer

Der Anfang vom Ablauf war schon richtig. Die Ser. Schnittstelle wird
geöffnet. Eine angeschlossenes Messgerät sendet eine Zeichenkette an die
Schnittstelle im DataRecieve Ereignis prüfe ich ob bestimmte Zeichen an
einer bestimmten Stelle in der Zeichenkette vorkommen und zwar am Anfang der
Zeichenkette. Wenn nicht schließe ich die Schnittstelle. Und ich habe mal
gelesen bei nicht so flinken Rechner kann es sein das das Schließen der
seriellen Schnittstelle eine gewisse Zeit dauern kann. Nun will ich solchen
Rechnern die Zeit geben die Schnittstelle komplett zu schließen und erst
nach ca. 1 Sek. einen erneuten Versuch starten um mich mit der Schnittstelle
zu verbinden.

Im folgenden habe ich mal die beiden Funktion reinkopiert

Private Sub DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived

Dim wert1 As String

wert1 = serialPort.ReadTo(Chr(13) & Chr(10))

If InStr(wert1, "G.W.") Then

Replace(wert1, " ", "")

Else

serialPort.DiscardInBuffer()

Try

serialPort.Close()

Catch ex As Exception

MsgBox(ex.ToString)

End Try

Me.Timer2.Enabled = True

End If

End Sub

-------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer2.Tick

Try

With serialPort

..PortName = "COM1"

..BaudRate = UsR_BaudRate

..Parity = IO.Ports.Parity.None

..DataBits = UsR_DatenBits

..StopBits = IO.Ports.StopBits.One

..Open()

..ReceivedBytesThreshold = Me.CmbTreshold.Text

End With

Catch ex As Exception

MsgBox(ex.ToString)

End Try

Timer2.Enabled = False

End Sub

Oben steht das DataReceive Ereignis von der seriellen Schnittstelle und
unten das Timer.Tick Eriegnis.Der Timer ist auf 1000 Millisekunden
eingestellt. Aber irgendwie geht nichts. Wenn ich den Timer über eine
Schaltfläche aktivieredann funktioniert der Timer ansonsten nicht. Das
Programm soll ja nur für eine Weile unterbrochen (angehalten) damit sich das
Programm automatisch wieder an der Schnittstelle öffnen kann.

"Peter Götz" <gssg_nospam*t-online.de> schrieb im Newsbeitrag
news:uQvmCz24IHA.2072*TK2MSFTNGP04.phx.gbl...
> Hallo Falk,
>
>> ich möchte meine Anwendung für einen Moment
>> unterbrechen und wenn ich das richtig verstehe
>> kann ich das mit einem Timer tun.

>
> Nein, der Timer unterbricht nicht die Programmausführung.
> Der Timer löst einfach, nachdem er gestartet worden ist
> im Abstand von Timer.Interval das Ereignis Timer.Tick
> aus. In der Ereignisprozedur Timer_Tick kannst Du dann
> irgendwelchen Code ausführen.
>
>> Der Timer wird aktiviert indem ich die Enable Eigenschaft

> auf TRUE setzte
>
> Du kannst stattdessen auch einfach
>
> Timer.Start
>
> ausführen.
>
>> und je nach eingestellter Zeit wird eine Aktion ausgeführt

>
> Nach dieser Zeit (Timer.Interval) wird das Ereignis Timer.Tick
> ausgelöst. Das bedeutet, Code welcher in Deiner
> Sub Timer_Tick() steht wird ausgeführt. Das wiederholt sich
> solange, bis Du Timer.Stop oder Timer.Enabled = False
> machst.
>
>
>> nach dieser Zeit und das solange wie der timer aktiv ist nur
>> bei mir passiert nichts nachdem ich den Timer vermeintlich
>> aktiviert habe.

>
> Es passiert schon was.
> Eben das Timer.Tick - Ereignis wird ausgelöst.
>
> Hier mal ein Beispiel mit einem Windows.Forms.Timer.
> ' /// Code in einer leeren Form1
> Public Class Form1
> Private WithEvents mTimer As System.Windows.Forms.Timer
>
>
> Private Sub Form1_Load _
> (ByVal sender As System.Object, _
> ByVal e As System.EventArgs _
> ) Handles MyBase.Load
>
> mTimer = _
> New System.Windows.Forms.Timer
>
> mTimer.Interval = 1000
> mTimer.Start()
> End Sub
>
> Private Sub mTimer_Tick _
> (ByVal sender As Object, _
> ByVal e As System.EventArgs _
> ) Handles mTimer.Tick
>
> Me.Text = Now.Second.ToString
> End Sub
>
> Private Sub Form1_FormClosing _
> (ByVal sender As Object, _
> ByVal e As FormClosingEventArgs _
> ) Handles Me.FormClosing
>
> mTimer.Stop()
> mTimer.Dispose()
> End Sub
> End Class
> ' \\\ E N T E
>
> Im Beispiel wird in Form_Load, also gleich nach dem
> Programmstart, der Timer mit einem Intervall von 1 Sek.
> gestartet. Mit jedem Eintreten des Eregnisses Timer.Tick
> wird der in der Sub Timer_Tick() stehende Code aus-
> geführt, der jeweils die akt. Sekunde in der Titelleiste
> der Form anzeigt.
>
>
>> Woran kann das liegen.

>
> Vermutlich daran, dass bei Dir in der Sub Timer_Tick
> kein Code steht.
>
> > Im konkreten Fall wird über eine serielle Schnittstelle
>> eine Zeichenkette gesendet

>
> Dein Ablauf ist mir nicht so recht klar.
> Du sendest also erst mal irgendeine Zeichenkette
> über Deine ser. Schnittstelle.
>
>> wenn sich in dieser Zeichenkette nicht bestimmte
>> Zeichen befinden

>
> Jetzt prüfst Du, ob sich in der bereits gesendeten
> Zeichenkette bestimmte Zeichen befinden.
>
>> soll die Schnittstelle geschlossen

>
> Falls in der bereits gesendeten Zeichenkette
> bestimmte Zeichen enthalten waren, schliesst
> Du die ser. Schnittstelle.
>
> Warum?
>
>> ein Timer aktiviert werden der auf 1000 Millisekunden
>> eingestellt ist

>
> Anschliessend startest Du einen Timer mit einem Intervall
> von 1 Sekunde
>
>> und nach dieser Zeit soll die Schnittstelle wieder geöffnet

>
> und nach Ablauf dieser Sekunde soll Deine ser.
> Schnittstelle wieder geöffnet werden?
>
>> und ein weiterer Versuch unternohmen werden mit
>> der übertragenen Zeichenkette.

>
> Welcher Versuch soll mit der bereits übertragenen
> Zeichenkette unternommen werden?
>
>> Bloß bei mir funktioniert das nicht.

>
> Aus Deiner Beschreibung lässt sich nicht erkennen, was
> Du wirklich machen möchtest. Ich vermute mal, Du hast
> sowohl die Funktionalität als auch die der ser. Schnittstelle
> falsch verstanden.
>
> Du solltest Dein Vorhaben mal etwas verständlicher
> beschreiben, insbesondere was genau Du mit Deiner
> ser. Schnittstelle machen möchtest.
>
>
> Zum Thema ser. Schnittstelle schau Dir vielleicht schon
> mal das Beispiel unter
>
> www.gssg.de -> Visual Basic -> VB.net
> -> Serial Port (RS232) Chat.
>
> Mit diesem Beispiel kannst Du Texte von einer ser.
> Schnittstelle zu einer anderen (entweder am gleichen
> oder auch an einem anderen Rechner) senden bzw.
> von der Gegenstelle empfangen.
>
> Gruß aus St.Georgen
> Peter Götz
> www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
>
>



Mit Zitat antworten
  #8  
Alt 07-11-2008, 07:28 PM
Armin Zingler
 
Beiträge: n/a
Standard Re: Timer

"Falk Espenhahn" <spinosa*newsgroup.nospam> schrieb
> Der Anfang vom Ablauf war schon richtig. Die Ser. Schnittstelle wird
> geöffnet. Eine angeschlossenes Messgerät sendet eine Zeichenkette an
> die Schnittstelle im DataRecieve Ereignis prüfe ich ob bestimmte
> Zeichen an einer bestimmten Stelle in der Zeichenkette vorkommen und
> zwar am Anfang der Zeichenkette. Wenn nicht schließe ich die
> Schnittstelle. Und ich habe mal gelesen bei nicht so flinken Rechner
> kann es sein das das Schließen der seriellen Schnittstelle eine
> gewisse Zeit dauern kann. Nun will ich solchen Rechnern die Zeit
> geben die Schnittstelle komplett zu schließen und erst nach ca. 1
> Sek. einen erneuten Versuch starten um mich mit der Schnittstelle zu
> verbinden.


Abgesehen davon, dass du Option Strict einschalten solltest: Was
funktioniert denn nicht? Wird Timer2_Tick nicht ausgeführt? Wird die Zeile
"timer2.enabled = true" überhaupt erreicht?

> If InStr(wert1, "G.W.") Then


Wenn /was/ mit Instr ist?

> Replace(wert1, " ", "")


Replace ist eine Function.



Armin

Mit Zitat antworten
  #9  
Alt 07-12-2008, 06:09 AM
Karsten Sosna
 
Beiträge: n/a
Standard Re: Timer

> Der Anfang vom Ablauf war schon richtig. Die Ser. Schnittstelle wird
> geöffnet. Eine angeschlossenes Messgerät sendet eine Zeichenkette an die
> Schnittstelle im DataRecieve Ereignis prüfe ich ob bestimmte Zeichen an
> einer bestimmten Stelle in der Zeichenkette vorkommen und zwar am Anfang
> der Zeichenkette. Wenn nicht schließe ich die Schnittstelle. Und ich habe
> mal gelesen bei nicht so flinken Rechner kann es sein das das Schließen
> der seriellen Schnittstelle eine gewisse Zeit dauern kann. Nun will ich
> solchen Rechnern die Zeit geben die Schnittstelle komplett zu schließen
> und erst nach ca. 1 Sek. einen erneuten Versuch starten um mich mit der
> Schnittstelle zu verbinden.


Hallo Falk,
kann es sein, das Du noch nicht allzuviel mit Schnittstellen gemacht hast?
Normalweise verwendet man ein Protokoll für die Kommunikation um die
Übertragung zu synchronisieren. Das hrißt es gibt einen Master und ein
Slave(oder Talker und Listner). Der Master ist i.d.R. der PC und die
angeschlossene Peripherie der Slave. Der Master fordert den Slave auf ihm
Daten zu senden. Passiert das nicht oder die Daten sind unlesbar weiderholt
der Master nach einer gewissen Zeit(Timeout) seine Anfrage. Nach bestimmten
Kriterien und immerwieder auftretenden Fehlern wird dann die Verbindung
aufgegeben und eine Message generiert, die User darauf aufmerksam macht,
dass keine Verbindung zustande kam. Wie so ein Protokoll aufgebaut hängt von
der Peripherie und steht normalerweise in der technischen Beschreibung der
Peripherie, ansonsten beim Hersteller anfragen. Ohne Kenntnisse dieses
Protokolls wird es nahezu unmöglich eine funktionierende Übertragung zu
ermöglichen.
Schleißen und öffnen der Schnittstelle während einer Verbindung führt
defintiv zur Zerstörung des Datenfluss. solange Du Umwelteinflüsse die sich
negativ auf die Verbindung auswirken ausschließen kannst und die Hardware
ansonsten i.O. ist, brauchst Du Schnittstelle nur einmal öffnen und am Ende
der Anwendung wieder schließen. Ein Timer wird lediglich dazu gebraucht um
das Timeout zu erkennen.
Schau Dir nochmal das Handbuch an, da steht bestimmt wie die Übertragung zu
erfolgen hat. Ach mit Protokoll meine ich nicht bspw. die Einstellung 9600,
8, N , 1 oder sowas, das sind die Einstellungen für das Hardwareprotokoll.
Ohne genaue Angaben und das Aussehen des "Software"-Protkolls kann man Dir
so schlecht weiterhelfen, selbst wenn es nur um eine Testroutine geht.
--
Gruß Scotty


Mit Zitat antworten
  #10  
Alt 07-12-2008, 08:54 AM
Peter Götz
 
Beiträge: n/a
Standard Re: Timer

Hallo Falk,

> Der Anfang vom Ablauf war schon richtig. Die Ser.
> Schnittstelle wird geöffnet. Eine angeschlossenes
> Messgerät sendet eine Zeichenkette an die Schnittstelle


Das heisst also Du empfängst Daten. Dein ursprüngliches
Posting hat den Eindruck erweckt, als würdest Du Daten
senden.


> im DataRecieve Ereignis prüfe ich ob bestimmte Zeichen
> an einer bestimmten Stelle in der Zeichenkette vorkommen
> und zwar am Anfang der Zeichenkette. Wenn nicht schließe
> ich die Schnittstelle.


Warum schliesst Du die Schnitstelle?


> Und ich habe mal gelesen bei nicht so flinken Rechner kann
> es sein das das Schließen der seriellen Schnittstelle eine
> gewisse Zeit dauern kann.


Wie lange das Schliessen der Schnittstelle dauert, ist
in der Tat unterschiedlich, hat aber nicht nur was mit
einer schnellen oder weniger schnellen Hardware zu tun.


> Nun will ich solchen Rechnern die Zeit geben die Schnittstelle
> komplett zu schließen


Da die konkrete Zeit nicht bekannt ist, macht es auch wenig
Sinn, mit starren Zeitspannen arbeiten zu wollen. Die
Abläufe an einer Schnittstelle (nicht nur an der ser. Schnittstelle)
regelt man sinnvollerweise per Ereignissteuerung und durch
Statusabfragen.


> und erst nach ca. 1 Sek. einen erneuten Versuch starten
> um mich mit der Schnittstelle zu verbinden.


Es macht überhaupt keinen Sinn, die ser. Schnittstelle
in diesem Zusammenhang ständig zu öffnen, wieder zu
schliessen und gleich wieder zu öffnen.

1.) Öffne Deine Schnittstelle, wenn Du das erste mal
Daten auf dieser Empfangen willst.

2.) Empfange Daten von der Schnittstelle indem Du auf
das Ereignis DataReceived reagierst.

3.) Schliesse die Schnittstelle erst wieder, wenn Du
keine weiteren Empfangsdaten mehr erwartest.

> Im folgenden habe ich mal die beiden Funktion reinkopiert
>
> Private Sub DataReceived(ByVal sender As Object, ByVal e As
> System.IO.Ports.SerialDataReceivedEventArgs)
> Handles serialPort.DataReceived
>
> Dim wert1 As String
>
> wert1 = serialPort.ReadTo(Chr(13) & Chr(10))
>
> If InStr(wert1, "G.W.") Then
>
> Replace(wert1, " ", "")


Was soll dieses Replace?
Ohne den Rückgabewert von Replace zu verwerten
ist diese Befehlszeile sinnlos.

>
> Else
>
> serialPort.DiscardInBuffer()
>
> Try
>
> serialPort.Close()


Wozu dieses Close?

>
> Catch ex As Exception
>
> MsgBox(ex.ToString)
>
> End Try
>
> Me.Timer2.Enabled = True


Dieser Timer ist völlig überflüssig, wenn die
Schnittstelle sinnvollerweise solange geöffnet
bleibt, wie sie auch in Benutzung ist.


> End If
>
> End Sub
>
> --------------------------------------------------------------------------

----------------------------------------------------------------------------
-------
>
> Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles Timer2.Tick
>
> Try
>
> With serialPort
>
> .PortName = "COM1"
>
> .BaudRate = UsR_BaudRate
>
> .Parity = IO.Ports.Parity.None
>
> .DataBits = UsR_DatenBits
>
> .StopBits = IO.Ports.StopBits.One
>
> .Open()
>
> .ReceivedBytesThreshold = Me.CmbTreshold.Text
>
> End With
>
> Catch ex As Exception
>
> MsgBox(ex.ToString)
>
> End Try
>
> Timer2.Enabled = False
>
> End Sub


s.oben:
Diese ganze Timergeschichte ist überflüssig, wenn
Du sinnvollerweise Deine Schnittstelle erstmalig z.B.
beim Programmstart öffnest und sie erst dann, wenn
sie nicht mehr benötigt wird, z.B. beim Programmende,
wieder schliesst.

Da Du Deine Kommunikation zwischen Deinem
Messgerät offenbar ohne Protokoll abwickelst, birgt das
Schliessen der Schnittstelle ja auch die Gefahr, dass Du
vom Messgerät gesendete Daten gar nicht mitbekommst,
weil die ser. Schnittstelle gerade geschlossen ist.


> Oben steht das DataReceive Ereignis von der seriellen
> Schnittstelle und unten das Timer.Tick Eriegnis.Der
> Timer ist auf 1000 Millisekunden eingestellt. Aber
> irgendwie geht nichts.


Was heisst "irgendwie geht nichts"?
Hast Du mal geprüft, ob Dein Sub DataReceived überhaupt
aufgerufen wird? Solange dies nicht der Fall ist, wird
natürlich auch Dein (ohnehin überflüssiger) Timer nicht
gestartet.


> Wenn ich den Timer über eine Schaltfläche aktivieredann
> funktioniert der Timer ansonsten nicht.


Der Fehler ist sicher nicht beim Timer zu suchen, sondern
eben in Deinem Programmablauf. Sprich, Du musst erst
mal prüfen, ob Deine Sub_DataReceived, in welcher der
Timer gestartet wird, überhaupt aufgerufen wird.


> Das Programm soll ja nur für eine Weile unterbrochen
> (angehalten)


Warum willst Du denn Dein Programm anhalten?


> damit sich das Programm automatisch wieder an der
> Schnittstelle öffnen kann.


Das Programm kann sich sicher nicht an der Schnittstelle
öffnen. Du meinst vermutlich, das Programm soll Deine
Schnittstelle wieder öffnen.

Wenn Du eine Kommunikation zwischen Deinem PC und
einem via ser. Schnittstelle angeschlossenen externen
Gerät realisieren willst, ist es sinnvoll erst mal zu überlegen,
wie, sprich nach welchen Regeln, diese Kommunikation
ablaufen soll. Ein solches Regelwerk nennt man
"Übertragungsprotokoll".

Dabei kann vereinbart werden, dass eine Datenübertragung
immer nur von einer Seite aus angestossen wird. Die
Gegenstelle reagiert dann jeweils immer nur auf einen
solchen Anstoss.
Es gibt aber auch Protokolle, bei denen jede Seite
gleichberechtigt eine Datenübertragung einleiten kann.

Ob überhaupt und wenn ja welches Protokoll zum Einsatz
kommen kann, hängt vor allem von den Fähigkeiten Deines
Messgerätes ab. Du solltest mal in der Dokumentation
zu diesem Gerät nachsehen, ob und wenn ja, welches
Übertragungsprotokoll dieses Gerät beherrscht.

Ein solches Übertragungsprotokoll sieht im wesentlichen
so aus:

A sendet Nachricht an B, dass eine Nachrichtenübertragung
stattfinden soll.

B quittiert diese Aufforderung durch eine entspr.
Quittungsnachricht an A und/oder beginnt mit dem
Senden von Daten (z.B. Messdaten).

A quittiert den Empfang der von B gesendeten Daten,
wenn alle Daten fehlerfrei und vollständig empfangen
worden sind durch eine Gut-Quittung (Ack).
Sind die empfangenen Daten fehlerhaft oder unvollständig
angekommen, quittiert A den Empfang mit einer
Schlecht-Quittung (Nak), was für die Gegenstelle bedeutet,
dass sie die zuletzt gesendeten Daten nochmal senden
muss.

Ein solches Protokoll vereinbart in der Regel auch
eine max. Zeitspanne, in der eine Quittung empfangener
Daten erfolgen muss (TimeOut). Wird diese Zeit überschritten,
bedeutet dies, für den auf die Quittung Wartenden, dass er
seine letzte Nachricht nochmal senden muss, da sie offenbar
bei der Gegenstelle nicht angekommen ist.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)



Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
Timer Peter Schürer Newsgroup microsoft.public.de.excel 4 01-20-2009 04:55 PM
Timer ohne Timer-Control Herrmann Müller Newsgroup microsoft.public.de.vb 4 11-14-2008 12:10 PM
Timer Norbert Stellberg Newsgroup de.comp.lang.delphi.misc 3 09-05-2008 03:41 PM
timer.enabled vs. timer.start() Andreas Hohn Newsgroup microsoft.public.de.german.entwickler.dotnet.vb 5 08-25-2008 05:15 PM
Timer Andi Newsgroup microsoft.public.de.vb 1 06-18-2008 11:57 PM


Alle Zeitangaben in WEZ. Es ist jetzt 05:47 PM Uhr.



Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Forum SEO by Zoints