Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
synchronize problems
#1
Is there any way to call a motion program from another motion program and wait for the called motion program to finish?

I tried something like this:

angle = 0;
while (angle < 100)
{
﹒﹒test_running = FALSE;
﹒﹒test_running == TRUE;

﹒﹒start 1.10 //start prog 10 in CS 1
﹒﹒while (!(test_running) && Coord[1].InPos == FALSE) {};
﹒﹒﹒﹒test_running == FALSE;
﹒﹒angle += 1;
}

Then in the terminal I typed
&0 b ScanTest r

Instead of the angle incrementing by 1 it incremented by 4. I assume the motion program is looking ahead but I'm not sure how to force it to synchronize with my logic.

Thanks
Reply
#2
There is no reason to wait since motion programs are sequential and execution will return automatically when it is done.
test_running will be false when it is done without the while loop (ignoring any lookahead for now). Note that the synchronous assignment == must be followed by a move (e.g. DWELL) for it to take effect. I would do it this way:
test_running == TRUE
START 1:10
DWELL 0 // Break Lookahead
test_running == FALSE
DWELL 0 // Force synchronous assignment
angle += 1
Reply
#3
I'm still struggling a bit with the lookahead. I modified my code as below and it does one scan at 25°. scan_angle is 25 and angle is 26. So somehow still looking ahead.
But if I uncomment out the while line it can work. Why?

Thanks

angle = 0;
while (angle < 25.1)
{
﹒﹒//variables used by prog 10
﹒﹒scan_angle = angle
﹒﹒scan_distance_mm = ((300*cosd(tilt_angle))/cosd(scan_angle))+50

﹒﹒test_running == TRUE;
﹒﹒start 1:10;
﹒﹒dwell(0); //break lookahead

﹒﹒test_running == FALSE;
﹒﹒dwell(0) //force synchronous assignment
﹒﹒//while (!(test_running) && Coord[1].InPos == FALSE) {};
﹒﹒angle += 1.0;
}
Reply
#4
I think the issue is that if angle is 25 (or less than 25.1) it will be increased at the end of a loop of code.

Code:
angle = 0;
while (angle < 25.1)
{
﹒﹒Code
﹒﹒angle += 1.0;
}

If you want the angle variable to be equal to 25 at the end you may have to adjust the format of the code. Here is one possible example.
Code:
angle = -1;
while (angle < 24.1)
{
﹒﹒angle += 1.0;
﹒﹒Code
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)