<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[RoboDK Forum - RoboDK API]]></title>
		<link>https://robodk.com/forum/</link>
		<description><![CDATA[RoboDK Forum - https://robodk.com/forum]]></description>
		<pubDate>Sat, 05 Sep 2026 15:08:14 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Physical Robot Does Not Move When Using Ultralytics YOLO in RoboDK Python Script]]></title>
			<link>https://robodk.com/forum/Thread-Physical-Robot-Does-Not-Move-When-Using-Ultralytics-YOLO-in-RoboDK-Python-Script</link>
			<pubDate>Wed, 19 Aug 2026 12:14:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10107">Muhammad Faizan Ahmed</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Physical-Robot-Does-Not-Move-When-Using-Ultralytics-YOLO-in-RoboDK-Python-Script</guid>
			<description><![CDATA[Hello everyone,<br />
<br />
I am currently working on a project in RoboDK involving two JAKA collaborative robots (Zu7 and Zu12). I am using a Python script in RoboDK to control the robots and integrate a real-time vision system using a USB webcam and a YOLO11n model.<br />
<br />
My robot movement program works correctly and the physical robots move as expected when I run the script without the YOLO/Ultralytics import.<br />
<br />
However, when I add:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>from ultralytics import YOLO</code></div></div><br />
the RoboDK simulation continues to work, but the physical robots do not move. Interestingly, if I comment out the Ultralytics import, the physical robot movement works again.<br />
<br />
I am using:<ul class="mycode_list"><li>RoboDK<br />
</li>
<li>Python 3.10.11<br />
</li>
<li>Ultralytics <br />
</li>
<li>OpenCV <br />
</li>
<li>YOLO11n<br />
</li>
<li>JAKA Zu7 and Zu12<br />
</li>
</ul>
The Ultralytics package is installed in the same Python virtual environment used by RoboDK, and importing YOLO works successfully in a standalone Python test.<br />
<br />
My intended workflow is:<ul class="mycode_list"><li>Move the robots to predefined positions using RoboDK.<br />
</li>
<li>Start the webcam-based YOLO11n vision system.<br />
</li>
<li>Detect the needle and gripper states.<br />
</li>
<li>Based on the detection, continue the robot movement sequence.<br />
</li>
<li>Execute the same sequence on the physical JAKA robots.<br />
</li>
</ul>
The main issue is that the RoboDK simulation executes the movements, but the physical robot does not move when Ultralytics is imported.<br />
<ul class="mycode_list"><li>Could the Ultralytics/PyTorch libraries interfere with RoboDK's physical robot driver, Python execution, or communication with the robot?<br />
</li>
<li>Is there a recommended way to run YOLO/OpenCV vision processing alongside RoboDK's physical robot control without preventing the robot driver from executing?<br />
</li>
<li>Would it be better to run the vision processing in a separate Python process/thread and communicate the detection result to the RoboDK script?<br />
</li>
</ul>
<br />
Any guidance on how to diagnose this issue would be greatly appreciated. See the attached code file for reference.<br />
Thank you.<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
&nbsp;&nbsp;<a href="attachment.php?aid=7852" target="_blank" title="">Complete Code.txt</a> (Size: 17.49 KB / Downloads: 16)
]]></description>
			<content:encoded><![CDATA[Hello everyone,<br />
<br />
I am currently working on a project in RoboDK involving two JAKA collaborative robots (Zu7 and Zu12). I am using a Python script in RoboDK to control the robots and integrate a real-time vision system using a USB webcam and a YOLO11n model.<br />
<br />
My robot movement program works correctly and the physical robots move as expected when I run the script without the YOLO/Ultralytics import.<br />
<br />
However, when I add:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>from ultralytics import YOLO</code></div></div><br />
the RoboDK simulation continues to work, but the physical robots do not move. Interestingly, if I comment out the Ultralytics import, the physical robot movement works again.<br />
<br />
I am using:<ul class="mycode_list"><li>RoboDK<br />
</li>
<li>Python 3.10.11<br />
</li>
<li>Ultralytics <br />
</li>
<li>OpenCV <br />
</li>
<li>YOLO11n<br />
</li>
<li>JAKA Zu7 and Zu12<br />
</li>
</ul>
The Ultralytics package is installed in the same Python virtual environment used by RoboDK, and importing YOLO works successfully in a standalone Python test.<br />
<br />
My intended workflow is:<ul class="mycode_list"><li>Move the robots to predefined positions using RoboDK.<br />
</li>
<li>Start the webcam-based YOLO11n vision system.<br />
</li>
<li>Detect the needle and gripper states.<br />
</li>
<li>Based on the detection, continue the robot movement sequence.<br />
</li>
<li>Execute the same sequence on the physical JAKA robots.<br />
</li>
</ul>
The main issue is that the RoboDK simulation executes the movements, but the physical robot does not move when Ultralytics is imported.<br />
<ul class="mycode_list"><li>Could the Ultralytics/PyTorch libraries interfere with RoboDK's physical robot driver, Python execution, or communication with the robot?<br />
</li>
<li>Is there a recommended way to run YOLO/OpenCV vision processing alongside RoboDK's physical robot control without preventing the robot driver from executing?<br />
</li>
<li>Would it be better to run the vision processing in a separate Python process/thread and communicate the detection result to the RoboDK script?<br />
</li>
</ul>
<br />
Any guidance on how to diagnose this issue would be greatly appreciated. See the attached code file for reference.<br />
Thank you.<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
&nbsp;&nbsp;<a href="attachment.php?aid=7852" target="_blank" title="">Complete Code.txt</a> (Size: 17.49 KB / Downloads: 16)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Not generating output file using API]]></title>
			<link>https://robodk.com/forum/Thread-Not-generating-output-file-using-API</link>
			<pubDate>Wed, 05 Aug 2026 14:41:04 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10958">samrobodk</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Not-generating-output-file-using-API</guid>
			<description><![CDATA[I need to generate an offline robot program by directly recording a stream of Python API commands.<br />
<br />
The problem I am having is that no file is created, and I am at a complete loss. I have tried 100+ variants and looked at every doc and example I can find.<br />
<br />
Manual program generation and MakeProgram() both work, but I need the stream recorded instead.<br />
<br />
ProgramStart returns 0 errors, but no robot program file is generated after RDK.Finish().<br />
<br />
I reproduced the same issue with a clean ABB station using ABB_RAPID_IRC5 and separately with FANUC using Fanuc_R30i.<br />
<br />
Is there an additional step required when using RUNMODE_MAKE_ROBOTPROG and ProgramStart, , or am I misunderstanding the intended use of this run mode? <br />
<br />
RoboDK 6.0.6, Python 3.13, robodk package 5.9.4. <br />
<br />
Code:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>from robodk.robolink import *<br />
import time<br />
RDK = Robolink()<br />
RDK.AddFile("C:/Users/Sam/code/robodk_stations/test_station.rdk")<br />
robot = RDK.Item("ABB CRB 1300-7/1.4", ITEM_TYPE_ROBOT)<br />
t1 = RDK.Item("safe_target_1", ITEM_TYPE_TARGET)<br />
t2 = RDK.Item("safe_target_2", ITEM_TYPE_TARGET)<br />
RDK.setRunMode(RUNMODE_MAKE_ROBOTPROG)<br />
errors = RDK.ProgramStart(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"Prog123",<br />
&nbsp;&nbsp;&nbsp;&nbsp;"C:/Users/Sam/Downloads/",<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ABB_RAPID_IRC5",<br />
&nbsp;&nbsp;&nbsp;&nbsp;robot<br />
)<br />
print("ProgramStart errors:", errors)<br />
robot.MoveJ(t1)<br />
robot.MoveL(t2)<br />
RDK.Finish()</code></div></div><br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/robodk.png" title="RoboDK station" border="0" alt=".rdk" />
&nbsp;&nbsp;<a href="attachment.php?aid=7838" target="_blank" title="">test_station.rdk</a> (Size: 1.65 MB / Downloads: 53)
]]></description>
			<content:encoded><![CDATA[I need to generate an offline robot program by directly recording a stream of Python API commands.<br />
<br />
The problem I am having is that no file is created, and I am at a complete loss. I have tried 100+ variants and looked at every doc and example I can find.<br />
<br />
Manual program generation and MakeProgram() both work, but I need the stream recorded instead.<br />
<br />
ProgramStart returns 0 errors, but no robot program file is generated after RDK.Finish().<br />
<br />
I reproduced the same issue with a clean ABB station using ABB_RAPID_IRC5 and separately with FANUC using Fanuc_R30i.<br />
<br />
Is there an additional step required when using RUNMODE_MAKE_ROBOTPROG and ProgramStart, , or am I misunderstanding the intended use of this run mode? <br />
<br />
RoboDK 6.0.6, Python 3.13, robodk package 5.9.4. <br />
<br />
Code:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>from robodk.robolink import *<br />
import time<br />
RDK = Robolink()<br />
RDK.AddFile("C:/Users/Sam/code/robodk_stations/test_station.rdk")<br />
robot = RDK.Item("ABB CRB 1300-7/1.4", ITEM_TYPE_ROBOT)<br />
t1 = RDK.Item("safe_target_1", ITEM_TYPE_TARGET)<br />
t2 = RDK.Item("safe_target_2", ITEM_TYPE_TARGET)<br />
RDK.setRunMode(RUNMODE_MAKE_ROBOTPROG)<br />
errors = RDK.ProgramStart(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"Prog123",<br />
&nbsp;&nbsp;&nbsp;&nbsp;"C:/Users/Sam/Downloads/",<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ABB_RAPID_IRC5",<br />
&nbsp;&nbsp;&nbsp;&nbsp;robot<br />
)<br />
print("ProgramStart errors:", errors)<br />
robot.MoveJ(t1)<br />
robot.MoveL(t2)<br />
RDK.Finish()</code></div></div><br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/robodk.png" title="RoboDK station" border="0" alt=".rdk" />
&nbsp;&nbsp;<a href="attachment.php?aid=7838" target="_blank" title="">test_station.rdk</a> (Size: 1.65 MB / Downloads: 53)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Unable to get anything from getDI]]></title>
			<link>https://robodk.com/forum/Thread-Unable-to-get-anything-from-getDI</link>
			<pubDate>Mon, 27 Jul 2026 19:47:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10107">Muhammad Faizan Ahmed</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Unable-to-get-anything-from-getDI</guid>
			<description><![CDATA[I am currently using Jaka robot and reading its input using robot.getDI(3) command. Even though the DI pin on robot controller is already high but the robot.getDI() command is not showing anything. I also read similar queries on the forum, but i did not work. I also changed the data type to int as the output from getDI() command is string. I'm able to set the digital output but can read the digital inputs.]]></description>
			<content:encoded><![CDATA[I am currently using Jaka robot and reading its input using robot.getDI(3) command. Even though the DI pin on robot controller is already high but the robot.getDI() command is not showing anything. I also read similar queries on the forum, but i did not work. I also changed the data type to int as the output from getDI() command is string. I'm able to set the digital output but can read the digital inputs.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Controlling OnRobot Eyes Camera with Python in RoboDK]]></title>
			<link>https://robodk.com/forum/Thread-Controlling-OnRobot-Eyes-Camera-with-Python-in-RoboDK</link>
			<pubDate>Sat, 25 Jul 2026 22:16:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10107">Muhammad Faizan Ahmed</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Controlling-OnRobot-Eyes-Camera-with-Python-in-RoboDK</guid>
			<description><![CDATA[Hi everyone,<br />
<br />
I'm currently working on a <span style="font-weight: bold;" class="mycode_b">JAKA Zu7</span> robot with an <span style="font-weight: bold;" class="mycode_b">OnRobot RG6 gripper</span> and an <span style="font-weight: bold;" class="mycode_b">OnRobot Eyes</span> camera.<br />
<br />
At the moment, I'm controlling the robot movements and the RG6 gripper successfully using <span style="font-weight: bold;" class="mycode_b">Python scripts both in RoboDK and actual.</span> My next goal is to integrate the OnRobot Eyes camera into my Python workflow.<br />
<br />
I would like to know:<ul class="mycode_list"><li>Is it possible to control the <span style="font-weight: bold;" class="mycode_b">OnRobot Eyes</span> camera directly from a Python script?<br />
</li>
<li>Is there a Python API or SDK available for the camera?<br />
</li>
<li>How can I trigger an image capture or object detection from Python?<br />
</li>
<li>Once an object is detected, how can I retrieve its pick coordinates (X, Y, Z and orientation) so that I can send them to RoboDK and move the robot to pick the object?<br />
</li>
<li>Has anyone integrated the OnRobot Eyes camera with RoboDK while controlling everything through Python?<br />
</li>
</ul>
<br />
I've gone through the OnRobot Learning courses and documentation but couldn't find any examples showing Python integration with the OnRobot Eyes camera.<br />
<br />
If anyone has experience with this setup or can point me to relevant documentation, example code, or a recommended workflow, I would really appreciate your help.<br />
<br />
Thank you!]]></description>
			<content:encoded><![CDATA[Hi everyone,<br />
<br />
I'm currently working on a <span style="font-weight: bold;" class="mycode_b">JAKA Zu7</span> robot with an <span style="font-weight: bold;" class="mycode_b">OnRobot RG6 gripper</span> and an <span style="font-weight: bold;" class="mycode_b">OnRobot Eyes</span> camera.<br />
<br />
At the moment, I'm controlling the robot movements and the RG6 gripper successfully using <span style="font-weight: bold;" class="mycode_b">Python scripts both in RoboDK and actual.</span> My next goal is to integrate the OnRobot Eyes camera into my Python workflow.<br />
<br />
I would like to know:<ul class="mycode_list"><li>Is it possible to control the <span style="font-weight: bold;" class="mycode_b">OnRobot Eyes</span> camera directly from a Python script?<br />
</li>
<li>Is there a Python API or SDK available for the camera?<br />
</li>
<li>How can I trigger an image capture or object detection from Python?<br />
</li>
<li>Once an object is detected, how can I retrieve its pick coordinates (X, Y, Z and orientation) so that I can send them to RoboDK and move the robot to pick the object?<br />
</li>
<li>Has anyone integrated the OnRobot Eyes camera with RoboDK while controlling everything through Python?<br />
</li>
</ul>
<br />
I've gone through the OnRobot Learning courses and documentation but couldn't find any examples showing Python integration with the OnRobot Eyes camera.<br />
<br />
If anyone has experience with this setup or can point me to relevant documentation, example code, or a recommended workflow, I would really appreciate your help.<br />
<br />
Thank you!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Simulating an imported ABB robot program]]></title>
			<link>https://robodk.com/forum/Thread-Simulating-an-imported-ABB-robot-program</link>
			<pubDate>Wed, 22 Jul 2026 23:24:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=7192">HenryInUtah</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Simulating-an-imported-ABB-robot-program</guid>
			<description><![CDATA[I am using RoboDK in a PySide application and have a couple confusing things that I cannot figure out. The attached station has a couple small tool change paths. I have exported both of those as *.mod files that are also attached.<br />
<br />
I know that I can simulate them in RoboDK as normal, but there are a lot of steps in our process that happen between authoring the paths and simulating them later.<br />
<br />
When I use the Python API to import the mod files, it pops up a couple dialog boxes that get in the way and require user input.  I need to suppress those dialog boxes and work around them somehow.  Here are the two dialogs:<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7811" target="_blank" title="">Import Options.png</a> (Size: 11.72 KB / Downloads: 53)
<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7812" target="_blank" title="">Import Summary.png</a> (Size: 10.79 KB / Downloads: 56)
<br />
The program seems to import perfectly. However, the API says that the program is not valid. If I double click the program in the tree it will run as expected.  If I select the program and press F5 it will update the program and the icon returns to "valid".  But if the script tries to use the Update() method on the program it fails.<br />
<br />
If you open the station, there is a "Import Robot Program" script that goes through all of these steps. I hope that you see the same results that I see :)<br />
<br />
Does anyone have some suggestions of what I should try?  Or what I am doing wrong - which is more likely.<br />
<br />
Thanks,<br />
Henry<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/prog.png" title="ABB Rapid Program" border="0" alt=".mod" />
&nbsp;&nbsp;<a href="attachment.php?aid=7809" target="_blank" title="">SpindleApproach.mod</a> (Size: 2.51 KB / Downloads: 49)
<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/prog.png" title="ABB Rapid Program" border="0" alt=".mod" />
&nbsp;&nbsp;<a href="attachment.php?aid=7810" target="_blank" title="">SpindleRetract.mod</a> (Size: 2.06 KB / Downloads: 43)
<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/robodk.png" title="RoboDK station" border="0" alt=".rdk" />
&nbsp;&nbsp;<a href="attachment.php?aid=7813" target="_blank" title="">Tool Change Development Simplified.rdk</a> (Size: 3.29 MB / Downloads: 47)
]]></description>
			<content:encoded><![CDATA[I am using RoboDK in a PySide application and have a couple confusing things that I cannot figure out. The attached station has a couple small tool change paths. I have exported both of those as *.mod files that are also attached.<br />
<br />
I know that I can simulate them in RoboDK as normal, but there are a lot of steps in our process that happen between authoring the paths and simulating them later.<br />
<br />
When I use the Python API to import the mod files, it pops up a couple dialog boxes that get in the way and require user input.  I need to suppress those dialog boxes and work around them somehow.  Here are the two dialogs:<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7811" target="_blank" title="">Import Options.png</a> (Size: 11.72 KB / Downloads: 53)
<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7812" target="_blank" title="">Import Summary.png</a> (Size: 10.79 KB / Downloads: 56)
<br />
The program seems to import perfectly. However, the API says that the program is not valid. If I double click the program in the tree it will run as expected.  If I select the program and press F5 it will update the program and the icon returns to "valid".  But if the script tries to use the Update() method on the program it fails.<br />
<br />
If you open the station, there is a "Import Robot Program" script that goes through all of these steps. I hope that you see the same results that I see :)<br />
<br />
Does anyone have some suggestions of what I should try?  Or what I am doing wrong - which is more likely.<br />
<br />
Thanks,<br />
Henry<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/prog.png" title="ABB Rapid Program" border="0" alt=".mod" />
&nbsp;&nbsp;<a href="attachment.php?aid=7809" target="_blank" title="">SpindleApproach.mod</a> (Size: 2.51 KB / Downloads: 49)
<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/prog.png" title="ABB Rapid Program" border="0" alt=".mod" />
&nbsp;&nbsp;<a href="attachment.php?aid=7810" target="_blank" title="">SpindleRetract.mod</a> (Size: 2.06 KB / Downloads: 43)
<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/robodk.png" title="RoboDK station" border="0" alt=".rdk" />
&nbsp;&nbsp;<a href="attachment.php?aid=7813" target="_blank" title="">Tool Change Development Simplified.rdk</a> (Size: 3.29 MB / Downloads: 47)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Alternative way to obtain all IK solutions for FANUC CRX-10iA]]></title>
			<link>https://robodk.com/forum/Thread-Alternative-way-to-obtain-all-IK-solutions-for-FANUC-CRX-10iA</link>
			<pubDate>Wed, 22 Jul 2026 04:48:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10935">Shigeaki Takatsu</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Alternative-way-to-obtain-all-IK-solutions-for-FANUC-CRX-10iA</guid>
			<description><![CDATA[Hello,<br />
<br />
I am using a FANUC CRX-10iA with RoboDK 5.6.7.<br />
<br />
I found the existing forum threads explaining that multiple configurations are<br />
not currently supported for FANUC CRX robots.<br />
<br />
I would like to know whether there is any alternative way to obtain all valid<br />
inverse-kinematics solutions for a given Cartesian pose.<br />
<br />
In my test, SolveIK_All() returns only one solution.<br />
<br />
However, I confirmed that another valid joint posture exists for exactly the<br />
same Cartesian pose. I verified this using SolveFK(), and the pose difference<br />
was effectively zero.<br />
<br />
I also tried SolveIK() with the other valid joint posture provided as<br />
joints_approx, but RoboDK still returned the same single solution.<br />
<br />
Is there any alternative API, solver, robot model setting, or recommended<br />
method to obtain all valid IK solutions for the CRX-10iA?<br />
<br />
Thank you.]]></description>
			<content:encoded><![CDATA[Hello,<br />
<br />
I am using a FANUC CRX-10iA with RoboDK 5.6.7.<br />
<br />
I found the existing forum threads explaining that multiple configurations are<br />
not currently supported for FANUC CRX robots.<br />
<br />
I would like to know whether there is any alternative way to obtain all valid<br />
inverse-kinematics solutions for a given Cartesian pose.<br />
<br />
In my test, SolveIK_All() returns only one solution.<br />
<br />
However, I confirmed that another valid joint posture exists for exactly the<br />
same Cartesian pose. I verified this using SolveFK(), and the pose difference<br />
was effectively zero.<br />
<br />
I also tried SolveIK() with the other valid joint posture provided as<br />
joints_approx, but RoboDK still returned the same single solution.<br />
<br />
Is there any alternative API, solver, robot model setting, or recommended<br />
method to obtain all valid IK solutions for the CRX-10iA?<br />
<br />
Thank you.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Guidance on PLC Integration and Robot Control in RoboDK]]></title>
			<link>https://robodk.com/forum/Thread-Guidance-on-PLC-Integration-and-Robot-Control-in-RoboDK</link>
			<pubDate>Mon, 20 Jul 2026 10:12:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10930">pritesh</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Guidance-on-PLC-Integration-and-Robot-Control-in-RoboDK</guid>
			<description><![CDATA[I am currently working on an industrial automation project and would like to learn the complete process of integrating a PLC with RoboDK and controlling a robot using PLC logic.<br />
<br />
My objective is to build a complete simulation where the PLC communicates with RoboDK, exchanges input/output signals, and controls the robot's movements and program execution in real time.<br />
I would appreciate your guidance on the following:<ul class="mycode_list"><li>How to connect a PLC with RoboDK.<br />
</li>
<li>Supported communication protocols (such as EtherNet/IP, PROFINET, Modbus TCP, OPC UA, etc.).<br />
</li>
<li>How to configure communication between the PLC and RoboDK.<br />
</li>
<li>How to send and receive I/O signals.<br />
</li>
<li>How to control robot movements and execute robot programs using PLC logic.<br />
</li>
<li>Any documentation, tutorials, sample projects, or training resources that explain the complete workflow from start to finish.<br />
</li>
</ul>
I am eager to learn the entire setup and would greatly appreciate any recommendations or learning materials you can provide.]]></description>
			<content:encoded><![CDATA[I am currently working on an industrial automation project and would like to learn the complete process of integrating a PLC with RoboDK and controlling a robot using PLC logic.<br />
<br />
My objective is to build a complete simulation where the PLC communicates with RoboDK, exchanges input/output signals, and controls the robot's movements and program execution in real time.<br />
I would appreciate your guidance on the following:<ul class="mycode_list"><li>How to connect a PLC with RoboDK.<br />
</li>
<li>Supported communication protocols (such as EtherNet/IP, PROFINET, Modbus TCP, OPC UA, etc.).<br />
</li>
<li>How to configure communication between the PLC and RoboDK.<br />
</li>
<li>How to send and receive I/O signals.<br />
</li>
<li>How to control robot movements and execute robot programs using PLC logic.<br />
</li>
<li>Any documentation, tutorials, sample projects, or training resources that explain the complete workflow from start to finish.<br />
</li>
</ul>
I am eager to learn the entire setup and would greatly appreciate any recommendations or learning materials you can provide.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Controlling RG6 gripper using digital output command]]></title>
			<link>https://robodk.com/forum/Thread-Controlling-RG6-gripper-using-digital-output-command</link>
			<pubDate>Mon, 13 Jul 2026 22:19:56 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10107">Muhammad Faizan Ahmed</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Controlling-RG6-gripper-using-digital-output-command</guid>
			<description><![CDATA[Hello everyone,<br />
<br />
I'm currently controlling Jaka Zu7 using Python script, running directly in RoboDK. Now, I want to control the OnRobot RG6 gripper which is attached to the robot. I tried to use the following command but it did not work.<br />
<br />
Command: robot.setDO(0,1) # first value represents the digital ouput while second shows the control value<br />
<br />
I also tried program.setDO(0,1) command and program = RDK.AddProgram(ProgramName) but it also did not work. Kindly guide me how can I control the gripper using python code. Looking forward to hearing from you all. Thank you]]></description>
			<content:encoded><![CDATA[Hello everyone,<br />
<br />
I'm currently controlling Jaka Zu7 using Python script, running directly in RoboDK. Now, I want to control the OnRobot RG6 gripper which is attached to the robot. I tried to use the following command but it did not work.<br />
<br />
Command: robot.setDO(0,1) # first value represents the digital ouput while second shows the control value<br />
<br />
I also tried program.setDO(0,1) command and program = RDK.AddProgram(ProgramName) but it also did not work. Kindly guide me how can I control the gripper using python code. Looking forward to hearing from you all. Thank you]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Creating a generic item and setting a custom icon in the tree]]></title>
			<link>https://robodk.com/forum/Thread-Creating-a-generic-item-and-setting-a-custom-icon-in-the-tree</link>
			<pubDate>Mon, 08 Jun 2026 22:46:46 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=7192">HenryInUtah</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Creating-a-generic-item-and-setting-a-custom-icon-in-the-tree</guid>
			<description><![CDATA[There is a good chance that I am misunderstanding what the "IconSet" command does.  I am hoping that it will change the icon next to the instruction in the station.  Like this...<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7716" target="_blank" title="">2026-06-08 16 39 32.png</a> (Size: 7.11 KB / Downloads: 121)
<br />
<br />
I have tried this command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>currentProg.Instruction(n).setParam('IconSet', "C:/images/LargeNext.png")</code></div></div><br />
<br />
Do I need to resize the icon?  I attached the file.  I was hoping that Qt would handle the scaling.<br />
<br />
Thanks for your help,<br />
Henry<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7715" target="_blank" title="">LargeNext.png</a> (Size: 2.57 KB / Downloads: 155)
]]></description>
			<content:encoded><![CDATA[There is a good chance that I am misunderstanding what the "IconSet" command does.  I am hoping that it will change the icon next to the instruction in the station.  Like this...<br />

<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7716" target="_blank" title="">2026-06-08 16 39 32.png</a> (Size: 7.11 KB / Downloads: 121)
<br />
<br />
I have tried this command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>currentProg.Instruction(n).setParam('IconSet', "C:/images/LargeNext.png")</code></div></div><br />
<br />
Do I need to resize the icon?  I attached the file.  I was hoping that Qt would handle the scaling.<br />
<br />
Thanks for your help,<br />
Henry<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7715" target="_blank" title="">LargeNext.png</a> (Size: 2.57 KB / Downloads: 155)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Moving Two Robots Independently]]></title>
			<link>https://robodk.com/forum/Thread-Moving-Two-Robots-Independently</link>
			<pubDate>Tue, 05 May 2026 16:36:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=7192">HenryInUtah</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Moving-Two-Robots-Independently</guid>
			<description><![CDATA[Our PySide program will embed the RoboDK window so the user can visulize the robot movement.  This worked perfectly in the last project - which only used one robot.  The robot in the station was connected as normal and the simulated robot matched the real robot positions.  <br />
<br />
Skipping some steps... the <span style="font-family: Courier New;" class="mycode_font">self.RDK = robolink.Robolink(args=["-NEWINSTANCE", "-EXIT_LAST_COM", "-SKIPCOM_ALL"]) </span>command provided a RoboLink instance for our program.  That object could be used to move the robot or send a program to the controller.  No problems so far.<br />
<br />
The next project will use two robots - each with a seventh axis.  Each robot will have a separate ABB controller running the RoboDK driver.  I expect the RoboDK window to embed using the same steps as before.  Each robot in the station can connect and (hopefully) the simulation will echo what is happening in real life as the two robots move.  But here is where I get confused.<br />
<br />
Consider the example where each robot needs to calibrate an end effector.  Our program will move a robot to a position, signal the end effector to do something, then repeat for many positions.  This should happen for each robot at the same time - but the two robots are not "synchronized", they are running independently.  How do I do this?<br />
<br />
The first idea is to start two threads and pass the main RoboLink object to them. The "<span style="font-family: Courier New;" class="mycode_font">self.RDK</span>" object created above.  Thread "A" will make a reference to "Robot A" using something like <span style="font-family: Courier New;" class="mycode_font">self.Robot = self.RDK.Item('RobotA', 2)</span> and move it as needed.  Similarly, thread "B" will move RobotB.  In reality, they are both using methods in the same RoboLink object (I think).  What happens if both threads tell RoboLink to move different robots at the same?<br />
<br />
The "<a href="https://robodk.com/doc/en/PythonAPI/examples.html#synchronize-3-robots" target="_blank" rel="noopener" class="mycode_url">Synchronize 3 Robots</a>" example in the documentation also creates a thread for each robot, but the threads then create a new RoboLink instance.  How would this work if the RoboDK window (with the initial RoboLink) is embedded in our program?  That "embedded RoboLink" is also talking to the drivers to update the display, correct?<br />
<br />
I don't feel like I explained this very well - here is some pseudo-code that might help.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>class ApplicationGUI(QtWidgets.QMainWindow):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def embedRoboSK(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.RDK = robolink.Robolink(args=["-NEWINSTANCE", "-EXIT_LAST_COM", "-SKIPCOM_ALL"])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Stuff happens to embed the window and connect to the robots<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def startTreads(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Each thread gets a reference to the main RoboLink object and a file of instructions<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA = calibrationThreadA()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.rdk = self.RDK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.instructions = pathToListOfPositionsA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.start()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB = calibrationThreadB(pathToListOfPositionsB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.rdk = self.RDK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.instructions = pathToListOfPositionsB<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.start()<br />
<br />
<br />
class calibrationThreadA(QThread):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, parent=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QThread.__init__(self, parent)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def run(self)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.robot = self.rdk.Item('RobotA', 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Read the self.instructions file and move the robot when needed.<br />
<br />
<br />
class calibrationThreadB(QThread):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, parent=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QThread.__init__(self, parent)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def run(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.robot = self.rdk.Item('RobotB', 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Read the self.instructions file and move the robot when needed.</code></div></div>]]></description>
			<content:encoded><![CDATA[Our PySide program will embed the RoboDK window so the user can visulize the robot movement.  This worked perfectly in the last project - which only used one robot.  The robot in the station was connected as normal and the simulated robot matched the real robot positions.  <br />
<br />
Skipping some steps... the <span style="font-family: Courier New;" class="mycode_font">self.RDK = robolink.Robolink(args=["-NEWINSTANCE", "-EXIT_LAST_COM", "-SKIPCOM_ALL"]) </span>command provided a RoboLink instance for our program.  That object could be used to move the robot or send a program to the controller.  No problems so far.<br />
<br />
The next project will use two robots - each with a seventh axis.  Each robot will have a separate ABB controller running the RoboDK driver.  I expect the RoboDK window to embed using the same steps as before.  Each robot in the station can connect and (hopefully) the simulation will echo what is happening in real life as the two robots move.  But here is where I get confused.<br />
<br />
Consider the example where each robot needs to calibrate an end effector.  Our program will move a robot to a position, signal the end effector to do something, then repeat for many positions.  This should happen for each robot at the same time - but the two robots are not "synchronized", they are running independently.  How do I do this?<br />
<br />
The first idea is to start two threads and pass the main RoboLink object to them. The "<span style="font-family: Courier New;" class="mycode_font">self.RDK</span>" object created above.  Thread "A" will make a reference to "Robot A" using something like <span style="font-family: Courier New;" class="mycode_font">self.Robot = self.RDK.Item('RobotA', 2)</span> and move it as needed.  Similarly, thread "B" will move RobotB.  In reality, they are both using methods in the same RoboLink object (I think).  What happens if both threads tell RoboLink to move different robots at the same?<br />
<br />
The "<a href="https://robodk.com/doc/en/PythonAPI/examples.html#synchronize-3-robots" target="_blank" rel="noopener" class="mycode_url">Synchronize 3 Robots</a>" example in the documentation also creates a thread for each robot, but the threads then create a new RoboLink instance.  How would this work if the RoboDK window (with the initial RoboLink) is embedded in our program?  That "embedded RoboLink" is also talking to the drivers to update the display, correct?<br />
<br />
I don't feel like I explained this very well - here is some pseudo-code that might help.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>class ApplicationGUI(QtWidgets.QMainWindow):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def embedRoboSK(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.RDK = robolink.Robolink(args=["-NEWINSTANCE", "-EXIT_LAST_COM", "-SKIPCOM_ALL"])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Stuff happens to embed the window and connect to the robots<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def startTreads(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Each thread gets a reference to the main RoboLink object and a file of instructions<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA = calibrationThreadA()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.rdk = self.RDK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.instructions = pathToListOfPositionsA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadA.start()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB = calibrationThreadB(pathToListOfPositionsB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.rdk = self.RDK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.instructions = pathToListOfPositionsB<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.threadB.start()<br />
<br />
<br />
class calibrationThreadA(QThread):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, parent=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QThread.__init__(self, parent)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def run(self)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.robot = self.rdk.Item('RobotA', 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Read the self.instructions file and move the robot when needed.<br />
<br />
<br />
class calibrationThreadB(QThread):<br />
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, parent=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QThread.__init__(self, parent)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def run(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.robot = self.rdk.Item('RobotB', 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Read the self.instructions file and move the robot when needed.</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Robot is not moving]]></title>
			<link>https://robodk.com/forum/Thread-Robot-is-not-moving</link>
			<pubDate>Tue, 05 May 2026 15:56:23 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=9104">weisseran</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Robot-is-not-moving</guid>
			<description><![CDATA[I'm using Mecademic Meca500.<br />
When I rotate the dial to change the robot orientation, I can see the robot on my screen moving but the real robot is not moving unless I click Move Joint.<br />
It was moving before.<br />
What went wrong ?]]></description>
			<content:encoded><![CDATA[I'm using Mecademic Meca500.<br />
When I rotate the dial to change the robot orientation, I can see the robot on my screen moving but the real robot is not moving unless I click Move Joint.<br />
It was moving before.<br />
What went wrong ?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Program instruction operations using the API]]></title>
			<link>https://robodk.com/forum/Thread-Program-instruction-operations-using-the-API</link>
			<pubDate>Mon, 27 Apr 2026 17:16:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=7192">HenryInUtah</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Program-instruction-operations-using-the-API</guid>
			<description><![CDATA[My goal is to have a script that will insert a command after the selected instruction in a program.  The snippet of code below finds the instruction that is selected/highlighted.  It is a robodk.robolink.Item object.  Next, the script looks at the parent of this (which should be an ITEM_TYPE_PROGRAM) and loops through the instructions looking for a match.<br />
<br />
However, using program.Instruction(n) returns a tuple.  So, I have a tuple and a  robodk.robolink.Item with no way to check if they are the same.  I cannot use the Item.Type() + Item.Name() because the names are not unique.<br />
<br />
I hope that I explained that so it made sense...<br />
<br />
This code is part of a PySide app - sorry if it looks a little different.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;def btnSelectedItem_Clicked(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''Show information about the selected item in the tree'''<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.clear()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentSelection = self.rdk.Selection()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if len(currentSelection) == 0:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append('No items selected')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item = currentSelection[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemType = item.Type()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemName = item.Name()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemParent = item.Parent()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemVisible = item.Visible()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemName=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemType=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemParent=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemVisible=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'type={type(item)}')<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The parent is a program, so it must be an instruction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if itemParent.Type() == 8:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instructionCount = itemParent.InstructionCount()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'Looping through {instructionCount} instructions...')<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n in range(instructionCount):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'Instruction {n}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current = itemParent.Instruction(n)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# How to compare if item == current?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# current is a tuple and item is an robodk.robolink.Item</code></div></div>]]></description>
			<content:encoded><![CDATA[My goal is to have a script that will insert a command after the selected instruction in a program.  The snippet of code below finds the instruction that is selected/highlighted.  It is a robodk.robolink.Item object.  Next, the script looks at the parent of this (which should be an ITEM_TYPE_PROGRAM) and loops through the instructions looking for a match.<br />
<br />
However, using program.Instruction(n) returns a tuple.  So, I have a tuple and a  robodk.robolink.Item with no way to check if they are the same.  I cannot use the Item.Type() + Item.Name() because the names are not unique.<br />
<br />
I hope that I explained that so it made sense...<br />
<br />
This code is part of a PySide app - sorry if it looks a little different.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;def btnSelectedItem_Clicked(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''Show information about the selected item in the tree'''<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.clear()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentSelection = self.rdk.Selection()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if len(currentSelection) == 0:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append('No items selected')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item = currentSelection[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemType = item.Type()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemName = item.Name()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemParent = item.Parent()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemVisible = item.Visible()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemName=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemType=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemParent=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'{itemVisible=}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'type={type(item)}')<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The parent is a program, so it must be an instruction<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if itemParent.Type() == 8:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instructionCount = itemParent.InstructionCount()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'Looping through {instructionCount} instructions...')<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n in range(instructionCount):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ui.textInfo.append(f'Instruction {n}')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current = itemParent.Instruction(n)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# How to compare if item == current?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# current is a tuple and item is an robodk.robolink.Item</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Display mensage on screen based on the running program]]></title>
			<link>https://robodk.com/forum/Thread-Display-mensage-on-screen-based-on-the-running-program</link>
			<pubDate>Sat, 28 Mar 2026 13:06:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10213">Danilo assumpção</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Display-mensage-on-screen-based-on-the-running-program</guid>
			<description><![CDATA[Dear All,<br />
I made a simulation with 7 robots, step by step.<br />
<br />
I would like to display a message on the screen according to the program being executed.<br />
<br />
Example:<br />
When program RB01 is running - "Robot 1 picking up part"<br />
When program RB02 is running - "Welding part"<br />
<br />
Is there any API or Python script to do this?]]></description>
			<content:encoded><![CDATA[Dear All,<br />
I made a simulation with 7 robots, step by step.<br />
<br />
I would like to display a message on the screen according to the program being executed.<br />
<br />
Example:<br />
When program RB01 is running - "Robot 1 picking up part"<br />
When program RB02 is running - "Welding part"<br />
<br />
Is there any API or Python script to do this?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Use API to link multiple program]]></title>
			<link>https://robodk.com/forum/Thread-Use-API-to-link-multiple-program</link>
			<pubDate>Fri, 20 Mar 2026 13:59:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=8408">b05611018</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Use-API-to-link-multiple-program</guid>
			<description><![CDATA[I’m currently trying to replicate the <span style="font-weight: bold;" class="mycode_b">“Link selected programs”</span> functionality using the RoboDK API.<br />
From my understanding, I can already achieve a similar result by creating a main program and using <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RunInstruction(..., INSTRUCTION_CALL_PROGRAM)</code></div></div> to call multiple sub-programs. However, I noticed that your built-in <span style="font-weight: bold;" class="mycode_b">Link selected programs</span> feature seems to do more than just calling programs sequentially.<br />
In particular, it appears to automatically generate <span style="font-weight: bold;" class="mycode_b">safe transition motions (e.g., collision-free or obstacle-avoiding paths)</span> between programs. This is extremely useful for ensuring safe execution, especially in machining workflows.<br />
I would like to ask:<br />
<ol type="1" class="mycode_list"><li>Is there any API that directly replicates the full behavior of <span style="font-weight: bold;" class="mycode_b">“Link selected programs”</span>, including the automatic generation of safe transition paths?<br />
</li>
<li>If not, is there a recommended way to programmatically generate these <span style="font-weight: bold;" class="mycode_b">safe linking motions</span> between programs (e.g., via motion planning, collision checking, or predefined safe targets)?<br />
</li>
</ol>
My goal is to fully automate the generation of a main program that not only links sub-programs, but also ensures <span style="font-weight: bold;" class="mycode_b">safe transitions between them</span>, similar to what the GUI provides.<br />
Thank you for your help!<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7619" target="_blank" title="">螢幕擷取畫面 2026-03-20 181548.png</a> (Size: 29.52 KB / Downloads: 125)
]]></description>
			<content:encoded><![CDATA[I’m currently trying to replicate the <span style="font-weight: bold;" class="mycode_b">“Link selected programs”</span> functionality using the RoboDK API.<br />
From my understanding, I can already achieve a similar result by creating a main program and using <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RunInstruction(..., INSTRUCTION_CALL_PROGRAM)</code></div></div> to call multiple sub-programs. However, I noticed that your built-in <span style="font-weight: bold;" class="mycode_b">Link selected programs</span> feature seems to do more than just calling programs sequentially.<br />
In particular, it appears to automatically generate <span style="font-weight: bold;" class="mycode_b">safe transition motions (e.g., collision-free or obstacle-avoiding paths)</span> between programs. This is extremely useful for ensuring safe execution, especially in machining workflows.<br />
I would like to ask:<br />
<ol type="1" class="mycode_list"><li>Is there any API that directly replicates the full behavior of <span style="font-weight: bold;" class="mycode_b">“Link selected programs”</span>, including the automatic generation of safe transition paths?<br />
</li>
<li>If not, is there a recommended way to programmatically generate these <span style="font-weight: bold;" class="mycode_b">safe linking motions</span> between programs (e.g., via motion planning, collision checking, or predefined safe targets)?<br />
</li>
</ol>
My goal is to fully automate the generation of a main program that not only links sub-programs, but also ensures <span style="font-weight: bold;" class="mycode_b">safe transitions between them</span>, similar to what the GUI provides.<br />
Thank you for your help!<br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7619" target="_blank" title="">螢幕擷取畫面 2026-03-20 181548.png</a> (Size: 29.52 KB / Downloads: 125)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Control 3 Positioners as A7, A8, A9]]></title>
			<link>https://robodk.com/forum/Thread-Control-3-Positioners-as-A7-A8-A9</link>
			<pubDate>Wed, 11 Mar 2026 23:03:43 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://robodk.com/forum/member.php?action=profile&uid=10125">wreid</a>]]></dc:creator>
			<guid isPermaLink="false">https://robodk.com/forum/Thread-Control-3-Positioners-as-A7-A8-A9</guid>
			<description><![CDATA[Hey team!<br />
<br />
I need some help setting up 3 positioners to be controlled from my Comau robot A7, A8, A9.<br />
<br />
I've been playing around with the configuration and reading other forum posts (like <a href="https://robodk.com/forum/Thread-Synchronizing-external-axes-using-the-API" target="_blank" rel="noopener" class="mycode_url">this one</a>) to set up the mechanisms but have had little success. The only way I can define all 3 positioners is with one of the positioners linked to A7, and the other two as standalone positioners (essentially an A1 each). <br />
<br />
This works fine inside the RoboDK simulation, and I have created python scripts to manipulate the positioners as expected. However, the problem is when I generate the robot program.<br />
<br />
Any control command (move just robot, move robot &amp; positioners, move just positioners) is generated as a move robot command with 7 axes. <br />
E.g.   MOVE TO {A1, A2, A3, A4, A5, A6, E1} <br />
<br />
This means that trying to move just the robot will also move the positioner in E1. <br />
E.g. my MoveRobotHome.py is exported with the following move command.<br />
      MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} <br />
      robot is moved to home AND positioner 1 is moved to 90 deg<br />
<br />
Similarly, when I try to move just positioner A8 or A9 it will generate it as essentially just an A1 move<br />
E.g. MovePositioner2(90) is exported with the following move command.<br />
      MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000}<br />
      This moves A1 to 90 and all other joints (including positioner 1 in A7) to 0, instead of just positioner 2 to 90 deg.<br />
<br />
I need to be able to export my move commands with all axes by defining the positioners as A7, A8 and A9 inside RoboDK so the exported move commands are:<br />
   MOVE TO {A1, A2, A3, A4, A5, A6, E1, E2, E3}  <br />
<br />
Any ideas?<br />
<br />
I am using RoboDK v5.7.4<br />
Robot: Comau S-13<br />
Post Processor: Comau C5G<br />
<br />
See below raw script dump. This script should move robot to home, then positioners 2 and 3 to home, then positioner 1.<br />
MoveToStation1.py<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># You can also use the new version of the API:<br />
from robodk import robolink    # RoboDK API<br />
from robodk import robomath    # Robot toolbox<br />
RDK = robolink.Robolink()<br />
<br />
<br />
<br />
# ----------------- move robot to home -----------------<br />
<br />
# get comau robodk<br />
comau = RDK.Item('Comau S-13', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check comau is valid<br />
if not comau.Valid():<br />
    raise Exception("Could not find JIG 1")<br />
<br />
# set speed<br />
comau.setSpeed(-1, 30, -1, -1)  # 30 deg/s joint speed<br />
<br />
# initialise joints<br />
joints_comau = comau.Joints()<br />
<br />
# update joints to home position<br />
joints_comau[0] = 0<br />
joints_comau[1] = -60<br />
joints_comau[2] = -110<br />
joints_comau[3] = 0<br />
joints_comau[4] = 90<br />
joints_comau[5] = 0<br />
<br />
# move to joints<br />
comau.MoveJ(joints_comau)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# --------------------- move JIG 1 ---------------------<br />
<br />
# get jig1 robodk<br />
jig_1 = RDK.Item('JIG1', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check jig1 is valid<br />
if not jig_1.Valid():<br />
    raise Exception("Could not find JIG 1")<br />
<br />
# set speed<br />
jig_1.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jig1 = jig_1.Joints()<br />
<br />
# update jig1 target angle<br />
joints_jig1[0] = 90<br />
<br />
# move to target angle<br />
jig_1.MoveJ(joints_jig1)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# --------------------- move JIG 2 ---------------------<br />
<br />
# get jig2 robodk<br />
jig_2 = RDK.Item('JIG2', robolink.ITEM_TYPE_ROBOT) <br />
<br />
# check jig2 is valid<br />
if not jig_2.Valid():<br />
    raise Exception("Could not find JIG 2")<br />
<br />
# set speed<br />
jig_2.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jig2 = jig_2.Joints()<br />
<br />
# update jig2 target angle<br />
joints_jig2[0] = 90<br />
<br />
# move to target angle<br />
jig_2.MoveJ(joints_jig2)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# -------------------- move JIG MAIN -------------------<br />
<br />
# get main jig robodk<br />
jig_main = RDK.Item('MAIN JIG', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check main jig is valid<br />
if not jig_main.Valid():<br />
    raise Exception("Could not find MAIN JIG")<br />
<br />
# set speed<br />
jig_main.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jigmain = jig_main.Joints()<br />
<br />
# update jig main target angle<br />
joints_jigmain[0] = 0<br />
<br />
# move to target angle<br />
jig_main.MoveJ(joints_jigmain)<br />
<br />
# ------------------------------------------------------</code></div></div><br />
Comau output<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>PROGRAM MoveToStation1<br />
VAR<br />
ROUTINE R_MoveToStation1 EXPORTED FROM MoveToStation1 GLOBAL<br />
<br />
ROUTINE R_MoveToStation1<br />
VAR<br />
BEGIN<br />
  &#36;ORNT_TYPE := RS_WORLD<br />
  &#36;MOVE_TYPE := JOINT<br />
  &#36;JNT_MTURN := TRUE<br />
  &#36;CNFG_CARE := TRUE<br />
  &#36;TURN_CARE := TRUE<br />
  &#36;SING_CARE := FALSE<br />
  &#36;TERM_TYPE := NOSETTLE<br />
  &#36;FLY_TYPE := FLY_CART<br />
  &#36;FLY_TRAJ := FLY_PASS<br />
  &#36;FLY_DIST := -1.000<br />
  &#36;STRESS_PER:= 65<br />
  -- Program generated by RoboDK v5.7.4 for Comau S-13 on 11/03/2026 12:35:30<br />
  &#36;ROT_SPD := 0.524<br />
  &#36;UFRAME := POS(-62.0000, -140.0000, -2000.0000, -90.0000, 90.0000, 0.0000, '') <br />
  &#36;TOOL := POS(0.0000, 0.0000, 510.0000, -104.9996, 120.0002, 150.0002, '')<br />
  MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} -- move COMAU only<br />
  &#36;ROT_SPD := 0.175<br />
  &#36;UFRAME := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')<br />
  &#36;TOOL := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')<br />
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG1 only<br />
  &#36;ROT_SPD := 0.175<br />
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG2 only<br />
  &#36;ROT_SPD := 0.175<br />
  MOVE TO {0.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move MAIN JIG only<br />
END R_MoveToStation1<br />
<br />
BEGIN<br />
  R_MoveToStation1<br />
END MoveToStation1</code></div></div><br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7608" target="_blank" title="">Screenshot 2026-03-12 085123.png</a> (Size: 332.11 KB / Downloads: 149)
]]></description>
			<content:encoded><![CDATA[Hey team!<br />
<br />
I need some help setting up 3 positioners to be controlled from my Comau robot A7, A8, A9.<br />
<br />
I've been playing around with the configuration and reading other forum posts (like <a href="https://robodk.com/forum/Thread-Synchronizing-external-axes-using-the-API" target="_blank" rel="noopener" class="mycode_url">this one</a>) to set up the mechanisms but have had little success. The only way I can define all 3 positioners is with one of the positioners linked to A7, and the other two as standalone positioners (essentially an A1 each). <br />
<br />
This works fine inside the RoboDK simulation, and I have created python scripts to manipulate the positioners as expected. However, the problem is when I generate the robot program.<br />
<br />
Any control command (move just robot, move robot &amp; positioners, move just positioners) is generated as a move robot command with 7 axes. <br />
E.g.   MOVE TO {A1, A2, A3, A4, A5, A6, E1} <br />
<br />
This means that trying to move just the robot will also move the positioner in E1. <br />
E.g. my MoveRobotHome.py is exported with the following move command.<br />
      MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} <br />
      robot is moved to home AND positioner 1 is moved to 90 deg<br />
<br />
Similarly, when I try to move just positioner A8 or A9 it will generate it as essentially just an A1 move<br />
E.g. MovePositioner2(90) is exported with the following move command.<br />
      MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000}<br />
      This moves A1 to 90 and all other joints (including positioner 1 in A7) to 0, instead of just positioner 2 to 90 deg.<br />
<br />
I need to be able to export my move commands with all axes by defining the positioners as A7, A8 and A9 inside RoboDK so the exported move commands are:<br />
   MOVE TO {A1, A2, A3, A4, A5, A6, E1, E2, E3}  <br />
<br />
Any ideas?<br />
<br />
I am using RoboDK v5.7.4<br />
Robot: Comau S-13<br />
Post Processor: Comau C5G<br />
<br />
See below raw script dump. This script should move robot to home, then positioners 2 and 3 to home, then positioner 1.<br />
MoveToStation1.py<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># You can also use the new version of the API:<br />
from robodk import robolink    # RoboDK API<br />
from robodk import robomath    # Robot toolbox<br />
RDK = robolink.Robolink()<br />
<br />
<br />
<br />
# ----------------- move robot to home -----------------<br />
<br />
# get comau robodk<br />
comau = RDK.Item('Comau S-13', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check comau is valid<br />
if not comau.Valid():<br />
    raise Exception("Could not find JIG 1")<br />
<br />
# set speed<br />
comau.setSpeed(-1, 30, -1, -1)  # 30 deg/s joint speed<br />
<br />
# initialise joints<br />
joints_comau = comau.Joints()<br />
<br />
# update joints to home position<br />
joints_comau[0] = 0<br />
joints_comau[1] = -60<br />
joints_comau[2] = -110<br />
joints_comau[3] = 0<br />
joints_comau[4] = 90<br />
joints_comau[5] = 0<br />
<br />
# move to joints<br />
comau.MoveJ(joints_comau)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# --------------------- move JIG 1 ---------------------<br />
<br />
# get jig1 robodk<br />
jig_1 = RDK.Item('JIG1', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check jig1 is valid<br />
if not jig_1.Valid():<br />
    raise Exception("Could not find JIG 1")<br />
<br />
# set speed<br />
jig_1.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jig1 = jig_1.Joints()<br />
<br />
# update jig1 target angle<br />
joints_jig1[0] = 90<br />
<br />
# move to target angle<br />
jig_1.MoveJ(joints_jig1)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# --------------------- move JIG 2 ---------------------<br />
<br />
# get jig2 robodk<br />
jig_2 = RDK.Item('JIG2', robolink.ITEM_TYPE_ROBOT) <br />
<br />
# check jig2 is valid<br />
if not jig_2.Valid():<br />
    raise Exception("Could not find JIG 2")<br />
<br />
# set speed<br />
jig_2.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jig2 = jig_2.Joints()<br />
<br />
# update jig2 target angle<br />
joints_jig2[0] = 90<br />
<br />
# move to target angle<br />
jig_2.MoveJ(joints_jig2)<br />
<br />
# ------------------------------------------------------<br />
<br />
<br />
<br />
# -------------------- move JIG MAIN -------------------<br />
<br />
# get main jig robodk<br />
jig_main = RDK.Item('MAIN JIG', robolink.ITEM_TYPE_ROBOT)<br />
<br />
# check main jig is valid<br />
if not jig_main.Valid():<br />
    raise Exception("Could not find MAIN JIG")<br />
<br />
# set speed<br />
jig_main.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed<br />
<br />
# initialise joints<br />
joints_jigmain = jig_main.Joints()<br />
<br />
# update jig main target angle<br />
joints_jigmain[0] = 0<br />
<br />
# move to target angle<br />
jig_main.MoveJ(joints_jigmain)<br />
<br />
# ------------------------------------------------------</code></div></div><br />
Comau output<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>PROGRAM MoveToStation1<br />
VAR<br />
ROUTINE R_MoveToStation1 EXPORTED FROM MoveToStation1 GLOBAL<br />
<br />
ROUTINE R_MoveToStation1<br />
VAR<br />
BEGIN<br />
  &#36;ORNT_TYPE := RS_WORLD<br />
  &#36;MOVE_TYPE := JOINT<br />
  &#36;JNT_MTURN := TRUE<br />
  &#36;CNFG_CARE := TRUE<br />
  &#36;TURN_CARE := TRUE<br />
  &#36;SING_CARE := FALSE<br />
  &#36;TERM_TYPE := NOSETTLE<br />
  &#36;FLY_TYPE := FLY_CART<br />
  &#36;FLY_TRAJ := FLY_PASS<br />
  &#36;FLY_DIST := -1.000<br />
  &#36;STRESS_PER:= 65<br />
  -- Program generated by RoboDK v5.7.4 for Comau S-13 on 11/03/2026 12:35:30<br />
  &#36;ROT_SPD := 0.524<br />
  &#36;UFRAME := POS(-62.0000, -140.0000, -2000.0000, -90.0000, 90.0000, 0.0000, '') <br />
  &#36;TOOL := POS(0.0000, 0.0000, 510.0000, -104.9996, 120.0002, 150.0002, '')<br />
  MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} -- move COMAU only<br />
  &#36;ROT_SPD := 0.175<br />
  &#36;UFRAME := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')<br />
  &#36;TOOL := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')<br />
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG1 only<br />
  &#36;ROT_SPD := 0.175<br />
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG2 only<br />
  &#36;ROT_SPD := 0.175<br />
  MOVE TO {0.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move MAIN JIG only<br />
END R_MoveToStation1<br />
<br />
BEGIN<br />
  R_MoveToStation1<br />
END MoveToStation1</code></div></div><br />
<br />
<img src="//cdn.robodk.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=7608" target="_blank" title="">Screenshot 2026-03-12 085123.png</a> (Size: 332.11 KB / Downloads: 149)
]]></content:encoded>
		</item>
	</channel>
</rss>