Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf
Добавлено: 22 ноя 2015, 19:52
Если сигнал пропадает при наезде на концевик -низкий уровень. А если появляется - высокий.Atom42 писал(а):Саша, как это понять -низкий/высокий?
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
Если сигнал пропадает при наезде на концевик -низкий уровень. А если появляется - высокий.Atom42 писал(а):Саша, как это понять -низкий/высокий?
У меня при наезде пропадает 24v, получается низкий. Спасибо, парни, завтра пробовать буду.ukr-sasha писал(а):Если сигнал пропадает при наезде на концевик -низкий уровень. А если появляется - высокий.
Все заработалоukr-sasha писал(а):ch0->LimitSwitchOptions=0x103;
если высокий уровень срабатывания концевика.
и
ch0->LimitSwitchOptions=0x10f;
если низкий.
А зачем два концевика, у меня они и по одному оба останавливаются? У каждого же есть своя Z метка.UAVpilot писал(а):Обе оси хомятся одновременно, но каждая по своему датчику и индексу.
Я не додумал до этого, а оно логично как. Но и как я написал тоже должно работать.UAVpilot писал(а):После хомления оси устанавливаются каждая в свою собственную позицию, которые задаются при юстировке так, чтобы портал стоял как надо.
Код: Выделить всё
SetBitDirection(39,0); // для оси X1
// поиск НОМЕ по Х1
Zero(3); // обнуление координаты оси Х1
Jog(3,10240); // перемещение оси Х1 в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(39)) ; // ожидание срабатывания индексной метки по Х1- пин 39 - появление сигнала
Zero(3); // обнуление координаты оси Х1
Jog(3,0); // остановка оси Х1
Поздравляю.Atom42 писал(а):Саша, все заработало как и планировалось, спасибо!
Вот так сейчас:ukr-sasha писал(а):Интересно было бы посмотреть на код.
Код: Выделить всё
#include "KMotionDef.h"
int DoPC(int cmd);
int DoPCInt(int cmd, int i);
#define GATH_OFF 0 // define the offset into the Gather buffer where strings are passed
main()
{
//определяем пины для индексных меток, как ВХОД
SetBitDirection(36,0); // для оси Х
SetBitDirection(37,0); // для оси Y
SetBitDirection(38,0); // для оси Z
SetBitDirection(39,0); // для оси X1
// поиск НОМЕ по Z
ch2->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Z, чтобы не блокировалась ось
Jog(2,-20480); // перемещение оси Z в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
while (ReadBit(141)) ; // ожидание срабатывания датчика по Z- пин 141 - пропадание сигнала
Zero(2); // обнуление координаты оси Z
Jog(2,0); // остановка оси Z
Jog(2,10240); // перемещение оси Z в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(38)) ; // ожидание срабатывания индексной метки по Z- пин 38 - появление сигнала
Zero(2); // обнуление координаты оси Z
Jog(2,0); // остановка оси Z
ch2->LimitSwitchOptions=0x10f;// включение обработки концевого датчика на оси Z,
// поиск НОМЕ по Х
ch0->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Х, чтобы не блокировалась ось
Jog(0,-20480); // перемещение оси Х в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
while (ReadBit(137)) ; // ожидание срабатывания датчика по Z- пин 137 - пропадание сигнала
Zero(0); // обнуление координаты оси Х
Jog(0,0); // остановка оси Х
Jog(0,10240); // перемещение оси Х в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(36)) ; // ожидание срабатывания индексной метки по Х- пин 36 - появление сигнала
Zero(0); // обнуление координаты оси Х
Jog(0,0); // остановка оси Х
ch0->LimitSwitchOptions=0x10f;// включение обработки концевого датчика на оси Х,
// поиск НОМЕ по Х1
ch3->MasterAxis=-1;
Jog(3,10240); // перемещение оси Х1 в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(39)) ; // ожидание срабатывания индексной метки по Х1- пин 39 - появление сигнала
Zero(3); // обнуление координаты оси Х1
Jog(3,0); // остановка оси Х1
ch3->MasterAxis=0;
// поиск НОМЕ по Y
ch1->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Y, чтобы не блокировалась ось
Jog(1,-20480); // перемещение оси Y в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
while (ReadBit(139)) ; // ожидание срабатывания датчика по Y- пин 139
Zero(1); // обнуление координаты оси Y
Jog(1,0); // остановка оси Y
Jog(1,10240); // перемещение оси Y в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(37)) ; // ожидание срабатывания индексной метки по Y- пин 37 - появление сигнала
Zero(1); // обнуление координаты оси Y
Jog(1,0); // остановка оси Y
ch1->LimitSwitchOptions=0x10f;// включение обработки концевого датчика на оси Y,
MDI("G92.1"); // очистка всех действующих оффсетов
}
//далее код обеспечивающий ввод команды в MDI
// put the MDI string (Manual Data Input - GCode) in the
// gather buffer and tell the App where it is
int MDI(char *s)
{
char *p=(char *)gather_buffer+GATH_OFF*sizeof(int);
int i;
do // copy to gather buffer w offset 0
{
*p++ = *s++;
}while (s[-1]);
// issue the command an wait till it is complete
// (or an error - such as busy)
return DoPCInt(PC_COMM_MDI,GATH_OFF);
}
// Put an integer as a parameter and pass the command to the App
int DoPCInt(int cmd, int i)
{
int result;
persist.UserData[PC_COMM_PERSIST+1] = i;
return DoPC(cmd);
}
// Pass a command to the PC and wait for it to handshake
// that it was received by either clearing the command
// or changing it to a negative error code
int DoPC(int cmd)
{
int result;
persist.UserData[PC_COMM_PERSIST]=cmd;
do
{
WaitNextTimeSlice();
}while (result=persist.UserData[PC_COMM_PERSIST]>0);
return result;
}
а физически куда эта платка с оптоизолированными выходами подключается?ukr-sasha писал(а): в таком случае, нужно будет сделать или купить платку с оптоизолированными входами, т.к. у Каналога их всего 8шт
В kflopАлександр_ писал(а): а физически куда эта платка с оптоизолированными выходами подключается?
хотел уточнить по шпинделю - если настроить все как в примере в начале темы, то скорость шпинделя будет задаваться только программно. всегда ли это удобно? даже у автора темы в соседней теме дополнительно стоит галетник на панели управления что говорит о том. что есть случаи когда нужно прибавить/убавить оборотов. если настроить шпиндель указанным в начале темы способом на управление сигналом 0-10V и дополнительно вывести на панель управления скажем, резистор переменного сопротивления для управления скорость. то как эти два сигнала будут между собой дружить? и как инвертор поймет какой сигнал главный?ukr-sasha писал(а):Всё, теперь шпиндель будет управляться по G-кодам и кнопками на панели программы
Думаю целесообразней выводить на панель галетник/переменный резистор дублирующий вот эту регулировку в программе, тогда и "дружить" все будет между собой (думаю у Саши (автора темы) именно так и сделаноАлександр_ писал(а):хотел уточнить по шпинделю - если настроить все как в примере в начале темы, то скорость шпинделя будет задаваться только программно. всегда ли это удобно? даже у автора темы в соседней теме дополнительно стоит галетник на панели управления что говорит о том. что есть случаи когда нужно прибавить/убавить оборотов. если настроить шпиндель указанным в начале темы способом на управление сигналом 0-10V и дополнительно вывести на панель управления скажем, резистор переменного сопротивления для управления скорость. то как эти два сигнала будут между собой дружить? и как инвертор поймет какой сигнал главный?ukr-sasha писал(а):Всё, теперь шпиндель будет управляться по G-кодам и кнопками на панели программы