Hallo, Ich habe folgenden Effekt, den ich nicht nachvollziehen kann: Ich habe ein Messgerät, das 60 mal pro sec seinen Messwert über die serielle Schnittstelle rausschickt. Jedes mal 60 Zeichen. Also eine ganz schöne Menge. in VB.net habe ich den serialport nur geöffnet. SerialPort1.PortName = "COM2" SerialPort1.BaudRate = 19200 SerialPort1.DataBits = 7 SerialPort1.Parity = IO.Ports.Parity.Even SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.Open() mehr nicht. Sobald ich diesen Code ausführe, steigt meine Systemlast von 2% sofort auf 75-80%. ziehe ich das serielle Kabel ab, sinkt die Last wieder auf 2%. Stecke ich das Kabel wieder an, dann geht die Last wieder hoch. Ist das normal oder habe ich was übersehen? Mein PC ist schon eine flotte Kisten mit 2 GB Ram. Wenn ich den Port nicht mit dem Microsoft.serialport öffne, sondern über API mit CreateFile, dann tritt dieser Effekt nicht auf. Vieleicht hat ja jemand eine Idee dazu. Thomas
Hi Thomas, hast du den Hardware-Handshake deaktiviert? Passiert das direkt nach dem Öffnen des COM-Ports? Arbeitest du mit Events? Falls ja, sind die ständig am Feuern? Ralf
hallo, ich verwende keine Events (vorerst) der oben angeführte Code ist alles. ich öffne nur den Port und schon schnellt die systemlast rauf. Es gibt auch keinen Handshake. die serielle Leitung hat nur 3 Drähte (RX,TX und Ground (2,3,5) thomas
Was passiert wenn du das Hyperterminal mit den gleichen Parameter startest? Geht da auch die Systemlast hoch?
Da stimmt etwas nicht!!!!!! 60mal 60Zeichen mit 7Bit sind 25.000bit/sekunde. Das kann nie mit 19200baud gehen, es kommt ja noch die Start und Stop und Parität dazu.
> 60mal 60Zeichen mit 7Bit sind 25.000bit/sekunde. Das kann nie mit > 19200baud gehen, es kommt ja noch die Start und Stop und Parität dazu. Stimmt, insgesamt sind das 36.000 Bits, da passt was nicht. Ralf
das ist richtig. ich kann das Messgerät auch auf eine höhere Baudrate stellen bei 19200 werden nur ca 30x pro sec übertragen. das ändert aber nichts an der systemlast. thomas
Thomas wrote: > hallo, > > ich verwende keine Events (vorerst) > > der oben angeführte Code ist alles. > ich öffne nur den Port und schon schnellt die systemlast rauf. > Ich würd mal sagen: Das ist wohl ziemlich normal. Deine Daten, die über die Schnittstelle reinkommen, triggern im .Net Framework irgendwelche Aktionen. Selbst wenn dein Programm keine Events zum Abholen der Daten benutzt, muss es ja schliesslich im .Net Code geben, der sich die Daten von der Schnittstelle holt um dann rauszufinden, dass sie eh keinen (zumindest keinen Event) interessieren. Und das ist dann der Code, der dir die Systemlast erzeugt. Willkommen in der wunderbaren Welt von .Net, in der der Programmierer immer mehr die Kontrolle darüber verliert, was in der Maschine eigentlich so alles abgeht.
@Thomas: IMO könnte das Problem daran liegen, daß Du den SerialPort nur öffnest aber nicht ausliest und dadurch das .NET-Framework zwingst, pro Sekunde 1800 Zeichen (bei 19200 Baud) zu puffern. Es wird dafür gesorgt, daß keine Daten verloren gehen. Dabei wird laufend mehr Speicher allokiert und mit hoher Wahrscheinlichkeit auch laufend umkopiert, eine mögliche Erklärung für Deine CPU-Last. Hast Du nach ein paar Sekunden (Minuten) mal das Property BytesToRead ausgelesen? Grüße Markus
Ich kann mir kaum vorstellen, das das .net Framework selber daten buffert. Normalerweise sollten die .net funktionen fast 1 zu 1 auf die WindowsApi gehen. Auch bei 1800 byte/sekunde sollte ein aktueller Rechner mit 2ghz nicht ins schwitzen kommen. mal ein eine kleine Schleife die die Daten auch aussliest und sage ob sich dann etwas ändert.
> Ich kann mir kaum vorstellen, das das .net Framework selber daten > buffert. Normalerweise sollten die .net funktionen fast 1 zu 1 auf die > WindowsApi gehen. Dann lies mal die Doku... Markus
Ich würde auch mal auf die Events reagieren, bzw. die empfangenen Daten abholen und dann nochmals die CPU-Last prüfen. Bringt ja sonst eh alles nichts...
P.S. Übrigens erkennt Windows beim Bootvorgang ein dauernd sendendes Gerät schnell mal als serielle Maus. Das sollte noch bedacht werden, falls plötzlich der Mauszeiger umherspringt und alles angecklickt wird.
Hallo, Also ich hab alles versucht, was das Serialport bietet, um die Daten zu lesen. es geht ja auch alles ohne Fehler, aber die systemlast bleibt. verwende jetzt die Serialport-driver von National Instruments. Jetzt ist meine Systemauslastung bei 8% . damit kann ich leben. @Johnny Ich weiß, schaut auch total verrückt aus, wenn wie durch Geisterhand Fenster auf und zugehen. Ich hoffe dann immmer das nichts gelöscht wird. Aber sobald der PC das erste Mal eine "serielle Maus" erkannt hat, diese einfach in der systemsteuerung deaktivieren, dann tritt der Effekt nicht mehr auf.
Oder einfach das Gerät bissl sinnvoller bauen, dass es nur auf Anfrage Daten sendet. Macht ja sonst kein Sinn, wenn eh keiner zuhört.
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.