Exemple SOEM EtherCAT : Comment lire un objet String à un sous-index spécifique

L’exemple suivant s’appuie sur notre post précédent Exemple SOEM EtherCAT : Lister tous les esclaves.

Il liste un seul objet, 0x2019, sous-index 0x06, qui est listé comme STRING(32) dans le manuel de l’utilisateur.

soem_read_string.c
char stringBuffer[32];
memset(stringBuffer, 0, sizeof(stringBuffer));

int psize = 32;
int result = ec_SDOread(i, 0x2019, 0x06, FALSE, &psize, &stringBuffer, EC_TIMEOUTRXM);
if (result > 0) {
  printf("PDO 0x2019:06 String: %s\n", stringBuffer);
} else {
  printf("Erreur lors de la lecture du PDO 0x2019:06\n");
}

Exemple complet

Voir Exemple SOEM EtherCAT : Lister tous les esclaves pour la configuration CMake

soem_list_slaves.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) {
            printf("%d slaves found and configured.\n", ec_slavecount);

            // Itérer à travers les esclaves et imprimer leurs informations
            for (int i = 1; i <= ec_slavecount; i++) {
                printf("Slave %d: Name: %s, Output size: %d bits, Input size: %d bits, State: %d\n",
                       i,
                       ec_slave[i].name,
                       ec_slave[i].Obits,
                       ec_slave[i].Ibits,
                       ec_slave[i].state);

                // Tampon pour la chaîne (32 octets)
                char stringBuffer[32];
                memset(stringBuffer, 0, sizeof(stringBuffer));

                // Lire le SDO
                int psize = 32;
                int result = ec_SDOread(i, 0x2019, 0x06, FALSE, &psize, &stringBuffer, EC_TIMEOUTRXM);
                if (result > 0) {
                    printf("PDO 0x2019:06 String: %s\n", stringBuffer);
                } else {
                    printf("Erreur lors de la lecture du PDO 0x2019:06\n");
                }
            }
        } else {
            printf("No slaves found.\n");
        }

        // Fermer le maître EtherCAT
        ec_close();
    } else {
        printf("Failed to initialize EtherCAT master on %s\n", ifname);
    }

    return 0;
}

Check out similar posts by category: EtherCAT, C/C++