Adapting a B&R-provided AxCon cyclic current reference structure to Automation Studio 6.3+

Hello everyone,

We have an existing B&R Automation Studio project that was originally built with AS 4.12.6.106, mapp/ACP10 5.23.1. In this project, we are using a B&R-provided/custom AxCon structure together with MpAxisBasic to command the drive with a cyclic current reference instead of the more common cyclic torque reference approach.

The system has 6 axes. For each axis, the application initializes an AxCon instance in axCon_MODE_CYCLIC_CURRENT mode and connects it to the related MpAxisBasic instance. The calculated current reference from our controller is written into axconBuffer.Buffer[0].

The important part of the structure is roughly this:

Controller calculates actual current reference [A]
    -> SetRefCurrentForAllActuator()
    -> axconBuffer.Buffer[0]
    -> MC_BR_CyclicWrite
    -> ParID 4128 / VAR_R4_0
    -> ICTRL_ADD_SET_PARID, ParID 325, points to 4128
    -> additive current setpoint of the current controller

During initialization the AxCon code also writes/uses these ParIDs:

PCTRL_ENABLE_PARID = 231
ICTRL_ADD_SET_PARID = 325
VAR_R4_0 = 4128

The current project also contains .apt files where ICTRL_ADD_SET_PARID is set to 4128, and VAR_R4_0 is used as the cyclic write target. The AxCon code configures MC_BR_CyclicWrite with DataType = REAL, Mode = mcEVERY_RECORD, and ParID = ACP10PAR_VAR_R4_0.

My question is about migration to Automation Studio 6.3 or newer, with mapp Motion 6.x / current ACP10 versions:

  1. Is this ParID-based cyclic current reference method still supported/recommended in AS 6.3+?
  2. Are ParIDs 325 / ICTRL_ADD_SET_PARID and 4128 / VAR_R4_0 still valid for this use case on current ACOPOS / ACOPOS P3 systems?
  3. Is there now a standard mapp Motion / MpAxis way to command a current reference directly, or is the recommended solution still to use MC_BR_CyclicWrite with drive ParIDs?
  4. Are there any migration risks when importing this older AxCon/CycAxCon structure into AS 6.3+, especially around MpAxisBasic, MC_BR_CyclicWrite, MC_BR_WriteParID, and controller enable/disable behavior?
  5. If this approach is no longer recommended, what would be the correct AS 6.3+ architecture for a current-controlled axis?
  6. From B&R’s point of view, should cyclic torque reference and cyclic current reference behave equivalently after applying the motor torque constant, or are there internal control-loop / scaling / filtering / limitation differences that can explain a different dynamic response?

We also tested the standard cyclic torque reference approach. However, the system response was unfortunately not the same as with the current-reference method. With the current-reference structure, we get noticeably better behavior and can control the system more precisely/stably. This is the main reason why we would like to keep using this method if it is still supported.

At the same time, we would also like to understand whether there is a real technical difference between commanding torque through the standard mapp Motion torque interface and commanding current through the additive current setpoint ParID. In theory these are related through the motor torque constant, but in our application the dynamic response is not identical. We would appreciate comments on why this difference may occur.
For context, the standard MpAxisCyclicSet interface seems to provide cyclic position, velocity and torque setpoints, but our application requires current reference in amperes because our own controller calculates motor current directly. Converting to torque reference is possible in theory using motor torque constant, but the existing B&R-provided solution was intentionally built around current reference.

Any guidance, migration notes, or examples for AS 6.3+ would be appreciated.

Best regards.

Hi @omer.alumur ,

a lot of questions…hehe
Please first review the information we have in the Help:
Migrating from ACP10_MC to mapp Axis

mapp Axis

Ciao
Valerio

Hi Valerio,

thank you for the links. I reviewed the ACP10_MC to mapp Axis migration information. It is helpful for the general migration, but I still need confirmation for the ACOPOS drive-level current reference path.

Our current AS4 project does not only use a standard cyclic torque setpoint. It writes a REAL value cyclically to VAR_R4_0 and sets ICTRL_ADD_SET_PARID / ParID 325 to this REAL ParID, so the value is used as an additive current-controller setpoint.

For AS 6.3+ / mapp Motion 6.x / ACOPOS P3, could you please confirm the following specific points?

  1. Is using ICTRL_ADD_SET_PARID pointing to a cyclic REAL ParID still supported for cyclic current reference?
  2. If yes, should the old MC_BR_CyclicWrite implementation be migrated to MC_BR_CyclicProcessParID_AcpAx with cyclic write mode?
  3. Are ParID 325 and the VAR_R4_x / user REAL ParIDs still valid on current ACOPOS / ACOPOS P3 systems for this use case?
  4. Is there any standard mapp Axis / MpAxis interface for commanding current directly in amperes, or is ParID-based cyclic write still the intended solution?
  5. From the drive-control point of view, does the mapp cyclic torque interface pass through the same internal path as the additive current-controller setpoint, or can scaling, filtering, torque limiting, current limiting, or control-loop placement explain a different dynamic response?

