Introducción y uso de la herramienta cliente C++ ModBUS TCP qModMaster

Introducción a la herramienta qModMaster

QModMaster es un simulador Modbus Master (Master) basado en Qt para simular y probar comunicaciones Modbus TCP y RTU. Proporciona una interfaz gráfica intuitiva que permite a los usuarios configurar y enviar solicitudes Modbus fácilmente, y ver y analizar datos de respuesta.

Estas son algunas de las características y funciones clave de la herramienta QModMaster:

  1.  Admite Modbus TCP y RTU: QModMaster se puede utilizar como simulador de estación maestra para comunicación Modbus TCP y RTU. Podrás elegir el método de comunicación que más te convenga según tus necesidades.
  2.  Interfaz gráfica intuitiva: QModMaster proporciona una interfaz gráfica fácil de usar que le permite configurar y enviar solicitudes Modbus fácilmente y ver datos de respuesta. Puede optar por leer y escribir diferentes tipos de datos de registro, como bobinas, registros de entrada, registros de retención, etc.
  3.  Visualización de datos flexible: QModMaster muestra los datos leídos en forma tabular, lo que le permite ver y analizar claramente las respuestas Modbus. Puede optar por mostrar los datos en formato decimal o hexadecimal, y puede ordenarlos y filtrarlos según sus necesidades.
  4.   Monitoreo en tiempo real: QModMaster también proporciona una función de monitoreo en tiempo real, que puede leer y mostrar continuamente los datos de registro del dispositivo. Puede configurar la frecuencia de actualización y monitorear el estado del dispositivo y los cambios de datos en cualquier momento.
  5.   Función de importación y exportación: QModMaster admite la importación y exportación de configuración y datos de Modbus, lo que le permite compartir y realizar copias de seguridad de la configuración entre diferentes entornos.

QModMaster es un proyecto de código abierto, su código fuente y la documentación relacionada se pueden encontrar en GitHub. Puede utilizar QModMaster para simular y probar la comunicación Modbus, depurar y verificar según sus necesidades y escenarios de aplicación.

Master es un dispositivo de control responsable de iniciar y gestionar la comunicación Modbus TCP. Puede enviar solicitudes de lectura o escritura a los esclavos y recibir respuestas de los esclavos. La estación maestra suele ser una computadora host o un sistema de monitoreo, que es responsable de controlar y monitorear todo el sistema.

Esclavo: El esclavo es un dispositivo pasivo que responde a la solicitud del maestro y proporciona datos. Puede ser un sensor, PLC u otro dispositivo. La estación esclava recibe la solicitud de lectura o escritura de la estación maestra y devuelve los datos correspondientes o realiza la operación correspondiente. Cada dispositivo esclavo tiene una dirección única.

En las redes serie y MB+, solo el nodo designado como nodo maestro puede iniciar un comando (en Ethernet, cualquier dispositivo puede enviar un comando Modbus, pero generalmente solo hay un comando de inicio del dispositivo del nodo maestro).

En Modbus TCP, la estación maestra suele ser el extremo del cliente de tcp, y la estación esclava es el extremo del servidor de tcp, y el puerto predeterminado 502 está abierto. Esto es fácil de confundir, aquí lo enfatizamos.

Dirección de origen de qModMaster

Descargar QModMaster | FuenteForge.net

https://codeload.github.com/Thuzerland/qModbusMaster/zip/refs/heads/master

GitHub - Thuzerland/qModbusMaster: bifurcación de QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/)

Dirección de la herramienta qModMaster 

https://nchc.dl.sourceforge.net/project/qmodmaster/qModMaster-Win64-exe-0.5.3-beta.zip

formato del protocolo modbusTCP

La trama de datos de ModbusTCP se puede dividir en dos partes: MBAP+PDU

El mensaje se divide principalmente en dos partes: el encabezado del protocolo (encabezado MBAP) y la PDU. La PDU también incluye dos partes: código de función (código de función) y datos (datos). 

(1) Encabezado de mensaje MBAP: MBAP es un encabezado de mensaje con una longitud de 7 bytes y se compone de la siguiente manera:

8b3c8714-64e9-11ed-8abf-dac502259ad0.png

8b4d16ec-64e9-11ed-8abf-dac502259ad0.png

(2) PDU de estructura de trama: la PDU consta de código de función + datos. El código de función es de 1 byte y la longitud de los datos es variable, determinada por la función específica.

Mensaje de ejemplo a continuación:

[TCP]>Tx > 18:37:13:318 - 00 02 00 00 00 06 01 03   00  00 00 03  
[TCP]>Rx > 18:37:13:330 - 00 02 00 00 00 09 01 03   06  00 02 00 03 00 04   

 

