示例#1
0
        public void Test_CommandLineParameter()
        {
            var rdk = new RoboDK
            {
                ApplicationDir        = "C:\\zBuilds\\Bystronic\\repository\\ByRobotManager-2\\ByRobotManager\\bin\\Debug\\RoboDK\\RoboDK.exe",
                RoboDKServerStartPort = 56252,

                //CustomCommandLineArgumentString = "-NOSPLASH -NOSHOW -HIDDEN -PORT=56252  -NOSTDOUT -SKIPINIRECENT -SKIPINI -SKIPCOM -EXIT_LAST_COM -NOUI",
                CustomCommandLineArgumentString = "-PORT=56252  -NOSTDOUT -SKIPINIRECENT -SKIPINI -SKIPCOM -EXIT_LAST_COM -NOUI -TREE_STATE=-1",

                //CustomCommandLineArgumentString = "/NOSPLASH /NOSHOW /HIDDEN /PORT=56252  /NOSTDOUT /SKIPINIRECENT /SKIPINI /SKIPCOM /EXIT_LAST_COM /NOUI /TREE_STATE=-1",
                //CustomCommandLineArgumentString = "/NOSPLASH /NOSHOW /HIDDEN /NOSTDOUT /SKIPINIRECENT /SKIPINI /SKIPCOM /EXIT_LAST_COM /NOUI /TREE_STATE=-1"
                //CustomCommandLineArgumentString = "/NOSTDOUT /SKIPINIRECENT /SKIPINI /SKIPCOM /EXIT_LAST_COM /NOUI"
            };

            rdk.Connect();

//            Thread.Sleep(5000);
            var mainWindow = rdk.Command("MainWindow_ID");

            var item = rdk.AddFile(@"C:\Users\mth\AppData\Local\Temp\ByRobotManager_Geometries\Regrip lower arm NS2+NS3_collision.sld");

            item.SetParam("FilterMesh", "0,0.0001,0.005");

            var mainWindowId = int.Parse(mainWindow);


            rdk.CloseRoboDK();
        }
示例#2
0
        public void Test_WhenConnectingOnUsedActiveSocketThenNoConnectionAndRoboDkNotStarted()
        {
            var port = 56252;

            while (!RoboDK.IsTcpPortFree(port))
            {
                port++;
            }

            using (var s = new SocketHelper())
            {
                s.OpenServerAndClient(port);

                RoboDK.IsTcpPortFree(s.ServerPort).Should().BeFalse();
                RoboDK.IsTcpPortFree(s.ClientPort).Should().BeFalse();

                var rdk = new RoboDK
                {
                    RoboDKServerStartPort = port,
                };

                rdk.Connect().Should().BeFalse();
                rdk.Connected().Should().BeFalse();
                rdk.Process.Should().BeNull();

                rdk.Connect().Should().BeFalse();
                rdk.Connected().Should().BeFalse();
                rdk.Process.Should().BeNull();

                rdk.Invoking(r => r.CloseRoboDK())
                .Should().Throw <RdkException>();
            }
        }
