Implementierung eines Industrieklasse Modbus TCP-Servers: Praxis-Tutorial mit C und libmodbus

kostenlosKostenloses technisches Material

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

Implementierung eines Industrieklasse Modbus TCP-Servers: Praxis-Tutorial mit C und libmodbus

In der industriellen Automatisierung wird das Modbus-Protokoll aufgrund seiner Einfachheit und seiner umfangreichen Unterstützung häufig für die Kommunikation zwischen Geräten verwendet. In diesem Artikel wird beschrieben, wie man mit der C-Sprache und der libmodbus-Bibliothek einen voll funktionsfähigen Modbus-TCP - Server erstellt, der eine effiziente Kommunikation zwischen Geräten ermöglicht.

Vollständiger Code:

Initialisierung des Modbus-Servers

Zuerst müssen Sie eine Modbus-TCP - Server-Instanz erstellen. Verwenden Sie diemodbus_new_tcp- Funktion, um einen Zeiger auf den Typmodbus_tzu initialisieren, deren Parameter die IP-Adresse und die Portnummer des Servers sind. In diesem Beispiel ist der Server so konfiguriert, dass er den Port 1502 auf der lokalen Adresse 127.0.0.1 abhört:

ctx = modbus_new_tcp("127.0.0.1", 1502);

2. Einrichten von Modbus-Zuordnung

Modbus-Zuordnung ist die Art und Weise, wie der Server seine Daten (z. B. Spulen, diskreten Eingängen, Halte - und Eingaberegister) speichert. Nutzungmodbus_mapping_new, um diese Bereiche zuzuweisen und zu initialisieren:

mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0);

Wenn die Erstellung der Zuordnung fehlschlägt, druckt der Server eine Fehlermeldung aus und beendet sich.

3.Überwachung der Verbindung

Die Funktionmodbus_tcp_listenwird verwendet, um eine Netzwerkverbindung zu überwachen und gibt einen Socket-Deskriptor zurück. Die maximale Anzahl von Verbindungen, die der Server verarbeiten kann, wird durch dieNB_CONNECTION- Makro definiert:

server_socket = modbus_tcp_listen(ctx, NB_CONNECTION);

4. Verarbeitung von SIGINT-Signalen

Um den Server elegant abzuschalten und Ressourcen freizugeben, verwenden wirsignalFunktion zum Erfassen von SIGINT-Signalen (normalerweise mit Ctrl + C ausgelöst) und zum Verknüpfen mitclose_sigint- Funktion: Die

signal(SIGINT, close_sigint);

close_sigintDie Funktion schließt das Socket, freigibt den Modbus-Kontext und die Zuordnung und beendet dann das Programm.

5. Der Hauptkreislauf

läuft in einer unendlichen Schleife und verwendet die Funktionselect, um Aktivitäten auf dem Socket zu überwachen. WennselectAktivität erkennt, prüft der Server, ob es sich um eine neue Verbindungsanforderung oder um eine Datenanforderung handelt, die bereits eine Verbindung hergestellt hat:

if (master_socket == server_socket) {
    // 处理新的连接请求
} else {
    // 处理来自已连接客户端的数据
}

Bei neuen Verbindungen akzeptiert der Server die Verbindung und fügt die neue Socket der Listen-Sammlung hinzu. Bei Datenanfragen verwendet der Servermodbus_receiveempfängt Daten und sendet dann eine Antwort mitmodbus_replySenden Sie eine Antwort.

6. Leistungsbewertung

Um die Leistung des Servers zu bewerten, wurde eine Berechnung der Datenübertragungsrate in den Code integriert. Der Server berechnet die Anzahl der Bits und Registers, die in einer gegebenen Zeit erfolgreich verarbeitet wurden, um die Übertragungsrate von Punkten / Sekunde und KiB / Sekunde zu erhalten:

rate = (n_loop * nb_points) * G_MSEC_PER_SEC / (end - start);
printf("* %d points/sn", rate);

Diese Leistungsindikatoren sind nützlich für die Optimierung von Server-Einstellungen und Netzwerkkonfigurationen.

Schlussfolgerungen

Mit Hilfe der C-Sprache und der libmodbus-Bibliothek kann ein Modbus-TCP - Server effektiv implementiert werden, der nicht nur Multi-Client - Verbindungen unterstützt, sondern auch Echtzeitdaten über seine Leistung bereitstellt. Dies bietet eine leistungsstarke und flexible Lösung für die Gerätekommunikation in industriellen Anwendungen.

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.