Команды ввода/вывода в G-коде
KMotionCNC позволяет добавлять операции ввода-вывода в скоординированный буфер движения таким образом, чтобы команды ввода-вывода исполнялась синхронно (в пределах 90 мкс) с движением. (Буферизованные операции ввода-вывода также могут быть добавлены через библиотеку из сторонних приложений).
В примере ниже показаны два M-кода для установки 46 и 47 битов ввода-вывода, а также M6, который сконфигурированн так, чтобы ждать пока бит 46 ввода-вывода не будет сброшен.
Простой фрагмент кода показывает М-код, встроенный в непрерывное прямое движение в точке X = 1.0.
Планировщики траектории обычно объединяют колиннеарные участки для сглаживания, но в данном случае нельзя комбинировать сегменты для возможности исполнения синхронной команды в нужный момент.
Выполняя G-код, мы можем наблюдать биты 46 и 67, установленные в 1 при достижении X = 1.0
В приведенном ниже примере показан путь движения по прямоугольнику с командами ввода/вывода, исполняемыми при достижении прямого угла.
Если угол траектории установлен в 10 градусов (что меньше 90 градусов), то в углах будет проходить полная остановка.
В этом случае выхода переключаются, когда происходит останов в углу.
Для демонстратии того, что происходит при скруглении углов, приведен пример ниже. Если угол превышает 90 градусов, остановки не будет.
Чтобы точно зафиксировать точку мы используем приведенную ниже C программу для KFLOP. Она запоминает позицию XY в режиме реального времени при изменении 46 бита (разрешение XY составляет 10000 отсчетов на дюйм).
#include "KMotionDef.h"
main()
{
int New,Last=ReadBit(46);
for (;;)
{
New = ReadBit(46);
if (New != Last)
{
Last=New;
printf("X=%f Y=%f\n",ch0->Dest/10000.0,ch1->Dest/10000.0); // send message to console
}
}
}
Полученная позиция:
X=0.929315 Y=0.070748
В дополнение к изменению выходов в момент движения, можно добавить ожидание нужного значения бита. Для этого используется команда WaitBitBuf. Если указанный бит сброшен(0), движение будет останавлено в этой точке, пока вход не станет истинным(1). Аналогичная команда WaitNotBitBuf останавливает при необходимости движение и ожидает пока вход не будет сброшен(0). Эти команды можно вставить в любом месте траектории, но как правило это имеет смысл только в местах остановки движения. В противном случае произойдет мгновенная остановка без какого-либо замедления. Команды ожидания полезны, когда движение должно немедленно выполняться по команде. Это возможно, потому что движение уже было интерпретировано, запланировано, загружено и запрограммировано для выполнения заблаговременно. В примере ниже, в углу было добавлено ожидание.
Показана точка ожидания, если бит сброшен.