O exemplo a seguir baseia-se em nosso post anterior Exemplo SOEM EtherCAT: Listar todos os escravos.
Ele lista um único objeto, 0x2019, subíndice 0x06, que é listado como STRING(32) no manual do usuário.
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("Erro ao ler o PDO 0x2019:06\n");
}Exemplo completo
Consulte Exemplo SOEM EtherCAT: Listar todos os escravos para a configuração do 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");
// Inicializar a biblioteca SOEM com a interface de rede especificada
if (ec_init(ifname)) {
printf("EtherCAT master initialized on %s\n", ifname);
// Realizar uma varredura na rede EtherCAT
if (ec_config_init(FALSE) > 0) {
printf("%d slaves found and configured.\n", ec_slavecount);
// Iterar pelos escravos e imprimir suas informações
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);
// Buffer para a string (32 bytes)
char stringBuffer[32];
memset(stringBuffer, 0, sizeof(stringBuffer));
// Ler 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("Erro ao ler o PDO 0x2019:06\n");
}
}
} else {
printf("No slaves found.\n");
}
// Fechar o mestre EtherCAT
ec_close();
} else {
printf("Failed to initialize EtherCAT master on %s\n", ifname);
}
return 0;
}If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow