PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232-I/O Board IO 88...Code Bsp gesucht


Snake71
04.01.2006, 16:41
Hi
Ich habe an meine HomePC ein RS232-I/O Board (IO 88 von ELV) angeschlossen.
Damit möchte ich 8 Ein/Ausgänge abfragen u. schalten.
Das ganze läuft unter Linux / gcc Compiler.

Mein Problem ist, daß keine Programm Beispiele im Lieferumfang enthalten sind :(
Ich bin kein C-Programmierer (nur Grundlagen) und mit Datenübertragungspacketen (STX,ETX ...) habe ich mich auch noch nicht auseinandergesetzt. :rolleyes:

Vielleicht kennt jemand diese IO Board und hat ein einfaches C-Beispiel, das zeigt wie man Eingänge abfragt und Ausgänge schaltet.

Hier ist die Anleitung für das IO-Board.
http://www.elv-downloads.de/service/manuals/IO88/472-69.htm


Ich bin für jede Hilfe dankbar.

Gruss Jens


FireBird2002
04.01.2006, 17:20
Für die allgemeine Ansteuerung empfiehlt sich das "Serial Programming Howto". Dort bekommst du allgemein gezeigt, wie du die RS232 vom PC aus ansprichst. Zum ersten Testen genügt einfach ein Termnalprogramm. In der Anleitung stehen ja die befehle drin, somit kannst du durch ausprobieren herausfinden wie die befehle konkret übertragen werden müssen. Dann kannst du ein programm dafür aufsetzen.

gargyle
04.01.2006, 20:06
Hab mir die Anleitung angesehen.
Wo ist jetzt das Problem ?

Snake71
05.01.2006, 00:50
Für euch ist das kein Problem ... aber für mich.
Ich hab so etwas noch nie programmiert.
Die Rs232 Schnittstelle hab ich schon direkt angesprochen (RTS und DTR Pins).
Aber Datenpackete mit start und stop Bit setzen ist für mich Neuland.

Habt ihr mir nicht ein paar Beispiele. Ich lerne daraus schneller.

thx

Marek Swierzy
05.01.2006, 10:05
Für euch ist das kein Problem ... aber für mich.
Ich hab so etwas noch nie programmiert.
Die Rs232 Schnittstelle hab ich schon direkt angesprochen (RTS und DTR Pins).
Aber Datenpackete mit start und stop Bit setzen ist für mich Neuland.

Habt ihr mir nicht ein paar Beispiele. Ich lerne daraus schneller.

thx

Mach dir mal um die Datenpackte keine Sorge; ich habe noch nie unter Linux Programmiert (wäre mal zeit) weist du wie du ein Zeichen über die RS232 übertragen kannst? Dass was du mit Datenpakte meinst, ist da schon drin enthalten.

Ich habe auch leider kein linux system.

Meld dich per ICQ oder PN wenn du ein Windowsprogramm gebrauchen kannst.

;---------- EDIT --------------------
Dies scheint ein interessantes HOW-To zu sein.

http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html

FireBird2002
05.01.2006, 10:40
Wenn du Daten über RS232 versenden willst, braucht es mit C nur einen Konfigurationsaufruf und ein fprintf bzw. fscanf. Du brauchst keinerlei Bits per Hand setzen oder gar die Kommunikationsschnittstelle an sich implementieren. Ich verweise mal wieder auf das "Serial Programming Howto". Google einfach danach, darin stehen min. 3 Beispiele zur Kommunikation.

Marek Swierzy
05.01.2006, 15:03
Wenn du Daten über RS232 versenden willst, braucht es mit C nur einen Konfigurationsaufruf und ein fprintf bzw. fscanf. Du brauchst keinerlei Bits per Hand setzen oder gar die Kommunikationsschnittstelle an sich implementieren. Ich verweise mal wieder auf das "Serial Programming Howto". Google einfach danach, darin stehen min. 3 Beispiele zur Kommunikation.
Hi FireBird,
nur reines interesse..... wenn ich aber die Parität/Start und Stopbits verändern möchte wie mache ich dass in Linux?

FireBird2002
05.01.2006, 15:13
Aus http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/:

/* baudrate settings are defined in <asm/termbits.h>, which is
included by <termios.h> */
#define BAUDRATE B38400
...
struct termios oldtio,newtio;
/*
BAUDRATE: Set bps rate. You could also use cfsetispeed and cfsetospeed.
CRTSCTS : output hardware flow control (only used if the cable has
all necessary lines. See sect. 7 of Serial-HOWTO)
CS8 : 8n1 (8bit,no parity,1 stopbit)
CLOCAL : local connection, no modem contol
CREAD : enable receiving characters
*/
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

Marek Swierzy
05.01.2006, 15:24
Das ist ja einfach.
Nicht schlecht.

Snake71
06.01.2006, 09:33
Zuerst mal danke, daß ihr einen Coder Neuling wie mich so unterstützt.
In manchen Boards ist der erste Satz gleich ... google mal.
Aber die Hinweise von waren iO. (io im sinne von inOrdnung - nicht inputOutput :D )

das heist Device öffnen
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);

