Modbus y el Sunny Boy

-1

Estoy utilizando libmodbus para conectarme a un inversor SunnyBoy 2.5. Hago la conexión de la siguiente manera:

#include <modbus/modbus.h>
#include <stdio.h>
#include <errno.h>

int main()
{
    modbus_t *mb;
    uint16_t tab_reg[32];
    int rc;
    int socket;

    mb = modbus_new_tcp("192.168.100.1", 502);
    if (mb == NULL)
    {
        fprintf(stderr, "Unable to allocate libmodbus context\n.");
        return -1;
    }

    if (modbus_connect(mb) == -1)
    {
        fprintf(stderr, "Connection failed: %s\n",
                modbus_strerror(errno));
        modbus_free(mb);
        return -1;
    }
    else
    {
        socket = modbus_tcp_listen(mb, 1);
        if (socket == -1)
        {
            fprintf(stderr, "Socket problem: %s\n", modbus_strerror(errno));
        }
        modbus_tcp_accept(mb, &socket);
        printf("Connection successful.\n");
    }
}

Cuando intento escuchar en el socket (modbus_tcp_listen), me da un error de "permiso denegado". ¿Cómo se puede obtener permiso para que el SunnyBoy hable con Modbus / cómo se implementa en el código?

    
pregunta Cornel Verster

1 respuesta

1

Recibirá este mensaje porque modbus usa el puerto 502. En Unix, los números de puertos por debajo de 1024 requieren acceso de root, así que intente usar

sudo bash

Para obtener un shell de root y probarlo. También sería mejor utilizar un lenguaje de secuencias de comandos que tenga una biblioteca modbus. Esto le permitirá producir prototipos rápidos con su Sunny Boy.

    
respondido por el ekarak

Lea otras preguntas en las etiquetas