142
Количество тактов интерполяции в общем случае определяется геометри-
ей траектории движения, заданными контурными скоростями и ускорениями, а
также частотой квантования в контуре положения.
Частота вызова функции определяется периодом квантования в контуре
положения. При первом вызове функции производится расчет базовых пара-
метров интерполятора и выполняется расчет задания по положению для ука-
занных
в структуре Line осей. При дальнейшем вызове функции интерполятора
выполняется расчет лишь задания по положению. Базовые параметры хранятся
в структуре Line.
К базовым параметрам интерполятора относятся промежуточные данные,
которые определяются один раз и используются в интерполяторе для формиро-
вания задания по положению до тех пор, пока заданный участок траектории не
будет отработан полностью.
Помимо базовых параметров на каждом такте интерполяции используют-
ся величины заданий полученные на предыдущем такте интерполяции. Пере-
менные, хранящиеся в структуре Line, описаны ниже.
Структура кадра линейной интерполяции «Line»
typedef struct
{ int X1,X2,Y1,Y2,Z1,Z2,K1,K2; // Координаты начальной и конечной точки
отрезка
int V1,V2,a_c; // Скорость начальная и конечная, ускорение
char a_type; // Тип ускорения 0 – скачек, 1 – функция f(t)
char Plane; // Плоскость интерполирования: 0 – XYZ, 1 – XY,
// 2 – XZ, 3 – YZ, 4 – X, 5 – Y, 6 – Z, 7 – K;
float X_out,Y_out,Z_out,K_out; // Величины задания по положению на
текущем
// такте интерполяции;
char MovingType; // Тип движения по траектории:
// 0 – не определено, 1 – движение с V
const
,
// 2 – разгон и движение V
const
, 3 – движение с
// V
const
и торможение;
char CurrentMove; // Тип движения по траектории в данный
момент:
// 0 – не определено, 1 – первый участок,
// 2 – второй участок;
char Done; // Траектория выполнена: 0 – нет; 1 – да.
// Выставляется после расчета последнего так-
та;
unsigned int TickRun; // Число тактов разгона/торможения;
unsigned int TickNow; // Текущее число тактов интерполятора;
unsigned int TickVc; // Текущее число тактов с V
c
=const;