示例#3
0
    int Factor_LM        = 400; //400
    void Start()
    {
        RoboDK RDK = new RoboDK();

        Variables.ROBOT = RDK.ItemUserPick("Select a robot", RoboDK.ITEM_TYPE_ROBOT);
        // if (Variables.ROBOT.Connect())
        // {
        //     RDK.setRunMode(RoboDK.RUNMODE_RUN_ROBOT);
        // }
        // else
        // {
        //     RDK.setRunMode(RoboDK.RUNMODE_SIMULATE);
        // }
        RDK.setRunMode(RoboDK.RUNMODE_SIMULATE);
        //Variables.ROBOT.MoveJ(home_joints);
        Mat frame = Variables.ROBOT.PoseFrame();
        //Mat tool = Variables.ROBOT.PoseTool();
        Mat pose_ref = Variables.ROBOT.Pose();

        Variables.target_pose = Variables.ROBOT.Pose();
        Variables.xyz_ref     = Variables.target_pose.Pos();
        Variables.ROBOT.MoveJ(pose_ref);
        Variables.ROBOT.setPoseFrame(frame);  // set the reference frame
        //Variables.ROBOT.setPoseTool(tool);    // set the tool frame: important for Online Programming
        Variables.ROBOT.setSpeed(500);        // Set Speed to 100 mm/s
        Variables.ROBOT.setZoneData(5);       // set the rounding instruction
        //Variables.ROBOT.MoveL(pose_ref);
    }
        /// <summary>
        /// 在初始化线程中初始化类参数,由于RoboDK在未启动时,将会有一个启动的过程,这就导致软件的延迟启动
        /// 在该线程中启动更新robot机器人参数的线程
        /// 初始化完成后,线程就立即结束
        /// </summary>
        private void InitThreadInitParameterHandler( )
        {
            this.WriteLogHandler("RoboDK软件开启中....");

            // 在创建RoboDK的对象时,会对RoboDK软件进行启动和连接,若路径不对,则启动不了,需要进行提示,并且不启动更新参数线程
            try
            {
                this._rdkPlatform = new RoboDK();                                               // 创建RoboDK对象,其中会对RoboDK平台进行连接
                this.WriteLogHandler("已开启RoboDK软件.");
            }
            catch
            {
                this._rdkPlatform = null;
                this.WriteLogHandler("RoboDK软件无法启动,可能路径有误," + "重新设置正确路径,然后重启.", 1);
                return;
            }

            this._queueRobotMoveMessage = new Queue <double[]>();
            this._autoEvent             = new AutoResetEvent(false);

            // 启动机器人参数更新的线程
            this._thrdUpdateRobotParameter = new Thread(this.ThreadUpdatRobotParameterHandler); // 初始化更新机器人参数的线程
            this._thrdUpdateRobotParameter.IsBackground = true;                                 // 设置成后台线程,在前台线程结束时,所有剩余的后台线程都会停止且不会完成
            this._thrdUpdateRobotParameter.Name         = "UpdateRobotParameterHandler";        // 设置线程的名字
            this._thrdUpdateRobotParameter.Start();                                             // 启动线程

            //this._thrdDriveRobotMoveHandler = new Thread(ThrdDriveRobotMoveHandler);            // 简单线程,驱动机器人运动操作
            //this._thrdDriveRobotMoveHandler.IsBackground = true;                                // 设置成后台线程,在前台线程结束时,所有剩余的后台线程都会停止且不会完成
            //this._thrdDriveRobotMoveHandler.Name = "DriveRobotMove";                            // 设置线程的名字
            //this._thrdDriveRobotMoveHandler.Start();
        }
示例#5
0
 /// <summary>
 /// Constructor
 /// </summary>
 public Item(RoboDK connectionLink, long itemId = 0, ItemType itemType = ItemType.Any)
 {
     ItemId = itemId;
     Link   = connectionLink;
     _type  = itemType;
     _name  = "";
 }
示例#6
0
        public void Test_ConnectDisconnectWhenRoboDKIsAlreadyRunning()
        {
            var rdk = new RoboDK();

            for (var i = 0; i < 10; i++)
            {
                rdk.Connected().Should().BeFalse();
                rdk.Connect().Should().BeTrue();

                // RoboDK is already running. It is not expected that connect will start a new process
                rdk.Process.Should().BeNull();
                rdk.Connected().Should().BeTrue();

                // Test some properties
                rdk.Version().Should().StartWith("5");
                rdk.ApiVersion.Should().BeGreaterThan(0);
                rdk.RoboDKBuild.Should().BeGreaterThan(0);
                rdk.RoboDKServerPort.Should().BeGreaterThan(0);
                rdk.RoboDKClientPort.Should().BeGreaterThan(0);
                rdk.RoboDKServerIpAddress.Length.Should().BeGreaterThan(0);
                rdk.DefaultSocketTimeoutMilliseconds.Should().BeGreaterThan(1000);

                rdk.Disconnect();
                rdk.Connected().Should().BeFalse();
            }
        }