Paquete de ejemplo:

0232 0000 0009 01 10 9C490001020000

Encabezado de protocolo 0232 0000 0009 01
PDU: 10 9C49 0001 02 0000

Diferencias con modbusRTU estándar

Modo modbusRTU estándar, el formato del protocolo es:

 Puedes ver la diferencia con modbusTCP. En comparación, modbusTCP tiene dos códigos de verificación CRC menos. El identificador de unidad de MBAP en el protocolo modbusTCP es equivalente a la dirección de la estación esclava.

8b605d6a-64e9-11ed-8abf-dac502259ad0.png

Dirección del protocolo Modbus y códigos de función comunes

Según diferentes objetos, los códigos de función de Modbus son:

8b90595c-64e9-11ed-8abf-dac502259ad0.png

8ba20a62-64e9-11ed-8abf-dac502259ad0.png

 La dirección de registro definida por el protocolo Modbus es una dirección decimal de 5 dígitos, a saber:
dirección de bobina (DO): 00000~09999
dirección de contacto (DI): 10000~19999
dirección de registro de entrada (AI): 30000~39999
registro de salida (AO ) dirección: 40000~49999
Dado que las distintas direcciones mencionadas anteriormente se corresponden de forma única, algunos materiales utilizan el primer número para distinguir varios tipos de direcciones, a saber: 0x representa la dirección de tipo bobina (DO), 1x representa el tipo de contacto (DI) dirección, 3x Representa la dirección de tipo registro de entrada (AI), 4x representa la dirección de tipo registro de salida (AO).
En la programación real, debido a la función distintiva del prefijo, solo es necesario especificar los últimos 4 dígitos y debe convertirse en una dirección hexadecimal de 4 dígitos.

Descripción de la dirección Modbus

Los tipos de direcciones del protocolo MODBUS son 0x, 1x, 3x, 4x, 5x, 6x y 3x_bit, 4x_bit, etc. Los
códigos de función admitidos por estos tipos de direcciones en el protocolo MODBUS se describirán respectivamente a continuación.

Introducción a la herramienta Modbus Slave

Modbus Slave es un software de computadora host que simula un esclavo de protocolo Modbus y se utiliza principalmente para simular el proceso de comunicación con otros dispositivos host. Otro software que existe en el paquete completo, Modbus Poll, es un software de computadora host que simula el protocolo Modbus del host. El software encapsula la pila de protocolo Modbus estándar en su interior y facilita la operación a través de la interfaz gráfica. Actualmente, el software admite los códigos de función 01, 02, 03, 04, 05, 06, 15 y 16, visualización de mensajes originales, grabación de datos y otras funciones, y es una buena ayuda para depurar la pila del protocolo Modbus.

Enlace de descarga de Modbus esclavo

Enlace: Baidu Netdisk Introduzca el código de extracción 
Código de extracción: lft0

Prueba de captura de pantalla 

Uso de qModMaster con ModbusSlave

La dirección PLC del registro se refiere a la dirección almacenada en el controlador, estos controladores pueden ser PLC, pantallas táctiles o pantallas de texto. La dirección del PLC generalmente se describe en decimal, con un total de 5 dígitos, de los cuales el primer dígito es el tipo de registro de código. La relación correspondiente entre el primer dígito y el tipo de registro se muestra en la Tabla 1. Dirección de PLC como 40001, 30002, etc.      

La dirección del protocolo Modbus del registro se refiere a la dirección del registro utilizada en la comunicación. En la programación real, debido a la función distintiva del prefijo de la dirección del PLC del registro, solo es necesario especificar los últimos 4 dígitos y debe convertirse en 4. Dirección hexadecimal de dígitos. Por ejemplo, la dirección de PLC 40001 corresponde a la dirección de direccionamiento 0x0000, 40002 corresponde a la dirección de direccionamiento 0x0001 y las direcciones de direccionamiento de registros generalmente se describen en hexadecimal. Para otro ejemplo, la dirección de registro del PLC 40003 corresponde a la dirección de protocolo 0002 y la dirección de registro del PLC 30003 corresponde a la dirección de protocolo 0002.

En la programación real, debido a la función distintiva del prefijo, solo es necesario especificar los últimos 4 dígitos y debe convertirse en una dirección hexadecimal de 4 dígitos. Para dispositivos o software que admiten el protocolo Modbus, el usuario debe configurar o ver directamente la dirección de datos Modbus al usarlo. Los datos a los que accede la dirección Modbus se leen y escriben a través de varias "funciones". El código de función es la capa inferior de la dirección Modbus. Si el llamado protocolo Modbus proporcionado por la parte de comunicación Modbus solo tiene códigos de función, es necesario prestar atención para comprender la relación correspondiente entre los números de función y las direcciones Modbus. 

