Code: Select all
#include "KMotionDef.h"
#include "KflopToKMotionCNCFunctions.c"
#define TMP 10 // which spare persist to use to transfer data
#define X_HOME_BIT 6 // Вход датчика оси X
#define Z_HOME_BIT 5 // Вход датчика оси Z
#define X_AXIS 0 // Назначим на каих портах оси
#define Z_AXIS 3
#define X_AXIS_POS_LIM 180800
#define X_AXIS_NEG_LIM -2000
#define Z_AXIS_POS_LIM 100
#define Z_AXIS_NEG_LIM -46000
int HomeSpeed = 1000;
main()
{
while (ReadBit(1027)) ;
SetBit(1027);
int SaveLimitY, SaveLimitZ; //сюда сохраним лимиты
ClearBit(1024); //выключим светодиод оси Х
ClearBit(1025); //выключим светодиод оси Z
// поиск НОМЕ по Y
SaveLimitY = chan[X_AXIS].LimitSwitchOptions; // сохраним состояние лимитов
chan[X_AXIS].LimitSwitchOptions = 0; // отключим лимиты
chan[X_AXIS].SoftLimitNeg = -4e+09;
Jog(X_AXIS,-HomeSpeed); // перемещение оси X в отрицательном направлении
while (ReadBit(X_HOME_BIT)); // ожидание срабатывания датчика по X
Zero(X_AXIS); // обнуление координаты оси X
Jog(X_AXIS,0); // остановка оси X
MoveAtVel(X_AXIS,300, HomeSpeed); // отезд оси X от датчика
while (!CheckDone(X_AXIS)) ; // ожидание окончания движения оси X
Jog(X_AXIS,(-HomeSpeed/5)); // повторное перемещение оси X в отрицательном направлении на скорости /5
while (ReadBit(X_HOME_BIT)) ; // ожидание срабатывания датчика по X
Zero(X_AXIS); // обнуление координаты оси X
Jog(X_AXIS,0); // остановка оси X
MoveAtVel(X_AXIS,1000, HomeSpeed); // отезд оси X от датчика
while (!CheckDone(X_AXIS)) ; // ожидание окончания движения оси X
Zero(X_AXIS);
chan[X_AXIS].LimitSwitchOptions = SaveLimitY; // востановим лимиты
chan[X_AXIS].SoftLimitPos = X_AXIS_POS_LIM;
chan[X_AXIS].SoftLimitNeg = X_AXIS_NEG_LIM;
printf("X-Home Complete\n");
SetBit(1024); //включим индикатор оси X
// поиск НОМЕ по Z
SaveLimitZ = chan[Z_AXIS].LimitSwitchOptions; // сохраним состояние лимитов
chan[Z_AXIS].LimitSwitchOptions = 0; // отключим лимиты
chan[Z_AXIS].SoftLimitPos = 4e+09;
Jog(Z_AXIS,HomeSpeed); // перемещение оси Z в отрицательном направлении
while (ReadBit(Z_HOME_BIT)); // ожидание срабатывания датчика по Z
Zero(Z_AXIS); // обнуление координаты оси Z
Jog(Z_AXIS,0); // остановка оси Z
MoveAtVel(Z_AXIS,-300, HomeSpeed); // отезд оси Z от датчика
while (!CheckDone(Z_AXIS)) ; // ожидание окончания движения оси Z
Jog(Z_AXIS,(HomeSpeed/5)); // повторное перемещение оси Z в отрицательном направлении на скорости /5
while (ReadBit(Z_HOME_BIT)) ; // ожидание срабатывания датчика по Z
Zero(Z_AXIS); // обнуление координаты оси Z
Jog(Z_AXIS,0); // остановка оси Z
MoveAtVel(Z_AXIS,-1000, HomeSpeed); // отезд оси Z от датчика
while (!CheckDone(Z_AXIS)) ; // ожидание окончания движения оси Z
Zero(Z_AXIS);
chan[Z_AXIS].LimitSwitchOptions = SaveLimitZ; // востановим лимиты
chan[Z_AXIS].SoftLimitPos = Z_AXIS_POS_LIM;
chan[Z_AXIS].SoftLimitNeg = Z_AXIS_NEG_LIM;
printf("Z-Home Complete\n");
SetBit(1025); //включим индикатор оси Z
ClearBit(1027);
//Zero(Y_AXIS);
//Zero(Z_AXIS);
DoPCFloat(PC_COMM_SET_X, 0.0);
DoPCFloat(PC_COMM_SET_Z, 0.0);
}