User Tools

Site Tools


plc:software_plc_examples

Software PLC examples

Endless loop for G-code program

Endless loop can be made in Software PLC procedure. PLC procedure contains endless loop. In the loop it checks current status of myCNC controller, if controller is in Idle mode and ready to run new program, it reloads G-code file (if needed), reset current program pointer and start running g-code.

PLC code is -

ENDLESS.plc
main()
{
 
 do
 {
   do{ a=gvarget(6065); }while(a!=0);	 //wait Motion Controller ready to accept new program
   gvarset(100001,1);	                 //Reset G-code pointer to start
   timer=5; do{ timer--;}while(timer>0); //0.5 sec Pause
   gvarset(100002,1);	                 //Start G-code
 }while(1);              //endless loop
 
 exit(99);
};

If Stop button pressed, g-code will be stopped, procedure will see Motion controller is ready for next loop entry and restart g-code again. This behavious can be inappropriate for many applications.

Simple solution is to add global variable single/auto and check this variable in the loop.

NOT_ENDLESS.plc
main()
{
 
 do 
 {
   do{ a=gvarget(6065); }while(a!=0);	 //wait Motion Controller ready to accept new program
   gvarset(100001,1);	                 //Reset G-code pointer to start
   timer=5; do{ timer--;}while(timer>0); //0.5 sec Pause
   gvarset(100002,1);	                 //Start G-code
 }while(gvarget(400)==0);    //endless loop, if #400==0, otherwise exit from procedure
 
 exit(99);
};
//If variable #400 will be set to non-zero value, NOT_ENDLESS.plc process will be finished

In case no need to exit from ENDLESS.plc and variable #400 should be monitored constantly and run g-code when #400 is set bu user -

ENDLESS2.plc
main()
{
 do 
 {
  if (gvarget(400)!=0)                   //if #400!=0, run g-code, otherwise continue to test #400
  {
   do{ a=gvarget(6065); }while(a!=0);	 //wait Motion Controller ready to accept new program
   gvarset(100001,1);	                 //Reset G-code pointer to start
   timer=5; do{ timer--;}while(timer>0); //0.5 sec Pause
   gvarset(100002,1);	                 //Start G-code
  };
 }while(1);    //endless loop
 
 exit(99);
};
//If variable #400 will be set to non-zero value, ENDLESS.plc process will be finished

Endless loop with switch to left & right sides of working area

LEFT-RIGHT.plc
#define MAX_X	800
#define MAX_Y 800
 
main()
{
 
do
{
 
  auto=gvarget(501);	//Automatic mode
 
  if (auto)
  {
 
    do { rect_not_ready=gvarget(7369); }while(rect_not_ready==0);
 
    left_right=1;
    xmax=gvarget(7350);
    if (xmax>MAX_X){ left_right=0;};
    ymax=gvarget(7351);
    if (ymax>MAX_Y){ left_right=0;};
 
    gvarset(502,left_right); //502 - показывает обе стороны или одна
    LR=gvarget(500);
 
    if (LR==0) //левая
     {
//       gvarset(9100,1);	//показать сообщение №1
       //do{ a=portget(11); }while(a==0);	//ждем педаль, 11 вход
       //do{ a=gvarget(6065); }while(a!=0);	//ждем педаль, 11 вход
//       gvarset(9100,0);  //убрать сообщение
 
       portclr(10);//Vacuum Left OFF
       portset(9); //
 
       portset(11);//
       portset(22);//
 
//       gvarset(9101,1); //показать сообщение №2
       //do{ a=portget(13); }while(a==0);	//ждем педаль, 13 вход
//       gvarset(9101,0); //убрать
 
       portset(10);//Vacuum Left
       portclr(9); //
       timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек пока присоски сработают
 
       portclr(11);//выключить упоры
       portclr(22);//
 
////
//ждать пока УП завершится
       do{ a=gvarget(6065); }while(a!=0);	//ждем
////
 
 
do {
      do{ a=gvarget(6065); }while(a!=0);	//ждем готовности системы
      gvarset(100010,54);	//Дать код G54
      timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек пока сменится система
			n=gvarget(5220);//получить текущий номер системы координат
		} while(n!=1);	//пока текущая система не G54
 
       do{ a=gvarget(6065); }while(a!=0);	//ждем готовности системы
       gvarset(100001,1);	//сбросить программу в начало
       timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек
       do{ a=gvarget(6065); }while(a!=0);	//ждем готовности системы
       gvarset(100002,1);	//запустить программу
 
    }else	//правая
    {
//       gvarset(9110,1);	//показать сообщение №1
//       do{ a=portget(12); }while(a==0);	//ждем педаль, 11 вход
//       gvarset(9110,0);  //убрать сообщение
 
       portclr(15); //Vacuum Left OFF
       portset(16); //
 
       portset(14); //
       portset(23); //
 
//       gvarset(9111,1); //показать сообщение №2
//       do{ a=portget(14); }while(a==0);	//ждем педаль, 13 вход
//       gvarset(9111,0); //убрать
 
       portset(15); //Vacuum Left
       portclr(16); //
       timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек пока присоски сработают
 
       portclr(14);//выключить упоры
       portclr(23);//
 
////
       do{ a=gvarget(6065); }while(a!=0);	//ждем
//ждать пока УП завершится
////
 
do{
      do{ a=gvarget(6065); }while(a!=0);	//ждем готовности системы
			gvarset(100010,55);	//Дать код G54
      timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек пока сработает смена координат
			n=gvarget(5220);//получить текущий номер системы координат
} while(n!=2);//пока текущая система не G55
 
       do{ a=gvarget(6065); }while(a!=0);	//ждем пока процессор занят
       gvarset(100001,1);	//сбросить программу в начало
       timer=5; do{ timer--; }while(timer>0);	//ждем 0.5 сек 
       do{ a=gvarget(6065); }while(a!=0);	//ждем готовности системы
       gvarset(100002,1);	//запустить программу
 
    };
 
       timer=20; do{ timer--; }while(timer>0);	//пауза на 3 сек, что программа стартовала
       do{ a=gvarget(6065); }while(a!=0);	//ждем пока завершится программа
 
		LR=LR^1;	//переключить на другую сторону
    gvarset(500,LR);
 
  };//auto
 
 }while(1);
 
 exit(99);
};
plc/software_plc_examples.txt · Last modified: 2017/12/08 17:34 by es