DLS_James Posted April 18, 2017 Posted April 18, 2017 Hello, I would like to be able to set the feedrate of a coordinate system from a PLC. There doesn't seem to be a Coord[1].Feedrate command so I tried, cmd "&1%0" instead, but this gives the following error: error #31: invalid format in string: cmd "&1%0" What is the correct/best way to be able to do this? Thanks, James
mbalentine Posted April 18, 2017 Posted April 18, 2017 Your syntax fault might have been the % being interpreted as a modulo operator(?) You could use the F, FRAX, FRAX2, NOFRAX commands These are used inside the motion program, but a variable from a PLC can be used for the actual feedrate. FRAX specifies which axis to include in the calculations FRAX(X,Y,...) Note: not required to use all axis of a CS F specifies the actual feedrate. A variable can be given a value in a PLC and then inside the motion program use F(M123) will set the feedrate. Using this inside the motion program allows you to coordinate feedrate values with specific lines of motion commands. Note that the vector feedrate commands assume orthogonal axis in the calcs See pp 1171-1174 of the software reference and chase all the Coord[x].data references for a better understanding.
curtwilson Posted April 18, 2017 Posted April 18, 2017 First, make sure you understand the difference between "feedrate" (usually commanded by F in the motion program) and "feedrate override" (usually commanded with the % command outside the program. The feedrate value is used once per programmed move as that move is calculated as the commanded top speed. When "F{value}" is executed inside a motion program, its action is to set Coord[x].Tm = -{value}. The "-" indicates that this is a speed, not a move time, so that moves are specified by speed (feedrate). So if you want to specify "feedrate" from outside the motion program, you can command Coord[x].Tm = -{value}. This will NOT affect the presently executing moves. It would also be overridden by the next F command in the motion program. If you want to specify "feedrate override", which will begin to take effect immediately, probably the best way is what Richard suggests. If you are thinking in terms of percentages, you could do a command like: Coord[x].DesTimeBase = Sys.ServoPeriod * MyPercent / 100;
Omron Forums Support Posted April 18, 2017 Posted April 18, 2017 Try using CMD "&1%%0". I believe the problem with using % with CMD is the % gets interpreted as a "format sequence" character (see under % command description in the SRM). And as Richard/Curt pointed out, Coord[x].DesTimeBase can also be used. For example, Coord[x].DesTimeBase = Sys.ServoPeriod/2 for 50% (see under Coord[x].DesTimeBase description in the SRM).
DLS_James Posted April 19, 2017 Author Posted April 19, 2017 Thanks for all the replies and help! You've given me plenty to investigate. I shall give your suggestions a whirl.....
Recommended Posts