Laden...

Forenbeiträge von dark alex Ingesamt 3 Beiträge

10.04.2010 - 20:13 Uhr

Die Multithreading-Frage ist beantwortet:

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

10.04.2010 - 18:20 Uhr

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

10.04.2010 - 17:52 Uhr

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