示例#7
0
    // Use this for initialization
    void Start()
    {
        initializeJoints();
        RoboDK RDK = new RoboDK();

        ROBOT = RDK.ItemUserPick("Select a robot", RoboDK.ITEM_TYPE_ROBOT);
        RDK.setRunMode(RoboDK.RUNMODE_SIMULATE);
        ROBOT.MoveJ(home_joints);
        Mat frame = ROBOT.PoseFrame();
        //Mat tool = Variables.ROBOT.PoseTool();
        Mat pose_ref = ROBOT.Pose();

        target_pose = ROBOT.Pose();
        xyz_ref     = target_pose.Pos();
        ROBOT.MoveJ(pose_ref);
        ROBOT.setPoseFrame(frame);
        //Variables.ROBOT.setPoseTool(tool);
        ROBOT.setSpeed(500);
        ROBOT.setZoneData(5);
        //Setting inial right controller 3D position
        VR_Init_Pos[0] = Right_Controller.transform.position.z;
        VR_Init_Pos[1] = Right_Controller.transform.position.x;
        VR_Init_Pos[2] = Right_Controller.transform.position.y;
        //Debug.Log(VR_Init_Pos[0] + "  " + VR_Init_Pos[1] + "  " + VR_Init_Pos[2]);
    }
示例#8
0
        private void SensorActive(object obj)
        {
            RoboDK RDK = new RoboDK("127.0.0.1");

            RoboDK.Item SENSOR  = RDK.GetItem("Sensor SICK WL4S", RoboDK.ITEM_TYPE_OBJECT);
            RoboDK.Item program = roboDK.GetItem("MoveConveyor");
            program.RunCode();

            while (true)
            {
                RoboDK.Item item = GetEndedPart();
                if (item != null)
                {
                    if (SENSOR.Collision(item) > 0)
                    {
                        Console.WriteLine("检测到碰撞");

                        program.Stop();


                        RDK.SetParam("SENSOR", "1");

                        // 等待东西拿走再继续
                        while (RDK.GetParam("SENSOR") == "1")
                        {
                            Thread.Sleep(10);
                        }
                        program.RunCode();
                    }
                }
                Thread.Sleep(20);
            }
        }
示例#9
0
        public void Test_DefaultStartAndEndServerPort()
        {
            var rdk = new RoboDK();

            rdk.RoboDKServerStartPort.Should().BeLessOrEqualTo(rdk.RoboDKServerEndPort);
            rdk.RoboDKServerStartPort.Should().Be(rdk.DefaultApiServerPort);
            rdk.RoboDKServerEndPort.Should().Be(rdk.DefaultApiServerPort + 2);
        }
示例#10
0
        static void Main(string[] args)
        {
            RoboDK RDK    = new RoboDK();
            bool   status = false;

            //The first connect opens roboDK
            status = RDK.Connect();
            Console.WriteLine("Connect status: " + status.ToString());
            int b = 1;
        }
示例#11
0
        // ReSharper disable once UnusedParameter.Local
        static void Main(string[] args)
        {
            var rdk    = new RoboDK();
            var status = false;

            //The first connect opens roboDK
            status = rdk.Connect();
            Console.WriteLine($"Connect status: {status}");
            //rdk.CloseStation();
        }
示例#12
0
        static void Main(string[] args)
        {
            var rdk = new RoboDK();

            // Connect to existing RoboDK or start a new one if RoboDK is not running
            var status = rdk.Connect();

            Console.WriteLine($"Connect status: {status}");

            // close RoboDK
            rdk.CloseRoboDK();
        }
