AXY:Position Error Delay Compensation Algorithm

From SoftMC-Wiki
Revision as of 11:56, 13 September 2017 by Itay (talk | contribs) (AXY: new links)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Introduction

Until now latest versions of AMCS (03.7.31) and softMC (5.0.0) had mechanism compensating SERCOS communication delays. There is a time difference between time of the position command the softMC sends to the drive and the time of reading position feedback that is read from the drive through SERCOS protocol. This time difference consist of:

  1. One SERCOS sample for sending.
  2. N SERCOS samples for drive processing (N=1 in STX UCB2 families of drives)
  3. One SERCOS sample for receiving the drive feedback.

PositionErrorDelay property (PED) defines this delay, and was used for computing the proper value of position error both of the group and the individual axis. The system compared the actual position feedback with the position command sent before PED number of samples:


<''axis''>.PoistionError(t) = <''axis''>.PositionFeedback(t) - <''axis''>.PositionCommand(t-<''axis''>.PED)

<group>.PoistionError(t) = SQRT(SUM(<''axis''>[i].PoistionError2(t), i=1,n of dominant type only)

<robot>.PositionError(t) = DISTL(TOCART(<robot>.PositionFeedback(t)) – TOCART(<robot>.PositionCommand(t -<robot>.PED))


The above scheme works well if all connected drives in the SERCOS ring have same processing delay of N samples, in cases of different drives the above computation is not valid anymore.


New Implementation

If having drives with different processing delay, the group PED will be set to the biggest delay of all the connected drives. And the computation of position error of robots an axis will be changed to:


<''axis''>.PositionError(t) = <''axis''>.PositionFeedback(t) - <''axis''>.PositionCommand(t-<''axis''>.PED)

<group>.PositionError(t) = SQRT(SUM(<''axis''>[i].PoistionError2(t - (<robot>.PositionErrorDelay -<''axis''>[i].ped)), i=1,n of dominant type only)


<robot>.PositionFeedback [i] = <''axis''>[i].PositionFeedback(t - (<robot>.PositionErrorDelay -<''axis''>[i].ped))

<robot>.PositionError(t) = DISTL(TOCART(<robot>.PositionFeedback ) – TOCART(<robot>.PositionCommand(t -<robot>.PED))


In this way, in cases when all drives have same processing delay pfb becomes equal the old pfb and the whole scheme becomes identical to the old one. Group error compensation will be not affected.


Setting of <robot>.PositionErrorDelay to max value will be not done automaticaly, it is the resposnibilty of the user to do so.

Limitations

A)Element properties: pcmd and setpoint are available for the user having no delay compensation. "here" and pfb properties is available in form described by above equation:

<robot>.PositionFeedback [i] = <''axis''>[i].PositionFeedback(t - (<robot>.PositionErrorDelay -<''axis''>[i].ped))

<robot>.Here(t) = TOCART(<robot>.PositionFeedback )


this means that all position feedback values of axes with drives having PED smaller than <group>.PED will be delayed by the <group>.PED.


Properties <robot>.pe, <group>.pe, pfb and here will be computed based on date from the same drive aquisition point (not SERCOS).


This further means that when recording (or using in an event condition) expressions like pe and pcmd-pfb will not have same values. This limitation is not new and exists both in new and old delay compensation algorithm. The proposed algorithm will influence computation of PE only.

B) The proposed new scheme will be implemented in AMCS version branch 4.0.x only. Version branch 3.7.x will be not changed.

C) The above formulas are not considering coupling. So the coupled PFB will be a combination of coordinates from one <robot>.PositionFeedback variable.


D) In cases of gearing/camming and conveyor tracking, if the mastersource is set to PFB, the latest PFB will be taken (without any additional delays, PFB{t)). Also this mans that <conveyer>.here could differ from <robot> .here although synchronization has been acheived.


F) Axis PFB properties will be read without delay, so there will be difference between <robot>.PFB{1} and A1.PFB:


ROBOT.PFB{1} ≠ A1.PFB
J1.PFB ≠ A1.PFB
ROBOT.PFB{1} = J1.PFB


if A1 is first axis of ROBOT and there is no coupling on J1.

See Also: