Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf
Добавлено: 12 окт 2015, 15:54
У меня так и сделано. Работает.Александр_ писал(а): тогда при размыкании цифрового выхода ток пропадет во всей цепи и все оси остановятся. так?
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
У меня так и сделано. Работает.Александр_ писал(а): тогда при размыкании цифрового выхода ток пропадет во всей цепи и все оси остановятся. так?
Ответ был дан для Fishman, и по конкретному вопросу - как выдать сигнал с к-флоп после окончания работы ж-кода.Александр_ писал(а):зачем? вопос был по мотивам поста №5 этой темы.AlexNikov писал(а):Завершение выполнения g-кода обычно сопровождается командой М5 или М30, повесьте на них активацию кого-либо пина в KMotionCNC.
там показан пример для одной оси. если там цифровой выход замыкает перемычку для активации оси то логично по-моему, последовательно все оси подключить - по аналогии с сигналом ALM. тогда при размыкании цифрового выхода ток пропадет во всей цепи и все оси остановятся. так?
Спасибо! Будем пробоватьAlexNikov писал(а):Ответ был дан для Fishman, и по конкретному вопросу - как выдать сигнал с к-флоп после окончания работы ж-кода.Александр_ писал(а):зачем? вопос был по мотивам поста №5 этой темы.AlexNikov писал(а):Завершение выполнения g-кода обычно сопровождается командой М5 или М30, повесьте на них активацию кого-либо пина в KMotionCNC.
там показан пример для одной оси. если там цифровой выход замыкает перемычку для активации оси то логично по-моему, последовательно все оси подключить - по аналогии с сигналом ALM. тогда при размыкании цифрового выхода ток пропадет во всей цепи и все оси остановятся. так?
(ch0->Enable && ch1->Enable && ch2->Enable) мб тут ошибка? Какой бит включает оси, 144? К каким пинам к-аналога подключена активация осей?Александр_ писал(а):попытался сегодня настроить сигнал ServoOn и как обычно, с первого раза не получилось
Отключил через СигмаВин "Servo is always ON", собрал цепочку из четырех сервопаков, последовательно выводя сигнал S-ON с каждого. Дальше как и нужно было, завел в Каналог и вставил кусочек кода в файл инициализации. При нажатии кнопки INIT KmotionCNC не ругается, но оси не оживают. Сами провода точно спаял правильно - вынул из Каналога 2 провода - на нихВольта как и нужно. Замкнул их между собой - оси включаются. То есть не срабатывает именно перемычка на Каналоге. Может, какая-то орфографическая неточность в С-файле? Прикрепил его.
ну так у вас вроде каналы на привода не ch0-ch2 а ch4-ch7Александр_ писал(а):подключал все как в примере в первых постах этой темы. 144 бит
как правильно завести сигналы ALARM в кфлоп/каналог? цепочкой из ALARM-ов сервопаков шунтировать цепь S-on? Или завести эту цепочку в свободный цифровой выход и как-то настроить чтобы при выпадении ошибки каналог отключал S-ON?ukr-sasha писал(а):У меня так и сделано. Работает.
Код: Выделить всё
#include "KMotionDef.h"
// T O O L C H A N G E R S E Q U E N C E
//
// define state that the tool changer may be in
enum {T_IDLE,T_WORKING};
#define TOOL_VAR 20 // Tool changer desired new tool Var
#define TOOL_STATE_VAR 19 // Tool changer state is saved globally in this Var
#define LAST_TOOL_VAR 18 // Tool changer Last tool position is saved globally in this Var
#define ZHOME 0 // Absolute Position of Z Axis Home
#define ZTOOLPOS ****** // Absolute Position of Z Axis For Top Of Tool Slot
int *ChangerState = &persist.UserData[TOOL_STATE_VAR];
int *Tool = &persist.UserData[TOOL_VAR];
int *LastTool = &persist.UserData[LAST_TOOL_VAR];
double ToolTime;
// Returns Current Tool Number
int CurrentTool(void){
int ToolNum = 0;
}
if (ReadBit(140)){
return ToolNum;
}
// Moves Magazine To Specified Slot
void MoveMagazine(int tool){
int delta = tool - CurrentTool(); // how far to move
if (delta>10) delta-=20; // optimize direction
if (delta<-10) delta+=20;
printf("Moving Magazine %d Slots\n", delta);
StepMagazine(delta);
return;
}
// Moves Magazine By Specified Number Of Slots
void StepMagazine(int delta){
if (!ReadBit(???) && (Pos(2) < -100)) ????????????????
}
{
printf("Error Spindle In Invalid Position\n");
*ChangerState = T_IDLE; // go idle
} else {
int i = 0;
int dir;
if (delta > 0){
SetBit(148);
While(ReadBit(141);
if (ReadBit(141)){
ClearBit(148);
{
dir = 1;
} else {
SetBit(149);
While(ReadBit(141);
if (ReadBit(141)){
ClearBit(149);
{
dir = -1;
}
while (delta != i){
while(ReadBit(140)){
WaitNextTimeSlice();
}
while(!ReadBit(140)){
WaitNextTimeSlice();
}
i += dir;
}
ClearBit(149);
ClearBit(148);
return;
}
}
main()
{
{
/// T O O L C H A N G E R S T A R T
if (*ChangerState == T_IDLE)
{
*ChangerState = T_WORKING;
// Spindle stop
Move(3,0); // move a-axis to 0
// Move Z Axis To TOOL Position
Move(2, ZTOOLPOS);
while (!CheckDone(2)) ;
if (!chan[2].Enable) return 1;
// Wait For Z Axis To Stop Moving
while (!CheckDone(2)) ;
if (!chan[2].Enable) return 1;
if (*LastTool==0)
{
printf("Error Magazine Position Never Defined\n");
*ChangerState = T_IDLE; // go idle
return;
}
else if (*Tool > 20 || *Tool < 1)
{
printf("Invalid Tool Number %d\n",*Tool);
*ChangerState = T_IDLE; // go idle
return;
}
else if (*Tool == *LastTool)
{
printf("Requested Tool (#%d) Already In Position\n",*Tool);
*ChangerState = T_IDLE; // go idle
return;
}
else
{
// Move Magazine To Last Tool Position If Not Already There
if (CurrentTool() != *LastTool){
MoveMagazine(*LastTool);
}
// Move Magazine into position of tool slot
SetBit(144);
While(ReadBit(136);
if (ReadBit(136)){
ClearBit(144);
}
// Unclamp Tool Освободить инструмент
SetBit(145);
While(ReadBit(137);
if (ReadBit(137)){
ClearBit(145);
}
printf("tool Unclamped\n");
//Up Z-Axis
MoveRel(2,150); // 150 mm
// Wait For Z Axis To Stop Moving
while (!CheckDone(2)) ;
if (!chan[2].Enable) return 1;
// Move Magazine To Desired Tool Position
MoveMagazine(*Tool);
// Check If Current Tool Is Desired Tool
if (CurrentTool() == *Tool)
{
printf("Tool Clamp\n");
Move(2, ZTOOLPOS);
while (!CheckDone(2)) ;
if (!chan[2].Enable) return 1;
// Clamp Tool
SetBit(146);
While(ReadBit(138);
if (ReadBit(138)){
ClearBit(146);
} else {
printf("Wrong Tool Slot - %d/n", CurrentTool());
return;
}
// Move Magazine into home position
SetBit(147);
While(ReadBit(139);
if (ReadBit(139)){
ClearBit(147);
// Move Z Axis To Home Position
Move(2, ZHOME);
while (!CheckDone(2)) ;
if (!chan[2].Enable) return 1;
printf("Tool Change Complete\n");
*LastTool = *Tool; // remember where we are
*ChangerState = T_IDLE;
}
}
}
}
а как это понять по энкодеру?UAVpilot писал(а):Входы не бывают "открытый коллектор", такими бывают только выходы.
Выход может быть и "открытый коллектор" и дифференциальный одновременно.
Подключаете только A, B, Z(если требуется).Александр_ писал(а):можно его подключить туда где требуется на вход только А и В сигналы?
Ничего не сгорит, у меня маховички напрямую подключены к kflop, на трех станках, горелым не пахнет.Александр_ писал(а): В худшем случае, что-то сгорит
Прямые сигналы проинвертирует и получит недостающие.Александр_ писал(а):как на выходе он отдаст снова 4 сигнала
Покажи рельеф или нарисуй его в PaintVitalik писал(а):При обработке рельефа на пластике вылазят разные ступеньки