andreychip Posted March 28, 2019 Share Posted March 28, 2019 Hello! In the PPNC program, we use the “% n” adjustment in plc OverridePLC as Coord [1] .DesTimeBase = Sys.ServoPeriod * RapidOverrideInput / 100. How to adjust the "feed override" with External Time-Base ? my settings: EncTable[13].type=1 EncTable[13].pEnc=Clipper[1].Chan[1].ServoCapt.a plc spindle EncTable[13].ScaleFactor=1/(256*RTIF) RTIF=SpindleCtsRev*VS_SPINDLE_MAX_LIM_M/60000; plc OverridePLC Coord[1].pDesTimeBase= EncTable[13].DeltaPos.a; //TIMEBASE_M =FPR_TIMEBASE Coord[1].TimeBaseSlew=1 //MED_SLEW; The program works. How to adjust the "feed override" with External Time-Base ? best regards Andrey.ppnc_Myoverride.txt Link to comment Share on other sites More sharing options...
Eric Hotchkiss Posted March 28, 2019 Share Posted March 28, 2019 Is there a reason you would want to mix feedrate override with external time base? The whole point of external time base would be to go at the same speed an the encoder. I'd assume you'd want to slow down the motor that is the time base master, not the slave coordinate system. Normally feedrate override is accomplished by changing Coord[x].DesTimeBase so that Coord[x].TimeBase changes based on Coord[x].TimeBaseSlew. When using external time base, Coord[x].DesTimeBase will still change from %n, but it will have no affect on Coord[x].TimeBase as it is set based on encoder velocity. We can probably still make this happen if an extra ECT entry is used to multiply in Coord[x].DesTimeBase. Although this would probably require a RTI PLC or servo algorithm to repeated values from Coord[x].DesTimeBase to Sys.Idata[] where the ECT can actually point. This strategy would ignore Coord[x].TimeBaseSlew. Link to comment Share on other sites More sharing options...
andreychip Posted March 28, 2019 Author Share Posted March 28, 2019 Is there a reason you would want to mix feedrate override with external time base? The whole point of external time base would be to go at the same speed an the encoder. I'd assume you'd want to slow down the motor that is the time base master, not the slave coordinate system. Normally feedrate override is accomplished by changing Coord[x].DesTimeBase so that Coord[x].TimeBase changes based on Coord[x].TimeBaseSlew. When using external time base, Coord[x].DesTimeBase will still change from %n, but it will have no affect on Coord[x].TimeBase as it is set based on encoder velocity. We can probably still make this happen if an extra ECT entry is used to multiply in Coord[x].DesTimeBase. Although this would probably require a RTI PLC or servo algorithm to repeated values from Coord[x].DesTimeBase to Sys.Idata[] where the ECT can actually point. This strategy would ignore Coord[x].TimeBaseSlew. Thanks for the answer. It makes sense. This mode is often used in lathes. In the previous version, the NC-PRO 2 was implemented in the PLC program. Today I found one of the ways. I used a free address EncTable [16] .DeltaPos = EncTable [13] .DeltaPos * 0.01 * varOverraid; Coord [1] .pDesTimeBase = EncTable [16] .DeltaPos.a; varOverraid = 0 -150% it all worked. best regards Andrey. Link to comment Share on other sites More sharing options...
Eric Hotchkiss Posted March 28, 2019 Share Posted March 28, 2019 I'm a little confused. I can't set write to EncTable [16].DeltaPos, are you setting: Enctable[16].pEnc=Enctable[13].PrevEnc and changing Enctable[16].ScaleFactor with varOverraid? Link to comment Share on other sites More sharing options...
andreychip Posted March 28, 2019 Author Share Posted March 28, 2019 I'm a little confused. I can't set write to EncTable [16].DeltaPos, are you setting: Enctable[16].pEnc=Enctable[13].PrevEnc and changing Enctable[16].ScaleFactor with varOverraid? If you declare the table EncTable [16], you will not be able to write. best regards Andrey. Link to comment Share on other sites More sharing options...
curtwilson Posted March 29, 2019 Share Posted March 29, 2019 Here's how it's commonly done with G93, G94, and G95 codes: N93000: // G93: inverse time mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 1; // Enable inverse time calcs Coord[1].TimeBaseSlew = 0.001; // Low value for gradual change Coord[1].FeedTime = 60000; // F values are minute/F-command Coord[1].pDesTimeBase = Coord[1].DesTimeBase.a; // Use cmd % value return; N94000: // G94: length per minute mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 0; // Not inverse time Coord[1].TimeBaseSlew = 0.001; // Low value for gradual change Coord[1].FeedTime = 60000; // F values are per minute Coord[1].pDesTimeBase = Coord[1].DesTimeBase.a; // Use cmd % value return; N95000: // G95: length per rev mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 0; // Not compatible with inverse time Coord[1].TimeBaseSlew = 1.0; // High value to track master Coord[1].FeedTime = 60000 / SpindleRtRpm; // Time for rev in real time Coord[1].pDesTimeBase = EncTable.DeltaPos.a; // Use encoder freq return; Link to comment Share on other sites More sharing options...
andreychip Posted March 29, 2019 Author Share Posted March 29, 2019 Here's how it's commonly done with G93, G94, and G95 codes: N93000: // G93: inverse time mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 1; // Enable inverse time calcs Coord[1].TimeBaseSlew = 0.001; // Low value for gradual change Coord[1].FeedTime = 60000; // F values are minute/F-command Coord[1].pDesTimeBase = Coord[1].DesTimeBase.a; // Use cmd % value return; N94000: // G94: length per minute mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 0; // Not inverse time Coord[1].TimeBaseSlew = 0.001; // Low value for gradual change Coord[1].FeedTime = 60000; // F values are per minute Coord[1].pDesTimeBase = Coord[1].DesTimeBase.a; // Use cmd % value return; N95000: // G95: length per rev mode dwell 0; // Stop pre-computation and motion Coord[1].InvTimeMode = 0; // Not compatible with inverse time Coord[1].TimeBaseSlew = 1.0; // High value to track master Coord[1].FeedTime = 60000 / SpindleRtRpm; // Time for rev in real time Coord[1].pDesTimeBase = EncTable.DeltaPos.a; // Use encoder freq return; Thanks for the help ! Link to comment Share on other sites More sharing options...
Recommended Posts