Exemple minimal SOEM EtherCAT pour lire un objet UDINT avec un ID d'esclave connu

L’exemple suivant est basé sur nos posts précédents Exemple SOEM EtherCAT : Lister tous les esclaves et Exemple SOEM EtherCAT : Comment lire un objet UDINT.

soem_read_udint.c
#include "ethercat.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc <= 1) {
        printf("Usage: %s <network interface>\n", argv[0]);
        return 1;
    }
    char *ifname = argv[1];

    printf("Starting SOEM EtherCAT slave listing\n");

    // Initialiser la bibliothèque SOEM avec l'interface réseau spécifiée
    if (ec_init(ifname)) {
        printf("EtherCAT master initialized on %s\n", ifname);

        // Effectuer un scan du réseau EtherCAT
        if (ec_config_init(FALSE) > 0) {
            // Passer en mode OP
            ec_config_map(&IOmap);
            ec_statecheck(0, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE);
            ec_slave[0].state = EC_STATE_OPERATIONAL;
            ec_writestate(0);
            ec_statecheck(0, EC_STATE_OPERATIONAL, EC_TIMEOUTSTATE);

            // Lire le RxPDO
            while(1) {
                ec_receive_processdata(EC_TIMEOUTRET);
                // Les données PDO sont maintenant disponibles dans ec_slave[1].inputs[]

                // Attendre un court instant
                osal_usleep(1000);
            }
        }
        ec_close();
    } else {
        printf("Failed to initialize EtherCAT master on %s\n", ifname);
    }
    return 0;
}

Consultez les articles similaires par catégorie : EtherCAT