示例#13
0
        private void PrepareSimulation()
        {
            RoboDK RDK = new RoboDK("127.0.0.1");

            RoboDK.Item frame_pallet = RDK.GetItem("PalletA", RoboDK.ITEM_TYPE_FRAME);

            // 获取参数
            string SizeBox    = RDK.GetParam("SizeBox");                                                // 150,200,150  箱子大小
            string SizePallet = RDK.GetParam("SizePallet");                                             // 5,3,3  横纵列

            float[] SizeBoxXyz    = SizeBox.Split(',').Select((m) => float.Parse(m.Trim())).ToArray();  // [150,200,150]
            int[]   SizePalletXyz = SizePallet.Split(',').Select((m) => int.Parse(m.Trim())).ToArray(); // [5,3,3]

            float SizeBoxZ = SizeBoxXyz[2];                                                             // 箱子的高度很重要,用来计算位置和碰撞检测的


            RDK.Render(false);

            CleanUp(RDK.GetItemList(RoboDK.ITEM_TYPE_OBJECT), "Part ");
            CleanUp(RDK.GetItemList(RoboDK.ITEM_TYPE_TOOL), "TCP ");

            RDK.GetItem("box100mm").Copy();
            Random random = new Random();

            for (int i = 0; i < SizePalletXyz[0]; i++)
            {
                for (int j = 0; j < SizePalletXyz[1]; j++)
                {
                    for (int k = 0; k < SizePalletXyz[2]; k++)
                    {
                        // 计算位置
                        float location_x = SizeBoxXyz[0] / 2 + i * SizeBoxXyz[0];
                        float location_y = SizeBoxXyz[1] / 2 + j * SizeBoxXyz[1];
                        float location_z = SizeBoxXyz[2] / 2 + k * SizeBoxXyz[2];

                        // 复制新的对象
                        RoboDK.Item newPart = frame_pallet.Paste();
                        newPart.Scale(new double[] { SizeBoxXyz[0] / 100, SizeBoxXyz[1] / 100, SizeBoxXyz[2] / 100 });
                        newPart.SetName("Part " + i.ToString() + j.ToString() + k.ToString());
                        newPart.SetPose(Matrix.Transl(location_x, location_y, location_z));
                        newPart.SetVisible(true, 0);
                        newPart.SetColor(new double[] { random.NextDouble(), random.NextDouble(), random.NextDouble(), 1 });
                    }
                }
            }


            RDK.SetParam("SENSOR", "0");
            RDK.Render(true);
            RDK.Disconnect();

            PartsClear();
        }
示例#14
0
        public void Test_RoboDkThrowsObjectDisposedExceptionWhenCallingAnApiMethodAfterDispose()
        {
            // Given
            var rdk = new RoboDK();

            rdk.Connect().Should().BeTrue();

            // When
            rdk.Dispose();

            // Then
            var whenAction = new Action(() => rdk.AddFrame("TestFrame"));

            whenAction.Should().Throw <ObjectDisposedException>();
        }
示例#15
0
        public void Test_WhenEndServerPortSmallerThenStartServerPortThenThrowRdkException()
        {
            var rdk = new RoboDK
            {
                RoboDKServerStartPort = 10000,
                RoboDKServerEndPort   = 9000
            };

            rdk.RoboDKServerStartPort.Should().Be(10000);
            rdk.RoboDKServerEndPort.Should().Be(9000);

            Action act = () => rdk.Connect();

            act.Should().Throw <RdkException>();
        }
        /// <summary>
        /// 关闭所有变量,使它们都invalidition
        /// </summary>
        private void CloseAllVariable( )
        {
            this._rdkItemRobot = null;
            this._rdkPlatform  = null;

            this._thrdUpdateRobotParameter = null;
            this._thisLock = null;

            this._thrdDriveRobotMoveHandler  = null;
            this._queueRobotMoveMessage      = null;
            this._bolIsDriveRbtMoveThrdAlive = false;
            this._autoEvent = null;

            this._bolIsUpdateRbtParThrdAlive = false;
            this._bolIsThreadSuspend         = false;
        }
示例#17
0
        public void Test_WhenSettingStartServerPortThenEndServerPortMustHaveSameValue()
        {
            var rdk = new RoboDK
            {
                RoboDKServerStartPort = 40000
            };

            rdk.RoboDKServerStartPort.Should().Be(40000);
            rdk.RoboDKServerEndPort.Should().Be(40000);

            rdk = new RoboDK
            {
                RoboDKServerStartPort = 10000
            };
            rdk.RoboDKServerStartPort.Should().Be(10000);
            rdk.RoboDKServerEndPort.Should().Be(10000);
        }