dann mit fprintf commando senden ?
1. Ausgang aus 1 (s11) ?
fprintf (fd, "s11");

Ich hab ich noch nicht ganz begriffen.
Muss zuerst mal die Basic Howtos lesen.
Dann die Anleitung vom IO Board ... vielleicht versteh ich dann mehr.

bis später

FireBird2002
06.01.2006, 12:25
genau so. probiers einfach aus. Mehr als ne Fehlermeldung kann nicht kommen....

MichiK
07.01.2006, 11:52
Da die Platine eine gewöhnliche RS232 K0ommunikation verwendet, kannst du dir normalen System-Funktionen zur RS232 Kommunikation (auch Linux wird solche haben) verwenden, die auch z.B. für Modems verwendet wird. Da ist kein direkten Programmieren notwendig
Du brauchst nur die Schnittstelle auf diese Werte einstellen

Konfiguration: .................. 9600 Baud, 8 Datenbits, gerade Parität, 1Stoppbit

und los gehts

Snake71
07.01.2006, 18:19
Das Device direkt ansprechen mit Linux hab ich auch noch nicht gemacht.
Zum testen ist das iO.
Später sollte daraus schon ein c prog werden.

Aber ehrlich gesagt hab ich immer noch keinen Plan wie man die "Befehle" sendet. :confused:

Kann man einfach einen String senden?

fprintf (fd, "<STX>o<ENQ><DC2><ETX>");


In der Anleitung steht wird ein Befehl so aufgebaut:
<STX>o<ENQ><DC2><ETX>

Kann mir jemand diese Kommandos (STX...) erklären ?
Sind das so ähnliche Kommandos die auch an ein Modem geschickt werden?

Ich blicks nicht. Vielleicht liegt's auch am Fieber (hab Grippe) :)

gargyle
07.01.2006, 19:56
Auf der Seite 4 des Manual ist links unten eine Tabelle.

Marek Swierzy
07.01.2006, 23:34
<STX><ETX>
Start of Text
End of Text

Hier bei handelt es sich nur um zwei zeichen, welche den Beginn und das Ende des Telegramms darstellen.

<stx> = 0x02 Hex
<etx> = 0x03 Hex

gargyle
08.01.2006, 00:07
ENQ = Hex 05 Enquiry (Abfrage)
DC2 = Hex 12 Device Control 2 (Einheitensteuerung 2)

Snake71
08.01.2006, 20:00
Langsam wird's hell :)

Ich hab ein Win Tool benutzt, um zu sehen was bei einer Abfrage zurückkommt.

Mit ... http://www.cc5x.de/COM-Terminal/

Hier mit hab ich <STX> I <ETX> gesendet und volgendes zurückbekommen:

2 00000010
I 73 01001001
0 00000000
6 00000110
3 00000011

Es geht voran!
Ich hab jetzt verstanden, daß man einen Befehlssatz mit STX beginnt und mit ETX abschließt. Irgendwann kappierts jeder. (Nur kräftig :mauer: )

Noch eine programmtechnische Frage:
Die Abfrage der Eingänge verhält sich nicht bei allen Eingängen gleich.
Ist Eingang 2 gesetzt sieht die Rückgabe folgendermaßen aus:

2 00000010
I 73 01001001
5 00000101
18 00010010
6 00000110
3 00000011

In der 3. Zeile wird normal das bit für den Eingang gesetzt. Da aber Hex02 auch als Steuerzeichen STX genutzt wird erhält man hier 2 Zeilen mit ...

5 00000101 > ENQ
18 00010010 > DC2

Wie kann man das im Programm einfach abfangen? (Geht das ohne viel Aufwand)

cu

Snake71
14.01.2006, 16:04
Kann mir jemand sagen, warum ich keine Rückmeldung bekomme?
>>

