Страница 3 из 70

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 03 ноя 2014, 18:25
konstantinshr
Да номера пинов соответствуют. Я так понял добавить скобки. Попробую.

То что стол попортил не страшно-черновой. Просто выяснил что Естоп надо не просто нажать а и подержать немного :thinking:
В противном случае оси останавливаются но сигнал анейбл не пропадает. А у меня есть небольшое паразитное напряжение и оси понемногу начинают ползти.
Может надо паузу какую то прописать чтобы хватало кратковременного нажатия Естоп.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 03 ноя 2014, 19:16
PKM
konstantinshr писал(а):В противном случае оси останавливаются но сигнал анейбл не пропадает. А у меня есть небольшое паразитное напряжение и оси понемногу начинают ползти.
Странно, то есть ПИД отключается без выключения привода? Это недопустимо.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 09 ноя 2014, 08:51
ukr-sasha
konstantinshr писал(а):Сделал как в примере чтобы при отключении оси останавливался шпиндель.
Еще раз перечитал вопрос и не понял о каком отключении идет речь: если о физическом, то реакции и не должно быть, а если о программном отключении в КmotionCNC, то странно, у меня всё работает.
PKM писал(а):Странно, то есть ПИД отключается без выключения привода? Это недопустимо.
Код выше, как раз и должен отключать сигнал S-On если ПИД отключился, т.е. ось выключена программно.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 09 ноя 2014, 22:22
konstantinshr
Что то у меня не так с файлом инициализации.
Сразу после инициализации работает и Естоп и останов в результате отключения осей. Но после какого то времени контролер перестает реагировать на кнопки стопа.
Файл инициализации :
(для просмотра содержимого нажмите на ссылку)
#include "KMotionDef.h"

#define QA 26 // define to which IO bits the AB signals are connected
#define QB 27

