Fast über NModbus (RTU)

Dieser Artikel ist für Anfänger gedacht.

Theorie


Modbus ist ein Kommunikationsprotokoll, das auf der Master-Slave-Architektur basiert. Verwendet RS-485-, RS-422-, RS-232-Schnittstellen sowie Ethernet-TCP / IP-Netzwerke für die Datenübertragung.

NModbus ist eine große C # -Bibliothek, die die Implementierung aller Protokollbetriebsarten umfasst. Mit dem Modell zum Implementieren der Klassen dieser Bibliothek können Sie mit jedem Modbus-Gerät arbeiten, jedoch nur mit einem, da die Bibliotheksklassen einen Port in sich selbst kapseln und so die Synchronisation zwischen mehreren Modbus-Objekten verhindern. Dieses Protokoll ist sehr beliebt bei der Entwicklung verschiedener Peripheriegeräte für ein Smart Home sowie für das Internet der Dinge.

Teams
, , TCP/IP .

Um etwas zu verwalten, müssen wir wissen, was und wohin wir senden sollen. Wir brauchen also eine Registrierungskarte.

Ich werde klarstellen, dass die Registerzellen:
1. Nur Lesen
2. Lesen und Schreiben
3. Nur Schreiben (Bestätigung des Datensatzes ist zulässig, um einen Fehlercode anzugeben)

Die einfachste Karte sieht ungefähr so ​​aus:
Bildschirmfoto


Es gibt auch verschiedene Erklärungen, zum Beispiel, welcher Maximal- / Minimalwert an die Adresse übertragen werden kann usw.

Trainieren


Ich verwende die Testversion des Simulators von Modbus Tools und COM-Ports von MOXA mit RS-485-Schnittstelle.

COM-Anschluss


Nachdem Sie das Projekt erstellt haben, müssen Sie NModbus in das Projekt integrieren. Ich empfehle die Verwendung von VisualStudio, da dies mit NuGet recht einfach ist, wie unten gezeigt:

1. Schritt


2. Schritt


In ModbusTools müssen wir die Verbindungsparameter einstellen (sie können für Sie unterschiedlich sein, diese sind für meine COM-Ports geeignet):

Die Parameter werden auf F3 oder auf der Registerkarte „Verbindung“ geöffnet.

Für Master und Slave sollten die Einstellungen übereinstimmen, mit Ausnahme des Elements mit COM-Anschlüssen.

Bildschirmfoto


Nach dem Einstellen können Sie auf „OK“ klicken und die Geräte werden miteinander verbunden. Entweder passiert dies nicht und es wird angezeigt, dass die Verbindung für N Sekunden unterbrochen wurde, oder sie fehlt vollständig. Überprüfen Sie in diesem Fall die Einstellungen und die Verbindung, stellen Sie sicher, dass die Treiber für COM-Ports korrekt installiert sind und ordnungsgemäß funktionieren.

Einfaches Programmbeispiel
using Modbus.Device;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Modbus
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.
            serialPort.PortName = "COM1";
            serialPort.BaudRate = 9600;
            serialPort.DataBits = 8;
            serialPort.Parity = Parity.None;
            serialPort.StopBits = StopBits.One;
            serialPort.Open();
            ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);

            byte slaveID = 1;
            ushort startAddress = 0;
            ushort numOfPoints = 1;
            ushort[] holding_register = master.ReadHoldingRegisters(slaveID, startAddress,
            numOfPoints);
            Console.WriteLine(holding_register);
            Console.ReadKey();
        }
    }
}


Bildschirmfoto


Wichtig: Wenn Sie etwas entwickeln, das komplizierter ist als das obige Beispiel, müssen Sie sicherstellen, dass Pakete nicht verloren gehen. Es müssen Prüfsummen berechnet werden, darüber können Sie hier lesen .

Source: https://habr.com/ru/post/undefined/


All Articles