Forum: PC-Programmierung RS485 Linux-Programming


von Christian K. (koopson)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Verwendest Du denn eine Schnittstellenhardware und den zugehörigen 
Devicetreiber, die RS485 unterstützen? Die normale PC-UART tut das 
nämlich nicht; da muss die Sendersteuerung "von Hand" durch eine 
Handshakeleitung nachgebildet werden.

Eine Hardwareunterstützung bieten z.B. die UARTs von Oxford 
Semiconductor, die man auf manchen PCI-/PCIe-Karten findet, oder manche 
USB-zu-Seriell-Bridges wie der FT232.

von Oliver R. (superberti)


Lesenswert?

Hallo,

Rufus hat vollkommen recht, erst mit der passenden Hardware kannst du 
den Transceiver von Senden auf Empfangen umstellen. Der OxPCI954 kann 
das z.B. und von Korenix gibt es entsprechende Karten.
Ansonsten kommst Du um das Abändern Deines Treibers nicht herum, es muss 
halt im passenden Moment der Transceiver geschaltet werden.
Da ich das für unsere Embedded-Hardware (MPC5200 UART) schon einmal 
durch habe, könnte ich Dir sicher ein paar Tips geben...

Gruß,

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.