Chinesische Version von libmodbus

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Chinesische Version von libmodbus

Merkmale

libmodbus ist eine schnelle, plattformübergreifende Modbus-Bibliothek.

Beschreibung

libmodbus ist eine Bibliothek, die Daten mit Geräten senden / empfangen, die das Modbus-Protokoll verwenden. Die Bibliothek enthält verschiedene Backends, die über verschiedene Netzwerke kommunizieren (z. B. serielle Anschlüsse im RTU-Modus oder Ethernet in TCP / IPv6).

Die Website http://www.modbus.org bietet das Protokoll-Spezifikation - Dokument http://www.modbus.org/specs.php.

libmodbus bietet eine Abstraktion der unteren Kommunikationsschicht und bietet die gleiche API auf allen unterstützten Plattformen.

Dieses Dokument beschreibt das Konzept von libmodbus, beschreibt, wie libmodbus Modbus-Kommunikation von verschiedenen Hardware und Plattformen aus implementiert und bietet ein Referenzhandbuch für die Funktionen, die die libmodbus-Bibliothek bereitstellt.

Umgebung (contexts)

Das R TU - Ba ck end (R emo te Terminal Unit) wird für die seri elle Kommunik ation verwendet und verwendet eine kom pak te bin äre Dar stellung der Daten , die für die Protokoll kommun ik ation verwendet werden . Das R TU - For mat folgt dem Be feh l / Daten - For mat und dem CR C (Cy c lic Red undan cy Check) als Fehler su ch ungs me chan ismus , um die Zu ver lä s sig keit der Daten sicher zustellen . Mod bus R TU ist die am hä ufig sten ver wendete Imp lem enti erung von Mod bus . Mod bus R TU - N ach richten müssen kontin ui er lich ges endet werden , dürfen keine Zeichen inter valle haben (aus Wikipedia , Mod bus ,http://en.wikipedia.org/wiki/ModbusAm 13. März 2011, 20: 51 GM T).

Das Modbus RTU-Framework ruft eine Slave-Station, ein Gerät / Server auf, der Modbus-Anfragen verarbeitet, und einen Client (Master-Station), der die Anfrage sendet. Die Kommunikation wird stets vom Server der Hauptstation initiiert.

Viele Modbus-Geräte können über die gleiche physische Verbindung (Busstruktur) miteinander verbunden sein, so dass Sie die ID der Slave-Station (Empfangsgerät) mit modbus_set_slave festlegen müssen, bevor Sie eine Nachricht senden. Wenn Sie eine Slave-Station ausführen, wird die Nummer der Slave-Station verwendet, um die empfangenen Nachrichten zu filtern.

Modbus-RTU - Umgebung erstellen

Modbus_t * modbus_new_rtu(const char * device, int baud, char parity, int data_bit, int stop_bit)

modbus_t *modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);
 
 
//参考代码:
modbus_t *ctx;
 
ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
if (ctx == NULL) {
    fprintf(stderr, "Unable to create the libmodbus contextn");
    return -1;
}

Diese modbus_new_rtu() - Funktion generiert und initialisiert eine Modbus-Struktur, um über den RTU-Modus in einer seriellen Leitung zu kommunizieren.

Der Name des seriellen Ports, der vom Betriebssystem verarbeitet wird, z. B. /dev/ttyS0 oder /dev/ttyUSB0, muss unter Windows vor COM angegeben werden, wenn die COM-Nummer größer als 9 ist. Zum Beispiel: Kom10. Siehe http://msdn.microsoft.com/en-us/library/aa365247 (v=vs.85).aspx

Baud: Geben Sie die Baudrate der Verbindung an, z. B. 9600, 19200, 57600, 115200 usw.

Parity: Die Paritätstests haben folgende Werte:

N Keine Paritätsprüfung

E Paritätsprüfung

O Ungeradezahlprüfung

data_bit: gibt die Anzahl der Datenbits an, die erlaubt sind: 5, 6, 7, 8.

stop _ bit: Gibt die Anzahl der Stoppbits an, die 1 und 2 zulässig sind.

Zurückgabe: Bei erfolgreicher Erstellung gibt die Funktion modbus_new_rtu() einen Zeiger auf die Modbus_t-Struktur zurück. Andernfalls gibt es NULL zurück und setzt errno auf An invalid argument was given.

Einrichten des Serienmodus

Abruft den aktuellen seriellen Portmodus int modbus_rtu_get_serial_mode(modbus_t *ctx);

int modbus_rtu_get_serial_mode (modbus_t *ctx);

Rückgabe: Bei Erfolg sollte die FunktionMODBUS_RTU_RS232 oderMODBUS_RTU_RS485zurückgeben. Andernfalls gibt er -1 zurück und setzt errno auf The current libmodbus backend is not RTU.