示例#18
0
        static void Main(string[] args)
        {
            RoboDK RDK = new RoboDK
            {
                RoboDKServerStartPort = 20500,
                RoboDKServerEndPort   = 20500
            };
            bool status = RDK.Connect();

            Console.WriteLine("Connect status: " + status.ToString());
            Console.WriteLine("Last status message: " + RDK.LastStatusMessage);

            var robot = RDK.GetItemByName("", RoboDk.API.Model.ItemType.Robot);

            robot.Connect();
            //robot.;

            int b = 1;
        }
示例#19
0
        public void Test_BasicEventListenerApi()
        {
            var rdk = new RoboDK();

            rdk.Connect();

            // Open Event Channel
            var eventListener = rdk.OpenRoboDkEventChannel();
            var noEvent       = eventListener.WaitForEvent();

            noEvent.EventType.Should().Be(EventType.NoEvent);

            // Test Simple Event
            var frame1         = rdk.AddFrame("Frame1");
            var itemMovedEvent = eventListener.WaitForEvent();

            itemMovedEvent.EventType.Should().Be(EventType.ItemMovedPose);
            itemMovedEvent.Item.Name().Should().Be("Frame1");

            // The RoboDK link must be set to the RoboDK API instance
            itemMovedEvent.Item.RDK().RoboDKClientPort.Should().Be(rdk.RoboDKClientPort);

            // Open a second event channel
            var eventListener2  = rdk.OpenRoboDkEventChannel();
            var frame2          = rdk.AddFrame("Frame2");
            var eventOnChannel1 = eventListener.WaitForEvent();
            var eventOnChannel2 = eventListener2.WaitForEvent();

            eventOnChannel1.EventType.Should().Be(EventType.ItemMovedPose);
            eventOnChannel1.Item.Name().Should().Be("Frame2");
            eventOnChannel2.EventType.Should().Be(EventType.ItemMovedPose);
            eventOnChannel2.Item.Name().Should().Be("Frame2");
            eventOnChannel1.Item.RDK().RoboDKClientPort.Should().Be(rdk.RoboDKClientPort);
            eventOnChannel2.Item.RDK().RoboDKClientPort.Should().Be(rdk.RoboDKClientPort);

            // After closing an event channel we should get an exception when calling WaitForEvent
            eventListener.Close();
            var whenAction = new Action(() => eventListener.WaitForEvent());

            whenAction.Should().Throw <ObjectDisposedException>();
        }
示例#20
0
        public void Test_WhenStartingOnUsedActiveSocketThenNoConnectionAndRoboDkNotStarted()
        {
            var port = 56252;

            while (!RoboDK.IsTcpPortFree(port))
            {
                port++;
            }

            using (var s = new SocketHelper())
            {
                s.OpenServerAndClient(port);

                RoboDK.IsTcpPortFree(s.ServerPort).Should().BeFalse();
                RoboDK.IsTcpPortFree(s.ClientPort).Should().BeFalse();

                var rdk = new RoboDK
                {
                    StartNewInstance      = true,
                    RoboDKServerStartPort = port,
                };

                rdk.Connect().Should().BeFalse();
                rdk.Connected().Should().BeFalse();
                rdk.Process.Should().NotBeNull();
                rdk.Process.HasExited.Should().BeTrue();
                Process.GetProcessesByName("RoboDK").Should().BeEmpty();

                rdk.Connect().Should().BeFalse();
                rdk.Connected().Should().BeFalse();
                rdk.Process.Should().NotBeNull();
                rdk.Process.HasExited.Should().BeTrue();
                Process.GetProcessesByName("RoboDK").Should().BeEmpty();

                rdk.Invoking(r => r.CloseRoboDK())
                .Should().Throw <RdkException>();
            }
        }
