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 |
#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:
#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); }
#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); }
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.