Apenas sobre o NModbus (RTU)

Este artigo é destinado a iniciantes.

Teoria


O Modbus é um protocolo de comunicação baseado na arquitetura mestre-escravo. Utiliza interfaces RS-485, RS-422, RS-232, bem como redes Ethernet TCP / IP para transferência de dados.

O NModbus é uma grande biblioteca C # que inclui a implementação de todos os modos de operação de protocolo. O modelo para implementar as classes desta biblioteca permite trabalhar com qualquer dispositivo Modbus, mas apenas com um, uma vez que as classes da biblioteca encapsulam uma porta em si, impedindo a sincronização entre vários objetos Modbus. Esse protocolo é bastante popular no desenvolvimento de diferentes periféricos para uma casa inteligente, bem como na Internet das coisas.

Equipas
, , TCP/IP .

Portanto, para gerenciar algo, precisamos saber o que e para onde enviar. Então, precisamos de um cartão de registro.

Esclareço que as células de registro são:
1. Somente leitura
2. Leitura e gravação
3. Somente gravação (é permitida a confirmação do registro para fornecer um código de erro)

O cartão mais simples se parece com o seguinte:
Captura de tela


Além disso, existem várias explicações, por exemplo, qual valor máximo / mínimo pode ser transmitido para o endereço etc.

Prática


Eu uso a versão de teste do simulador das portas Modbus Tools e COM da MOXA com interface RS-485.

Porta COM


Depois de criar o projeto, você precisa integrar o NModbus a ele. Eu recomendo usar o VisualStudio, pois é muito fácil fazê-lo com o NuGet, como mostrado abaixo:

1º passo


2º passo


No ModbusTools, precisamos definir os parâmetros de conexão (eles podem diferir para você, são adequados para minhas portas COM):

Os parâmetros abrem em F3 ou na guia "Conexão".

Para mestre e escravo, as configurações devem corresponder, exceto para o item com portas COM.

Captura de tela


Após a configuração, você pode clicar em "OK" e os dispositivos se conectam. Isso não acontece e uma inscrição parece que a conexão foi interrompida por N segundos ou está completamente ausente. Nesse caso, verifique as configurações e a conexão, verifique se os drivers das portas COM estão instalados corretamente e funcionam corretamente.

Exemplo de programa simples
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 tela


Importante: se você estiver desenvolvendo algo mais complicado que o exemplo acima, verifique se os pacotes não são perdidos. É necessário calcular somas de verificação, você pode ler sobre isso aqui.

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


All Articles