示例#21
0
        private void RobotBStoreParts(object obj)
        {
            RoboDK RDK = new RoboDK("127.0.0.1");

            int APPROACH = 100;

            RoboDK.Item robot             = RDK.GetItem("UR10 B", RoboDK.ITEM_TYPE_ROBOT);
            RoboDK.Item tool              = RDK.GetItem("GripperB", RoboDK.ITEM_TYPE_TOOL);
            RoboDK.Item frame_pallet      = RDK.GetItem("PalletB", RoboDK.ITEM_TYPE_FRAME);
            RoboDK.Item frame_conv        = RDK.GetItem("ConveyorReference", RoboDK.ITEM_TYPE_FRAME);
            RoboDK.Item frame_conv_moving = RDK.GetItem("MovingRef", RoboDK.ITEM_TYPE_FRAME);

            // 获取目标点
            RoboDK.Item target_pallet_safe = RDK.GetItem("PalletApproachB", RoboDK.ITEM_TYPE_TARGET);
            RoboDK.Item target_conv_safe   = RDK.GetItem("ConvApproachB", RoboDK.ITEM_TYPE_TARGET);
            RoboDK.Item target_conv        = RDK.GetItem("Get Conveyor", RoboDK.ITEM_TYPE_TARGET);

            // 获取参数
            string SizeBox    = RDK.GetParam("SizeBox");                                                // 150,200,150  箱子大小
            string SizePallet = RDK.GetParam("SizePallet");                                             // 5,3,3  横纵列

            float[] SizeBoxXyz    = SizeBox.Split(',').Select((m) => float.Parse(m.Trim())).ToArray();  // [150,200,150]
            int[]   SizePalletXyz = SizePallet.Split(',').Select((m) => int.Parse(m.Trim())).ToArray(); // [5,3,3]

            float SizeBoxZ = SizeBoxXyz[2];                                                             // 箱子的高度很重要,用来计算位置和碰撞检测的


            Matrix tool_xyzrpw = tool.PoseTool().Translate(0, 0, SizeBoxZ / 2);

            RoboDK.Item tool_tcp = robot.AddTool(tool_xyzrpw, "TCP B");

            robot.SetPoseTool(tool_tcp);

            for (int k = 0; k < SizePalletXyz[2]; k++)
            {
                for (int j = 0; j < SizePalletXyz[1]; j++)
                {
                    for (int i = 0; i < SizePalletXyz[0]; i++)
                    {
                        // 计算位置
                        float location_x = SizeBoxXyz[0] / 2 + i * SizeBoxXyz[0];
                        float location_y = SizeBoxXyz[1] / 2 + j * SizeBoxXyz[1];
                        float location_z = SizeBoxXyz[2] / 2 + k * SizeBoxXyz[2];



                        robot.SetPoseFrame(frame_conv);
                        Matrix target_conv_pose = target_conv.Pose().Translate(0, 0, -SizeBoxZ / 2);
                        Matrix target_conv_app  = target_conv_pose.Translate(0, 0, -APPROACH);
                        robot.MoveJ(target_conv_safe);
                        robot.MoveJ(target_conv_app);

                        // 等待传感器信号
                        while (RDK.GetParam("SENSOR") == "0")
                        {
                            Thread.Sleep(10);
                        }
                        Thread.Sleep(10);

                        //robot.MoveL(target_conv_pose);


                        RoboDK.Item item = new RoboDK.Item(RDK, GetPartAndRemove().GetItemPtr());

                        robot.MoveL(target_conv_pose);
                        item.SetParentStatic(tool);



                        RDK.SetParam("SENSOR", "0");
                        Matrix matOffect = item.Pose();

                        robot.MoveL(target_conv_app);
                        robot.MoveJ(target_conv_safe);

                        robot.SetPoseFrame(frame_pallet);

                        robot.MoveJ(target_pallet_safe);

                        Matrix target_i = Matrix.Transl(location_x, location_y, location_z).RotX(Math.PI);
                        robot.MoveJ(target_i.Translate(0, 0, -APPROACH - SizeBoxZ));


                        robot.MoveJ(target_i);

                        item.SetParentStatic(frame_pallet);


                        robot.MoveJ(target_i.Translate(0, 0, -APPROACH - SizeBoxZ));
                        robot.MoveJ(target_pallet_safe);
                    }
                }
            }
        }
示例#22
0
 /// <inheritdoc />
 public void NewLink()
 {
     Link = new RoboDK();
     Link.Connect();
 }
示例#23
0
 private void Form1_Load(object sender, EventArgs e)
 {
     roboDK = new RoboDK("127.0.0.1");
 }
