Команды ввода/вывода в 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). Эти команды можно вставить в любом месте траектории, но как правило это имеет смысл только в местах остановки движения. В противном случае произойдет мгновенная остановка без какого-либо замедления. Команды ожидания полезны, когда движение должно немедленно выполняться по команде. Это возможно, потому что движение уже было интерпретировано, запланировано, загружено и запрограммировано для выполнения заблаговременно. В примере ниже, в углу было добавлено ожидание.

 

Показана точка ожидания, если бит сброшен.