Расскажу всем, чтобы было понятно о чем речь.
В основе лежит красивая и очень простая идея - создать на базе протокола ETHERNET 100мбит высокоскоростную систему обмена информацией в системах управления пром. оборудованием в режиме реального времени. Работает это просто до безобразия.
Вот стандартный пакет езернета
Серым цветом выделен стандартные заголовки/окончания езернета. А там, где идут обычно заголовки и данные TCP/IP начинается так называемая телеграмма EtherCAT. Для нее есть даже отдельный тип 0х88А4 в поле типа пакета эзернет заголовка. Сеть состоит из одного мастера и кучи слейвов. Мастером выступает обычный комп с езернет картой. Включены все последовательно - передача мастера - прием слейва - передача слейва - .... прием мастера.
Вся хитрость заключается в слейве.
В полях адреса заголовка мастера (DA, SA - МАК адреса приемника и передатчика) стоит один и тот же адрес - мастера.
А вот в поле данных пакета езернет, каждый слейв,
на лету, вставляет свои данные поймав свой адрес указанный в каждой датаграмме.
Ключевая фраза всей технологии вот эта фраза
"вставка на лету". Т.е. по мере передачи мастером слейвы вставляют свои данные в пакет,который сразу возвращается, а не после получения и анализа всего пакета.
Таким образом после окончания передчи пакета мастер имеет на приеме пакет с данными от переферии. При этом не затрачивается время на ожидание ответа, ведь обмен дуплексный.
Реализовать аппаратно такой фокус на обычном микроконтроллере невозможно. Поэтому применяют специализированные чипы или ПЛИС.
Но сама реализация в ПЛИС довольно простая, особенно если не придерживаться стандарта EtherCat.
Система может за один цикл обмена ~0,3 мс собрать - выдать данные на 12000 дискретных входов-выходов. Минимальній цикл равен приблизительно 6 мкс. За это время можно передать/получить все необходимое для работы сервопривода.
Я сделал простую реализацию этого алгоритма для одного слейва на шесть осей сервоприводов довольно быстро. И, используя наработки по ссылке в первом посте в части драйвера ХАЛ, получил рабочий (пока теоретически, в железе пока не пробовал) сервопривод. Причем быстродействия с лихвой хватает для получение состояний энкодеров и обработки сервопривода шести осей ПИДами ЕМС и еще есть место для 3х-4х сотен дискретных пинов (а может и на порядок больше, не проверял) или, еще, что только можно придумать.
Самое интересное, что драйвер езернета, в UBUNTU, удалось запустить в базовом потоке - 25 мкс и выдать на слейв, как на стандартный ЛПТ, сигналы степ/дир.
В общем технология очень перспективная. Может похоронить все, что до этого применяли в качестве периферии (КФлоп,Меса, плуто и т.д.). Причем как для LinuxCNC, так и для МАЧа. Под виндой драйвера работают ничуть не медленнее, чем в Linux.
Есть, конечно, и неприятные моменты. Работает все это только на контроллерах нескольких производителей. В частности Интел и Реалтек. По видимому внутренняя структура остальных засекречена и написать спец. драйвер для них невозможно.