Forum: PC-Programmierung C# Modbus RTU


von Peter (Gast)


Lesenswert?

Hallo Leute,

ich will ein Unterprogramm basteln, was mir "schnellst möglich" meine 
ModbusRTU Daten zu seinem Mikrocontroller sendet, und die Antwort 
auswertet und die Daten bereit stellt.
1
uint16[] ModbusFunktion_3(byte Slaveadresse, uint16 Registeradresse, uint16 Registeranzahl)
2
{
3
    uint16[] receivedata= new uint16[Registeranzahl];
4
    Comport.Write(modbusprotokoll);
5
    // Warten bis das Protokoll komplett und Richtig angekommen ist, ansonsten Timeout
6
    Comport.Read(buffer, 0 , buff.Length);
7
    // Auswertung des Protokolls...
8
    return receivedata;
9
}

Meine frage ist, wie ich am Ressourcen sparensten das warten auf das 
komplette Modbusprotokoll gestalte, ohne den 
"SerialDataReceivedEventHandler" zu benutzen?

Schon mal vielen dank

von c-hater (Gast)


Lesenswert?

Peter schrieb:

> Meine frage ist, wie ich am Ressourcen sparensten das warten auf das
> komplette Modbusprotokoll gestalte, ohne den
> "SerialDataReceivedEventHandler" zu benutzen?

Garnicht. Alles andere als die Benutzung des Events läuft letztlich auf 
ein busy wait hinaus. Und das ist naturgemäß das INIFFEZIENTESTE, was 
überhaupt denkbar ist. Klar, man kann die Situation durch eingestreute 
Thread.Sleep etwas entspannen, aber das ist immer noch inneffizient und 
erzeugt wieder andere Probleme.

Lerne einfach ereignisorientiertes Programmieren und fertig. Das wirst 
du sowieso immer wieder brauchen.

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
Noch kein Account? Hier anmelden.