ASCII Code via USB senden? letztlich RS232

  • VB.NET

Es gibt 109 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Snaptu schrieb:

    meistens
    Das hier ist alles korrekt, bestenfalls fehlt das Encoding:

    VB.NET-Quellcode

    1. SerialPort1.Encoding = System.Text.Encoding.UTF8
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wie gesagt es funktioniert nicht also habe ich einfach mal getestet ist das ein verbrechen ;)?

    Ach was mir gerade auffällt:

    Laut der Beschreibung soll ja der Befehl als ASCII übertragen werden. Wird mit diesem Programm nicht ein String übertragen? Oder wird das dadurch dass es über RS232 übertragen werden soll automatisch zu ascii?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Loois95“ ()

    Loois95 schrieb:

    verbrechen
    nicht, aber es zeugt von Nicht-Wissen und Nicht-Verstehen (wollen).
    Überleg Dir, in welcher Zeile er hängengeblieben ist und welche Zeilen (noch) nicht abgearbeitet wurden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ok offentsichtlich verstehe ich da etwas falsch aber dachte dass wenn es unter Form1_Load steht wird das ausgeführt sobald die Form geladen/gestartet wird also in dem fall dieses Programm und eben deswegen dachte ich dass dann dieses cr gesendet wird sobald das programm gestartet wird was ja nicht gewollt ist.

    und kann es an der ascii sache liegen? ( siehe letzten post)
    ASCII beschreibt eine Charmap mit 128 chars (Zeichentabelle). Alternativen wären UTF8, UTf16, Unicode etc. Alle werden sie mit nem String erstellt, nur halt das Encoding (siehe Post #42) muss ggf geändert werden.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Loois95 schrieb:

    gesendet wird
    Erkläre mal bitte den ganzen Code (von mir), jede einzelne Zeile.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Zunächst mal bewundere ich eure besonders deine Rod Geduld und was das Code erklären angeht: Das ist das Problem ich verstehe das nicht ganz das ist ja auch das Problem

    Nun gut ich werde mich dennoch daran versuchen deinen Code zu erklären, bitte entschuldige fehlende Fachbegriffe wie gesagt ich bin Programmierneuling!

    Quellcode

    1. ​Public Class Form1 'Hier wird die klasse erstellt/deklariert?
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'hier dachte ich dass definiert wird was duchgeführt wird sobald Form1 geladen wird/angezeigt wird bis zu "End Sub"
    3. SerialPort1.PortName = "COM1" ' es wird definiert welche RS232 / COM Schnitstelle angesprochen wird und es werden in den folgenden zwei Zeilen weitere Einstellungen für die COM getroffen (abhänig von meinem Gerät)
    4. SerialPort1.BaudRate = 9600 ' der eingestellte Wert
    5. SerialPort1.Parity = IO.Ports.Parity.None
    6. SerialPort1.NewLine = vbCr 'hier sendest du das CR was ich nicht verstehe waum das hier ist ausgehend von meiner vermutung was in Sub Form1_Load passiert
    7. SerialPort1.Open() 'hier wird die com aktiv geschaltet das verstehe ich so das der schnitstelle "gesagt" wird ab jetzt kommen befehle
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'hier wird geschrieben was passieren soll sobald man den button drückt
    10. Me.SerialPort1.WriteLine("RUN") ' der Befehl der via com gesendet werden soll wird gesendet
    11. End Sub
    12. Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 'hier wird beschreiben was gemacht werden soll sobald die rs232 etwas zurücksendet
    13. Me.Invoke(Sub() Me.RichTextBox1.AppendText(Me.SerialPort1.ReadExisting & Environment.NewLine)) ' das von der rs232 gesendete soll in die richbox
    14. End Sub
    15. End Class


    Das sind meine Vermutungen
    ich versuche gerade nebenbei auch mal etwas C# und finde das übersichtlicher ;) Ist das damit auch möglich ? ich glaube bei C# kann ich besser folgen erinnert mich an java aus der schule früher ;)

    Loois95 schrieb:

    'hier sendest du das CR

    Loois95 schrieb:

    ab jetzt kommen befehle
    Passt das in dieser Reihenfolge zusammen?
    Ich sage dem Port, dass das Zeilenende-Zeichen ein CR ist, das ist bei WriteLine() und ReadLine() aktiv.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erstens: Nutze bitte nicht den 2. BBCode für das Formattieren deines Codes, sondern den Vorletzten (VB.NET).
    Zweitens: Soweit garnicht schlecht, nur das in Zeile 1 weder noch ist, er wird nur gesagt, alles zwischen hier und "end Class" gehört in diese Klasse (Definition eines Scopes). und in Zeile 6 wird kein "CR" gesendet, sondern es wird festgelegt, dass das Trennzeichen ein "CR" ist. immer wenn du nun WriteLine aufrufst wird dass von dir zuvor festgelegte Trennzeichen mitgesandt.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    ah ok vielen Dank dann habe ich das jetzt auch verstanden. Dann verstehe ich allerdings um so weniger warum das ganze nicht funktioniert:(


    Gibt es evtl ein Tool das die an den Com ports gesendeten befehle mitschreibt? So könnte man überpüfen ob das programm die befehle richtig sendet und somit feststellen ob es evtl am gerät liegt?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Loois95“ ()

    Loois95 schrieb:

    cr hintergeschickt
    Ja, so ist es.

    Loois95 schrieb:

    Tool
    Du kannst bei jedem WriteLine() eine Log-Ausgabe ptogrammieren.
    Kann es sein, dass Deine Initialisierung nicht durchkommt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Meintest du das so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    2. Me.SerialPort1.WriteLine("RUN") ' ein Befehl aus der Liste
    3. RichTextBox1.Text() = "Gesendet"
    4. End Sub

    Wenn ich das so mache gibt er Gesendet in die RichBox aber so überprüfe ich dann doch nicht ob er sendet verstehe daher nicht genau was du damit meinst, sry


    RodFromGermany schrieb:

    Kann es sein, dass Deine Initialisierung nicht durchkommt?


    Wir prüfe ich das?


    Loois95 schrieb:

    Wir prüfe ich das?
    Woran merkst Du, dass das Programm nicht läuft?
    ----

    VB.NET-Quellcode

    1. RichTextBox1.AppendText("RUN" & " gesendet" & Environment.NewLine)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Woran merkst Du, dass das Programm nicht läuft?​


    Daran dass an meine Gerät der Befehl nicht ausgeführt wird.

    Habe das
    RichTextBox1.AppendText("RUN" & " gesendet" & Environment.NewLine)​
    eingefügt meldet auch bei Buttondruck "Run gesendet"



    Und noch eine Frage ich wollte jetzt noch prüfen ob die RS232 wirklich geöffnet ist habe das deshalbso modifiziert! Macht das sinn ? Denn es wird mir weder Offen noch Geschlossen ausgegben

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    2. SerialPort1.PortName = "COM1" ' da, wo der Stecker drin steckt
    3. SerialPort1.BaudRate = 9600 ' der eingestellte Wert
    4. SerialPort1.Parity = IO.Ports.Parity.None
    5. SerialPort1.NewLine = vbCr
    6. SerialPort1.Open()
    7. If SerialPort1.IsOpen() = True Then
    8. RichTextBox1.Text() = "Offen"
    9. ElseIf SerialPort1.IsOpen() = False Then
    10. RichTextBox1.Text() = "Geschlossen"
    11. End If
    12. End Sub

    Loois95 schrieb:

    weder Offen noch Geschlossen ausgegben
    Dann wird efr wohl in der Zeile

    VB.NET-Quellcode

    1. SerialPort1.Open()
    hängenbleiben, das stimmt mit dem Fehlerbild von oben überein:

    Loois95 schrieb:

    unbehandelte ausnahme: zugriff auf com1 verweigert
    Das müssen wir zunächst aufklären.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ​unbehandelte ausnahme: zugriff auf com1 verweigert


    Das habe ich gerade zufällig aufgeklärt ;) Es lief im Hintergrund eine Software für eine Maschiene die via COM gesteuert wird und die hat wohl com1 gesperrt weil sie diese nutzte also denke zumindest tritt dieser fehler wieder auf sobald die software läuft

    Loois95 schrieb:

    sobald die software läuft
    Wozu brauchst Du die?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!