We already tested the standard cyclic torque setpoint approach, but the measured system response is not equivalent to the existing current-reference implementation. Therefore we would like to know whether keeping the current-reference architecture is supported and what the correct AS6.3+ migration path is.

Hi @omer.alumur ,

Ok I have one ACOPOS P3 and I have 2 options to control that: one with Legacy ACP10 and the second one with new mapp Motion, but if at low level the Drive functions are the same where do you see the problem?

ICTRL_ADD_SET_PARID is part of current control, current control is implemented in the same way in the both systems (legacy ACP10 and mapp Motion)

Is using ICTRL_ADD_SET_PARID pointing to a cyclic REAL ParID still supported for cyclic current reference?

yes

If yes, should the old MC_BR_CyclicWrite implementation be migrated to MC_BR_CyclicProcessParID_AcpAx with cyclic write mode?

I did that normally when I converted few prj from ACP to mapp Motion

Ciao
Valerio

Hi @Valerio,

thank you, this is helpful.

I understand your point that the low-level ACOPOS drive functions are the same and that ICTRL_ADD_SET_PARID belongs to the current-control part of the drive. That answers an important part of my question.

The point I would still like to clarify is the correct AS6 / mapp Motion implementation path.

In the old AS4 / ACP10 project, the B&R-provided AxCon structure uses MC_BR_CyclicWrite to write a REAL value cyclically to VAR_R4_0. ICTRL_ADD_SET_PARID is then set to this ParID, so our value is used as additive current setpoint of the current controller.

For AS 6.3+ / mapp Motion 6.x / ACOPOS P3, should this be migrated to MC_BR_CyclicProcessParID_AcpAx from McAcpAx, using cyclic write to the same VAR_R4_x parameter?

Could you please confirm these points?

  1. Is the concept “ICTRL_ADD_SET_PARID points to a cyclic REAL ParID such as VAR_R4_x” still a supported ACOPOS/P3 method for cyclic current reference in mapp Motion?

  2. Can VAR_R4_0 / ParID 4128 still be used for this purpose, or is another user REAL ParID recommended in AS6/mapp Motion?

  3. Are there any special migration notes regarding enable/disable behavior, PCTRL_ENABLE_PARID, cyclic timing, current limits, or reset behavior when moving this structure from ACP10_MC to mapp Motion/McAcpAx?

  4. Regarding the standard mapp Motion cyclic torque interface: does it internally pass through exactly the same current setpoint path as ICTRL_ADD_SET_PARID after applying the motor torque constant, or can there be additional scaling, filtering, torque limiting, current limiting, set-current adaptation, or loop-placement differences?

The reason for the question is that we tested the standard cyclic torque setpoint approach, but the measured system response is not equivalent to the existing current-reference implementation. The current-reference path gives noticeably better dynamic behavior in our application.

So my main concern is not whether the current controller exists in both systems, but whether keeping this current-reference architecture is supported and what the recommended AS6/mapp Motion function block architecture is.

Best regards.

Hi @omer.alumur ,

The reason for the question is that we tested the standard cyclic torque setpoint approach, but the measured system response is not equivalent to the existing current-reference implementation. The current-reference path gives noticeably better dynamic behavior in our application.

This is very interesting…We should see the different behavior on the axis trace.

Our key ParID is 325: ICTRL_ADD_SET_PARID

Are we 100% sure we have that parID implemented on mapp Motion?
Let’s have a look on the library:


Yes we are.

Let’s look at the diagrams:

As you see below, your ICTRL_ADD_SET_PARID is one input of our ICTRL_ISQ_REF (CTRL Current: Set stator current quadrature component [A]), but there are others:

If you see differences on the output (ICTRL_ISQ_REF) on 2 systems (ACP10 and mappMotion) we should see them on the traces.
it’s possible some other parameters are configured in different way.

=================

Is the concept “ICTRL_ADD_SET_PARID points to a cyclic REAL ParID such as VAR_R4_x” still a supported ACOPOS/P3 method for cyclic current reference in mapp Motion?

There is no change on mapp Motion for ICTRL_ADD_SET_PARID, there is the same access RD/WR and the same value, a ParID.

Can VAR_R4_0 / ParID 4128 still be used for this purpose, or is another user REAL ParID recommended in AS6/mapp Motion?

yes you can use VAR_R4_0 parID for that purpose on mapp Motion too

I see it’s defined on mapp Motion too

Are there any special migration notes regarding enable/disable behavior, PCTRL_ENABLE_PARID, cyclic timing, current limits, or reset behavior when moving this structure from ACP10_MC to mapp Motion/McAcpAx?

no particular note related to mapp Motion:

I see it’s defined on mapp Motion too

>Regarding the standard mapp Motion cyclic torque interface: does it internally pass through exactly the same current setpoint path as ICTRL_ADD_SET_PARID after applying the motor torque constant, or can there be additional scaling, filtering, torque limiting, current limiting, set-current adaptation, or loop-placement differences?

not sure which standard mapp Motion cyclic torque interface you are referring to. Could you give me more details about that?

Ciao
Valerio