char buffer[8];
// Status abfragen
buffer[0]=0x02; // STX
buffer[1]=0x49; // I
buffer[2]=0x03; // ETX
/*
// alle Ausgänge auf 1 setzen
buffer[0]=0x02; // STX
buffer[1]=0x6f; // o
buffer[2]=0x01; // 1
buffer[3]=0x03; // ETX
*/
printf("Buffer : %c \n", buffer ) ;
write(fd,buffer,4);

int bb = 0;
int marr = 0;
if((bb = read( fd, marr, sizeof( buffer ) ))) < 0)
{
printf("Bytes: \"%c\" .\n", marr);
}
close( fd );


Setzen/abfragen funktioniert nicht?

OpaM
01.02.2007, 18:00
Kann mir jemand sagen, warum ich keine Rückmeldung bekomme?
>>

char buffer[8];
// Status abfragen
buffer[0]=0x02; // STX
buffer[1]=0x49; // I
buffer[2]=0x03; // ETX
/*
// alle Ausgänge auf 1 setzen
buffer[0]=0x02; // STX
buffer[1]=0x6f; // o
buffer[2]=0x01; // 1
buffer[3]=0x03; // ETX
*/
printf("Buffer : %c \n", buffer ) ;
write(fd,buffer,4);

int bb = 0;
int marr = 0;
if((bb = read( fd, marr, sizeof( buffer ) ))) < 0)
{
printf("Bytes: \"%c\" .\n", marr);
}
close( fd );
Setzen/abfragen funktioniert nicht?


Hallo Snake71,
ich habe mir auch diese ELV-Platine gekauft und riesen Probleme. Sei so nett und und zeige mal das komplette Listing. Ich habe versucht , Dein Listing zu ergänzen. Aber bei mir gibt es nur Fehlermeldungen. Die ELV-PDF-Datei ist doch großer Mist-oder?
Ich programmiere mit der SCLive CD aus dem Internet, die ist prima.
vielen Dank
Walter

Marek Swierzy
02.02.2007, 00:02
Hallo Snake71,
ich habe mir auch diese ELV-Platine gekauft und riesen Probleme. Sei so nett und und zeige mal das komplette Listing. Ich habe versucht , Dein Listing zu ergänzen. Aber bei mir gibt es nur Fehlermeldungen. Die ELV-PDF-Datei ist doch großer Mist-oder?
Ich programmiere mit der SCLive CD aus dem Internet, die ist prima.
vielen Dank
Walter

Hallo Walter,

benötigst du ein Programm für Windows oder für Linux?

Gruß

Marek Swierzy

OpaM
02.02.2007, 09:20
Hallo Walter,

benötigst du ein Programm für Windows oder für Linux?

Gruß

Marek Swierzy

Vielen Dank für die schnelle Antwort,
ich fange gerade an mich mit der Linuxprogrammierung anzufreunden. Also ein (vollständiges) gcc-Listing für die Kommandozeile währe Spitze. Man kann ja nur daraus Lernen. Also so wie oben, aber vollständig, so dass ich die einzelnen Zeilen mir erklären kann. Programmieren tue ich mit dem Tool von http://www.esperan.com/livecd/index.html das ist einfach genial.
als vielen Dank!!!!
Walter
PS geht es evtl. bis zum Wochenende, dass ist bestimmt verregnet, da meckert die Frau nicht wenn man den ganzen Tag am PC sitzt.

Marek Swierzy
02.02.2007, 13:18
Vielen Dank für die schnelle Antwort,
ich fange gerade an mich mit der Linuxprogrammierung anzufreunden. Also ein (vollständiges) gcc-Listing für die Kommandozeile währe Spitze. Man kann ja nur daraus Lernen. Also so wie oben, aber vollständig, so dass ich die einzelnen Zeilen mir erklären kann. Programmieren tue ich mit dem Tool von http://www.esperan.com/livecd/index.html das ist einfach genial.
als vielen Dank!!!!
Walter
PS geht es evtl. bis zum Wochenende, dass ist bestimmt verregnet, da meckert die Frau nicht wenn man den ganzen Tag am PC sitzt.

Hallo,

bei Linux bin ich leider der falsche ansprechpartner;
wenn du ein windows tool gebrauchen könntest, kann ich dir evt. weiter helfen.

Gruß

Marek Swierzy

OpaM
02.02.2007, 13:50
Hallo,

bei Linux bin ich leider der falsche ansprechpartner;
wenn du ein windows tool gebrauchen könntest, kann ich dir evt. weiter helfen.

Gruß

Marek Swierzy

Über ein Listing für Windows würde ich mich auch freuen. Aber nach Möglichkeit für den gcc-Compiler.
vielen Dank