Nick писал(а):Тут еще вот какая проблема, честно говоря даже не представляю как это в LinuxCNC реализовано:
Хрен с ним с base-thread представим, что все решено, но для того, чтобы сделать рассчет траектории в servothread надо получить обратную связь на начало периода, потом все рассчитать и выдать задание, но все это время рассчета будет проходить перемещение ведь вычисления могут затянуться дольше чем на 1 base-thread... Хотя все это может сглаживаться за счет 1 такта серво...
Реализовано не сложно, в плане идеологии. Интерпретатор анализируя текущий кадр Г кода выдает точку в пространстве, в которую необходимо переместить инструмент, по отношению к предыдущему кадру, и отдает эту точку интерполятору (кубический сплайн). Интерполятор строит траекторию в пространстве, по которой должен пройти инструмент, чтобы достигнуть заданной точки, выдавая на выходе проекции на оси. Эта пространственная траектория подается на вход планировщика траектории, или временного интерполятора, который, учитывая установленные максимальные скорости и ускорения, строит временнОй график скоростей по каждой оси опираясь на период сервоцикла. Весь этот расчет производится каждый раз при получении нового кадра. На этом работа ЕМС заканчивается. Далее полученный массив скоростей просто проигрывается с периодом сервоцикла.
Обратной связи ни по позиции ни по скорости в ЕМС нет никакой. Нет Г кода, который бы позволял считать текущую позицию инструмента, и на основании ее изменить ход выполнения программы. ЕМС просто сканирует, с периодом серворцикла, состояние выходов ошибки приводов и уходит в аварию при их появлении.
Генератор шагов и ПИД (впрочем генератор шагов это тот же ПИД) это компонеты либо внешние, либо внутренние ХАЛ. Так вот для работы этих самых компонентов ХАЛ и требуется режим реального времени. Если перенести эти функции на аппаратную часть, то необходимость в ней отпадает.