Hi all,
we already have 2 helpful posts on 2-encoders control:
Two encoder control configuration (for all ACOPOS types) - Share Info & Ideas / How-To & Wikis - B&R Community
ACOPOS 2 encoder - Ask Questions / Mechatronics & Motion - B&R Community
the idea on this post is to give you and update what is new on the latest mapp Motion releases (yup no Legacy ACP10, let’s focus only on mapp Motion today).
Overview: we have a nice picture in AS Help:
- ACOPOS P3
Very basic configuration CPU + ACOPOS P3 + motor. For the motor encoder we use the encoder mounted on the motor connected to the build in endat card, and for position encoder we want the external encoder connected to the plug-in card 8EAV0150.001-1
Question: How can I update on fly (I don’t want to do a warm restart) the configuration of position encoder?
Answer: It depends…Why? it’s depends on which mapp Motion release you have installed!
a) mapp Motion < 6.4
We can only use ParIDs! ok, which one? Which encoder interface are we going to use? ENCOD2
- ParID 420: Encoder2: Load scaling: Units per load revolution
- ParID: 421: Encoder2: Load scaling: Encoder revolutions
- ParID: 422: Encoder2: Load scaling: Count direction
b) mapp Motion >= 6.4
Now, finally, we can update Encoder link interface on fly! Thanks R&D!
Question: Can I enable/disable 2-encoders control on fly? I mean during commissioning my external encoder is not ready so I would like to use only the encoder mounted on the motor. How can I do that?
a) mapp Motion < 6.4
Again only with ParID:
- 1-encoder control: ParID 230 (CTRL Position controller: Actual encoder position parameter ID) = 91 (Encoder1: Actual position)
- 2-encoders control: ParID 230 (CTRL Position controller: Actual encoder position parameter ID) = 423 (Encoder2: Actual position)
b) mapp Motion >= 6.4
We can use MC_BR_ProcessParam too. Only one limitation: we can only change mode from “One encoder” control to “Two encoders” control and vice versa, but not from “One encoder” control to “No encoder” and vice versa and not from “Two encoders” control to “No encoder” and vice versa.
How? How can I do that with ST for example?
Variables:

Code:
- ACOPOSmulti
With ACOPOSmulti should I configure the encoder interface, for position encoder, in the same way we did with ACOPOS P3? I mean, should we configure the ENCOD2? ParIDs 420/421/422?
I see errors on DriveLog when I try to execute the same sequence was running fine with ACOPOS P3: **
**
Why?
You can’t do that! On ACOPOSmulti each channel (axis) can only access their own encoder interface with ENCOD1… ParIDs, there are no ENCOD2 ParIDs available. The “Crosslink” makes it possible to transfer values between channels, like the encoder position.
In our use case, where the axis on channel 1 should use the encoder position from channel 2 for position control, the following sequence is necessary:
- Parametrize the scaling factors for the encoder on channel 2 via an axis object assigned to channel 2 with ENCOD1 ParIDs
- Parametrize the scaling factors for the encoder on channel 1 (via an axis object assigned to channel 1 with ENCOD1 ParIDs)
- Activate the “Crosslink”
Any news? Should I configure again all ParIDs?
No with mapp Motion >= 6.6!
mapp Motion does this sequence at startup when “Two encoders” is configured for “Encoder link”, but it requires an “Axis reference” assigned to channel 2 (to be able to write to ParID values on channel 2).
Cool! I did a test in simulation but on the DriveLog I still see configured 1-encoder control: ParID 230 (CTRL Position controller: Actual encoder position parameter ID) = 91 (Encoder1: Actual position):
Why?
With simulated drives (on the PLC or on Arsim) this is not possible, because the drives are simulated as single axis drives and the “Crosslink” does not exist.
Ok, but I have already developed my sequence with ParIDs with old mapp Motion release, why we should rewrite the logic?
When you change the value of the encoder interface you have to check that the encoder interface is ready to accept new values…Are you checking the status of the ParID 178?
With MC_BR_ProcessParam, the function block internally checks the status of Encoder interface before it applies new values.
Got it!
Special thanks to @Martin.Schrott !
Thanks
Ciao
Valerio