Herramienta de depuración Modbus

Kit de herramientas (incluido el asistente modbus y la herramienta de depuración modbusTCP)

enlace de descarga

https://download.csdn.net/download/qq8864/88226165

 

 

Lectura y escritura modbus de QT

Hay muchas formas, debido a que el protocolo es simple, también puedes escribir tu propio paquete. También hay bibliotecas listas para usar, por ejemplo, puede consultar el código fuente de qModMaster, que utiliza la biblioteca libmodbus, se recomienda utilizar la biblioteca libmodbus. Aquí hay otro uso, lectura y escritura del módulo Qt Modbus.

1. Importar módulo

QT       += serialbus serialport

2. Introduce el archivo de encabezado.

#include <QModbusTcpClient>
#include <QModbusReply>

3. Establecer una conexión

    QModbusClient *modbusDevice=new QModbusTcpClient();
    modbusDevice->setConnectionParameter(QModbusDevice::NetworkPortParameter,1502);
    modbusDevice->setConnectionParameter(QModbusDevice::NetworkAddressParameter, "127.0.0.1");
    modbusDevice->setTimeout(2000);
    modbusDevice->setNumberOfRetries(3);
    modbusDevice->connectDevice();

4. Leer y escribir

//发送请求
QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters,30001,1);

    if (auto *reply = modbusDevice->sendReadRequest(readUnit, 1))
    {
        if (!reply->isFinished())
        {
            connect(reply, &QModbusReply::finished,this,&ThisClass::readReady);
        }
        else
        {
            delete reply;
        }
    }
//处理请求
void ThisClass::readReady()
{
    QModbusReply *reply = qobject_cast<QModbusReply *>(sender());
    if (!reply)
        return;

    if (reply->error() == QModbusDevice::NoError)
    {
        const QModbusDataUnit unit = reply->result();
//        if(unit.startAddress()==30001){
            qint16 res=unit.value(0);
//        }

    }
    else
    {
    }
    reply->deleteLater(); // delete the reply
}

//写入,举例向40009寄存器地址写入1 (0232 0000 0009 01 10 9C49 0001 02 0001)

//写请求 9C490001020001 :数据部分
 	QByteArray data=QByteArray::fromHex("9c490001020001");
   // QModbusRequest::WriteMultipleRegisters:功能码 10
    QModbusRequest request(QModbusRequest::WriteMultipleRegisters,
        data);
// 1 :设备地址
    if (auto *reply = modbusDevice->sendRawRequest(request,1))
    {
        if (!reply->isFinished())
        {
            connect(reply, &QModbusReply::finished,this,&ThisClass::writeReady);
        }
        else
        {
            delete reply;
        }
    }
    //响应处理
    void ThisClass::writeReady()
{
    QModbusReply *reply = qobject_cast<QModbusReply *>(sender());
    if (!reply)
        return;

     reply->deleteLater(); // delete the reply
}

otros recursos

[Uso de la herramienta] Explicación detallada del uso del software Modbus Poll - Blog de conocimiento

Protocolo Modbus RTU detallado_protocolo modbus rtu_blog de shwill123-blog CSDN

[Uso de herramientas] Explicación detallada del uso del software esclavo Modbus - Blog de conocimiento - Blog CSDN

Prueba y simulación Modbus

Explicación gráfica del protocolo ModbusTCP - interfaz/bus/driver - Papel Electrónico

Operaciones de lectura y escritura de comunicación Qt Modbus TCP_qt writemultipleregisters_wblong_cs的博客-CSDN Blog

QT usa la biblioteca libmodbus (windows)_libmodbus qt_Turing Small Eyes Blog-CSDN Blog

Modbus - basado en el desarrollo de libmodbus - Zhihu

Prueba de fuzz libmodbus | Artículos de AFL_afl fuzz_Blog de CollinXia-Blog CSDN

Registro de entrada a Libmodbus: se busca programador

Protocolo de comunicación Modbus (modo de transmisión RTU)_blog de modbus rtu_csdn_dx-blog CSDN

Dirección del protocolo Modbus y códigos de función comunes, explicación detallada de Modbus

Instrucciones para cada dirección de -MODBUS- Biblioteca Baidu

Protocolo Modbus dirección_csdnblog de harrychinese-blog CSDN

Una breve descripción del protocolo Modbus [súper práctica] bzdww

Supongo que te gusta

Origin blog.csdn.net/qq8864/article/details/132172864
Recomendado
Clasificación