Serielle Schnittstelle zwischen Rechner

Gast #2667481
Lesenswert?

Hallo ich möchte einzelne Zeichen aus einer binärdatei lesen und an eine
serielle schnittstelle übergeben (Übertragungsmedium ZigBee als Wireless 
Uart) jedoch habe ich das Problem das es nicht funktioniert wie ich es 
will:

ich bin jetzt soweit dass ich die bin dateien RICHTIG einlese.

using (FileStream fs = File.OpenRead(path))
            {
                Int64 f = fs.Length;
                byte[] b = new byte[f];
                UTF8Encoding temp = new UTF8Encoding(true);
                while (fs.Read(b, 0, b.Length) > 0)
                {
                    string s = ByteArrayToString(b);
                    textBox1.AppendText(s);
                    serialPort1.Write(b, 0, b.Length);
                }

In b steht genau das was ich möchte....

Das Problem ist leider auf der Empfängerseite...

private void serialPort1_DataReceived
            (object sender, System.IO.Ports.SerialDataReceivedEventArgs
e)
          {
              RxString = serialPort1.ReadExisting();
              int y = serialPort1.BytesToRead;
              serialPort1.Read(buff, 0, 96966);
              this.Invoke(new EventHandler(DisplayText));
          }

Es werden jedoch nur 392(y=0x188) übertragen :-( und das irgendwo in dem
File -> also nicht schön von anfang an). Als Übertragungsmedium habe ich
ZigBee Module die als Wireless Uart laufen. Was mache ich hier falsch?
#2667605
Lesenswert?

ruffy d. monkey schrieb:

> private void serialPort1_DataReceived
>             (object sender, System.IO.Ports.SerialDataReceivedEventArgs
> e)
>           {
>               RxString = serialPort1.ReadExisting();
>               int y = serialPort1.BytesToRead;
>               serialPort1.Read(buff, 0, 96966);
>               this.Invoke(new EventHandler(DisplayText));
>           }
>
> Es werden jedoch nur 392(y=0x188) übertragen :-( und das irgendwo in dem
> File -> also nicht schön von anfang an). Als Übertragungsmedium habe ich
> ZigBee Module die als Wireless Uart laufen. Was mache ich hier falsch?

Der DataReceived Event wird vom System angeleiert, sobald auf der 
Seriellen die ersten Zeichen eintrudeln. Logisch, das da in einem Aufruf 
nicht alles empfangen wird ... der Sender hat noch gar nicht begonnen 
die Daten wegzuschicken.

Du wirst mehrere Aufrufe von DataReceived sehen und du musst die Daten 
ALLER Aufrufe wieder zu deinen kompletten Daten zusammensetzen.

Daher wäre es eine extrem gute Idee, wenn der Sender erst mal eine 
Information rausrücken würde, wieviele Daten er denn eigentlich zu 
senden gedenkt oder sonst irgendwie dem Empfänger eine Möglichkeit gibt, 
zu erkennen "jetzt kommt nichts mehr".

Was du letzten Endes von deinem Rechner erwartest ist, dass er hellsehen 
kann. Er soll sich irgendwie aus den Fingern saugen, wieviele Datenbytes 
da eintrudeln werden und wenn alle da sind, soll er dir mit dem 
DataReceived Event Bescheid geben. Nur ... so spielts das nicht. Auf der 
Seriellen bist du selbst für das Protokoll verantwortlich.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.