Befehle zum Beamer senden über RS232

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Befehle zum Beamer senden über RS232

    Hallo,

    ich bin mit vb überhaupt nicht bewandert, schon gar nicht mit der seriellen Schnittstelle. Ich habe schon vieles gelesen, aber entweder verstehe ich zu wenig, oder es wird zu wenig darüber geschrieben.
    Ich habe auch schon paar batch Files probiert, mit Textdokument senden, aber erfolglos. Darum hoffe ich, dass Ihr mir ein wenig helfen könnt.

    Wie kann ich ASCII oder HEX über COM 3 -> RS232 an den Beamer senden? / falls es nicht zu umständlich ist auch empfangen?

    Ich möchte den Beamer nur mit einem schon vorhandenen Button EIN und AUS zukommen lassen und ggf. die Rückmeldung dazu empfangen.

    Der Beamer ist ein Optoma EH1020 und hat folgende Codes:
    Spoiler anzeigen
    >>>>>>>>>>>>>>>>>>>>>>>>>>>
    SENDEN zum Projektor
    232 ASCII Code >HEX Code > Function Description -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ~XX00 1 > 7E 30 30 30 30 20 31 0D > Power ON
    ~XX00 0 > 7E 30 30 30 30 20 30 0D > Power OFF (0/2 for backward compatible)

    EMPFANGEN AUTOMATISCH
    when Standby/Warming/Cooling/Out of Range/Lamp fail/

    Projector return: INFOn
    n : 0/1/2/3/4/6/7/8/9 = Standby/Warming/Cooling/Out of Range/Lamp fail/ Fan Lock/Over Temperature/Lamp Hours Running Out/Cover Open Fan Lock/Over Temperature/Lamp Hours Running Out/Cover Open

    LESEN vom Projektor
    232 ASCII Code > HEX Code > Function > Projector return >Description ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ~XX124 1 > 7E 30 30 31 32 34 20 31 0D > Power State > OKn > n : 0/1 = Off/On
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Note : There is a <CR> after all ASCII commands
    0D is the HEX code for <CR> in ASCII code
    Baud Rate : 9600
    Data Bits: 8
    Parity: None
    Stop Bits: 1
    Flow Control : None
    UART16550 FIFO: Disable
    Projector Return (Pass): P
    Projector Return (Fail): F


    Vielleicht kann mir ja jmd. weiterhelfen.

    Danke
    mfg
    mycell24

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mycell24“ ()

    Dank für die pdf, ich hatte aus dieser oben im Spoiler die nötigen Sachen zusammengefasst, so hat man aber nochmal den Überblick.

    Was ich vergessen hatte, per batch hatte ich versucht ein textfile mit ASCII Code zu senden, aber erfolglos.

    @echo off
    mode com1:9600,n,8,1
    copy BEAMER_ON.txt com3

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

    mycell24 schrieb:

    aber erfolglos.
    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. SerialPort1.BaudRate = 9600
    4. SerialPort1.DataBits = 8
    5. SerialPort1.Parity = IO.Ports.Parity.None
    6. SerialPort1.StopBits = IO.Ports.StopBits.None
    7. SerialPort1.Open()
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. ' Power On
    11. Dim by() As Byte = {&H7E, &H30, &H30, &H30, &H30, &H20, &H31, &HD}
    12. SendAllBytes(by)
    13. End Sub
    14. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    15. ' Power Off
    16. Dim by() As Byte = {&H7E, &H30, &H30, &H30, &H30, &H20, &H30, &HD}
    17. SendAllBytes(by)
    18. End Sub
    19. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    20. ' Power State auslesen
    21. Dim by() As Byte = {&H7E, &H30, &H30, &H31, &H32, &H34, &H20, &H31, &HD}
    22. SendAllBytes(by)
    23. End Sub
    24. Private Sub SendAllBytes(by() As Byte)
    25. 'Dim senden = System.Text.Encoding.UTF8.GetString(by).Trim
    26. 'MessageBox.Show("""" & senden & """")
    27. SerialPort1.Write(by, 0, by.Length)
    28. End Sub
    29. Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    30. Dim nb = SerialPort1.BytesToRead
    31. Dim by() = New Byte(nb - 1) {}
    32. SerialPort1.Read(by, 0, nb)
    33. ' die Antwort auswerten
    34. 'Dim antwort = System.Text.Encoding.UTF8.GetString(by).Trim
    35. 'MessageBox.Show("""" & antwort & """")
    36. End Sub
    37. End Class

    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!
    Guten Morgen, gestern konnte ich das ganze mal ausprobieren.

    @RodFromGermany
    Jedoch erhalte ich eine Warnung bei folgender Zeile:

    SerialPort1.StopBits = IO.Ports.StopBits.None

    Ich arbeite mit VB Studio 2010.0.30319.1 Express und NET 4.5.51641
    vielleicht liegt da ein Unterschied zu meinen Angaben oben vb.net

    Warnung im Detail:
    Spoiler anzeigen

    System.ArgumentOutOfRangeException wurde nicht behandelt.
    HResult=-2146233086
    Message=Der Enumerationswert lag außerhalb des gültigen Bereichs.
    Parametername: StopBits
    ParamName=StopBits
    Source=System
    StackTrace:
    bei System.IO.Ports.SerialPort.set_StopBits(StopBits value)
    bei Beamerschalter.Form1.Form1_Load(Object sender, EventArgs e) in C:\Users\###\Desktop\Beamerstrg 2\Form1.vb:Zeile 21.
    bei System.EventHandler.Invoke(Object sender, EventArgs e)
    bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    bei System.Windows.Forms.Form.OnCreateControl()
    bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    bei System.Windows.Forms.Control.CreateControl()
    bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
    bei System.Windows.Forms.Form.WmShowWindow(Message& m)
    bei System.Windows.Forms.Form.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    InnerException:


    Codeschnipsel aus meinem Programm, Warnung bei Zeile 16.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim ports As New List(Of String)
    3. ports.AddRange(IO.Ports.SerialPort.GetPortNames())
    4. If ports.Contains("COM3") Then
    5. MessageBox.Show("Com Port gefunden! Programm startet")
    6. Else
    7. MessageBox.Show("Com Port 3 ist nicht vorhanden, das Programm wird beendet!")
    8. Me.Close()
    9. Application.Exit()
    10. End If
    11. SerialPort1.BaudRate = 9600
    12. SerialPort1.DataBits = 8
    13. SerialPort1.Parity = IO.Ports.Parity.None
    14. SerialPort1.StopBits = IO.Ports.StopBits.None
    15. SerialPort1.Open()
    16. End Sub



    @Eierlein
    Ich habe die batches umgeschrieben, doch leider reagiert der Beamer nicht.
    vllt. habe ich einen Fehler beim zusammenlöten gemacht.
    Dabei ist das Kabel so hergestellt wie in der Anleitung S. 52 beschrieben.
    optoma.de/uploads/manuals/EH1020-M-de.pdf
    Mini Din-3P (Pin 1 TXD, Pin 2 RXD, Pin 3 ERDE) -> RS232-9P (Pin 2 RXD, Pin3 TXD, Pin 5 ERDE)
    Vielleicht muss ich RXD und TXD tauschen? Ich werde das mal umlöten.

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

    mycell24 schrieb:

    Codeschnipsel aus meinem Programm
    Als erstes musst Du das Port setzen:

    VB.NET-Quellcode

    1. SerialPort1.PortName = "COM3"
    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!

    mycell24 schrieb:

    Warnung
    Nimm die Zeile einfach mal raus.
    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!