C# Hilfe bei kleiner Entwicklung

  • Hallo,


    ich bin aktuell dabei eine Schnittstelle für eine C# Anwendung zu schreiben und habe hierbei noch ein Problem.

    Folgende Erklärung habe ich zu meinem vorhaben bereits einmal erhalten gehabt.



    Kann einer genau verstehen was in allen Punkten gemeint ist ?


    Mein aktueller Code:


  • Hier, mal eben zusammengeschrieben, hoffe es hilft dir :)


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hier, mal eben zusammengeschrieben, hoffe es hilft dir :)


    Das sieht schonmal Klasse aus, danke dir dafür. Aktuell zeigt er mir allerdings noch folgendes Problem an,




    handelt sich um einen Fehler bei


    Code
    Console.OutputEncoding = Encoding.UTF8;
  • Scheint irgendwo noch ein kleiner Fehler im Code enthalten zu sein. Mir wird ein Rückgabewert mit einer Zahl von Checksum am Wort Ende übergeben. Dies ist überhaupt nicht so gewollt.

    Ich habe mal als Beispiel das Wort " Käsesoßenrührlöffel" verwendet.


    Als Rückgabewert erhalte ich " K{seso~enr}hrl|ffel58." Alles ab der Zahl ist eigentlich ungültig. Alles davor ist Richtig


    Folgende Data / Bytes sollte es enthalten


    Code
    4b 7b 73 65 73 6f 7e 65 6e 72 7d 68 72 6c 7c 66 66 65 6C 0D 31

    Enthalten tut es allerdings


    Code
    4b 7b 73 65 73 6f 7e 65 6e 72 7d 68 72 6c 7c 66 66 65 6c 35 38 0a

    Hat da noch jemand ein Tipp für mich ?

  • Ah, sry, da kam was durcheinander, so sollte das sein:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ah, sry, da kam was durcheinander, so sollte das sein:


    Vielen Dank nochmal für deine Hilfe. Scheint allerdings noch ein Problem vorhanden zu sein. Habe mal ein Screen der Seriellen Konsole gepostet in dem der Wert geschrieben wurde. Allerdings ist am Ende jetzt nach dieser 1 ein Punkt den er mit in die Data sendet. Eine Idee warum ?


    pasted-from-clipboard.png

    Einmal editiert, zuletzt von BreadScript ()

  • Kriege ich nicht zum laufen. Habe bis Dato nun den Code von Kaliber allerdings enthält dieser noch einen kleinen Fehler. Findet den noch jemand ? Es sind am Ende des Wortes einfach zufäliige Punkte, Zahlen oder dergleichen die falsch angehängt werden.

  • Der Code von Kaliber hat eigentlich nichts, was Punkte oder sonstige Zahlen am Ende mit ausgibt.


    Es ist möglich, dass die Übersetzung von Sonderzeichen in der PrepareMessage Methode ein unerwartetes Verhalten verursacht, wenn die Nachricht über die serielle Schnitstelle gesendet wird.

    Wenn z. B. ein Sonderzeichen durch eine Zeichenfolge ersetzt wird, die einen Punkt enthält, kann dies dazu führen, dass am Ende der Nachricht ein Punkt erscheint, wenn sie von der seriellen Konsole empfangen wird.


    Ich würde am Anfang der Methode PrepareMessage sowie am Ende der Methode mal ein print angeben um zu sehen was returned wird und dies dann mit der Ausgabe in der seriellen Konsole vergleichen.

    Eventuell ist da ja einfach beim uebersetzen was Krum.

    Det blæser en halv pelikan.

    I may look calm. But inside my mind I have killed you 20 times in 5 minutes in 20 different ways.


  • gesendet wird aktuell die TextBox3 mit dem Text "Test" also im Hintergrund zu "zA1Test". Die Rückgaben scheinen alle laut Console in Ordnung zu sein. Ich habe allerdings noch ein Vergleich Programm welches dies nicht macht mit dem letzten Zeichen am Ende also dem Punkt. Allerdings habe ich hierzu keinerlei Sourcecode.


    Ich finde die Kompelierung in diesem Falle bspw auch ziemlich komisch was dass angeht aber naja.


    Die Software die ich besitze wo alles klappt gibt folgenden Wert an sich zurück in der Seriellen Konsole.


    Der Erste Wert im Screenshot ist von dem Code von Kaliber und der 2te von der anderen Software. Die leerzeichen die mit dem DataChar 20 wiedergeben werden sollten ignoriert werden können. Allerdings nicht der Punkt am Ende....




    pasted-from-clipboard.png

  • Also das hat nichts mit meiner Programmierung zu tun.


    Hättest du mal ein print gesetzt, wie z.B. so:


    C#
    static string ToReadableByteArray(String xMsg)
    {
        bytes[] bytes = Encoding.ASCII.GetBytes(xMsg);
        return string.Concat(bytes.Select(b => " "+b.ToString("x2")).ToArray());
    }
    
    //Und dann folgendes geloggt hättest:
    Console.WriteLine(ToReadableByteArray(PrepareMessage(newAnzeige))); //Da kommt raus:
    //7a 41 31 54 65 73 74 0d 4e

    Es wird ja auch ein 0a angehangen.

    Da schaust du hier: https://www.torsten-horn.de/techdocs/ascii.htm

    Und siehst, aha, das ist ja gar kein Punkt, sondern ein LF, ein Line Feed, also ein new line.

    Und das kommt durch das WriteLine, welches du am Serial Port verwendest.


    Mal ein:


    Code
    serialPort1.Write(PrepareMessage(newAnzeige));

    probiert? :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • ah perfekt, dass wusste ich nun auch noch nicht. Aber dies ist tatsächlich der Fall. Nun stimmt alles. Ein großen Dank an dich