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?
:
Gesperrt durch User
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.
@Peter Danke @TO Na super! Das ist genau das, womit wir eine Riesenfreude haben: dieselbe Frage vom gleichen Autor in 2 verschiedenen Threads.