Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232-I/O Board IO 88...Code Bsp gesucht
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.
Hab mir die Anleitung angesehen.
Wo ist jetzt das Problem ?
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.
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....
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
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) :)
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
ENQ = Hex 05 Enquiry (Abfrage)
DC2 = Hex 12 Device Control 2 (Einheitensteuerung 2)
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
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?
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
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
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
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.