示例#24
0
        private void RobotAGetParts(object obj)
        {
            RoboDK RDK = new RoboDK("127.0.0.1");

            int APPROACH = 100;

            RoboDK.Item robot             = RDK.GetItem("UR10 A", RoboDK.ITEM_TYPE_ROBOT);
            RoboDK.Item tool              = RDK.GetItem("GripperA", RoboDK.ITEM_TYPE_TOOL);
            RoboDK.Item frame_pallet      = RDK.GetItem("PalletA", RoboDK.ITEM_TYPE_FRAME);
            RoboDK.Item frame_conv        = RDK.GetItem("ConveyorReference", RoboDK.ITEM_TYPE_FRAME);
            RoboDK.Item frame_conv_moving = RDK.GetItem("MovingRef", RoboDK.ITEM_TYPE_FRAME);

            // 获取目标点
            RoboDK.Item target_pallet_safe = RDK.GetItem("PalletApproachA", RoboDK.ITEM_TYPE_TARGET);
            RoboDK.Item target_conv_safe   = RDK.GetItem("ConvApproachA", RoboDK.ITEM_TYPE_TARGET);
            RoboDK.Item target_conv        = RDK.GetItem("Put Conveyor", RoboDK.ITEM_TYPE_TARGET);

            // 获取参数
            string SizeBox    = RDK.GetParam("SizeBox");    // 150,200,150  箱子大小
            string SizePallet = RDK.GetParam("SizePallet"); // 5,3,3  横纵列



            //RoboDK.Item SENSOR2 = RDK.GetItem("Sensor SICK WL4S2", RoboDK.ITEM_TYPE_OBJECT);
            //RoboDK.Item SENSOR3 = RDK.GetItem("Sensor SICK WL4S3", RoboDK.ITEM_TYPE_OBJECT);


            float[] SizeBoxXyz    = SizeBox.Split(',').Select((m) => float.Parse(m.Trim())).ToArray();  // [150,200,150]
            int[]   SizePalletXyz = SizePallet.Split(',').Select((m) => int.Parse(m.Trim())).ToArray(); // [5,3,3]

            float SizeBoxZ = SizeBoxXyz[2];                                                             // 箱子的高度很重要,用来计算位置和碰撞检测的


            Matrix tool_xyzrpw = tool.PoseTool().Translate(0, 0, SizeBoxZ / 2);

            RoboDK.Item tool_tcp = robot.AddTool(tool_xyzrpw, "TCP A");
            robot.SetPoseTool(tool_tcp);

            for (int k = SizePalletXyz[2] - 1; k >= 0; k--)
            {
                for (int i = SizePalletXyz[0] - 1; i >= 0; i--)
                {
                    for (int j = SizePalletXyz[1] - 1; j >= 0; j--)
                    {
                        // 计算位置
                        float location_x = SizeBoxXyz[0] / 2 + i * SizeBoxXyz[0];
                        float location_y = SizeBoxXyz[1] / 2 + j * SizeBoxXyz[1];
                        float location_z = SizeBoxXyz[2] / 2 + k * SizeBoxXyz[2];



                        // 从传送带抓取
                        robot.SetPoseFrame(frame_pallet);
                        robot.MoveJ(target_pallet_safe);        // 移动到上方的一个安全点


                        Matrix target_i = Matrix.Transl(location_x, location_y, location_z).RotX(Math.PI);


                        robot.MoveJ(target_i.Translate(0, 0, -APPROACH - SizeBoxZ));


                        robot.MoveJ(target_i);


                        RoboDK.Item item = RDK.GetItem("Part " + i.ToString() + j.ToString() + k.ToString());
                        item.SetParentStatic(tool);


                        robot.MoveJ(target_i.Translate(0, 0, -APPROACH - SizeBoxZ));
                        robot.MoveJ(target_pallet_safe);


                        // 放置到传送带上去
                        robot.SetPoseFrame(frame_conv);



                        Matrix target_conv_pose = target_conv.Pose().Translate(0, 0, -SizeBoxZ / 2);
                        Matrix target_conv_app  = target_conv_pose.Translate(0, 0, -APPROACH);
                        robot.MoveJ(target_conv_safe);

                        // 移动到上方之前,需要先判断是否有物品阻挡
                        //RoboDK.Item itemStarted = GetStartedPart();
                        //if (itemStarted != null)
                        //{
                        //    while (true)
                        //    {
                        //        if (SENSOR2.Collision(itemStarted) > 0 ||
                        //            SENSOR3.Collision(itemStarted) > 0)
                        //        {
                        //            continue;
                        //        }
                        //        else
                        //        {
                        //            break;
                        //        }
                        //    }
                        //}


                        robot.MoveJ(target_conv_app);
                        robot.MoveL(target_conv_pose);

                        AddPart(item);
                        item.SetParentStatic(frame_conv_moving);


                        robot.MoveL(target_conv_app);
                        robot.MoveJ(target_conv_safe);
                    }
                }
            }
        }
