ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
2411
2411
EMPFEHLEN
-
moin ich brauche da mal eine rat.
ich versuche seid tagen die RS485-Schnittstelle unter linux ( C Language ) zu implementieren. ich habe hier zu mich an dieses Bsp. gehalten
http://developer.axis.com/wiki/doku.php?id=rs485
struct rs485_ctrl {
unsigned short rts_on_send;
unsigned short rts_after_sent;
unsigned int delay_rts_before_send;
unsigned short enabled;
};
// ...
// Set the port in 485 mode
ctrl485.rts_on_send = 0;
ctrl485.rts_after_sent = 1;
ctrl485.delay_rts_before_send = 0;
ctrl485.enabled = 1;
status = ioctl(fd, TIOCSERSETRS485, &ctrl485);
if (status) {
printf("ERROR PORT 1! TIOCSERSETRS485 failed %i\r\n", status);
return -1;
}
Über die struktur soll die Schnittstelle für RS485 konfiguriert werden. und über die Funktion ioctl(fd, TIOCSERSETRS485, &ctrl485); gesetzt werden. Mein Problem ist, das der Wert von TIOCSERSETRS485 nicht erkannt wird. Dieser sollte in asm/ioctls.h drin stehen. was er aber nicht tut. daher habe ich ihn selber festgelegt.
#define TIOCSERSETRS485 0x5461
#define TIOCSERWRRS485 0x5462
Allerdings gibt die Funktion ioctl(fd, TIOCSERSETRS485, &ctrl485); immer einen Fehler aus. Hat einer schon Erfahrungen gesammelt?
Gruss
-
Willkommen im Forum!
Es wäre hilfreich zu wissen, welcher Fehler auftritt?
-
hallo,
die ioctl- Funktion gibt entweder 0 für success oder -1 für failt zurück. meine vermuttung ist, dass der Wert #define TIOCSERSETRS485 0x5461 nicht gesetzt werden kann.
-
02.09.09 10:30 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Es ist unsinnig den Wert zu definieren, wenn dieser nicht bereits in der Headerdatei drin steht. Selbstverständlich kann die ioctl Funktion damit nichts anfangen.
Die TIOCSERSETRS485 Konstanten sind ausschließlich für die CRIS Architektur definiert. Welche Architektur benutzt du?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Da geb ich dir völlig, eine Funktion die -1 als Fehler zurück gibt macht nicht viel Sinn. ioctl is aber nun eine systemfunktion aus sys/ioctl.h und dort ist der Fehlercode -1 nun mal festgelegt. Ich habe den Fehler aber mal mit perror() ausgelesen. Und perror() gibt Invalid Argument zurück. Sagt mir also jetzt was? ....Enweder hat die Übergabe in der Funktion nicht geklappt und der Wert ist ungültig.
Da ich aber auch nicht weiss, ob ich die PCI Karte richtig unter Linux konfiguriert habe,
habe ich erstmal eine Support-Anfrage an den Hersteller moxa.com gestellt
Ich werde berichten.
-
02.09.09 16:16 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Du hast da was missverstanden. Ich sprach über die Konstanten die du selbst festgelegt hast. Es ist unsinnig das zu tun, denn die ioctl Funktion kann damit nichts anfangen.
Letzteres. Wie soll das denn funktionieren?
Welche Architektur verwendest du? Hast du das denn vor CRIS kompiliert? Hast du das entsprechende SDK verwendet? \edit: Diese Angaben solltest du natürlich auch in deiner Supportanfrage einfließen lassen; kurzum: was genau hast du überhaupt gemacht?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Oh.. so langsam werde ich schlauer... Mit der ioctl-Funktion will ich quasi den RS485 Standard bekannt geben. Denn über die struct aus meinen ersten Thread will - muss - ich die Enable - Leitung steuern. Ich hoffe du kennst den RS485 Standard.
CRIS?
Das fehlt mir glaubig? Denn unter asm/ioctls.h ist
#define TIOCSERSETRS485 0x5461
#define TIOCSERWRRS485 0x5462
nicht aufgeführt. Daher kann ich wohl vergebens versuchen die Werte selber zu konfigurieren. Woher kann ich jetzt CRIS beziehen? Ich dachte, wenn ich GCC komplett installiere, sind alle Header Files vorhanden. Habe GCC 4.1.0 (Suse Linux 10.1) installiert. Hat CRIS ausschliesslich was mit axis zutun?
Kannst du mir jetzt da weiterhelfen? Denn die Karte (CP 134U - moxa.com) funktioniert wohl einwandfrei. Gibt es denn für Linux auch eine Art SDK wie unter Windows? Oder meinst damit eigentlich GCC? Sorry wenn ich so blöd frage?
GrussGeändert von Johson (03.09.09 um 16:54 Uhr)
-
03.09.09 17:22 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Nö. :-D
... ist eine Rechnerarchitektur, so wie Intel 386, PowerPC, SPARC etc.
Von welcher asm/ioctls.h Datei sprichst du? Die unterscheiden sich je nach Architektur.
Das hat nichts mit GCC zu tun. asm/ioctls.h ist ein Systemheader aus dem Linux-Kernel. Standardmäßig wird der Header für deine Architektur, die du benutzt auch unter /usr/include installiert, allerdings vermute ich mal du verwendest einen Intel PC? Dann bräuchtest du erstmal einen Cross-Compiler der als Targetsystem die CRiS Architektur hat. Siehe http://developer.axis.com/wiki/doku....mpiler_install
Ja.Also hast du den Treiber installiert? http://www.moxa.com/support/download.aspx?d_id=1662
Zitat von http://www.mjmwired.net/kernel/Documentation/cris/
GrußGeändert von deepthroat (03.09.09 um 17:26 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Super... ich dachte ich hätts jetzt. Wenn CRIS von Axis kommt, frage ich mich, warum mir der Support von moxa nichts erzählt. denn die Treiber liefern Sie ja mit und installiert habe ich se auch.
Wenn ich CRIS jetzt über einen Cross Compiler zum laufen bekomme, kann ich es denn ganz normal nutzen unter gcc? oder gibs da abhängigkeiten zu axis.
Und ja, ich habe hier nur einen Intel PIII .
-
03.09.09 20:25 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Und die Beispielprogramme sind dir auch aufgefallen?
Nochmal: CRiS ist eine Architektur, also Hardware. Die cross-compilierten Programme sind nur auf einer CRiS Hardware lauffähig. Die du vermutlich nicht hast?
So wie es aussieht möchtest du eine Lochstreifenkarte auf einem Abakus ausführen....
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ja die sind mir aufgefallen, aber das habe ich schon versucht dem support vom moxa zu erklären. Ich muss eine Application unter Linux schreiben. Dazu brauche ich die termios.h, die unteranderem die Baudraten zur Verfügung stellt. Somit ist die Windows.h nicht wirklich hilfreich.
Aber trotzdem erstmal Danke.
-
04.09.09 10:19 #12
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ich rede nicht von den Windows Beispielen, sondern von den Beispielen, die beim Linuxtreiber dabei sind - siehe Link

Gruß- msterm A simple terminal program which is useful in testing serial
ports.
- muestty Device configuration tool for MUE series PCI Express
multiport board(CP-102E, CP-102EL, CP-132EL, CP-132EL-I,
CP-114EL, CP-114EL-I).
The tool provides two functions to set and get inerface
and terminator resistor on the device.If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
10.11.09 17:42 #13
- Registriert seit
- Nov 2009
- Beiträge
- 1
Hey Johson!
hast du mittlerweile deinen RS485 Treiber am laufen? Ich bin grad selbst dabei
was zu finden wie ich Daten von RS485 lesen und schreiben kann. Allerdings für
powerpc Architecture.
Dabei hab ich in der ioctls.h die beiden Defines
#define TIOCGRS485 0x542e
#define TIOCSRS485 0x542f
gefunden. Zusätzlich braucht man eine Struktur (serial_rs485) die in include/linux
/serial.h zu finden ist. Allerdings wenn ich die entsprechenden includes einbinde
bekomme ich Error Meldung dass die Struktur nicht gefunden werden kann ebenso
die Defines.
Vielleicht bist du ja ein Stück weiter und kannst mir helfen...oder vielleicht auch
jemand anderes hier?
Danke schön mal für eure Hilfe
Grüße
Frank
Ähnliche Themen
-
Verhält sich der Memory unter Linux anders als unter Windows?
Von mstrauss im Forum PHPAntworten: 3Letzter Beitrag: 11.01.06, 09:32 -
Linux anfänger brauch ma hilfe für STREAMEN unter Linux
Von G-Mein im Forum Linux & UnixAntworten: 9Letzter Beitrag: 03.11.04, 11:57 -
Welches Linux, und Java Programmierung unter Linux
Von Mc Nanuk im Forum Linux & UnixAntworten: 14Letzter Beitrag: 19.10.04, 15:01 -
is_dir() und filesize() funktionieren unter win aber nicht unter linux
Von Bomber im Forum PHPAntworten: 0Letzter Beitrag: 30.05.02, 23:07





Zitieren


Login






