Comport Send-Request Dialog

Gast #2190612
Lesenswert?

Hallöchen,
Ich hab nen elektrischen Kompass via USB angeschlossen.
Das Gerät sendet seine Informationen sobald es nen Char0x11 ließt.
Sah im ersten Moment ganz einfach aus, aber das Ding bringt mich zum 
verzweifeln.
Ich empfange einfach keine Antwort. Ich vermute irgend einen banalen 
Fehler.
1
...
2
        private SerialPort kompass;
3

4
        public void connect()
5
        {
6
            string kompasscom = "COM8";
7
            kompass = new SerialPort(kompasscom, 38400, Parity.None, 8, StopBits.One);
8
            kompass.Encoding = Encoding.Default;
9

10
            if (!kompass.IsOpen)
11
            {
12
                try
13
                {
14
                    kompass.Open();
15
                    
16
                    kompass.DataReceived += new SerialDataReceivedEventHandler(kompass_DataReceived);
17
                    kompass.WriteLine(Convert.ToString((char)0x11));
18
                    MessageBox.Show(Convert.ToString((char)0x11));
19
                }
20
                catch (System.Exception e)
21
                {
22
                    MessageBox.Show(e.Message);
23
                }
24
            }
25
        }
26

27
        void kompass_DataReceived(object sender, SerialDataReceivedEventArgs e)
28
        {
29
            MessageBox.Show("asdf");
30
            string taxt = kompass.ReadLine();
31
            OnNewkompassPackageReceived(new kompassReceivedEventArgs(taxt));
32
        }
33
...


Ich habs mal mit Delphi versucht, da funktionierts komischerweise.
Folgende Codezeile liefert das gewünschte Ergebnis in Delphi:
1
ComPortKompass.WriteStr(char(17));


-Was ich schon versucht habe:
Alle möglichen Encoder durchprobiert, keine Veränderung.
(Byte)0x11 / (Byte)17 / (Char)0x11 / (Char)17, macht keinen Unterschied.

Gruß
SpR3AD
Gast #2190753
Lesenswert?

Dein "kompass.WriteLine(..." schickt abeer nicht nur das 0x11 sondern 
hängt immer noch ein NewLine dahinter. Eventuell kommt ja Dein Kompass 
damit nicht klar?
Desweiteren, Dein "string taxt = kompass.ReadLine();" wartet, bis ein 
NewLine empfangen wird. Sendet Dein Kompass sowas überhaupt? Versuchs an 
der Stelle mal mit "string taxt = kompass.ReadExisting();"
Gast #2191563
Lesenswert?

Danke für die Antwort,
das mit dem Write hab ich auch schon versucht. Macht auch keinen 
Unterschied. Vollkommen egal wie ich das Zeichen sende. Ich habs schon 
in nen Bytearray, oder in nen Char Array oder einfach nur ein Byte oder 
ein Char, es kommt einfach keine Antwort zurück. Gibt es irgend eine 
Möglichkeit ein Zeichen zu senden, ohne dass es zum String wird?

Ich weiß noch nicht ob der Kompass ne komplette Line sendet oder nur ne 
Zeichenkettee aber ich glaube der Beschreibung zu entnehmen, dass es 
sich um eine Line handelt. Allerdings konnte ich es bisher noch nicht 
rausfinden, da vom Kompass noch überhaubte keine Antwort kam.

void kompass_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageBox.Show("asdf")
        }

Ansonsten hätte ich zumindest ne Nachricht bekommen müssen.
Gast #2191652
Lesenswert?

HTerm bekommt auch keine Antwort? o.O
Bin ich zu blöd das richtige Byte zu senden oder was?

Ich zitier mal aus dem Handbuch:
4.1. Data Request Command – This command require only one byte (10h), 
and it is a request for data. The
format are shown bellow:
0 0 0 1 0 0 CHK1 CHK0

Ich hät ja jetz gesagt das Teil is kaputt aber sowohl über Delphi 
(ComPortKompass.WriteStr(char(17));), als auch mit dem mitgelieferten 
Demoprogramm funktiniert es!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren