# Two encoder control configuration (for all ACOPOS types)

**URL:** <https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477>\
**Category:** How-To & Wikis\
**Tags:** acopos\
**Created:** [October 16, 2023, 4:14pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477 "2023-10-16T16:14:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![antonio.rapha](https://dub1.discourse-cdn.com/brcommunity/user_avatar/community.br-automation.com/antonio.rapha/32/187_2.png) [@antonio.rapha](https://community.br-automation.com/u/antonio.rapha)\
**Post date:** [October 16, 2023, 4:14pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/1 "2023-10-16T16:14:59Z")

</div>

A question that we receive from time to time is how to configure an ACOPOSmulti axis with two encoders. I will take the chance to describe here the different scenarios and maybe somebody can even extend it.

How to configure a two-encoder control is well described in the help: [Drive control with motor and load encoder](https://help.br-automation.com/#/en/6/ncsoftware/acp10_drivefunctions/antriebsregelung/geberverschaltung/antriebsregelung.html). This is usually done with a parameter table or more user friendly, in the mappMotion drive configuration for the ACOPOS P3.

The functionality is active as soon as VCTRL\_S\_ACT\_PARID \<\> PCTRL\_S\_ACT\_PARID and therefore, in an ACOPOS Classic we must configure:

```auto
* VCTRL_S_ACT_PARID (CTRL Vector controller: Actual position parameter ID) → Usually the motor encoder (ENCOD1_S_ACT)
* PCTRL_S_ACT_PARID (CTRL Position controller: Actual encoder position parameter ID) → Usually the load encoder (ENCOD2_S_ACT)
* AXLIM_DS_STOP2 (CTRL Two encoder control: Position difference limit for stop of a movement)

```

That works directly in the ACOPOS Classic because all interfaces belong to the single axis, but depending on the drive, the configuration differs.

The position sources for every ACOPOS type can be found here: [Position sources for drive control](https://help.br-automation.com/#/en/6/ncsoftware/acp10_drivefunctions/antriebsregelung/geberverschaltung/positionsquellen_fur_die_antriebsregelung.html).

## ACOPOS P3:

The ACOPOS P3 can be directly configured in the mappMotion drive configuration. Since mappMotion 5.22 it is possible using any interface of the P3. In previous versions, only the respective axis encoder and its plugging card slot were configurable. In that case, it is possible to configure it manually like the ACOPOSmulti (see below ACOPOSmulti).

 ![image](https://europe1.discourse-cdn.com/brcommunity/original/1X/1f41aa5b331a70d53fb3771ace987bffb6765bc8.png)

## ACOPOSmulti, ACOPOSmicro:

The mappMotion configuration does not support two encoder control for ACOPOSmulti yet… Moreover, there is only one encoder slot per axis.

In that case we need a cross-link, which works with Acp10 and mappMotion. Check [Axis cross-link](https://help.br-automation.com/#/en/6/ncsoftware/acp10_drivefunctions/netzwerk_kopplung_querverbindung/achsenquerverbindung/achsenquerverbindung_.html).

Here we must select the source axis and link the related encoder. For example, if I want to get the position from the second encoder:

```auto
VCTRL_S_ACT_PARID → ENCOD1_S_ACT // Encoder1 for vector controller (default setting)
CROSSLINK_AXIS → 2 // Select Axis2 as data source
PCTRL_S_ACT_PARID → CROSSLINK_ENC1_S_ACT // Link position controller with encoder position of Axis2
AXLIM_DS_STOP2 // Don't forget to configure a significant value in Position difference limit for stop of a movement

```

In the specific case of the Axis 1, it is also possible to set directly `PCTRL_S_ACT_PARID → ENCOD2_S_ACT`

## ACOPOSmulti Single axis with mappMotion:

For single axis ACOPOSmulti the encoder type and other encoder parameters for SS2 are not transferred even when set in the HW configuration.  
That means, it is necessary to transfer all encoder parameters with a parameter list (even if we have an Endat) to the channel 2 of the ACOPOSmulti. In order to do that, a real or virtual axis object must be assigned in the mappMotion HW configuration of channel 2, so it gets initialized.  
There are two possibilities to do this:

**Alternative 1, Parameter lists transfer to object on channel 2 (with mappMotion \< V5.12):**

1. Read the ParID 178 (Status: General bits) and wait until the Bit5 (Encoder init active) is 0. When using the real axis waiting for axis state Disabled is fine as well.
2. Transfer encoder type and all encoder parameters
3. Read again the ParID 178 (Status: General bits) and wait until the Bit5 (Encoder init active) is 0.
4. Transfer crosslink parameters to channel 1

**Alternative 2, ACOPOS Parameter table in configuration of channel 2 (from mappMotion V5.12):**

1. Create an ACOPOS parameter table and a feature for it with the encoder type and all encoder parameters
2. Add the ACOPOS parameter table feature as “Channel feature” to channel 2 (real or virtual axis object must be assigned to the channel, checks for ParID 178 Bit5 are done automatically)
3. Wait until the axis is in axis state Disabled
4. Transfer crosslink parameters to channel 1 by FB (either as parameter list or create a parameter table and transfer with [MC\_BR\_ProcessParTab\_AcpAx](https://help.br-automation.com/#/en/6/motion%252Fmapp_motion%252Fmapp_axis%252Fprogrammierung%252Fkernbibliotheken%252Fmcacpax%252Ffunktionsbausteine%252Fmc_br_processpartab_acpax%252Ffb_processpartab.html) (available with V5.15))

---

<div class="post-metadata">

**Author:** ![bryan.olson](https://dub1.discourse-cdn.com/brcommunity/user_avatar/community.br-automation.com/bryan.olson/32/2155_2.png) [@bryan.olson](https://community.br-automation.com/u/bryan.olson)\
**Post date:** [July 9, 2024, 3:32pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/2 "2024-07-09T15:32:53Z")

</div>

Hello Antonio! What’s the easiest way to swap in and out of two encoder mode at runtime?  
For example, our second encoder is a material measure wheel, but on startup there may not be material in contact with it yet and we still need to be able to move the axis.

---

<div class="post-metadata">

**Author:** ![michael.bertsch](https://dub1.discourse-cdn.com/brcommunity/user_avatar/community.br-automation.com/michael.bertsch/32/239_2.png) [@michael.bertsch](https://community.br-automation.com/u/michael.bertsch)\
**Post date:** [July 12, 2024, 7:50pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/3 "2024-07-12T19:50:08Z")

</div>

I think if you configured 2 Encoder Control, everything is well prepared by the configuration.

If the Axis is Disabled you can use a ProcessParID Functionblock to change the link between the Position Controller and the used Encoder. The ParID PCTRL\_S\_ACT\_PARID contains the ParID Number of the used Encoder Actual Position.

- PCTRL\_S\_ACT\_PARID (CTRL Position controller: Actual encoder position parameter ID) → Usually the load encoder ENCOD2\_S\_ACT

The ParID then can be changed to ENCOD1\_S\_ACT to switch back to Single Encoder Control. If you write again ENCOD2\_S\_ACT to it, its back to two encoder Control. (The ParIDs may variate if you use other Configurations with external encoders or similar, but the principle stays the same).

I did not try it but as far as i know the theorie this should be all you have to change.

Greetings  
Michael

---

<div class="post-metadata">

**Author:** ![tullio.quirini1](https://avatars.discourse-cdn.com/v4/letter/t/FF8800/32.png) [@tullio.quirini1](https://community.br-automation.com/u/tullio.quirini1)\
**Post date:** [December 16, 2024, 7:40pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/5 "2024-12-16T19:40:43Z")

</div>

Good evening, i have read the post and everything is clear.  
I want to implement the same functionality by reading the encoder information from an X20 Encoder mounted on the X2X interface of the PLC .  
I have seen that last mapp motion version (\>5.24) allow to define under physical view of the drive, a property called ‘External Encoder’ . By enable this property it is possible to define the value of attribute ‘Encoder position’ =On the network. As far as i’ve understood , by enable this data, we define the ENCOD0 interface. So at the end , it will be possible to define a 'two encoder control configuration by assign PCTRL\_S\_ACT\_PAR\_ID=ENCOD0\_S\_ACT and VCTRL\_S\_ACT\_PAR\_ID = ENCOD1\_S\_ACT.  
Am i right?

---

<div class="post-metadata">

**Author:** ![tullio.quirini1](https://avatars.discourse-cdn.com/v4/letter/t/FF8800/32.png) [@tullio.quirini1](https://community.br-automation.com/u/tullio.quirini1)\
**Post date:** [October 15, 2025, 7:47pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/6 "2025-10-15T19:47:08Z")

</div>

With mappmotion 5.28 it is also able to link an X20 datapoint as a source of External Encoder interface. Thanks for this new feature

---

<div class="post-metadata">

**Author:** ![valerio.manenti](https://dub1.discourse-cdn.com/brcommunity/user_avatar/community.br-automation.com/valerio.manenti/32/11712_2.png) [@valerio.manenti](https://community.br-automation.com/u/valerio.manenti)\
**Post date:** [December 24, 2025, 1:10pm UTC](https://community.br-automation.com/t/two-encoder-control-configuration-for-all-acopos-types/477/7 "2025-12-24T13:10:32Z")

</div>

@antonio.rapha it’s time to update your post…hehe!  
mapp Motion 6.6:

![image](https://europe1.discourse-cdn.com/brcommunity/original/2X/7/78869d963d3031405e733e7ae46f612a11126a8b.png)

Ciao  
Valerio
