Laden...

RS232 Debug und ATEN HDMI Switch über RS232 Steuern

Erstellt von dark alex vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.098 Views
D
dark alex Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren
RS232 Debug und ATEN HDMI Switch über RS232 Steuern

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

185 Beiträge seit 2005
vor 13 Jahren

Ich würde mal sagen, du übertragst die ASCII-Zeichen, du must aber bytes mit den Hexwerten übertragen.

D
dark alex Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren

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

S
64 Beiträge seit 2008
vor 13 Jahren

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ß

D
dark alex Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren

Die Multithreading-Frage ist beantwortet:

Invoke mit Delegates nahc diesem Muster: http://csharpdevelop.blogspot.com/2004/05/thread-safe-access-to.html

888 Beiträge seit 2007
vor 13 Jahren

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