seriellen Port über Anwendung "tasten"

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    seriellen Port über Anwendung "tasten"

    Hallo liebe VB-Gemeinde.
    Ich bin absoluter Neuling in Sachen Programmiersprache und benötige deshalb eure Hilfe.
    Ich habe 2 Relais für die serielle Schnittstelle (franksteinberg.de/erel.htm)
    diese sollen über RTS und DTR geschaltet werden.
    Ich benötige eine einfache Form mit 2 Buttons, welche bei gedrücktem Zustand jeweils die besagten Pins "schalten".
    Also: drücken->RTS/DTR aktiviert (+)->Relais schließt loslassen->RTS/DTR deaktiviert (-)->Relais öffnet.

    Ich hoffe, daß ich mich halbwegs vertändlich ausgedrückt habe und bitte um eure Unterstützung.....

    Gruß und schönes Wochenende
    Alex
    Bilder
    • ComPort.jpg

      119,36 kB, 2.480×1.754, 121 mal angesehen
    Willkommen im Forum. :thumbup:
    Da hast Du Dir aber mit dem Suchen nicht wirklich ganz viel Mühe gegeben:

    VB.NET-Quellcode

    1. SerialPort1.DtrEnable = True
    2. SerialPort1.RtsEnable = False
    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!

    EyesOnly schrieb:

    kennt man nicht die Begriffe, nach denen man suchen muss.....
    Gar keine Frage.
    Welche Fragen Du an Frau Google und die Forum-Suchmaschine stellen musst, musst Du allein rauskriegen, die Google-Suchmaschine ist da toleranter als die hieer vom Forum.
    Aber auch die IDE hilft Dir, sie redet mit Dir, Du musst auf sie hören.
    Gib ein SerialPort1. (der Punkt ist wichtig) und Du bekommst angeteigt, was im aktuellen Kontext möglich ist:
    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!
    Da bin ich wieder..... ;(
    Hab es teilweise hinbekommen...nun ein weiteres Problem

    Wie schaffe ich es, daß die Aktion beim Loslassen des Buttons beendet wird ?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. SerialPort1.Open()
    4. End Sub
    5. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As
    6. System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    7. SerialPort1.Close()
    8. End Sub
    9. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    10. SerialPort1.DtrEnable = Not SerialPort1.DtrEnable
    11. End Sub
    12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    13. SerialPort1.RtsEnable = Not SerialPort1.RtsEnable
    14. End Sub
    15. End Class


    Habe schon nach "mouseup" gegooglet, werde aber nicht schlau daraus, wie ich die Befehle "verschachteln" kann....

    EyesOnly schrieb:

    wie ich die Befehle
    Würde ich nicht empfehlen, da der Button auch von der Tastatur bedient werdenn kann.
    Du musst alle entsprechende Events abfangen, ich weiß jetzt nicht, ob dies hier die vollständige Liste ist:

    VB.NET-Quellcode

    1. Private Sub Button1_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles Button1.KeyUp
    2. SerialPort1.RtsEnable = Not SerialPort1.RtsEnable
    3. End Sub
    4. Private Sub Button1_MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
    5. SerialPort1.RtsEnable = Not SerialPort1.RtsEnable
    6. End Sub
    Aufgrund der unterscxhiedlichen Signatur kann man die nicht zusammenfassen; analog Button 2.
    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!
    Danke für die Hilfe...
    Nachdem man etwas die Logik verstanden hat, ist es gar nicht so schwer.
    Habe das Ganze jetzt so gelöst:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. SerialPort1.Open()
    4. End Sub
    5. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    6. SerialPort1.Close()
    7. End Sub
    8. Private Sub Button2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseDown
    9. SerialPort1.RtsEnable = True
    10. End Sub
    11. Private Sub Button2_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseUp
    12. SerialPort1.RtsEnable = False
    13. End Sub
    14. Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
    15. SerialPort1.DtrEnable = True
    16. End Sub
    17. Private Sub Button1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
    18. SerialPort1.DtrEnable = False
    19. End Sub
    20. End Class
    So lamgsam wird es mir etwas peinlich ;(

    Da ich die ganze Zeit mit einem USB<->Seriell-Adapter gearbeitet habe, ist mir der Fehler nicht aufgefallen.
    Aber ohne diese "Zutat" bekomme ich die Fehlermeldung:"System.IO.IOException" auf SerialPort1.Open() bezogen.
    Dummerweise spielt auch die zuvor erstellte .exe verrückt und hängt sich auf....
    Wie kann ich dieses Problem umgehen, ohne jedesmal den Adapter anzustöpseln ?
    Aus "Try Catch" werde ich nicht sorecht schlau.

    Herzlichsten Dank und lieben Gruß
    Alex
    Hardware, die nicht da ist, kann man nicht ansteuern.

    EyesOnly schrieb:

    Try Catch
    is so ein eigen Ding, das sollte nur da angewendet werden wo man weiß, was für Exceptions geworfen werden können und dann sollten auch nur genau diese Exceptions abgefangen werden, z.B. Iteration über alle Verzeichnisse eines Laufwerks - Zugriff verweigert.
    Ansonsten verhindert Try / Catch das Aufspüren von Fehlern!
    Nimm also solch alles raus und beseitige die Fehler.
    Kannst Du bitte mal Deine Hardware beschreiben?
    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!

    RodFromGermany schrieb:

    Kannst Du bitte mal Deine Hardware beschreiben?
    Es handelt sich um einen FT232RL USB<>Serial.
    Und der Fehler tritt ja nur auf, wenn der Adapter fehlt, also kein serieller Port vorhanden ist.
    So arg schlimm ist dieses Problem zwar nicht, aber leider hängt sich die .exe nach der Fehlermeldung auf und kann nur über den TaskManager geschlossen werden.

    Gibt es die Möglichkeit eines Wenn-Dann-Verweises ?
    Also:
    Wenn Port da -> öffnen
    Wenn Port nicht da-> überspringen (evtl mit Meldung"COM1 nicht vorhanden)

    EyesOnly schrieb:

    Gibt es die Möglichkeit eines Wenn-Dann-Verweises ?
    So was:

    VB.NET-Quellcode

    1. For Each port In IO.Ports.SerialPort.GetPortNames
    2. ' vorhanden
    3. Next
    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!