Table of Contents

Jog from PLC

Note: This article is an extension of the original PLC: Jog from PLC section. For more info on PLC programming, see the original article.

The Jog from PLC feature in myCNC allows motion control commands to be executed directly from within PLC programs. This enables dynamic axis control (changing direction, speed, or enabling/disabling movement) without stopping machine motion. Such functionality is especially useful for multi-axis homing or probing operations.

Jogging motion is managed using the following global variables, which define acceleration, speed, and direction.

Variable Name ID Description
GVAR_G0PLC_SPEED 8630 Jog feedrate
GVAR_G0PLC_TIME 8631 Jog acceleration time in ms
GVAR_G0PLC_SPEED_UNITS 8632 Jog speed
GVAR_PLC_JOGSPEED_UNITS 8634 Jog speed + axis mask (axis << 24 | speed)
GVAR_PLC_JOG 8635 Jog direction control bitmask

Example Implementations

Example 1: X-Axis Homing

#include pins.h
#include func_homing.h
 
 
main()
{
  gvarset(5539,1); //switch to fast g0moveA implementation 
  gvarset(8631,10); //acceleration time 100ms = 0.1s       
  speed=1000;
  gvarset(8634,((1<<24)|speed)); //Jog speed for X
  gvarset(8634,((2<<24)|speed)); //Jog speed for Y
 
  forward=1;
  backward=(1<<8);
  sensor=INPUT_HOME_X;
 
  probe();
  exit(99);
}

This PLC:


Example 2: Y-Axis Homing

#include pins.h
#include func_homing.h
 
main()
{
  gvarset(5539,1); //switch to fast g0moveA implementation 
  gvarset(8631,10); //acceleration time 100ms = 0.1s       
  speed=1000;
  gvarset(8634,((1<<24)|speed)); //Jog speed for X
  gvarset(8634,((2<<24)|speed)); //Jog speed for Y
 
  forward=(2<<8);
  backward=2;
  sensor=INPUT_HOME_Y;
 
  probe();
  exit(99);
}

Example 3: Simultaneous XY Homing

#include pins.h
#include func_homing.h
 
main()
{
  gvarset(5539,1); //switch to fast g0moveA implementation 
  gvarset(8631,10); //acceleration time 100ms = 0.1s       
  speed=1000;
  gvarset(8634,((1<<24)|speed)); //Jog speed for X
  gvarset(8634,((2<<24)|speed)); //Jog speed for Y
 
  forward1=1;
  forward2=2;
  backward1=(1<<8);
  backward2=(2<<8);
 
  sensor1=INPUT_HOME_X;
  sensor2=INPUT_HOME_Y;
 
  probe_xy();
  exit(99);
}

Example 4: Probe and Jog Control Functions (func_homing)

func_homing.h
probe()
{
 gvarset(8635,forward); //Jog forward
 timer=60000;
 do
  {
     timer--;
     if ((timer&0xff)==0)  {    gvarset(8635,forward);   };
     a=portget(sensor);
     if (a!=0) { timer=0;};
   }while(timer>0);
 
 gvarset(8634,((1<<24)|(speed/8))); //Jog speed for X
 gvarset(8634,((2<<24)|(speed/8))); //Jog speed for Y
 gvarset(8635,backward); //Jog backward
 
 timer=60000;
 do
  {
     timer--;
     if ((timer&0xff)==0)  {    gvarset(8635,backward);   };
     a=portget(sensor);
     if (a==0) { timer=0;};
   }while(timer>0);
 
  gvarset(8635, 0); //Jog Stop
  do{ a=gvarget(6060); }while(a!=0x4d);
}; 
 
 
probe_xy()
{
 dir1=forward1;
 dir2=forward2;
 gvarset(8635,dir1|dir2); //Jog forward
 timer=60000; 
 do
  { 
     timer--;
     if ((timer&0xff)==0)   {       gvarset(8635,dir1|dir2);    };
      if (dir1)
      {
       a=portget(sensor1);
       if (a!=0)
        {
          dir1=0;
          gvarset(8635,dir1|dir2); //Jog forward
        };
      };
 
      if (dir2)
      {
       a=portget(sensor2);
       if (a!=0)   
        {    
          dir2=0;
          gvarset(8635,dir1|dir2); //Jog forward
        };
      };
   }while(dir1|dir2);
 
dir1=backward1;
dir2=backward2;
 
 gvarset(8634,((1<<24)|(speed/8))); //Jog speed for X
 gvarset(8634,((2<<24)|(speed/8))); //Jog speed for Y
 gvarset(8635,dir1|dir2); //Jog backward
 
 timer=60000;
 do
  {
     timer--;
     if ((timer&0xff)==0)   {       gvarset(8635,dir1|dir2);    };
      if (dir1)
      {
       a=portget(sensor1);
       if (a==0)
        {
          dir1=0;
          gvarset(8635,dir1|dir2); //Jog forward
        };
      };
 
      if (dir2)
      {
       a=portget(sensor2);
       if (a==0)
        {
          dir2=0;
          gvarset(8635,dir1|dir2); //Jog forward
        };
      };
   }while(dir1|dir2);
 
  gvarset(8635, 0); //Jog Stop
  do{ a=gvarget(6060); }while(a!=0x4d);
}; 

probe()

probe_xy()

The Jog from PLC mode allows smooth and flexible axis control without halting motion or interrupting the main program execution.