Forum: PC-Programmierung Problem mit RS232 in C#


von David .. (david1)


Lesenswert?

Moin, ich versuch grad mit Bascom ne Servostererung zu basteln die über 
RS232 gesteuert wird, bin ziemlich am Anfang.

Über en normales Terminal (z.b. das von Bascom sende ich z.b 150, der 
Servo fährt dann auf den linken Anschlag), Problem is nur ich möchte das 
ganze mit nem C# Programm steuern, erstmal möchte ich nur ne Zahl 
senden, z.B. 150.

Ich hab das ganze mal mit nem Sniffer aufgezeichnet:
Wenn ich mit dem Bascom-Terminal sende kommt das:
1
115500
2
3
Empfangen: 150
so funktionierts auch.

Wenn ichs mit folgendem C# send:
1
            // Instantiate the communications
2
            // port with some basic settings 
3
            SerialPort port = new SerialPort("COM3", 4800, Parity.None, 8, StopBits.One); // Open the port for communications port.Open(); 
4
5
            // Open the port
6
            port.Open();
7
8
            port.Write("150");
9
10
            //port.Write(new byte[] {0x0A, 0xE2, 0xFF}, 0, 3);
11
12
13
            // Close the port
14
            port.Close();
seh ich im Sniffer folgendes:
1
150

wenn ich nochmal sende steht direkt dahinter wieder 150
1
150150
wenn ich mit nem "normalen" Terminal was send kommt das inner neuen 
Zeile, aber das tut glaub nichts zur Sache.

Hab vorhin mit meim Dad telefoniert, der meinte ich muss bevor ich das 
sende die Zahl in ASCII Zeichen umwandeln.

Hab aber nirgends gefunden wie das geht, find immer nur ASCII in HEX 
umwandeln, weis von euch Jemand wie das geht?

Freu mich jetz schon über Antworten :)

Gruss
David

von Peter (Gast)


Lesenswert?

kann es sein das das neue Zeile doch wichtig ist? Wenn das gerät das als 
OK erst animmt dann teste mal so.

port.Write("150\n");

von David .. (david1)


Lesenswert?

Ersmal Danke für die Antwort!

Ne da tut sich auch nix und es wird auch keine neue Zeile im Sniffer 
angefangen, ich glaub das es auchnich der Punkt, ich sehe wie mein Dad 
schon sagte das Problem darin dass ich die Zahl in ASCII umwandeln muss, 
sende ich das was das Bascom-Terminal sendet (115500) tut sich am servo 
auch nix.

Weis jmd wo der Fehler steckt?

Gruss
David

von Maik F. (sabuty) Benutzerseite


Lesenswert?

David S. schrieb:
> ich sehe wie mein Dad
> schon sagte das Problem darin dass ich die Zahl in ASCII umwandeln muss

> port.Write("150");

Jetzt rate mal, was da gesendet wird...

Was Peter schrieb, geht evtl. doch in die richtige Richtung. Teste mal 
das:
1
Port.NewLine = "\r\n";
2
Port.WriteLine("150");

Allerdings liegt das Problem hier wohl nicht auf der Seite von C#, 
sondern eher beim Empfänger, der eben auf einen Linefeed oder auf was 
auch immer wartet. Ohne Quellcode -> stochern im Nebel.

von David .. (david1)


Lesenswert?

Danke für die Antwort! Funktioniert, bzw hat funktioniert.
Im Moment geht garnix mehr, wenn der Chip wieder das macht was ich will 
stell ich nacher mal den Bascom Code ein.


Gruss
David

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.