Forum: PC-Programmierung Comport Send-Request Dialog


von SpR3AD (Gast)


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

von ... (Gast)


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();"

von SpR3AD (Gast)


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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich würde es mal mit HTerm probieren, da kannst du dann sehen was genau 
gesendet wird.

von SpR3AD (Gast)


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!

von Arc N. (arc)


Lesenswert?

Das Teil hier?
http://8pinsoftware.com/Documents/Compass_Comm_Protocol_v13.pdf
"In this communication will be used 57600 bps baud rate. The format is: 
one bit for start, eight bits for data, one stop bit, and no parity"

von SpR3AD (Gast)


Lesenswert?

ja genau das Teil hier^^
Hab das Gerät grad mal zugespammt und gemerkt:
Eingabe (HEX): 04 05 06 07
liefert 4 Bytes, die aber nicht wirklich mit dem zusammenpasse was ich 
als Antwort erwarte.

von SpR3AD (Gast)


Lesenswert?

omg xD
Ich jetz hab ich das geblickt was du mir übermitteln wolltest!
Funktioniert!
Ich sagte doch es ist irgendwas banales!-.-
Hät ich auch selbst drauf kommen können -.-

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.