querdenker engineering
Schnittstellen und Services

RS485

RS485-Schnittstelle konfigurieren und in eigenen Programmen verwenden.

Die RS485-Schnittstelle ist über [RS485-GERÄT] verfügbar. Zu konfigurieren sind mindestens [BAUDRATE], [DATENBITS], [PARITÄT] und [STOPBITS].

[RS485-KONFIGURATIONSBEFEHL]

qdGate am Busende anschließen

Die 120-Ω-Terminierung der RS485-Schnittstellen ist im qdGate dauerhaft aktiviert. Das qdGate muss deshalb am physikalischen Ende des jeweiligen RS485-Busses angeschlossen werden. Am gegenüberliegenden Busende ist ein weiterer 120-Ω-Abschluss vorzusehen. Teilnehmer in der Mitte des Busses dürfen nicht zusätzlich terminiert werden.

[PLATZHALTER: Halb-/Vollduplex, Richtungssteuerung und Protokoll]

Eigene Programme sollten den bereitgestellten Service [RS485-SERVICE] verwenden, sofern dieser die Hardware abstrahiert.

Für das Python-Beispiel ist pyserial in Version [PYSERIAL-VERSION] vorgesehen. Die C-Toolchain ist [C-TOOLCHAIN-VERSION].

RS485 aus eigenen Programmen verwenden

Bei RS485 müssen Baudrate, Datenformat, Halb-/Vollduplex, Terminierung und Richtungssteuerung zur Hardware passen.

#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

int rs485_send(const char *device_path, const unsigned char *data, unsigned int length)
{
    const int fd = open(device_path, O_RDWR | O_NOCTTY);
    struct termios settings;

    if (fd < 0 || tcgetattr(fd, &settings) < 0) {
        if (fd >= 0) {
            (void)close(fd);
        }
        return -1;
    }

    cfsetispeed(&settings, B115200);
    cfsetospeed(&settings, B115200);
    settings.c_cflag = (settings.c_cflag & ~CSIZE) | CS8;
    settings.c_cflag |= CLOCAL | CREAD;
    settings.c_cflag &= ~(PARENB | CSTOPB);
    (void)tcsetattr(fd, TCSANOW, &settings);

    const ssize_t written = write(fd, data, length);
    (void)tcdrain(fd);
    (void)close(fd);
    return written == (ssize_t)length ? 0 : -1;
}

Für Python wird pyserial verwendet. Wenn ein Systemservice die Richtungssteuerung kapselt, ist der Service dem direkten Gerätezugriff vorzuziehen.