main()
{
int BitA,Change1=0,Change2=0, DiffX2;
int PosNoWrap, NewPos, Pos=0, wraps;
double Factor=0;

SetBit(152);
SetBit(157);
SetBit(158);
SetBit(159);


ch0->InputMode=ENCODER_MODE;
ch0->OutputMode=DAC_SERVO_MODE;
ch0->Vel=309600;
ch0->Accel=5e+006;
ch0->Jerk=3e+006;
ch0->P=2.2;
ch0->I=0.006;
ch0->D=10;
ch0->FFAccel=0;
ch0->FFVel=0;
ch0->MaxI=2047;
ch0->MaxErr=1e+006;
ch0->MaxOutput=2047;
ch0->DeadBandGain=1;
ch0->DeadBandRange=0;
ch0->InputChan0=0;
ch0->InputChan1=0;
ch0->OutputChan0=0;
ch0->OutputChan1=0;
ch0->MasterAxis=-1;
ch0->LimitSwitchOptions=0x100;
ch0->LimitSwitchNegBit=0;
ch0->LimitSwitchPosBit=0;
ch0->SoftLimitPos=1e+009;
ch0->SoftLimitNeg=-1e+009;
ch0->InputGain0=-1;
ch0->InputGain1=1;
ch0->InputOffset0=0;
ch0->InputOffset1=0;
ch0->OutputGain=1;
ch0->OutputOffset=0;
ch0->SlaveGain=1;
ch0->BacklashMode=BACKLASH_OFF;
ch0->BacklashAmount=0;
ch0->BacklashRate=0;
ch0->invDistPerCycle=0.00025;
ch0->Lead=0;
ch0->MaxFollowingError=1000;
ch0->StepperAmplitude=100;

ch0->iir[0].B0=1;
ch0->iir[0].B1=0;
ch0->iir[0].B2=0;
ch0->iir[0].A1=0;
ch0->iir[0].A2=0;

ch0->iir[1].B0=1;
ch0->iir[1].B1=0;
ch0->iir[1].B2=0;
ch0->iir[1].A1=0;
ch0->iir[1].A2=0;

ch0->iir[2].B0=1;
ch0->iir[2].B1=0;
ch0->iir[2].B2=0;
ch0->iir[2].A1=0;
ch0->iir[2].A2=0;

ch1->InputMode=ENCODER_MODE;
ch1->OutputMode=DAC_SERVO_MODE;
ch1->Vel=309600;
ch1->Accel=1e+006;
ch1->Jerk=2e+006;
ch1->P=2.65;
ch1->I=0.003;
ch1->D=10;
ch1->FFAccel=0;
ch1->FFVel=0;
ch1->MaxI=2047;
ch1->MaxErr=1e+006;
ch1->MaxOutput=2047;
ch1->DeadBandGain=1;
ch1->DeadBandRange=0;
ch1->InputChan0=1;
ch1->InputChan1=1;
ch1->OutputChan0=1;
ch1->OutputChan1=1;
ch1->MasterAxis=-1;
ch1->LimitSwitchOptions=0x110;
ch1->LimitSwitchNegBit=0;
ch1->LimitSwitchPosBit=0;
ch1->SoftLimitPos=1e+009;
ch1->SoftLimitNeg=-1e+009;
ch1->InputGain0=1;
ch1->InputGain1=1;
ch1->InputOffset0=0;
ch1->InputOffset1=0;
ch1->OutputGain=1;
ch1->OutputOffset=0;
ch1->SlaveGain=1;
ch1->BacklashMode=BACKLASH_OFF;
ch1->BacklashAmount=0;
ch1->BacklashRate=0;
ch1->invDistPerCycle=0.00025;
ch1->Lead=0;
ch1->MaxFollowingError=1000;
ch1->StepperAmplitude=100;

ch1->iir[0].B0=1;
ch1->iir[0].B1=0;
ch1->iir[0].B2=0;
ch1->iir[0].A1=0;
ch1->iir[0].A2=0;

ch1->iir[1].B0=1;
ch1->iir[1].B1=0;
ch1->iir[1].B2=0;
ch1->iir[1].A1=0;
ch1->iir[1].A2=0;

ch1->iir[2].B0=1;
ch1->iir[2].B1=0;
ch1->iir[2].B2=0;
ch1->iir[2].A1=0;
ch1->iir[2].A2=0;

ch2->InputMode=ENCODER_MODE;
ch2->OutputMode=DAC_SERVO_MODE;
ch2->Vel=409600;
ch2->Accel=1e+006;
ch2->Jerk=1e+007;
ch2->P=1.1;
ch2->I=0.004;
ch2->D=0;
ch2->FFAccel=0;
ch2->FFVel=0;
ch2->MaxI=2047;
ch2->MaxErr=1e+006;
ch2->MaxOutput=2047;
ch2->DeadBandGain=1;
ch2->DeadBandRange=0;
ch2->InputChan0=2;
ch2->InputChan1=2;
ch2->OutputChan0=2;
ch2->OutputChan1=2;
ch2->MasterAxis=-1;
ch2->LimitSwitchOptions=0x112;
ch2->LimitSwitchNegBit=0;
ch2->LimitSwitchPosBit=138;
ch2->SoftLimitPos=1e+009;
ch2->SoftLimitNeg=-1e+009;
ch2->InputGain0=1;
ch2->InputGain1=1;
ch2->InputOffset0=0;
ch2->InputOffset1=0;
ch2->OutputGain=1;
ch2->OutputOffset=0;
ch2->SlaveGain=1;
ch2->BacklashMode=BACKLASH_OFF;
ch2->BacklashAmount=0;
ch2->BacklashRate=0;
ch2->invDistPerCycle=0.00025;
ch2->Lead=0;
ch2->MaxFollowingError=1000;
ch2->StepperAmplitude=100;

ch2->iir[0].B0=1;
ch2->iir[0].B1=0;
ch2->iir[0].B2=0;
ch2->iir[0].A1=0;
ch2->iir[0].A2=0;

ch2->iir[1].B0=1;
ch2->iir[1].B1=0;
ch2->iir[1].B2=0;
ch2->iir[1].A1=0;
ch2->iir[1].A2=0;

ch2->iir[2].B0=1;
ch2->iir[2].B1=0;
ch2->iir[2].B2=0;
ch2->iir[2].A1=0;
ch2->iir[2].A2=0;

ch3->InputMode=ENCODER_MODE;
ch3->OutputMode=DAC_SERVO_MODE;
ch3->Vel=209600;
ch3->Accel=1e+007;
ch3->Jerk=1e+007;
ch3->P=4.1;
ch3->I=0.0006;
ch3->D=10;
ch3->FFAccel=0;
ch3->FFVel=0;
ch3->MaxI=2047;
ch3->MaxErr=1e+006;
ch3->MaxOutput=2047;
ch3->DeadBandGain=1;
ch3->DeadBandRange=0;
ch3->InputChan0=3;
ch3->InputChan1=3;
ch3->OutputChan0=3;
ch3->OutputChan1=3;
ch3->MasterAxis=-1;
ch3->LimitSwitchOptions=0x110;
ch3->LimitSwitchNegBit=0;
ch3->LimitSwitchPosBit=0;
ch3->SoftLimitPos=1e+009;
ch3->SoftLimitNeg=-1e+009;
ch3->InputGain0=1;
ch3->InputGain1=1;
ch3->InputOffset0=0;
ch3->InputOffset1=0;
ch3->OutputGain=1;
ch3->OutputOffset=0;
ch3->SlaveGain=1;
ch3->BacklashMode=BACKLASH_OFF;
ch3->BacklashAmount=0;
ch3->BacklashRate=0;
ch3->invDistPerCycle=0.00025;
ch3->Lead=0;
ch3->MaxFollowingError=1000;
ch3->StepperAmplitude=100;

ch3->iir[0].B0=1;
ch3->iir[0].B1=0;
ch3->iir[0].B2=0;
ch3->iir[0].A1=0;
ch3->iir[0].A2=0;

ch3->iir[1].B0=1;
ch3->iir[1].B1=0;
ch3->iir[1].B2=0;
ch3->iir[1].A1=0;
ch3->iir[1].A2=0;

ch3->iir[2].B0=1;
ch3->iir[2].B1=0;
ch3->iir[2].B2=0;
ch3->iir[2].A1=0;
ch3->iir[2].A2=0;


EnableAxis(0);
EnableAxis(1);
EnableAxis(2);
EnableAxis(3);

DefineCoordSystem(0,1,2,3);

SetBitDirection(144,1);

for (;;) //loop forever


{
WaitNextTimeSlice();
if (ch0->Enable && ch1->Enable && ch2->Enable && ch3->Enable)
SetBit(144);
else
{
ClearBit(144);
DAC(7,0); // остановить шпиндель, установив напряжение в 0
ClearBit(145); // отключить шпиндель, разомкнув выход 145
}


// Handle ESTOP

if (!ReadBit(141)); // ожидание срабатывания датчика по Z- пин 139 - пропадание сигнала \

else
{
DAC(7,0); // остановить шпиндель, установив напряжение в 0
ClearBit(145); // отключить шпиндель, разомкнув выход 145
ClearBit(144);
}
}

return 0;
}