示例#25
0
        private void ConvertorControl(object obj)
        {
            RoboDK RDK = new RoboDK("127.0.0.1");

            RoboDK.Item Convertor = RDK.GetItem("Conveyor Belt");
        }
示例#26
0
        public void Test_ParallelRoboDKConnections()
        {
            var stopAsyncTask = false;
            var rdk           = new RoboDK
            {
                RoboDKServerStartPort = 10000,
                Logfile = Path.Combine(Directory.GetCurrentDirectory(), "RoboDk.log"),
                DefaultSocketTimeoutMilliseconds = 20 * 1000
            };

            rdk.Connect();
            rdk.Render(false);
            rdk.Command("AutoRenderDelay", 50);
            rdk.Command("AutoRenderDelayMax", 300);
            rdk.DefaultSocketTimeoutMilliseconds = 10 * 1000;

            List <IItem> AddStaticParts()
            {
                var parts = new List <IItem>();
                var cwd   = Directory.GetCurrentDirectory();

                parts.Add(rdk.AddFile(Path.Combine(cwd, "TableOut.sld")));
                parts.Add(rdk.AddFile(Path.Combine(cwd, "robot.robot")));
                return(parts);
            }

            List <IItem> AddDynamicParts()
            {
                var parts = new List <IItem>();
                var cwd   = Directory.GetCurrentDirectory();

                for (var n = 0; n < 10; n++)
                {
                    parts.Add(rdk.AddFile(Path.Combine(cwd, "Phone Case Box.sld")));
                    parts.Add(rdk.AddFile(Path.Combine(cwd, "Box.sld")));
                    parts.Add(rdk.AddFile(Path.Combine(cwd, "Phone Case Done.sld")));
                }

                return(parts);
            }

            // Task which opens a temporary new connection
            void DoTemporaryConnectionCalls(IReadOnlyCollection <IItem> staticParts)
            {
                // ReSharper disable once AccessToModifiedClosure
                while (!stopAsyncTask)
                {
                    foreach (var staticPart in staticParts)
                    {
                        Thread.Sleep(1);
                        using (var roboDkLink = new RoboDK.RoboDKLink(staticPart.RDK()))
                        {
                            var clonedItem = staticPart.Clone(roboDkLink.RoboDK);
                            clonedItem.Pose();
                        }
                    }
                }
            }

            var p    = AddStaticParts();
            var task = new Task(() => DoTemporaryConnectionCalls(p));

            task.Start();

            try
            {
                for (var i = 0; i < 20; i++)
                {
                    var dynamicParts = AddDynamicParts();
                    rdk.Command("CollisionMap", "Off");
                    rdk.SetCollisionActive(CollisionCheckOptions.CollisionCheckOff);
                    rdk.Delete(dynamicParts);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
            finally
            {
                stopAsyncTask = true;
            }

            try
            {
                task.Wait();
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
            finally
            {
                rdk.CloseRoboDK();
            }
        }
示例#27
0
 internal RoboDKEventSource(IRoboDK roboDk)
 {
     _roboDkApiConnection = (RoboDK)roboDk;
     _roboDkEventConnection = (RoboDK)_roboDkApiConnection.CloneRoboDkConnection(RoboDK.ConnectionType.Event);
 }