Beamer (Epson EB-G5650W) über serielle Schnittstelle ansteuern

  • VB.NET

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

    Beamer (Epson EB-G5650W) über serielle Schnittstelle ansteuern

    Guten Morgen,

    ich habe ein kleines Problem bei dem ich nicht weiter komme und hoffe ihr könnt mir dabei helfen.
    Und zwar soll ich versuchen über ein selbst geschriebenes Programm in VB.net einen Beamer zu starten bzw. zu beenden.
    Der Befehl dazu ist laut Handbuch PWR ON/OFF.
    Jedoch macht der Beamer beim schicken der Daten kein Mucks. Ich habe auch schon auf einem Rechner ein Programm installiert welches überprüft ob Daten an der seriellen Schnittstelle rausgehen und laut diesem Programm kommen auf jedenfall Daten an. Der Beamer schickt mir auch keine Daten zurück. Er macht einfach nichts.

    Hier mal Codeschnippsel wo ich den Seriellen Port öffne:

    VB.NET-Quellcode

    1. With SerialPort1
    2. If Not .IsOpen Then
    3. Try
    4. .PortName = "COM3"
    5. .BaudRate = 9600
    6. .DataBits = 8
    7. .Parity = Parity.None
    8. .StopBits = StopBits.One
    9. .WriteTimeout = 1000
    10. .ReadTimeout = 1000
    11. .Open()
    12. Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
    13. Catch ex As Exception
    14. MessageBox.Show(ex.Message, "Fehler beim Öffnen", MessageBoxButtons.OK, MessageBoxIcon.Error)
    15. Exit Sub
    16. End Try
    17. End If
    18. End With


    Und wo ich die Daten abschicke:

    VB.NET-Quellcode

    1. Dim BefehlsString As String = txtUebertragung.Text + vbNewLine
    2. Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding()
    3. With SerialPort1
    4. Dim ByteArray() As Byte ' Oder String in ...
    5. ByteArray = enc.GetBytes(BefehlsString) ' ... Einzelbytes umwandeln
    6. .BaseStream.Write(ByteArray, 0, ByteArray.Length) ' Einzelbytes senden
    7. MessageBox.Show("Unbekannte Codevariante", "Senden ...")
    8. End Select
    9. End With


    Und hier das Empfangen der Daten:

    VB.NET-Quellcode

    1. Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding()
    2. With SerialPort1
    3. Try
    4. Select Case txtEmpfangen.Text '(hier steht 1 drin)
    5. Case 1
    6. PufferString = .ReadExisting
    7. Me.Invoke(Datenanzeigen)
    8. Case 2
    9. For I As Integer = 1 To .BytesToRead ' Alle Bytes einzeln lesen
    10. Dim ByteArray() As Byte = {.BaseStream.ReadByte} ' 1 Byte lesen
    11. PufferString = enc.GetString(ByteArray) ' Array in String
    12. Me.Invoke(Datenanzeigen) ' Delegaten aufrufen
    13. Next
    14. Case Else
    15. MessageBox.Show("Unbekannte Codevariante", "Empfangen ...")
    16. End Select
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
    19. End Try
    20. End With


    Wäre über Hilfe sehr froh und schon mal ein großes Danke im voraus :)

    Viele Grüße
    Märry
    Willkommen im Forum. :thumbup:
    Bei der Initialisierung ist das Try / Catch unnötig, das muss ohne gehen.
    Beim Senden: Ich bin mir nicht sicher, ob Deine ASCIIEncoding so korrekt ist.
    Sieh Dir mal bitte die Bytes an, die da generiert werden (Haltepunkt drauf, MouseKlick auf ByteArray, Shift+F9), und vergleiche sie mit dem Handbuch.
    Achte besonders auf das vbNewLine als Zeilenende, ggf. nimm explizit ein vbCr und / oder ein vbLf.
    Beim Empfang: Steht dieser Code im Event DataReceived von SerialPort1 :?:
    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!
    Hey, danke für die schnelle Antwort :)

    Empfang: Ja der Code steht im DataReceived. Hab ich ganz vergessen dazu zu kopieren ^^"
    Senden: Also im ByteArray stehen mal "Zahlen" drin (80, 87, 82, 32, 79, 78, 13 - für PWR ON). Leider steht im Handbuch nichts dazu drin =/
    Das vbNewLine habe ich jetzt auch mit vbCr ersetzt.
    Was müsste den anstatt dem ASCIIEncoding stehen?
    Ich habe die Datenübertragung mal mit 2 verbundenen virtuellen Schnittstellen probiert und da kam dann auf der anderen Schnittstelle immer was an (hab auf die andere Schnittstelle mit Putty zugegriffen wo mir dann der gesendete Text angezeigt wurde).

    Was mir gerade aufgefallen ist, muss ich irgendetwas beachten wenn es eine RS232C Schnittstelle ist?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Märry“ ()

    Märry schrieb:

    Was müsste den anstatt dem ASCIIEncoding stehen?
    Wenn nur PWR ON oder OFF drin steht, ist das egal, es geht hier auch

    VB.NET-Quellcode

    1. Dim enc As System.Text.Encoding = System.Text.Encoding.Default
    Das ist das im System eingestellte Encoding, also westeuropäisch.
    Was sagt denn das Handbuch zur Übertragungsrate?
    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!
    Ja, das hab ich gemeint.
    Was genau steht denn nun dazu im Handbuch drin, oder gibt es einen Link zu einem digitalen Handbuch?
    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!
    Auf einer tschechischen Seite. :D
    Wenn ich mir das Bild auf Seite 121 ansehe, kommt da kein Befehlsende-Zeichen vor, nimm mal das vbCr raus.
    Und: Kann es sein, dass Dein Kabel nicht das tut, was Du meinst?
    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!
    Öhm sieht danach aus das es nicht das macht was ich will ^^"
    Ich hab 2 serielle Kabel von dem Mitarbeiter bekommen der für die Beamer zuständig ist. Eines davon ist ein "Nullmodemkabel" (oder so ähnlich, bin auf dem Gebiet nicht so bewandert).
    Mein Chef meinte schon das dieser Mitarbeiter auch ein gerät hat zum testen ob was am anderen Ende vom Kabel raus kommt.
    Ich habe die Kabel auch schon untereinander ausgetauscht, hab es also mit beiden probiert. Hat aber nichts gebracht =/
    Lade dir mal HTerm hier herunter:
    der-hammer.info/terminal/

    Das ist eine sehr leistungsfähige Software, mit der du einmal von Hand das Protokoll testen kannst.

    Wenn das funktioniert, kannst du mit dem VB Programm weiter machen ;)

    Gruß,
    Manawyrm

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

    Bei den RS232-Kabeln gibt es gekreuzte und nicht gekreuzte. Nullmodem heißt, dass da noch weitere Anschlüsse iwie kurzgeschlossen sind.
    Am besten, Du druckst diese eine Seite aus und gehst mit dem Papier und dem Kabel zu einem Elektroniker.
    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!
    Hallo Märry,

    das Programm ist wirklich etwas komplex.

    Du stellst oben deine Einstellungen ein (Comport und Baud), und drückst Connect.

    Dann gehst du unten bei Input Control auf Type und stellst das auf ASC.

    Im Feld daneben kannst du nun die Befehle ala PWR ON eintippen und mit Enter senden.
    Der Beamer müsste nun anspringen.
    Wenn nicht, ist das Beamerkabel nicht korrekt. Laut der Beschreibung brauchst du ein Nullmodemkabel.

    Viel Erfolg,
    Manawyrm

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

    Senden: Also im ByteArray stehen mal "Zahlen" drin (80, 87, 82, 32, 79, 78, 13 - für PWR ON). Leider steht im Handbuch nichts dazu drin =/


    Fügen Sie am Ende jedes Befehls einen Wagenrücklaufcode (CR) (0Dh) hinzu und
    übertragen Sie.
    Steht im Handbuch.

    Als Programmierer solltest du zumindest die Ascii-Codes kennen. (Auch wenn die nicht im Handbuch stehen).

    80 - P
    87 - W
    82 - R
    32 - <Blank>
    79 - O
    78 - N
    13 - <CR>

    Testen kannst du auch mit Burkhard Kainkas Terminal.exe

    Evtl. solltest du bei dem Verbindungskabel auf der PC-Seite 7 mit 8 und 4 mit 6 brücken.
    @Manawyrm: Danke für die Erklärung. Hab das jetzt mal mit beiden Kabeln ausprobiert, klappt nicht =/

    @Eierlein: Ich bin zwar Programmiererin hab aber trotzdem nicht die ganzen ASCII Codes im Kopf, da gibt es für Google wo ich nachschauen kann :P
    Also ist ein Wagenrücklaufcode z.B. "Enter" also ein Zeilenumbruch? Wenn ich das richtig verstanden hab klappt das auch nicht.

    @Neoner: Klappt auch nicht.

    So langsame glaube ich wirklich das es am Kabel liegt.

    Was mir gerade eingefallen ist, muss ich dem Beamer eigentlich i-ein Zeichen vorschicken damit er weiß das nun ein Befehl kommt oder wartet der die ganze Zeit auf Befehle und man kann diese einfach raus schicken?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Märry“ ()

    Es wird ein Nullmodem Kabel benötigt. (jeweils Pin2 des einen Steckers auf Pin3 des anderen Steckers).

    Ich nutze für sowas immer Putty.
    Dort dann bei Session Serial auswählen, als Comline den (virtuellen, falls USB) Comport des PCs und bei Speed 9600. Bei den Serial Einstellungen noch Parity und Flowcontrol auf NONE. Unter Terminal noch testweise Implicit CR on every LF und LF on every CR anhaken. Der Beamer erwartet nach jedem Befehl ein CR.

    Dann auf open klicken.

    Der Beamer muss natürlich eingeschaltet sein.

    Dann über die Tastatur mal

    SPWRLVL 01

    eingeben und mit Enter quittieren. Der Beamer sollte mit : quittieren.
    Dann ist er bereit für jeden anderen Befehl.

    Quelle
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    So langsame glaube ich wirklich das es am Kabel liegt.


    Das Kabel, mit dem du die PCs zum Testen verbunden hast, muss auch beim Beamer funktionieren. (Nullmodemkabel).

    Aber: Wenn im Kabel alle Adern durchverbunden sind, funktioniert bei den PCs ein Hardware-Handshake.
    Beim Beamer sind die entsprechenden Pins nicht beschaltet.
    Ohne Handshake keine Datenübertragung.

    Wenn es am fehlenden Handshake liegt:
    Entweder
    Brücken, wie schon beschrieben, im Stecker auf der PC-Seite einlöten.
    oder
    Handshake deaktivieren.

    VB.NET-Quellcode

    1. ...
    2. .StopBits = StopBits.One
    3. .Handshake = none
    4. ...
    @peterfido: Ist ja schön und gut den Beamer vorher an zu machen wenn ich dem ein Befehl schicken will damit er angeht ;)
    Habs auch schon über Putty probiert aber da macht der Beamer genauso wenig wie sonst auch.

    @Eierlein: Gelötet wird da nix, das bringt mir nichts da es ja nicht für mich ist sondern für einen Kunden dem ich das programmieren darf. Außerdem kann ich das nicht ;)

    Bisher bin ich nicht viel weiter gekommen. Ich habe all eure Tipps (für die ich sehr dankbar bin :) ) ausprobiert. Aber es passiert immer noch nichts. Habe es sowohl mit einem Nullmodemkabel als auch mit einem Nicht-Nullmodemkabel ausprobiert. Der Beamer gibt keinen Mucks von sich =(

    Märry schrieb:

    Der Beamer gibt keinen Mucks von sich
    Aber er funktioniert noch :?:
    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!