Solo sobre NModbus (RTU)

Este artículo está destinado a principiantes.

Teoría


Modbus es un protocolo de comunicación basado en la arquitectura maestro-esclavo. Utiliza interfaces RS-485, RS-422, RS-232, así como redes Ethernet TCP / IP para la transferencia de datos.

NModbus es una gran biblioteca de C # que incluye la implementación de todos los modos de operación de protocolo. El modelo para implementar las clases de esta biblioteca le permite trabajar con cualquier dispositivo Modbus, pero solo con uno, ya que las clases de la biblioteca encapsulan un puerto en sí mismo, evitando la sincronización entre varios objetos Modbus. Este protocolo es bastante popular cuando se desarrollan diferentes periféricos para un hogar inteligente, así como el Internet de las cosas.

Equipos
, , TCP/IP .

Entonces, para administrar algo, necesitamos saber qué y dónde enviar. Entonces necesitamos una tarjeta de registro.

Aclararé que las celdas de registro son:
1. Solo lectura
2. Para lectura y escritura
3. Solo escritura (se permite la confirmación del registro para dar un código de error)

La tarjeta más simple se ve así:
Captura de pantalla


Además, hay varias explicaciones, por ejemplo, qué valor máximo / mínimo se puede transmitir a la dirección, etc.

Práctica


Utilizo la versión de prueba del simulador de Modbus Tools y los puertos COM de MOXA con interfaz RS-485.

Puerto COM


Una vez que haya creado el proyecto, debe integrar NModbus en él. Recomiendo usar VisualStudio, ya que es bastante fácil hacerlo con NuGet, como se muestra a continuación:

1er paso


2do paso


En ModbusTools, necesitamos establecer los parámetros de conexión (pueden diferir para usted, estos son adecuados para mis puertos COM):

los parámetros se abren en F3 o en la pestaña "Conexión".

Para Master y Slave, la configuración debe coincidir, excepto para el elemento con puertos COM.

Captura de pantalla


Después de configurar, puede hacer clic en "Aceptar" y los dispositivos se conectarán entre sí. O bien esto no sucede y aparece una inscripción que indica que la conexión se interrumpió durante N segundos o que está completamente ausente. En este caso, verifique la configuración y la conexión, asegúrese de que los controladores para los puertos COM estén instalados correctamente y funcionen correctamente.

Ejemplo de programa 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();
        }
    }
}


Captura de pantalla


Importante: si está desarrollando algo que es más complicado que el ejemplo anterior, debe asegurarse de que los paquetes no se pierdan. Es necesario calcular sumas de verificación, puede leer sobre esto aquí.

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


All Articles