Hallo, ich habe früher mit dem MSCOMM Steuerelement unter VB 6.0 gearbeitet. Die Empfangsroutine des Steuerlements wurde bei jedem ankommeneden Byte aufgerufen. Unter .net wird nun einmalig ein Event ausgelöst und dann nichts mehr. Erst wenn ich alle angekommen Bytes gelesen habe, wird wieder ein neues Event ausgelöst. Kennt jemand eine Möglichkeit wenn ein Byte ankommt ein Interrupt ausgelöst wird?
Es gibt kein Event, welches bei jedem Byte aufgerufen wird, aber sowas ist in wenigen Zeilen selbst gemacht:
1 | SerialPort serport = new SerialPort(); |
2 | port.DataReceived += serport_DataReceived; |
3 | |
4 | //...
|
5 | |
6 | void serport_DataReceived(object sender, SerialDataReceivedEventArgs e) { |
7 | SerialPort port = (SerialPort)sender; |
8 | while (port.BytesToRead > 0) |
9 | ByteRecieved((byte)port.ReadByte()); |
10 | }
|
11 | |
12 | private void ByteRecieved(byte data) { |
13 | //...
|
14 | }
|
greets
> Unter .net wird nun einmalig ein Event ausgelöst und dann nichts mehr. > Erst wenn ich alle angekommen Bytes gelesen habe, wird wieder ein neues > Event ausgelöst. Gibts da nicht irgendeinen Threshold-Wert o.ä. welcher bestimmt, ab wievielen Zeichen im Buffer ein Receive-Event ausgelöst wird? Ralf
ReceivedBytesThreshold hatte ich auf 1 gesetzt. so sah mein bisheriger Code aus:
1 | // Daten empfangen
|
2 | private void ReceiveData(object sender, SerialDataReceivedEventArgs e) |
3 | {
|
4 | // Daten anzeigen?
|
5 | if (bShowRX_Data) |
6 | {
|
7 | // Schnittstellenbuffer auslesen
|
8 | for (UInt16 i = 0; i <= cSerialInterface.BytesToRead; i++) |
9 | {
|
10 | // Daten zur Weiterverarbeitung übergeben
|
11 | ShowData((byte) cSerialInterface.ReadByte()); |
12 | }
|
13 | }
|
14 | else
|
15 | {
|
16 | // Buffer leeren
|
17 | cSerialInterface.DiscardInBuffer(); |
18 | }
|
19 | }
|
Gast wrote: > ReceivedBytesThreshold hatte ich auf 1 gesetzt. > > so sah mein bisheriger Code aus:
1 | for (UInt16 i = 0; i <= cSerialInterface.BytesToRead; i++) |
2 | {
|
3 | ..
|
4 | }
|
Nimmt BytesToRead nicht mit jedem ReadByte() ab? i BytesToRead --------------- 0 5 1 4 2 3 3 2 --> jetzt wird der Loop verlassen, obwohl noch 2 Bytes zu lesen sind. Besser wäre wohl:
1 | while (cSerialInterface.BytesToRead > 0) |
2 | {
|
3 | ..
|
4 | }
|
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.