# U10e Error: Another thread ist already controlling the robot

**URL:** https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341
**Category:** Technical Questions
**Created:** [October 1, 2025, 7:26am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341 "2025-10-01T07:26:11Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![mm1](https://avatars.discourse-cdn.com/v4/letter/m/47e85d/32.png) [@mm1](https://forum.universal-robots.com/u/mm1)
#### Post date: [October 1, 2025, 7:26am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341/1 "2025-10-01T07:26:11Z")

</div>

Hi,

i have the robot running with the same program for three years and in the last two to three weeks the error message sometimes comes up. Not with every time it runs, but always on the same position in the program. Before that it always run without problems.

Where i can see which thread ist controlling the robot and which one wants to controll the robot?

Since i started the robot i didn’t update the firmware or software. Can this cause also problems?

Here the programm (it’s in german):  
Programm  
Init Variablen  
VorStart  
First\_Run≔ True  
write\_output\_integer\_register(0,0)  
PRG\_Parkposi≔ False  
Lage\_Zähler≔0  
weiter≔ False  
Lage\_Fehler≔ False  
Lage\_Abgehoben≔ False  
Programm\_Aktiv≔ False  
Einstellen A0\_Parkposition=Aus  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A2\_Karton\_voll=Aus  
Einstellen A3\_Lage\_Fehler=Aus  
Einstellen out\_Vakuum=Aus  
Wunschhoehe≔0.8  
aktuelle\_Pos≔get\_actual\_tcp\_pose()  
neu1\_mit\_fest\_Z≔p[aktuelle\_Pos[0],aktuelle\_Pos[1],Wunschhoehe,aktuelle\_Pos[3],aktuelle\_Pos[4],aktuelle\_Pos[5]]  
If I2\_FG\_Offenhalt≟ True  
FahreLinear  
neu1\_mit\_fest\_Z  
Einstellen A1\_Sichere\_Lage=Ein  
Warten: 1.0  
Wegpunkt\_2  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Else  
Warten I2\_FG\_Offenhalt=HI  
Warten: 0.5  
FahreLinear  
neu1\_mit\_fest\_Z  
Einstellen A1\_Sichere\_Lage=Ein  
Warten: 1.0  
Wegpunkt\_2  
Parkposition  
Einstellen A0\_Parkposition=Ein

Roboterprogramm  
If First\_Run≟ True  
Lage\_Zähler≔1  
Warten I3\_Karton\_da=HI  
Programm\_Aktiv≔ True  
First\_Run≔ False  
Schleife Programm\_Aktiv≟ True  
If Lage\_Zähler≟0 or Lage\_Zähler\>Lage\_Vorgabe  
Aufruf Unterprogramm\_Karton\_Voll  
ElseIf Lage\_Zähler≟1 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_1  
ElseIf Lage\_Zähler≟2 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_2  
ElseIf Lage\_Zähler≟3 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_3  
ElseIf Lage\_Zähler≟4 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_4  
ElseIf Lage\_Zähler≟5 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_5  
ElseIf Lage\_Zähler≟6 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_6  
ElseIf Lage\_Zähler≟7 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_7  
ElseIf Lage\_Zähler≟8 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_8  
ElseIf Lage\_Zähler≟9 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_9  
ElseIf Lage\_Zähler≟10 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_10  
ElseIf Lage\_Zähler≟11 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_11  
ElseIf Lage\_Zähler≟12 and Lage\_Zähler≤Lage\_Vorgabe  
Aufruf Unterprogramm\_Lage\_12

Thread\_2  
‘Kette für Parkposition anfahren’  
Schleife I2\_FG\_Offenhalt≟ True  
Warten read\_input\_boolean\_register(8)≟ True  
PRG\_Parkposi≔ True  
Programm\_Aktiv≔ False  
Einstellen A0\_Parkposition=Aus  
If First\_Run≟ True  
Lage\_Zähler≔1  
First\_Run≔ False  
Else  
Lage\_Zähler≔0  
aktuelle\_Pos≔get\_actual\_tcp\_pose()  
neu2\_mit\_fest\_Z≔p[aktuelle\_Pos[0],aktuelle\_Pos[1],Wunschhoehe,aktuelle\_Pos[3],aktuelle\_Pos[4],aktuelle\_Pos[5]]  
Warten: 1.0  
write\_output\_boolean\_register(8, True )  
FahreLinear  
neu2\_mit\_fest\_Z  
Einstellen A1\_Sichere\_Lage=Ein  
Wegpunkt\_2  
Warten: 0.5  
FahreLinear  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Warten: 0.5  
PRG\_Parkposi≔ False  
Programm\_Aktiv≔ True  
write\_output\_integer\_register(0,0)  
write\_output\_boolean\_register(8, False )

Thread\_3  
‘Kette für Überprüfung nach Aufnahme’  
If Lage\_Abgehoben≟ True and out\_Vakuum≟ True and (In\_Vakuum\_da≟ False or I5\_Kamera\_Fehl≟ True )  
Lage\_Fehler≔ True  
Warten: 0.2  
weiter≔ False  
ElseIf Lage\_Abgehoben≟ True and out\_Vakuum≟ True and In\_Vakuum\_da≟ True and I5\_Kamera\_Fehl≟ False  
Lage\_Fehler≔ False  
Warten: 0.2  
weiter≔ True

Thread\_4  
Schleife Lage\_Fehler≟ True  
Lage\_Abgehoben≔ False  
FahreLinear  
Lage\_Fallhöhe  
Einstellen out\_Vakuum=Aus  
Warten: 0.5  
FahreLinear  
Parkposition  
Einstellen A1\_Sichere\_Lage=Ein  
Einstellen A0\_Parkposition=Ein  
Einstellen A3\_Lage\_Fehler=Ein  
Warten: 1.0  
Einstellen A3\_Lage\_Fehler=Aus  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A0\_Parkposition=Aus  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
If In\_Vakuum\_da≟ True and I5\_Kamera\_Fehl≟ False  
weiter≔ True  
Lage\_Fehler≔ False  
Else  
Lage\_Abgehoben≔ True

Thread\_5  
Schleife  
Lage\_Vorgabe≔read\_input\_integer\_register(0)  
‘Unterprogr\_Kamera’  
Unterprogramm\_Karton\_Voll  
write\_output\_integer\_register(0,0)  
Einstellen A2\_Karton\_voll=Ein  
Warten I3\_Karton\_da=HI  
Warten: 0.5  
Einstellen A2\_Karton\_voll=Aus  
Lage\_Zähler≔1  
Unterprogramm\_Lage\_1  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Warten I1\_FG\_Umsetzer=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage1\_überKart  
FahreLinear  
Lage1\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage1\_überKart  
write\_output\_integer\_register(0,1)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔2  
Unterprogramm\_Lage\_2  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Warten I1\_FG\_Umsetzer=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage2\_überKart  
FahreLinear  
Lage2\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage2\_überKart  
write\_output\_integer\_register(0,2)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔3  
Unterprogramm\_Lage\_3  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Warten I1\_FG\_Umsetzer=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage3\_überKart  
FahreLinear  
Lage3\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage3\_überKart  
write\_output\_integer\_register(0,3)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔4  
Unterprogramm\_Lage\_4  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
wieder\_oben  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage4\_überKart  
FahreLinear  
Lage4\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage4\_überKart  
write\_output\_integer\_register(0,4)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔5  
Unterprogramm\_Lage\_5  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage5\_überKart  
FahreLinear  
Lage5\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage5\_überKart  
write\_output\_integer\_register(0,5)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔6  
Unterprogramm\_Lage\_6  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage6\_überKart  
FahreLinear  
Lage6\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage6\_überKart  
write\_output\_integer\_register(0,6)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔7  
Unterprogramm\_Lage\_7  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Parkposition  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage7\_überKart  
FahreLinear  
Lage7\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage7\_überKart  
write\_output\_integer\_register(0,7)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔8  
Unterprogramm\_Lage\_8  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage8\_überKart  
FahreLinear  
Lage8\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage8\_überKart  
write\_output\_integer\_register(0,8)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔9  
Unterprogramm\_Lage\_9  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage9\_überKart  
FahreLinear  
Lage9\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage9\_überKart  
write\_output\_integer\_register(0,9)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔10  
Unterprogramm\_Lage\_10  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage10\_überKart  
FahreLinear  
Lage10\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage10\_überKart  
write\_output\_integer\_register(0,10)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔11  
Unterprogramm\_Lage\_11  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage11\_überKart  
FahreLinear  
Lage11\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage11\_überKart  
write\_output\_integer\_register(0,11)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔12  
Unterprogramm\_Lage\_12  
FahreLinear  
Warten I0\_Deck\_abholen=HI  
Einstellen A1\_Sichere\_Lage=Aus  
Einstellen A0\_Parkposition=Aus  
Einstellen out\_Vakuum=Ein  
Parkposition  
Aufnahme  
Warten: 0.5  
Parkposition  
Lage\_Abgehoben≔ True  
Warten: 0.2  
Warten weiter≟ True  
Einstellen A1\_Sichere\_Lage=Ein  
Lage\_Abgehoben≔ False  
weiter≔ False  
FahreAchse  
Warten I2\_FG\_Offenhalt=HI  
Lage12\_überKart  
FahreLinear  
Lage12\_inKart  
Warten: 0.5  
Einstellen out\_Vakuum=Aus  
Warten: 1.0  
FahreLinear  
Lage12\_überKart  
write\_output\_integer\_register(0,12)  
FahreAchse  
Parkposition  
Einstellen A0\_Parkposition=Ein  
Lage\_Zähler≔0

---

<div class="post-metadata">

### Author: ![efn](https://avatars.discourse-cdn.com/v4/letter/e/35a633/32.png) [@efn](https://forum.universal-robots.com/u/efn)
#### Post date: [October 1, 2025, 9:00am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341/2 "2025-10-01T09:00:46Z")

</div>

From a quick glance through your robot program and with my very limited German understanding, it looks like you have Move and Waypoints inside your thread. Is this correct?

That should not be possible in the UR, and it’s certainly not supposed to be done like that. Threads are for signal and variable controlling.  
Why or how it’s been working before is a mystery to me, if this is the case. 🙂

---

<div class="post-metadata">

### Author: ![mm1](https://avatars.discourse-cdn.com/v4/letter/m/47e85d/32.png) [@mm1](https://forum.universal-robots.com/u/mm1)
#### Post date: [October 1, 2025, 9:19am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341/3 "2025-10-01T09:19:42Z")

</div>

FahreLiniear = MoveL

FahreAchse = MoveJ

It’s programmed to change the movement, because the robot is in enclosed space and can’t move free. The points for example „Parkposition“ are waypoints, that are in the space, where the robot doesn’t crash into something

---

<div class="post-metadata">

### Author: ![efn](https://avatars.discourse-cdn.com/v4/letter/e/35a633/32.png) [@efn](https://forum.universal-robots.com/u/efn)
#### Post date: [October 1, 2025, 9:33am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341/4 "2025-10-01T09:33:45Z")

</div>

So you have movements within the threads, right? That’s not the correct way to do it, I’m afraid. 🙂

---

<div class="post-metadata">

### Author: ![mm1](https://avatars.discourse-cdn.com/v4/letter/m/47e85d/32.png) [@mm1](https://forum.universal-robots.com/u/mm1)
#### Post date: [October 1, 2025, 9:44am UTC](https://forum.universal-robots.com/t/u10e-error-another-thread-ist-already-controlling-the-robot/41341/5 "2025-10-01T09:44:57Z")

</div>

Ok, then i will need to reprogramm the robot 🙄
