Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
RS232 Debug und ATEN HDMI Switch über RS232 Steuern
dark alex
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

RS232 Debug und ATEN HDMI Switch über RS232 Steuern

beantworten | zitieren | melden

Hi

ich habe zwei kurze Fragen zum Thema Kommunikation mittels seriellem Port (SerialPort Klasse)

1.) Gibt es ein Tool, das mir sagen kann, welche Werte exakt (idealerweise Hexwerte) über den RS232 an meinem PC ausgegeben werden oder ncoh besser das auf einem zweiten PC läuft, der mitr anzeigt, was rein kommt?

Bzw wie kann ich ein Programm mit C# am Seriellen Port "lauschen" lassen, um sowas auszugeben?


Die zweite und wichtigste Frage für mich:
Ich habe einen HDMI Switch von ATEN.
Dieser Switch lässt sich über RS232 steuern. Ich habe folgende Referenztabelle und ein Beispielprogramm. Könnte sich das vielleicht mal jemand ansehen und mir evtl sagen, weshalb einfach nichts passiert? (Ich klicke den button der den u.g. Code ausführt und es passiert am Switch garnichts. Alle anderen operationen, z.B. umschalten der statusanzeige am PC werden durchgeführt.)

Klassenkopf:

public SerialPort hdmi;

Dieser Code steht im init:


            hdmi = new SerialPort();
            hdmi.BaudRate = 19200;
            hdmi.DataBits = 8;
            hdmi.Parity = Parity.None;
            hdmi.StopBits = StopBits.One;
            hdmi.PortName = "COM10";
            hdmi.WriteBufferSize = 8;
            hdmi.Open();
            if (!hdmi.IsOpen) MessageBox.Show("Could not open Serial Port! Check your Configuration.");

Hier die Funktion, die den Switch steuern soll:


        public int SwitchToPort(int targetport) {
            if (!hdmi.IsOpen) MessageBox.Show("connection to HDMI Switch was dropped.");
            try 
            {
                hdmi.Write("\x5A\x7E\x81\x08\x01\x31\xBB\x81\xA5");
            } catch {
                MessageBox.Show("RS232 communication error!");
            }
            return targetport;
        }

Ich habe diese Funktion absichtlich soweit egkürzt, dass nurnoch Port 1 angesteuert werden kann, also bitte bedenkt das. Deshalb wird targetport nicht wirklich verwendet.


Ich gehe fast davon aus, dass die Kommandosequenz falsch ist. Vielleicht kommt hier ja jemand mit der Tabelle besser zurecht:

http://www.aten.com/download/download_license.php?pdid=20080821153319002&type=manual
Seite 14.


Danke für eure Hilfe
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von dark alex am .
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Ich würde mal sagen, du übertragst die ASCII-Zeichen, du must aber bytes mit den Hexwerten übertragen.
private Nachricht | Beiträge des Benutzers
dark alex
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Hmm jetzt wo du's sagst.. Lol... Stimmt irgendwo^^

Okay d.h. ich muss zunächst mal meine Hexwerte in bytes umrechnen und sende dann ein byte-array mit hdmi.Write richtig?



ES GEHT!!!


Danke :-)


byte[] swcommand = new byte[9];
                        swcommand[0] = Convert.ToByte(0x5A);
                        swcommand[1] = Convert.ToByte(0x7E);
                        swcommand[2] = Convert.ToByte(0x81);
                        swcommand[3] = Convert.ToByte(0x08);
                        swcommand[4] = Convert.ToByte(0x01);
                        swcommand[5] = Convert.ToByte(0x31);
                        swcommand[6] = Convert.ToByte(0xBB);
                        swcommand[7] = Convert.ToByte(0x81);
                        swcommand[8] = Convert.ToByte(0xA5);
                        hdmi.Write(swcommand, 0, 9);

das ist jetzt natürlich nicht genau so in eminem Code drin sondern zusammengeshcnitten aber voll fuktionsfähig
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von dark alex am .
private Nachricht | Beiträge des Benutzers
Section31
myCSharp.de - Member



Dabei seit:
Beiträge: 65
Herkunft: Leipzsch

beantworten | zitieren | melden

Hallo,

du kannst die Zuweisung noch weiter vereinfachen, in dem du das Convert.ToByte weg lässt, denn es ist an der Stelle unnötig, denn die Werte sind ja schon Byte-Werte.

Gruß
private Nachricht | Beiträge des Benutzers
dark alex
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Die Multithreading-Frage ist beantwortet:

Invoke mit Delegates nahc diesem Muster: http://csharpdevelop.blogspot.com/2004/05/thread-safe-access-to.html
private Nachricht | Beiträge des Benutzers
Joetempes
myCSharp.de - Member

Avatar #avatar-3309.jpg


Dabei seit:
Beiträge: 914
Herkunft: Germany

beantworten | zitieren | melden

Zitat von dark alex
Hi

1.) Gibt es ein Tool, das mir sagen kann, welche Werte exakt (idealerweise Hexwerte) über den RS232 an meinem PC ausgegeben werden oder ncoh besser das auf einem zweiten PC läuft, der mitr anzeigt, was rein kommt?

Das Beste Tool zur seriellen Schnittstelle, läst eigentlich keine Wünsche offen:

HTerm
private Nachricht | Beiträge des Benutzers