EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

;)
UAVpilot писал(а):Тяжело тебе будет, даже и не знаю что посоветовать...
Пробьемся,с вашей помощью.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

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

#include <stdio.h>;
main(){
int i,k,old_in;
old_in=0;
int I[12]={3,7,11,12,15,16,18,1,5,13,17,2};

for (k=0;k<12;k++){
	
	if (old_in > I[k]){
		if ( old_in >= 11 &&  old_in <14 ){
			if (I[k] <11){
				printf("slowdown 11\n" );
			}
			printf("pause0.5  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else  if (old_in >= 14 &&  old_in < 17 ){
			if(I[k] <14){
				printf("slowdown  14\n");
			}
			if (I[k] <11) {
				printf("slowdown 11\n");
			}
			printf("pause0.6  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else  if (old_in >= 17 ){
			if (I[k] <17){
				printf("slowdown  17\n");
			}
			if (I[k] <14) {
				printf("slowdown 14\n");
				}
			printf("slowdown 11\n");
			printf("pause0.6  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else {
			printf ("not acceleration %d\n", I[k]);
			old_in = I[k];
		}
		}
	printf ("---------------------------------------------\n");
	//+++++++++++++++++++++++++++-+++++++++++++++++++++++++++++++++
	
		if (I[k] >= 11 &&  I[k] < 14 ){
			if (old_in<11){
				printf("accel 11\n" );
			}
			printf("pause0.5  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else  if (I[k] >= 14 &&  I[k] < 17 ){
			if(old_in <11){
				printf("accel 11\n");
			}
			if (old_in<14) {
				printf("accel 14\n");
			}
			printf("pause0.6  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else  if (I[k] >= 17 ){
			if (old_in<11){
				printf("accel 11\n");
			}
			if (old_in<14) {
				printf("accel 14\n");
				}
			printf("accel 17\n");
			printf("pause0.6  \n" );
			printf("input= %d\n",I[k]); 
			old_in = I[k];
		}
		else {
			printf ("not acceleration %d\n", I[k]);
			old_in = I[k];
		}
	printf ("---------------------------------------------\n");
}
}
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

это примерно то,что ты описывал,с разгоном и торможением...
переписать это в полноценный компонент и прверить - тут емс надобен))
только завтра вечером ;)
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

int n;
printf("\nВведите ступень:");
scanf("%d",&n);
k=n;
I[k]=n;
Вот добавил ввод с клавиатуры,так можно проверять?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

попробовал в виде компонента...
надо дорасставлять задержки...
пока "работает" только переход туда-сюда через "11"

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

component accel "1516F1";
/* sudo halcompile --install accel.comp */
pin in s32 in ;
pin out s32 out ;
pin out bit tstart ;
pin in bit tstop ;
pin out s32 old ;
function _;

license "GPL";
variable int  old_in = 0;
;;
FUNCTION(_) {

 old =  old_in;
if (old_in > in){
  if ( old_in >= 11 &&  old_in <14 ){
     if (in < 11){
        out = 11;
//------------------------func_pause()
     tstart = 1;
     if (tstop==1){

       out = in;
       old_in = in;
       tstart = 0;
       return ;
       }
     else{
       return ;
     }
//======================= 
} 
       out = in;
       old_in = in;   
  }
  else  if (old_in >= 14 &&  old_in < 17 ){
     if(in < 14){
        out = 14; 
     }
     if (in < 11) {
//------------------------func_pause()
     tstart = 1;
     if (tstop==1){

       out = 11;

       tstart = 0;

       }
     else{
       return ;
     }
//===========================
     }
//------------------------func_pause()
     tstart = 1;
     if (tstop==1){

       out = in;
       old_in = in;
       tstart = 0;
       return ;
       }
     else{
       return ;
     }
//=======================
  }
  else  if (old_in >= 17 ){
     if (in <17){
        out = 17;
     }
     if (in <14) {
        out = 14;
     }
     out = 11;
     //pause(1); 
     out = in; 
     old_in = in;
  }
  else {
     out =  in;
     old_in = in;
  }
}
//+++++++++++++++++++++++++++
  if (in >= 11 &&  in < 14 ){
     if (old_in<11){
        out = 11;
//------------------------func_pause()
     tstart = 1;
     if (tstop==1){

       out = in;
       old_in = in;
       tstart = 0;
       return ;
       }
     else{
       return ;
     }
//=======================         
     }
     out = in; 
     old_in = in;
  }
  else  if (in >= 14 &&  in < 17 ){
     if(old_in <11){
        out = 11;
     }
     if (old_in<14) {
        out = 14;
     }
     //pause(1);
     out = in; 
     old_in = in;
  }
  else  if (in >= 17 ){
     if (old_in<11){
        out = 11;
     }
     if (old_in<14) {
        out = 14;
     }
     out = 17;
     //pause(1);
     out = in; 
     old_in = in;
  }
  else {
     out = in;
     old_in = in;
}

}

3.rar
(4.88 КБ) 265 скачиваний
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

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

/* sudo halcompile --install accel.comp */
component accel "1516F1";

pin in s32 in ;
pin out s32 out ;
pin out bit tstart ;
pin  in bit tstop ;
pin in  bit tstop1 ;
pin out bit tstart1 ;
pin in  bit tstop2 ;
pin out bit tstart2 ;

function _;
license "GPL";
variable int  old_in = 0;
;;
FUNCTION(_) {
if (old_in > in){
  if ( old_in >= 11 &&  old_in <14 ){
     if (in < 11){
        out = 11;
//------------------------func_pause()
        tstart = 1;
        if (tstop==1){
          out = in;
          old_in = in;
          tstart = 0;
          return ;
        }
        else{
          return ;
        }
//======================= 
      } 
       out = in;
       old_in = in;   
  }
  else  if (old_in >= 14 &&  old_in < 17 ){
     if(in < 14){
        out = 14;
//------------------------func_pause()
        tstart1 = 1;                      
        if (tstop1==1){
          out = 11;
          old_in = 11;
          tstart1 = 0;
          return ;
        }
        else{
          return ;
        }
//=======================          
     }
     out = in;
     old_in = in; 
  }
  else  if (old_in >= 17 ){
     if (in <17){
        out = 17;
//------------------------func_pause()
        tstart2 = 1;                      
        if (tstop2==1){
          out = 11;
          old_in = 14;
          tstart2 = 0;
          return ;
        }
        else{
          return ;
        }
//=======================          
    }
    out =  in;
    old_in = in;
  } 
  else {
     out = in;
     old_in = in;
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (in > old_in){
  if (in >= 11 &&  in < 14 ){
     if (old_in<11){
        out = 11;
//------------------------func_pause()
        tstart = 1;
     if (tstop==1){

       out = in;
       old_in = in;
       tstart = 0;
       return ;
       }
     else{
       return ;
     }
//=======================         
     }
     out = in; 
     old_in = in;
  }
  else  if (in >= 14 &&  in < 17 ){
     if(old_in <11){
        out = 11;
//------------------------func_pause()
        tstart1 = 1;
                      
        if (tstop1==1){

          out = 11;
          old_in = 12;
          tstart1 = 0;
          return ;
        }
        else{
          return ;
        }
//=======================         
     }
     if (old_in<14 && old_in>11) {
        out = 14;
//------------------------func_pause()
        tstart = 1;                      
        if (tstop==1){
          out = in;
          old_in = in;
          tstart = 0;
          return ;
        }
        else{
          return ;
        }
//=======================        
     }
     out = in; 
     old_in = in;
  }
  else  if (in >= 17 ){
     if (old_in<11){
        out = 11;
//------------------------func_pause()
        tstart = 1;                      
        if (tstop==1){
          out = 11;
          old_in = 12;
          tstart = 0;
          return ;
        }
        else{
          return ;
        }
//=======================         
     }
     if (old_in<14 && old_in>11) {
        out = 14;
//------------------------func_pause()
        tstart1 = 1;                      
        if (tstop1==1){
          out = 14;
          old_in = 15;
          tstart1 = 0;
          return ;
        }
        else{
          return ;
        }
//======================= 
     }
     if (old_in>14) {
        out = 17;
//------------------------func_pause()
        tstart2 = 1;                      
        if (tstop2==1){
          out = in;
          old_in = in;
          tstart2 = 0;
          return ;
        }
        else{
          return ;
        }
//======================= 
     }     
     out = in; 
     old_in = in;
  }
  else {
     out = in;
     old_in = in;
  }
}
}

так вроде работают все ступени
задержка в хал файле стоит 4 секунды , для отладки
код для задержки(выделенный) оформить бы в функцию полноценную... ;)
Вложения
4.rar
(1.28 КБ) 262 скачивания
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

nkp писал(а):код для задержки(выделенный) оформить бы в функцию полноценную...
Попробую вечером.
А чем отличается в хал или в функции?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

Валерий писал(а):А чем отличается в хал или в функции?
тут я вот о чем:
в компоненте много повторяющегося кода( почти одни и те же строки для паузы)
вот их можно оформить в функцию и вызывать одной строкой...
код станет чуть посжатей ;)
а так на работу не влияет - только визуальное восприятие , читаемость ...
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

{
int x;
for (x=0 ; x<1000000 ; x++) ;
}
Так можно? Как оформить?
Как мы рассчитаем задержку,от чего она будет зависеть,не только от переменной Х ?
Последний раз редактировалось Валерий 19 сен 2016, 17:23, всего редактировалось 1 раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Serg »

Валерий писал(а):Так можно?
Так нельзя. Пока будет работать этот цикл весь HAL будет стоять и ждать, в том числе и всякие PID'ы.

P.S. Да и компилятор C соптимизит этот код в ничто.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

А сишную библиотеку нельзя использовать?
Файл 3.xml ты по правил,пока не разберусь как табло сделать
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

Валерий писал(а):Так можно? Как оформить?Как мы рассчитаем задержку,от чего она будет зависеть,не только от переменной Х ?
`
не знаю - зачем это тебе...
в том коде ,который я привел выше,задержки уже есть...
они выставляются в хал файле(я тоже его прикрепил) вот этими строками:

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

setp timedelay.0.on-delay  4
setp timedelay.1.on-delay  4
setp timedelay.2.on-delay  4
это ,скажем так,таймеры,в данном случае они выставлены на 4 секунды...
надо по 0.5с - пропиши так:

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

setp timedelay.0.on-delay  0.5
setp timedelay.1.on-delay  0.5
setp timedelay.2.on-delay  0.5
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

Валерий писал(а):Файл 3.xml ты по правил,
Это я понял.Ты пр функцию говорил
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

Валерий писал(а):Ты пр функцию говорил
забей ;)
вот панель:
3.xml.rar
(504 байт) 255 скачиваний
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

Ок.

Кнопка on как я понял не подключина,
Кнпки пуск ,стоп, и т.д. подключать в ладере или hal?
И на другие координаты писать другой компонент также, или в этом же?
Вложения
Снимок.png (1226 просмотров) <a class='original' href='./download/file.php?id=90570&mode=view' target=_blank>Загрузить оригинал (261.2 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

Валерий писал(а):И на другие координаты писать другой компонент также, или в этом же?
число компонентов устанавливается в хал:

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

loadrt accel count=3
addf accel.0 servo-thread
addf accel.1 servo-thread
addf accel.2 servo-thread
это загружены три экземпляра компонента accel
Выделение_054.png (1223 просмотра) <a class='original' href='./download/file.php?id=90571&mode=view' target=_blank>Загрузить оригинал (162.3 КБ)</a>
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

Но там другая логика включени муфт,и муфт там не 10 а 15.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение nkp »

Валерий писал(а):Но там другая логика включени муфт,и муфт там не 10 а 15.
ну,очевидно,нужно написать подобное ,сообразно логике работы... :)
Валерий
Мастер
Сообщения: 241
Зарегистрирован: 21 июл 2013, 21:01
Репутация: 2
Контактная информация:

Re: EMC2+1516Ф1 с эл.магн. муфтами коробки скоростей и подач

Сообщение Валерий »

Валерий писал(а):Кнопка on как я понял не подключина,
Кнпки пуск ,стоп, и т.д. подключать в ладере или hal?
Как лучше?
Ответить

Вернуться в «LinuxCNC»