Еще использую файл коррекции длины инструмента:


#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()
{
Jog(2,-10403); // перемещение оси Z в отрицательном направлении на скорости 10% от максимальной 10403имп/сек
while (!ReadBit(139)) ; // ожидание срабатывания датчика по Z- пин 139 - пропадание сигнала
Jog(2,0); // остановка оси Z
Jog(2,800); // перемещение оси Z в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(38)) ; // ожидание срабатывания индексной метки по Z- пин 38 - появление сигнала
Jog(2,0); // остановка оси Z
Jog(2,-800); // ехать вниз на скорости 400 имп/сек
while (!ReadBit(139)) ; // пока не не изменится состояние пин 20
Zero(2); // обнуление координаты оси Z
Jog(2,0);
DisableAxis(2); // отключить ось Z
ch2->Position=81920;
EnableAxisDest(2,81920); //включить ось Z с начальным значением 81920 имп

И поиск нуля оси А:

#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()
{
Jog(2,-10403); // перемещение оси Z в отрицательном направлении на скорости 10% от максимальной 10403имп/сек
while (!ReadBit(139)) ; // ожидание срабатывания датчика по Z- пин 139 - пропадание сигнала
Jog(2,0); // остановка оси Z
Jog(2,800); // перемещение оси Z в положительном направлении на скорости 5% от максимальной 204800 имп/сек
while (!ReadBit(38)) ; // ожидание срабатывания индексной метки по Z- пин 38 - появление сигнала
Jog(2,0); // остановка оси Z
Jog(2,-800); // ехать вниз на скорости 400 имп/сек
while (!ReadBit(139)) ; // пока не не изменится состояние пин 20
Zero(2); // обнуление координаты оси Z
Jog(2,0);
DisableAxis(2); // отключить ось Z
ch2->Position=81920;
EnableAxisDest(2,81920); //включить ось Z с начальным значением 81920 имп
Может где то эти программы зацыкливаюся. Потому что при остановке программы на паузу и отводе осей в сторону и потом продолжении программы она выполняется с прерываниями. Ось разгоняется тормозит и снова разгоняется на прямых участках.

Не знаю как спрятать текст под прокрутку поэтому получилось так много и текст сделал больше чтобы разграничить.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 09 ноя 2014, 23:13
michael-yurov
Не знаю, как организовано у тебя, но нужно смотреть, в каком потоке когда какая программа выполняется.
Если две или более разных программ одновременно выполняются в разных потоках - нужно быть уверенным, что они никак не мешают друг другу и не выполняют противоречивых действий.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 09 ноя 2014, 23:32
ukr-sasha
konstantinshr писал(а):в результате отключения осей.
Какого отключения?
konstantinshr писал(а):#define QA 26 // define to which IO bits the AB signals are connected
#define QB 27

main()
{
int BitA,Change1=0,Change2=0, DiffX2;
int PosNoWrap, NewPos, Pos=0, wraps;
double Factor=0;
Этот код зачем?
konstantinshr писал(а):SetBit(152);
SetBit(157);
SetBit(158);
SetBit(159);
Что включается?
konstantinshr писал(а):// Handle ESTOP

if (!ReadBit(141)); // ожидание срабатывания датчика по Z- пин 139 - пропадание сигнала \
Ждете пропадание сигнала или появление?
konstantinshr писал(а):И поиск нуля оси А:
Я увидел код по оси Зет.

И схему соединений бы не помешало. А то гадание на кофейной гуще получается...

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 09 ноя 2014, 23:49
konstantinshr
michael-yurov писал(а):Не знаю, как организовано у тебя, но нужно смотреть, в каком потоке когда какая программа выполняется.
Если две или более разных программ одновременно выполняются в разных потоках - нужно быть уверенным, что они никак не мешают друг другу и не выполняют противоречивых действий.
Я делаю инициализацию затем запускаю программу ноль инструмента и пускаю УП. Получается поиск нуля где то висит в контролере? В чера вообще вылез косяк. Делал простейшую про6рамму фрещерования поверхности и вручную пускал шпиндель. Так при нажатии М3 дергалась ось Х и контролер выпадал в ошибку. Помогло только снятие питания с контролера.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 00:02
michael-yurov
konstantinshr писал(а):Я делаю инициализацию затем запускаю программу ноль инструмента и пускаю УП.
Вот уже обманываешь - у тебя в конце файла инициализации бесконечный цикл: for (;;) //loop forever
Так что программа инициализации у тебя никогда не заканчивается. Она будет выполнятся постоянно (висеть) в том потоке, в котором ты ее запустил.
Если при этом запустить программу "ноль инструмента" в том же потоке - программа инициализации будет остановлена и туда будет записана и запущена программа "ноль инструмента".
konstantinshr писал(а):В чера вообще вылез косяк. Делал простейшую про6рамму фрещерования поверхности и вручную пускал шпиндель. Так при нажатии М3 дергалась ось Х и контролер выпадал в ошибку. Помогло только снятие питания с контролера.
Очень похоже на проблемы с помехами от шпинделя.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 00:09
ukr-sasha
konstantinshr писал(а):Что то у меня не так с файлом инициализации...
Делайте скрины настроек программ и схему подключений.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 09:43
konstantinshr
michael-yurov писал(а): Вот уже обманываешь - у тебя в конце файла инициализации бесконечный цикл: for (;;) //loop forever
Так что программа инициализации у тебя никогда не заканчивается. Она будет выполнятся постоянно (висеть) в том потоке, в котором ты ее запустил.
Если при этом запустить программу "ноль инструмента" в том же потоке - программа инициализации будет остановлена и туда будет записана и запущена программа "ноль инструмента".
Бесконечный цикл я делал по рекомендациям этой темы. Да и все подключения как для kanaloga. Получается после выполнения программы "ноль инструмента" цикл прервался. Может тогда циклическую часть программы вынести в отдельный файл и сделать кнопку "безопасность" и запускать ее перед пуском УП. Или как то по другому, более красиво, можно решить эту проблему, чтобы при нажатии пуск одновременно запускался цикл безопасности.

Скрины настроек выложу вечером.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 11:37
michael-yurov
У KFlop-а 7 потоков для одновременного выполнения программ.
Никто не заставляет выполнять все программы в одном потоке.

Я об этом стал писать просто, чтобы обратить внимание на нетривиальный момент.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 16:11
konstantinshr
michael-yurov писал(а):У KFlop-а 7 потоков для одновременного выполнения программ.
Никто не заставляет выполнять все программы в одном потоке.
А можно объяснить как организовать выполнение программ по разным потокам

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 16:18
michael-yurov
konstantinshr писал(а):
michael-yurov писал(а):У KFlop-а 7 потоков для одновременного выполнения программ.
Никто не заставляет выполнять все программы в одном потоке.
А можно объяснить как организовать выполнение программ по разным потокам
Вот там, где ты запускаешь программу - там и указывается в настройках, в каком потоке ее запускать.
Активный поток подсвечивается зеленым (там где семь радиобоксов).
Скриншоты делать лень - придется станок включать.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 10 ноя 2014, 17:53
konstantinshr
michael-yurov писал(а):
konstantinshr писал(а):
michael-yurov писал(а):У KFlop-а 7 потоков для одновременного выполнения программ.
Никто не заставляет выполнять все программы в одном потоке.
А можно объяснить как организовать выполнение программ по разным потокам
Вот там, где ты запускаешь программу - там и указывается в настройках, в каком потоке ее запускать.
Активный поток подсвечивается зеленым (там где семь радиобоксов).
Скриншоты делать лень - придется станок включать.
Если можно сделайте скриншоты когда будет возможность. На слух воспринимается тяжеловато.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 12 ноя 2014, 19:11
konstantinshr
michael-yurov писал(а): Вот там, где ты запускаешь программу - там и указывается в настройках, в каком потоке ее запускать.
Все спасибо разобрался. Поставил "Thread" 2 и все потоки не пересекаются. А что регулирует "VAR" в той же строчкп?

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 29 ноя 2014, 08:20
AlexNikov
Доброго дня. Запускаю управление шпинделя и помпой от K-Step. Встал вопрос - схему управления реле собрал согласно мануалу:
RelaysKStep.png (5630 просмотров) <a class='original' href='./download/file.php?id=37321&mode=view' target=_blank>Загрузить оригинал (115.77 КБ)</a>
Биты для управления выходами K-step "0" и "1"? У меня реле на 12V и соответственно подано напряжение 12V, прописал на кнопку M3 - установить для битов "0" и "1" состояние "1", при нажатии на кнопку реакции нет (после прописывания действий на кнопку INIT нажимался). Я не верно прописал что-то? (при 24V тоже самое, просто подключил цешку вместо реле - всегда 1,4V на выводе 2 и 4 относительно выводов 1 и 3)

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 29 ноя 2014, 11:01
ukr-sasha
AlexNikov писал(а):при 24V тоже самое, просто подключил цешку вместо реле - всегда 1,4V на выводе 2 и 4 относительно выводов 1 и 3
Попробуйте относительно земли измерить.
Это вы падение напряжения на диоде измеряете. Там оптрон, как ключ открывается/закрывается.
AlexNikov писал(а):после прописывания действий на кнопку INIT нажимался
Код в студию.
С Кстепом дело не имел, но на вкладке пинов, есть другая нумерация.
kstep.png (5606 просмотров) <a class='original' href='./download/file.php?id=37325&mode=view' target=_blank>Загрузить оригинал (63.55 КБ)</a>

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 29 ноя 2014, 11:07
AlexNikov
ukr-sasha писал(а):
AlexNikov писал(а):при 24V тоже самое, просто подключил цешку вместо реле - всегда 1,4V на выводе 2 и 4 относительно выводов 1 и 3
Попробуйте относительно земли измерить.
Это вы падение напряжения на диоде измеряете. Там оптрон, как ключ открывается/закрывается.
AlexNikov писал(а):после прописывания действий на кнопку INIT нажимался
Код в студию.
С Кстепом дело не имел, но на вкладке пинов, есть другая нумерация.
Вложение kstep.png больше недоступно
Относительно 0V на выводах 1 и 3 +12V, на выводах 2 и 4 0V. Насколько я понимаю при активации нужных битов, на выходах 2 и 4 так же должно быть 12V, т.к. транзисторный ключ будет открыт током опто-транзистора в оптопаре, приложенным к базе ключа.

Вот код:

Код: Выделить всё

#include "KMotionDef.h"

// Defines axis 0, 1, 2 as simple step dir TTL outputs for KSTEP
// enables them
// sets them as an xyz coordinate system for GCode

int main() 
{
	double T0, LastX=0, LastY=0, LastZ=0, Tau;
	
	KStepPresent=TRUE;      // enable KSTEP input multiplexing
	FPGA(KAN_TRIG_REG)=4;  	// Mux PWM0 to JP7 Pin5 IO 44 for KSTEP 

	FPGA(STEP_PULSE_LENGTH_ADD) = 63 + 0x80;  // set polarity and pulse length to 4us
	
	ch0->InputMode=NO_INPUT_MODE;
	ch0->OutputMode=STEP_DIR_MODE;
	ch0->Vel=40000;
	ch0->Accel=200000;
	ch0->Jerk=4e+006;
	ch0->P=0;
	ch0->I=0.01;
	ch0->D=0;
	ch0->FFAccel=0;
	ch0->FFVel=0;
	ch0->MaxI=200;
	ch0->MaxErr=1e+006;
	ch0->MaxOutput=200;
	ch0->DeadBandGain=1;
	ch0->DeadBandRange=0;
	ch0->InputChan0=0;
	ch0->InputChan1=0;
	ch0->OutputChan0=8;
	ch0->OutputChan1=0;
	ch0->MasterAxis=-1;
	ch0->LimitSwitchOptions=0x123;
	ch0->LimitSwitchNegBit=169;
	ch0->LimitSwitchPosBit=168;
	ch0->SoftLimitPos=1e+009;
	ch0->SoftLimitNeg=-1e+009;
	ch0->InputGain0=1;
	ch0->InputGain1=1;
	ch0->InputOffset0=0;
	ch0->InputOffset1=0;
	ch0->OutputGain=1;
	ch0->OutputOffset=0;
	ch0->SlaveGain=1;
	ch0->BacklashMode=BACKLASH_OFF;
	ch0->BacklashAmount=0;
	ch0->BacklashRate=0;
	ch0->invDistPerCycle=1;
	ch0->Lead=0;
	ch0->MaxFollowingError=1000000000;
	ch0->StepperAmplitude=20;

	ch0->iir[0].B0=1;
	ch0->iir[0].B1=0;
	ch0->iir[0].B2=0;
	ch0->iir[0].A1=0;
	ch0->iir[0].A2=0;

	ch0->iir[1].B0=1;
	ch0->iir[1].B1=0;
	ch0->iir[1].B2=0;
	ch0->iir[1].A1=0;
	ch0->iir[1].A2=0;

	ch0->iir[2].B0=0.000769;
	ch0->iir[2].B1=0.001538;
	ch0->iir[2].B2=0.000769;
	ch0->iir[2].A1=1.92076;
	ch0->iir[2].A2=-0.923833;
    EnableAxisDest(0,0);

	ch1->InputMode=NO_INPUT_MODE;
	ch1->OutputMode=STEP_DIR_MODE;
	ch1->Vel=40000;
	ch1->Accel=200000;
	ch1->Jerk=4e+006;
	ch1->P=0;
	ch1->I=0.01;
	ch1->D=0;
	ch1->FFAccel=0;
	ch1->FFVel=0;
	ch1->MaxI=200;
	ch1->MaxErr=1e+006;
	ch1->MaxOutput=200;
	ch1->DeadBandGain=1;
	ch1->DeadBandRange=0;
	ch1->InputChan0=0;
	ch1->InputChan1=0;
	ch1->OutputChan0=9;
	ch1->OutputChan1=0;
	ch1->MasterAxis=-1;
	ch1->LimitSwitchOptions=0x123;
	ch1->LimitSwitchNegBit=171;
	ch1->LimitSwitchPosBit=170;
	ch1->SoftLimitPos=1e+009;
	ch1->SoftLimitNeg=-1e+009;
	ch1->InputGain0=1;
	ch1->InputGain1=1;
	ch1->InputOffset0=0;
	ch1->InputOffset1=0;
	ch1->OutputGain=1;
	ch1->OutputOffset=0;
	ch1->SlaveGain=1;
	ch1->BacklashMode=BACKLASH_OFF;
	ch1->BacklashAmount=0;
	ch1->BacklashRate=0;
	ch1->invDistPerCycle=1;
	ch1->Lead=0;
	ch1->MaxFollowingError=1000000000;
	ch1->StepperAmplitude=20;

	ch1->iir[0].B0=1;
	ch1->iir[0].B1=0;
	ch1->iir[0].B2=0;
	ch1->iir[0].A1=0;
	ch1->iir[0].A2=0;

	ch1->iir[1].B0=1;
	ch1->iir[1].B1=0;
	ch1->iir[1].B2=0;
	ch1->iir[1].A1=0;
	ch1->iir[1].A2=0;

	ch1->iir[2].B0=0.000769;
	ch1->iir[2].B1=0.001538;
	ch1->iir[2].B2=0.000769;
	ch1->iir[2].A1=1.92076;
	ch1->iir[2].A2=-0.923833;
    EnableAxisDest(1,0);

	ch2->InputMode=NO_INPUT_MODE;
	ch2->OutputMode=STEP_DIR_MODE;
	ch2->Vel=40000;
	ch2->Accel=200000;
	ch2->Jerk=4e+006;
	ch2->P=0;
	ch2->I=0.01;
	ch2->D=0;
	ch2->FFAccel=0;
	ch2->FFVel=0;
	ch2->MaxI=200;
	ch2->MaxErr=1e+006;
	ch2->MaxOutput=200;
	ch2->DeadBandGain=1;
	ch2->DeadBandRange=0;
	ch2->InputChan0=0;
	ch2->InputChan1=0;
	ch2->OutputChan0=10;
	ch2->OutputChan1=0;
	ch2->MasterAxis=-1;
	ch2->LimitSwitchOptions=0x122;
	ch2->LimitSwitchNegBit=173;
	ch2->LimitSwitchPosBit=172;
	ch2->SoftLimitPos=1e+009;
	ch2->SoftLimitNeg=-1e+009;
	ch2->InputGain0=1;
	ch2->InputGain1=1;
	ch2->InputOffset0=0;
	ch2->InputOffset1=0;
	ch2->OutputGain=-1;
	ch2->OutputOffset=0;
	ch2->SlaveGain=1;
	ch2->BacklashMode=BACKLASH_OFF;
	ch2->BacklashAmount=0;
	ch2->BacklashRate=0;
	ch2->invDistPerCycle=1;
	ch2->Lead=0;
	ch2->MaxFollowingError=1000000000;
	ch2->StepperAmplitude=20;

	ch2->iir[0].B0=1;
	ch2->iir[0].B1=0;
	ch2->iir[0].B2=0;
	ch2->iir[0].A1=0;
	ch2->iir[0].A2=0;

	ch2->iir[1].B0=1;
	ch2->iir[1].B1=0;
	ch2->iir[1].B2=0;
	ch2->iir[1].A1=0;
	ch2->iir[1].A2=0;

	ch2->iir[2].B0=1;
	ch2->iir[2].B1=0;
	ch2->iir[2].B2=0;
	ch2->iir[2].A1=0;
	ch2->iir[2].A2=0;
	EnableAxisDest(2,0);

	DefineCoordSystem(0,1,2,-1);
	
	SetBitDirection(45,1);  // set Enable Signal as Output
	SetBit(45);				// Enable the amplifiers
	
//  Add a small amount of Coordinated Motion Path smoothing if desired
//	Tau = 0.001;  // seconds for Low Pass Filter Time Constant
//	KLP = exp(-TIMEBASE/Tau);
	KLP=0; // force to 0 to disable
//	printf("Tau=%f KLP=%f\n",Tau,KLP);
	
	
	for (;;) // loop forever
	{
		WaitNextTimeSlice();
		
		// Service Amplifier disable after no activity for a while
		if (ch0->Dest != LastX || ch1->Dest != LastY || ch2->Dest != LastZ)
		{
			// we moved - enable KStep Amplifers
			SetBit(45);
			T0 = Time_sec();  // record the time and position of last motion
			LastX=ch0->Dest;
			LastY=ch1->Dest;
			LastZ=ch2->Dest; 
		}
		else
		{
			if (Time_sec() > T0 + 10.0) ClearBit(45);
		}
	}

    return 0;
}
Пины 168-183, это пины для входных сигналов:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 29 ноя 2014, 11:54
ukr-sasha
AlexNikov писал(а):Относительно 0V на выводах 1 и 3 +12V, на выводах 2 и 4 0V. Насколько я понимаю при активации нужных битов, на выходах 2 и 4 так же должно быть 12V, т.к. транзисторный ключ будет открыт током опто-транзистора в оптопаре, приложенным к базе ключа.
Верно.

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Добавлено: 29 ноя 2014, 12:01
AlexNikov
В настройках KMotion прописал управление пинами так:
M3-M4.png
M3-M4.png (5.97 КБ) 5588 просмотров
Вроде все верно. Но реакции нет. :( Номера битов судя по мануалу "0" и "1" :thinking: