Эквивалент в Rust EtherCAT для ecrt_request_master()

Тогда как в C++ вы бы использовали

ethercat_request_master.cpp
// Запрос мастера
master = ecrt_request_master(0);
if (!master) {
    std::cerr << "Failed to request master!" << std::endl;
    return -1;
}

в Rust, с использованием крейта ethercat, вы бы сделали это так:

ethercat_request_master.rs
use ethercat::{Master, MasterAccess};

// Вы также можете использовать MasterAccess::ReadOnly, если вам не нужен доступ на запись
// 0 — это индекс мастера для открытия (обычно 0)
let mut master = Master::open(0, MasterAccess::ReadWrite)?;
// Резервирование (т.е. "запрос") мастера (для эксклюзивного доступа, по сути)
master.reserve()?;

Обратите внимание, что функция Master::open открывает устройство мастера, а метод reserve используется для запроса эксклюзивного доступа к мастеру.

Функция C++ ecrt_request_master объединяет как открытие (ecrt_open_master()), так и резервирование (ecrt_master_reserve()) мастера, тогда как в Rust это два отдельных шага. Подробнее см. исходный код ecrt_request_master().


Check out similar posts by category: Rust, EtherCAT