Serialport und Systemauslastung

30/04/2009 - 08:16 von Werner_tom | Report spam
Hallo,
Ich habe folgenden Effekt:
Ein Serielles Messgeràt schickt stàndig Messwerte
Baudrate 38400, even, 7,1
Es gibt keinen Handshake. Nur RX TX und Ground.
Die Baudrate wird voll ausgenutzt, das heißt es werden so viel Daten
geschickt, wie über 38400 möglich sind.

nun zu meinem Problem:

ich erstelle eine neue vb.Net Anwendung.
ich füge zu meiner Form einen Button und ein Serialport hinzu.

in den Eigenschaften des Serialport stelle ich die entsprechende baudrate
usw ein.

das Buttonevent enthàlt nur serialport1.open.

ansonsten gibt es keinen weiteren code.

wenn ich die anwendung starte, liegt meine systemauslastung bei ca 2%.
das ist ja normal.

Sobald ich aber auf den Button klicke, also den COMPort öffne, schnellt
meine Systemauslastung auf 100%.

WIESO??????

Wenn ich den Port wieder schließe, liege ich wieder bei 2%.

Hat einer eine Idee, woran das liegen kann?

mfg
Thomas
 

Lesen sie die antworten

#1 Peter Götz
30/04/2009 - 09:39 | Warnen spam
Hallo Werner,

Ich habe folgenden Effekt:
Ein Serielles Messgeràt schickt stàndig Messwerte
Baudrate 38400, even, 7,1
Es gibt keinen Handshake.
Nur RX TX und Ground.



Du meinst damit offensichtlich, dass es kein
Hardware Handshaking gibt?
Das muss nicht unbedingt sein, wenn möglich,
würde ich es aber schon nutzen.

Die Baudrate wird voll ausgenutzt, das heißt es werden
so viel Daten geschickt, wie über 38400 möglich sind.



Man sollte schon auch noch wissen, in welchem Format
solche Daten übertragen werden. Oder anders aus-
gedrückt, wie erkennst Du, welche Daten (Bytes) zusammen-
gehören oder eben nicht, bzw. was sie zu bedeuten haben?


nun zu meinem Problem:

ich erstelle eine neue vb.Net Anwendung.
ich füge zu meiner Form einen Button und ein
Serialport hinzu.

in den Eigenschaften des Serialport stelle ich die
entsprechende baudrate usw ein.



Das "usw" wàre auch noch ganz interessant.


das Buttonevent enthàlt nur serialport1.open.
ansonsten gibt es keinen weiteren code.

wenn ich die anwendung starte, liegt meine
systemauslastung bei ca 2%. das ist ja normal.

Sobald ich aber auf den Button klicke, also den
COMPort öffne, schnellt
meine Systemauslastung auf 100%.



SerialPort.Open alleine verursacht ganz sicher
noch keine 100% CPU-Last.
Um das zu beurteilen, müsste man aber schon auch
noch wissen, was es sonst noch an Code gibt, welche
Eigenschaften des SerialPort-Objektes Du wie
eingestellt hast, ob an dem betr. Port bereits Daten
anliegen, ob und wie auf diese Daten reagiert
wird usw. , usw.

WIESO??????



Mit einem SerialPort.Open alleine kannst Du noch
keine Datenübertragung realisieren. Du musst
u.a. auf das Ereignis SerialPort_DataReceived
reagieren, welches in einem eigenen Thread
ablàuft und weshalb Du Deinen entsprechenden
Code entsprechend "threadsicher" gestalten musst.


Wenn ich den Port wieder schließe, liege ich
wieder bei 2%.

Hat einer eine Idee, woran das liegen kann?



Schau Dir mal das Beispiel unter

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

an. Du kannst zwei Instanzen dieses Programms
mit zwei miteinander verbunden Com-Port des
selben Rechners betreiben, oder mit zwei verschiedenen
Rechnern.
Das Programm kann jeweils Daten senden und ebenso
Daten empfangen.

Ob und welche Art von Daten empfangen werden, wird
in der Ereignisprozedur _DataReceived des SerialPort-
Objektes erkannt und darauf wird dann entsprechend
reagiert.

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

Ähnliche fragen