//////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 /// <summary>
 /// Create robot target from coordinate and quaternion values.
 /// </summary>
 /// <param name="ptX">Coordinate</param>
 /// <param name="ptY">Coordinate</param>
 /// <param name="ptZ">Coordinate</param>
 /// <param name="q1">Quaternion</param>
 /// <param name="q2">Quaternion</param>
 /// <param name="q3">Quaternion</param>
 /// <param name="q4">Quaternion</param>
 /// <returns></returns>
 public static RobTarget RobTargetAtVals(double ptX, double ptY, double ptZ, double q1, double q2, double q3, double q4)
 {
     var target = new RobTarget();
     {
         target.FillFromString2(
             string.Format(
                 "[[{0},{1},{2}],[{3},{4},{5},{6}],[0,0,0,0],[9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09]];",
                 ptX, ptY, ptZ, q1, q2, q3, q4));
     }
     return target;
 }
 /// <summary>
 /// Create robot target from point and list of quaternion values.
 /// </summary>
 /// <param name="point">Point</param>
 /// <param name="quatList">List of quaternions</param>
 /// <returns></returns>
 public static RobTarget RobTargetAtPoint1(Point point, List<double> quatList)
 {
     var target = new RobTarget();
     if (point != null)
     {
         target.FillFromString2(
             string.Format(
                 "[[{0},{1},{2}],[{3},{4},{5},{6}],[0,0,0,0],[9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09]];",
                 point.X, point.Y, point.Z, quatList[0], quatList[1], quatList[2], quatList[3]));
     }
     return target;
 }
 /// <summary>
 /// Create robot target from plane.
 /// </summary>
 /// <param name="plane">Plane</param>
 /// <returns></returns>
 public static RobTarget RobTargetAtPlane(Plane plane)
 {
     var target = new RobTarget();
     if (plane != null)
     {
         List<double> quatDoubles = RobotUtils.PlaneToQuaternian(plane);
         target.FillFromString2(
             string.Format(
                 "[[{0},{1},{2}],[{3},{4},{5},{6}],[0,0,0,0],[9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09]];",
                 plane.Origin.X, plane.Origin.Y, plane.Origin.Z, quatDoubles[0], quatDoubles[1], quatDoubles[2], quatDoubles[3]));
     }
     return target;
 }
 /// <summary>
 /// Create robot target from point and quaternion values.
 /// </summary>
 /// <param name="point">Point</param>
 /// <param name="q1">Quaternion</param>
 /// <param name="q2">Quaternion</param>
 /// <param name="q3">Quaternion</param>
 /// <param name="q4">Quaternion</param>
 /// <returns></returns>
 public static RobTarget RobTargetAtPoint0(Point point, double q1, double q2, double q3, double q4)
 {
     var target = new RobTarget();
     if (point != null)
     {
         target.FillFromString2(
             string.Format(
                 "[[{0},{1},{2}],[{3},{4},{5},{6}],[0,0,0,0],[9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09,9.999999999E09]];",
                 point.X, point.Y, point.Z, q1, q2, q3, q4));
     }
     return target;
 }
        /// <summary>
        /// Send robot target to controller.
        /// </summary>
        /// <param name="moduleName">Name of module</param>
        /// <param name="targetName">Name of target</param>
        /// <param name="targetValue">New value for target</param>
        public static void sendRobTargetToController(string moduleName, string targetName, string targetValue)
        {
            try
            {
                var scanner = new NetworkScanner();
                scanner.Scan();

                ControllerInfoCollection controllers = scanner.Controllers;
                using (var controller = ControllerFactory.CreateFrom(controllers[0]))
                {
                    controller.Logon(UserInfo.DefaultUser);
                    using (Mastership.Request(controller.Rapid))
                    {
                        if (controller.OperatingMode == ControllerOperatingMode.Auto)
                        {
                            using (var task = controller.Rapid.GetTask("T_ROB1"))
                            {
                                var target = new RobTarget();
                                using (var rapidData = task.GetRapidData(moduleName, targetName))
                                {
                                    if (rapidData.Value is RobTarget)
                                    {
                                        target.FillFromString2(targetValue);
                                        rapidData.Value = target;
                                    }
                                }

                                var result = task.Start(true);
                                Debug.WriteLine(result.ToString());

                                task.ResetProgramPointer();
                            }
                        }
                        else
                        {
                            Debug.WriteLine("Automatic mode is required to start execution from a remote client.");
                        }
                    }
                    controller.Logoff();
                }

            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(ex.StackTrace);
            }
        }