Nur für die RTU-Umgebung.

Einrichten des Serienmodus int modbus_rtu_set_serial_mode (modbus_t *)ctx, intmode);

int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode);

mode: Füllen Sie MODBUS_RTU_RS232 oder MODBUS_RTU_RS485

Rückgabewert: Bei Erfolg sollte die Funktion 0 zurückgeben. Andernfalls gibt es -1 zurück und setzt errno auf einen der unten definierten Werte.

EINVAL The current libmodbus backend is not RTU.

ENOTSUP Die Funktion wird auf Ihrer Plattform nicht unterstützt.

Wenn der Aufruf auf ioctl () fehlschlägt, gibt es einen Fehlercode für ioctl zurück.

Abrufen des aktuellen RTS-Modus in einer RTU-Umgebung int modbus_rtu_get_rts(modbus_t *ctx)(Version 3.1.4 Ergänzung)

int modbus_rtu_get_rts (modbus_t *ctx);

Erhält das Muster, das eine Anforderung in der aktuellen ctx-Umgebung senden soll.

Rückkehrwert:

   MODBUS_RTU_RTS_NONE

   MODBUS_RTU_RTS_UP

   MODBUS_RTU_RTS_DOWN

   -1,即调用失败,并设置EINVAL为The libmodbus backend is not RTU.

Setzen Sie den RTS-Modus in einer RTU-Umgebung int modbus_rtu_set_rts(modbus_t *ctx, intmode)(Version 3.1.4 Ergänzung)

int modbus_rtu_set_rts(modbus_t *ctx, int mode);
 
//例子:启动有正极性的RTS模式
modbus_t *ctx;
uint16_t tab_reg[10];
 
ctx = modbus_new_rtu("/dev/ttyS0", 115200, 'N', 8, 1);
modbus_set_slave(ctx, 1);
modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
modbus_rtu_set_rts(ctx, MODBUS_RTU_RTS_UP);
 
if (modbus_connect(ctx) == -1) {
    fprintf(stderr, "Connexion failed: %sn", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}
 
rc = modbus_read_registers(ctx, 0, 7, tab_reg);
if (rc == -1) {
    fprintf(stderr, "%sn", modbus_strerror(errno));
    return -1;
}
 
modbus_close(ctx);
modbus_free(ctx);

Setzen Sie den Senden-Anforderungs - Modus für die Kommunikation über den seriellen RS485 - Bus ein, der Standardmodus ist MODBUS_RTU_RTS_NONE, ohne Signalisierung, bis Daten in die Linie geschrieben werden.

Um den RTS-Modus zu aktivieren, müssen Sie MODBUS_RTU_RTS_UP oder MODBUS_RTU_RTS_DOWN verwenden, die den RTS-Modus aktivieren und gleichzeitig die Polarität festlegen. Wenn Sie MODBUS_RTU_RTS_UP verwenden, setzen Sie das RTS-Flag auf Enabled und führen Sie einen ioctl-Aufruf durch, dann schreiben Sie die Daten nach einer Verzögerung von 1 Millisekunde auf den Bus, und setzen Sie das RTS-Flag auf Disabled für einen weiteren ioctl-Aufruf und verzögern Sie noch einmal 1 Millisekunde. Das Modus MODBUS _ RTU _ RTS _ DOWN ist ähnlich, verwendet jedoch die entgegengesetzte RTS-Flagbits.

Wenn die Funktion erfolgreich ist, sollte die Funktion 0. Andernfalls gibt er -1 zurück und setzt errno auf "The libmodbus backend isn't RTU or the mode given in argument is invalid."

benutzerdefinierte RTS-Implementierung int modbus_rtu_set_custom_rts(modbus_t *ctx, void (set_rts) (modbus_t ctx, int on))(3.1.4 Version Supplement)

int modbus_rtu_set_custom_rts(modbus_t *ctx, void (set_rts) (modbus_t ctx, int on));

Einstellungen Die benutzerdefinierte Funktion, die die RTS-PIN vor und nach der Übertragung aufgerufen werden soll, standardmäßig, standardmäßig als interne Funktion, die die die RTS-PINs über IOCTL-Aufrufe wechselt.

Beachten Sie, dass diese Funktion dem RTS-Modus folgt und sie mit dem Wert MODBUS_RTU_RTS_UP oder MODBUS_RTU_RTS_DOWN aufgerufen werden muss.

gibt: Bei Erfolg sollte die Funktion modbus _ rtu _ set _ custom _ rts () 0 zurückgeben. Andernfalls gibt er -1 zurück und setzt errno auf The libmodbus backend is not RTU.

Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.