Difference between revisions of "Endless Axes"

From SoftMC-Wiki
Jump to: navigation, search
(AXY: new links)
 
(20 intermediate revisions by 4 users not shown)
Line 1: Line 1:
= Infinite axes =  
+
{{Languages|Endless_Axes}}
 +
= Endless Axes =  
  
== endless axes ==
+
== Introduction ==
 
Axes that can theoretically move endlessly in ether  direction are supported in the softMC system. The limits of such axes are actually the range of the double-floating point format '''(-1.79769e+308,1.79769e+308)''' which practically gives endless axes operation.
 
Axes that can theoretically move endlessly in ether  direction are supported in the softMC system. The limits of such axes are actually the range of the double-floating point format '''(-1.79769e+308,1.79769e+308)''' which practically gives endless axes operation.
  
== Drive limitations ==
+
== Drive Limitations ==
  
 
However, the drive-controller communication uses  much smaller range its position data is transferred using 32-bits data so the limits of internal drive position units are:<br> '''[-2 <sup> 31 </sup>,+2 <sup> 31 </sup>-1]'''. This is visible on properties: [[MC-Basic:axis.COUNTFEEDBACK|CCFB]], [[MC-Basic:axis.COUNTCOMMAND|CCMD]], and [[MC-Basic:axis.COUNTEXTERNAL|CEXT]]. They are all integer type, 32-bit variables and as such have limited values.
 
However, the drive-controller communication uses  much smaller range its position data is transferred using 32-bits data so the limits of internal drive position units are:<br> '''[-2 <sup> 31 </sup>,+2 <sup> 31 </sup>-1]'''. This is visible on properties: [[MC-Basic:axis.COUNTFEEDBACK|CCFB]], [[MC-Basic:axis.COUNTCOMMAND|CCMD]], and [[MC-Basic:axis.COUNTEXTERNAL|CEXT]]. They are all integer type, 32-bit variables and as such have limited values.
  
== softMC position variables ==
+
== softMC Position Variables ==
  
The system automatically extends range position variables (pcmd,pfb,pext) to [mindouble,maxdouble] by counting the number of cycles of 32-bit range. Each time the position feedback (or external) passes 31 bit limit internal ''counter of revolutions'' ('''count_rev''') is increased (decreased). So the position property values: [[Axystems:MC-Basic:axis.POSITIONFEEDBACK|PFB]], [[Axystems:MC-Basic:axis.POSITIONCOMMAND|PCMD]]  
+
The system automatically extends range position variables (pcmd,pfb,pext) to [mindouble,maxdouble] by counting the number of cycles of 32-bit range. Each time the position feedback (or external) passes 31 bit limit internal ''counter of revolutions'' ('''count_rev''') is increased (decreased). So the position property values: [[MC-Basic:element.POSITIONFEEDBACK|PFB]], [[MC-Basic:element.POSITIONCOMMAND|PCMD]]  
, [[Axystems:MC-Basic:axis.POSITIONEXTERNAL|PEXT]] do not exhibit any discontinuities.  
+
, [[MC-Basic:axis.POSITIONEXTERNAL|PEXT]] do not exhibit any discontinuities.  
  
 +
== Detecting 32-bit Limit Exceeded ==
 +
Detecting the 32 bit limit is done by checking the current and the previous value of the feedback position obtained from the drive. <br>
 +
::If the XOR operation on the most-significant bits of the current and the previous feedback value is 1<br/>
 +
::we increase(decrease) the revolution counter by 1 and then compute the PFB:<br/>
 +
:: '''pfb = pfac*(cfb + 2 <sup> 32 </sup>*count_rev)'''
  
=== How is it done? ===
+
The revolution counter ('''count_rev''') can be reset by:
 
+
* accessing position factor, e.g., "PFAC = PFAC" or any other assignment
Detecting of 32 bit limit-pass is done by checking the current and the previous value of the feedback position obtained from the drive. <br><center>If the  ''XOR operation on the most-significant bits of the current and the previous feedback value is 1'' </center> we increase(decrease) the revolution counter by 1 and then compute the pfb according:
 
 
 
<center> '''pfb = pfac*(cfb + 2 <sup> 32 </sup>*count_rev)''' </center>
 
 
 
the revolution counter ('''count_rev''') can be reset by:
 
 
 
* accessing position factor i.e. "pfac = pfac" or any other assignment.
 
 
* calling user function: MOT_RESET_ROLLOVER or MOT_RESET_EXROLLOVER
 
* calling user function: MOT_RESET_ROLLOVER or MOT_RESET_EXROLLOVER
  
[[File:Axy;Infinite axes.png]]
+
[[File:Axy;Infinite axes.png|600px]]
 
 
 
 
  
 
= See Also =  
 
= See Also =  
* [[Axystems:MC-Basic:axis.CountMin|COUNTMIN]]
+
* [[MC-Basic:axis.CountMin|COUNTMIN]]
* [[Axystems:MC-Basic:axis.CountMax|COUNTMAX]]
+
* [[MC-Basic:axis.CountMax|COUNTMAX]]
* [[Axystems:MC-Basic:axis.CountRollOver|COUNTROLLOVER]]
+
* [[MC-Basic:axis.CountRollOver|COUNTROLLOVER]]
 
* [[MC-Basic:axis.CountExtMin|COUNTEXTMIN]]
 
* [[MC-Basic:axis.CountExtMin|COUNTEXTMIN]]
 
* [[MC-Basic:axis.CountExtMax|COUNTEXTMAX]]
 
* [[MC-Basic:axis.CountExtMax|COUNTEXTMAX]]
Line 40: Line 37:
  
  
[[Category:Axystems:Motion Control]]
+
[[Category:Motion Control]]

Latest revision as of 11:21, 13 September 2017

Language: English  • 中文(简体)‎

Endless Axes

Introduction

Axes that can theoretically move endlessly in ether direction are supported in the softMC system. The limits of such axes are actually the range of the double-floating point format (-1.79769e+308,1.79769e+308) which practically gives endless axes operation.

Drive Limitations

However, the drive-controller communication uses much smaller range its position data is transferred using 32-bits data so the limits of internal drive position units are:
[-2 31 ,+2 31 -1]. This is visible on properties: CCFB, CCMD, and CEXT. They are all integer type, 32-bit variables and as such have limited values.

softMC Position Variables

The system automatically extends range position variables (pcmd,pfb,pext) to [mindouble,maxdouble] by counting the number of cycles of 32-bit range. Each time the position feedback (or external) passes 31 bit limit internal counter of revolutions (count_rev) is increased (decreased). So the position property values: PFB, PCMD , PEXT do not exhibit any discontinuities.

Detecting 32-bit Limit Exceeded

Detecting the 32 bit limit is done by checking the current and the previous value of the feedback position obtained from the drive.

If the XOR operation on the most-significant bits of the current and the previous feedback value is 1
we increase(decrease) the revolution counter by 1 and then compute the PFB:
pfb = pfac*(cfb + 2 32 *count_rev)

The revolution counter (count_rev) can be reset by:

  • accessing position factor, e.g., "PFAC = PFAC" or any other assignment
  • calling user function: MOT_RESET_ROLLOVER or MOT_RESET_EXROLLOVER

Axy;Infinite axes.png

See Also