PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten an Serielle schnittstelle senden



linuxnoob:-)
06.03.05, 22:22
Hallo
Ich habe vom Umbau eines Steuerschrakes von meinem Arbeitgeber n RS232 Display von einer alten SPS Steuerung bekommen. Das Display hat nur eine Zeile und keine Bedienelemente. Jetzt habe ich vor das Ding zur Ausgabe von Statusinformationen eines kleinen C Programmes unter Linux zu verwenden.
Beim Hersteller hab ich sämtliche Befehle zur Anteuerung über die serielle Schnittstelle bekommen und unter Windows funktioniert das Ding einwandfrei mit dem HyperTerminal.
Jetzt möchte ich das Display irgendwie aus meinem C Programm ansteuern. Müsste einfach Text und n paar Hex Steuersignale übertragen.
Das ganze muss nur auf einen Weg funktionieren, also vom PC zum Display.
Gibts da ne einfache Lösung, in men C Programm unter Linux auf die Serielle Schnittstelle zu schreiben ??
Noch wichtig ist, dass ich nicht so ganz der Programmierprofi bin, also wäre ich froh, wenn das irgendwie überschaubar ginge ;)

geronet
06.03.05, 22:32
Probiers mal in der Konsole mit

echo "test" > /dev/ttyS0
(oder ttyS1, wo's halt angeschlossen ist, eventuell vorher baudrate etc. mit stty einstellen)

Im Programm kannst du dann /dev/ttyS* als Datei öffnen und dort hineinschreiben.

Grüsse, Stefan

E S
10.03.05, 11:49
Hi,

vorher mit "setserial" die Baudrate usw. einstellen.

Man kann auch direkt auf der Schnittstelle rumklimpern, dann muß das Programm aber mit root rechten laufen.

Also besser /dev/ttyS0 als Datei benutzen via fprintf und fertig.

Gruß
Elmar

linuxnoob:-)
10.03.05, 19:37
Ehm gibts da noch ne Anleitung wie ich den Befehl nutzen kann ?? Hab das hier gefunden http://info.baeumle.com/ansic/c09.html. Leider blick ich da nicht ganz durch.

linuxnoob:-)
10.03.05, 22:28
Also das Schreiben an die Serielle Schnittstelle in C hab ich fangs hingekrigt. Jetzt hab ich fast noch n grösseres Problem.
Ich muss die Serielle Schnittstelle folgendermassen einstellen :

Baudrate : 9600
Format : 8 Bit, 1 Stopbit
Parität : None
Handshaking : Xon/Xoff

Ich habs bereits mit setserial -a /dev/ttyS1 baud_base 9600 und vielem anderen unter anderem auch stty versucht.
Immer wenn ich dann den echo Befehl in der Konsole eingebe, zeigt das Display mir irgend nen Quatsch mit komischen Zeichen die nichtmal der Anzahl der gesendeten Zeichen entsprechen an.
Einmal hab ichs hingekrigt, weiss nicht mehr genau mit welchem Befehl, da hats mir den Text angezeigt, und kurz darauf wieder gelöscht.

Mit welchem Befehl und wie muss ich die Schnittstelle konfigurieren ?

E S
11.03.05, 16:33
Hi,

der Echobefehl sendet direkt danach einen Zeilenwechsel. Vermutlich deshalb das sofortige löschen, da sofort danach eine neue Zeile dargestellt wird.
Versuch es mal mit dem Copybefehl und damit eine Textdatei ohne Zeilenwechsel senden.

Gruß
Elmar

linuxnoob:-)
11.03.05, 23:54
Danke, genau das wars. Habs jetzt sogar mit der Steuerung über das C Programm hingekrigt. Hier ist mein Programm Code :



#include <stdio.h>

int main()
{

FILE *datei;

datei = fopen ( "/dev/ttyS1" , "a" );

fprintf (datei, "Text");

fclose (datei);

}

}

Mit dem zeugs hier kann ich jetzt jedoch nur Text auf das Display ausgeben, Helligkeit, Cursor, Löschen usw. ist bei diesem Display mithilfe der ESC Kommandos des Druckers gesteuert.
Kann ich diese Befehle ebenfalls mit diesem Programm ausgeben ?? Kann ich sonst irgendwie die Kommandos auch als Hex ausgeben ??

E S
12.03.05, 09:37
Hi,

selbstverständlich!

Möchtest Du es Quick & Dirty in den Text reinfriemeln, so kannst Du das so machen:

fprintf (datei, "%c%cText%c%c",27,123,27,123);

%c druckt an dieser Stelle ein ASCII-Zeichen mit dem code, dass Du hinten als Zahl angibst. Hier ist das Dezimal. Möchtest Du HEX, so schreibst Du ein 0x vor die Zahlen. Im Beispiel wird das ESC Zeichen, dann 123, dann "Text", dann wieder ESC und zum Schluß 123 gesendet.

sauberer ist meist das ausgeben einzelner Zeichen. Dazu kannst Du fputc benutzen.

fputc (27,datei);

für das ESC Zeichen.

Man kann auch einzelne Buchstaben direkt reinschreiben.

fputc ('A',datei);

Alle Zeichen, die in Hochkommas eingteschlossen werden, nehmen direkt den Wert des ASCII-Zeichens an. Ein 'A' z.B. liest und verarbeitet der Compiler direkt als 65. Bei Anführungszeichen "A" hingegen wird ein String erzeugt und der Ausdruck nimmt die Adresse, die auf den so erzeugten String zeigt an.

Gruß
Elmar

linuxnoob:-)
13.03.05, 19:56
Jop, funkt herrlich :)
Thx

atomical
13.03.05, 20:29
der Echobefehl sendet direkt danach einen Zeilenwechsel.


echo -n blablablub :)

E S
14.03.05, 07:49
Hi,

klar kann man den unterdrücken. Aber ohne unterdrückung macht der den Zeilenwechsel und das erklärt das sofortige Displaylöschen. Das Display verhält sich wie ein Nadeldrucker bei dem man immer nur die aktuelle Zeile sieht. Nach dem Linefeed ist das geschriebene halt aus dem sichtbaren Bereich.

Wie dem auch sei, es wurde ja gefragt, wie das Display in C angesteuert wird.

Gruß
Elmar