0

Here is code for communication over Modbus-tcp with txo Raspberrys:

Master code:

#include <stdio.h> 
#include <stdlib.h> 
#include <modbus/modbus.h> 
 
int main(int argc, char *argv[]) { 
    modbus_t *ctx; 
    uint16_t tab_reg[64]; 
    int rc; 
 
    ctx = modbus_new_tcp("192.168.100.104", 502); 
    modbus_connect(ctx); 
 
    rc = modbus_read_registers(ctx, 0, 10, tab_reg); 
 
    if (rc == 10) { 
        printf("Read registers: "); 
        for (int i=0; i<10; i++) { 
            printf("%d ", tab_reg[i]); 
        } 
        printf("\n"); 
    } else { 
        fprintf(stderr, "Failed to read registers: %s\n", modbus_strerror(errno)); 
    } 
 
    modbus_close(ctx); 
    modbus_free(ctx); 
    return 0; 
}

//SLAVE
#include <stdio.h> 
#include <stdlib.h> 
#include <modbus/modbus.h> 
 
int main(int argc, char *argv[]) { 
    modbus_t *ctx; 
    modbus_mapping_t *mb_mapping; 
    int socket; 
 
    ctx = modbus_new_tcp("0.0.0.0", 502); 
    mb_mapping = modbus_mapping_new(0, 0, 100, 0); 
 
    socket = modbus_tcp_listen(ctx, 1); 
    modbus_tcp_accept(ctx, &socket); 
 
    for (;;) { 
        uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; 
        int rc; 
 
        rc = modbus_receive(ctx, query); 
        if (rc > 0) { 
            modbus_reply(ctx, query, rc, mb_mapping); 
        } else if (rc == -1) { 
            break; 
        } 
    } 
 
    printf("Quit the loop: %s\n", modbus_strerror(errno)); 
 
    modbus_mapping_free(mb_mapping); 
    modbus_close(ctx); 
    modbus_free(ctx); 
 
    return 0; 
} 

We run that script from Raspbrrey with IP address 192.168.100.104.

Error that we get is : Failed to read registers: Bad file descriptor.

We try to delete function modbus_connect in slave script, but it did not work.

0 Answers0