À propos de NModbus (RTU)

Cet article est destiné aux débutants.

Théorie


Modbus est un protocole de communication basé sur l'architecture maître-esclave. Utilise les interfaces RS-485, RS-422, RS-232, ainsi que les réseaux Ethernet TCP / IP pour le transfert de données.

NModbus est une grande bibliothèque C # qui inclut l'implémentation de tous les modes de fonctionnement du protocole. Le modèle d'implémentation des classes de cette bibliothèque vous permet de travailler avec n'importe quel appareil Modbus, mais seulement avec un, car les classes de bibliothèque encapsulent un port en lui-même, empêchant la synchronisation entre plusieurs objets Modbus. Ce protocole est très populaire lors du développement de différents périphériques pour une maison intelligente, ainsi que l'Internet des objets.

Équipes
, , TCP/IP .

Donc, pour gérer quelque chose, nous devons savoir quoi et où envoyer. Nous avons donc besoin d'une carte d'enregistrement.

Je vais préciser que les cellules du registre sont:
1. Lecture seule
2. Pour lecture et écriture
3. Écriture seule (la confirmation de l'enregistrement est autorisée pour donner un code d'erreur)

La carte la plus simple ressemble à ceci:
Capture d'écran


En outre, il existe diverses explications, par exemple, sur la valeur maximale / minimale pouvant être transmise à l'adresse, etc.

Entraine toi


J'utilise la version d'essai du simulateur de Modbus Tools et les ports COM de MOXA avec interface RS-485.

Port COM


Une fois le projet créé, vous devez y intégrer NModbus. Je recommande d'utiliser VisualStudio, car il est assez facile de le faire avec NuGet, comme indiqué ci-dessous:

1ère étape


2ème étape


Dans ModbusTools, nous devons définir les paramètres de connexion (ils peuvent différer pour vous, ils conviennent à mes ports COM):

Les paramètres s'ouvrent sur F3, ou sur l'onglet «Connexion».

Pour maître et esclave, les paramètres doivent correspondre, sauf pour l'élément avec les ports COM.

Capture d'écran


Après le réglage, vous pouvez cliquer sur «OK» et les appareils se connecteront les uns aux autres. Soit cela ne se produit pas et une inscription apparaît que la connexion a été interrompue pendant N secondes, soit elle est complètement absente. Dans ce cas, vérifiez les paramètres et la connexion, assurez-vous que les pilotes pour les ports COM sont installés correctement et fonctionnent correctement.

Exemple de programme simple
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();
        }
    }
}


Capture d'écran


Important: si vous développez quelque chose de plus compliqué que l'exemple ci-dessus, vous devez vous assurer que les packages ne sont pas perdus. Il y a un besoin de calculer les sommes de contrôle, vous pouvez en lire plus ici.

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


All Articles