在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → ABB机器人winform二次开发程序

ABB机器人winform二次开发程序

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.90M
  • 下载次数:126
  • 浏览次数:1025
  • 发布时间:2020-03-24
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.rar
  • 所需积分:2
 相关标签:

实例介绍

【实例简介】abb机器人winform二次开发程序,可实现机器人单轴运动,线性运动,记录点位姿信息,显示当前点位姿和角度信息

【实例截图】

from clipboard【文件目录】

│  MoveRobot.sln
│  
└─MoveRobot
    │  App.config
    │  CoordinateTransformation.cs
    │  Form1.cs
    │  Form1.Designer.cs
    │  Form1.resx
    │  Form2.cs
    │  Form2.Designer.cs
    │  Form2.resx
    │  MoveRobot.csproj
    │  Program.cs
    │  Public.cs
    │  
    ├─bin
    │  └─Debug
    │          ABB.Robotics.Controllers.PC.dll
    │          ABB.Robotics.Controllers.PC.xml
    │          MoveRobot.exe
    │          MoveRobot.exe.config
    │          MoveRobot.pdb
    │          MoveRobot.vshost.exe
    │          MoveRobot.vshost.exe.config
    │          MoveRobot.vshost.exe.manifest
    │          RobotStudio.Services.RobApi.Desktop.dll
    │          RobotStudio.Services.RobApi.dll
    │          
    ├─Image
    │      Industrial_robot_64px_532261_easyicon.net.ico
    │      MainForm.ico
    │      机器人回原点.ico
    │      机器人运动.ico
    │      记录点的信息.ico
    │      
    ├─obj
    │  └─Debug
    │      │  DesignTimeResolveAssemblyReferences.cache
    │      │  DesignTimeResolveAssemblyReferencesInput.cache
    │      │  Interop.MSComctlLib.dll
    │      │  MoveRobot.csproj.FileListAbsolute.txt
    │      │  MoveRobot.csproj.GenerateResource.Cache
    │      │  MoveRobot.csproj.ResolveComReference.cache
    │      │  MoveRobot.csprojAssemblyReference.cache
    │      │  MoveRobot.csprojResolveAssemblyReference.cache
    │      │  MoveRobot.exe
    │      │  MoveRobot.MianForm.resources
    │      │  MoveRobot.pdb
    │      │  MoveRobot.PointnameForm.resources
    │      │  MoveRobot.Properties.Resources.resources
    │      │  TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
    │      │  TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
    │      │  TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
    │      │  
    │      └─TempPE
    └─Properties
            AssemblyInfo.cs
            Resources.Designer.cs
            Resources.resx
            Settings.Designer.cs
            Settings.settings
            


【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.Discovery;
using ABB.Robotics.Controllers.MotionDomain;
using ABB.Robotics.Controllers.RapidDomain;
using System.Diagnostics;

namespace MoveRobot
{
    public partial class MianForm : Form
    {

        public MianForm()
        {
            InitializeComponent();
            bool b = IsProcessStarted("RobotStudio");
            if (b)
            {
                NetworkScanner ns = new NetworkScanner();
                ns.Scan();
                Public.ctr = new Controller(ns.Controllers[0]);
                Public.ctr.Logon(UserInfo.DefaultUser);
            }
            else
            {
                //弹出对话框选择工作站,当选择好工作站后打开所选工作站                
                if (openABBFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    Process.Start(System.IO.Path.GetFullPath(openABBFile.FileName));
                }                
                System.Threading.Thread.Sleep(20000);//程序等待20s以便robotstudio打开
                NetworkScanner ns = new NetworkScanner();
                ns.Scan();
                Public.ctr = new Controller(ns.Controllers[0]);
                Public.ctr.Logon(UserInfo.DefaultUser);                
            }
        }
        /// <summary>
        /// 判断robotstudio软件是否打开
        /// </summary>
        /// <param name="processName"></param>
        /// <returns></returns>
        private bool IsProcessStarted(string processName)
        {

            Process[] temp = Process.GetProcessesByName(processName);

            if (temp.Length > 0) return true;

            else

                return false;

        }

        #region 单个轴运动控制
        /// <summary>
        /// 轴1移动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis1_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            targetR.RobAx.Rax_1  = float.Parse(txtAngle.Text);

            //判断轴度数是否超出范围
            if (targetR.RobAx.Rax_1 < -180)
            {
                targetR.RobAx.Rax_1 = -180;
            }
            else if (targetR.RobAx.Rax_1 > 180)
            {
                targetR.RobAx.Rax_1 = 180;
            }

            targetR = MoveAxis(targetR);

        }

        /// <summary>
        /// 轴2移动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis2_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.RobAx.Rax_2  = float.Parse(txtAngle.Text);
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            //判断轴度数是否超出范围
            if (targetR.RobAx.Rax_2 < -90)
            {
                targetR.RobAx.Rax_2 = -90;
            }
            else if (targetR.RobAx.Rax_2 > 150)
            {
                targetR.RobAx.Rax_2 = 150;
            }

            targetR = MoveAxis(targetR);
        }
        /// <summary>
        /// 移动轴3
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis3_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.RobAx.Rax_3  = float.Parse(txtAngle.Text);
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            //判断轴度数是否超出范围
            if (targetR.RobAx.Rax_3 < -180)
            {
                targetR.RobAx.Rax_3 = -180;
            }
            else if (targetR.RobAx.Rax_3 > 75)
            {
                targetR.RobAx.Rax_3 = 75;
            }
            targetR = MoveAxis(targetR);
        }
        /// <summary>
        /// 移动轴4
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis4_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.RobAx.Rax_4  = float.Parse(txtAngle.Text);
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            //判断轴度数是否超出范围
            if (targetR.RobAx.Rax_4 < -400)
            {
                targetR.RobAx.Rax_4 = -400;
            }
            else if (targetR.RobAx.Rax_4 > 400)
            {
                targetR.RobAx.Rax_4 = 400;
            }
            targetR = MoveAxis(targetR);
        }
        /// <summary>
        ///移动轴5 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis5_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.RobAx.Rax_5  = float.Parse(txtAngle.Text);
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            if (targetR.RobAx.Rax_5 < -125)
            {
                targetR.RobAx.Rax_5 = -125;
            }
            else if (targetR.RobAx.Rax_5 > 120)
            {
                targetR.RobAx.Rax_5 = 120;
            }
            targetR = MoveAxis(targetR);
        }
        /// <summary>
        /// 移动轴6
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAxis6_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            JointTarget targetR = aMechCol[0].GetPosition();
            JointTarget targetG = aMechCol[1].GetPosition();
            targetR.RobAx.Rax_6  = float.Parse(txtAngle.Text);
            targetR.ExtAx.Eax_a = targetG.ExtAx.Eax_a;
            if (targetR.RobAx.Rax_6 < -400)
            {
                targetR.RobAx.Rax_6 = -400;
            }
            else if (targetR.RobAx.Rax_6 > 400)
            {
                targetR.RobAx.Rax_6 = 400;
            }
            targetR = MoveAxis(targetR);
        }
        #endregion

        #region 直线运动控制
        private void btnLineRunX_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;
            targetR.Trans.X  = Convert.ToSingle(nUDStep.Value);
            targetR = LineRun(targetR);
        }


        private void btnLineRunY_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;
            targetR.Trans.Y  = Convert.ToSingle(nUDStep.Value);
            targetR = LineRun(targetR);
        }

        private void btnLineRunZ_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;
            targetR.Trans.Z  = Convert.ToSingle(nUDStep.Value);
            targetR = LineRun(targetR);
        }
        #endregion

        #region 重定位运动控制
        private void btnRotatoRunRX_Click(object sender, EventArgs e)
        {
            double[] rpy = new double[3];//用于存储欧拉角形式的位姿信息
            double[] q = new double[4];//用于存储四元数形式的位姿信息
            //读取机器人的位姿信息
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;
            //MessageBox.Show(aimtarget.Rot.Q1.ToString()   "\t"   aimtarget.Rot.Q2.ToString()   "\t"   aimtarget.Rot.Q3.ToString()   "\t"   aimtarget.Rot.Q4.ToString());
            //MessageBox.Show("计算结果"   (Math.Pow(aimtarget.Rot.Q1, 2)   Math.Pow(aimtarget.Rot.Q2, 2)   Math.Pow(aimtarget.Rot.Q3, 2)   Math.Pow(aimtarget.Rot.Q4, 2)));
            rpy = CoordinateTransformation.QuaternionToEuler(targetR.Rot.Q1, targetR.Rot.Q2, targetR.Rot.Q3, targetR.Rot.Q4);
            rpy[0]  = Convert.ToDouble(nUDStep.Value);
            //MessageBox.Show("Roll:"   rpy[0]   "Pitch:"   rpy[1]   "Yaw:"   rpy[2]);
            q = CoordinateTransformation.EulerToQuaternion(rpy[0], rpy[1], rpy[2]);
            targetR.Rot.Q1 = q[0];
            targetR.Rot.Q2 = q[1];
            targetR.Rot.Q3 = q[2];
            targetR.Rot.Q4 = q[3];
            //MessageBox.Show("Q1:"   q[0]   "Q2:"   q[1]   "Q3:"   q[2]   "Q4"   q[3]);
            //MessageBox.Show("计算结果\t"   (Math.Pow(q[0], 2)   Math.Pow(q[1], 2)   Math.Pow(q[2], 2)   Math.Pow(q[3], 2)).ToString());
            if ((Math.Pow(q[0], 2)   Math.Pow(q[1], 2)   Math.Pow(q[2], 2)   Math.Pow(q[3], 2)).ToString() == "1")
            {
                targetR = LineRun(targetR);
            }
            else
            {
                MessageBox.Show("计算出错");
            }
        }

        private void btnRotatoRunRY_Click(object sender, EventArgs e)
        {
            double[] rpy = new double[3];
            double[] q = new double[4];

            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;

            rpy = CoordinateTransformation.QuaternionToEuler(targetR.Rot.Q1, targetR.Rot.Q2, targetR.Rot.Q3, targetR.Rot.Q4);
            rpy[1]  = Convert.ToDouble(nUDStep.Value);

            q = CoordinateTransformation.EulerToQuaternion(rpy[0], rpy[1], rpy[2]);
            targetR.Rot.Q1 = q[0];
            targetR.Rot.Q2 = q[1];
            targetR.Rot.Q3 = q[2];
            targetR.Rot.Q4 = q[3];

            if ((Math.Pow(q[0], 2)   Math.Pow(q[1], 2)   Math.Pow(q[2], 2)   Math.Pow(q[3], 2)).ToString() == "1")
            {
                targetR = LineRun(targetR);
            }
            else
            {
                MessageBox.Show("计算出错");
            }
        }

        private void btnRotatoRunRZ_Click(object sender, EventArgs e)
        {
            double[] rpy = new double[3];
            double[] q = new double[4];

            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;

            rpy = CoordinateTransformation.QuaternionToEuler(targetR.Rot.Q1, targetR.Rot.Q2, targetR.Rot.Q3, targetR.Rot.Q4);
            rpy[2]  = Convert.ToDouble(nUDStep.Value);

            q = CoordinateTransformation.EulerToQuaternion(rpy[0], rpy[1], rpy[2]);
            targetR.Rot.Q1 = q[0];
            targetR.Rot.Q2 = q[1];
            targetR.Rot.Q3 = q[2];
            targetR.Rot.Q4 = q[3];

            if ((Math.Pow(q[0], 2)   Math.Pow(q[1], 2)   Math.Pow(q[2], 2)   Math.Pow(q[3], 2)).ToString() == "1")
            {
                targetR = LineRun(targetR);
            }
            else
            {
                MessageBox.Show("计算出错");
            }
        }

        #endregion

        /// <summary>
        /// 一键机器人回到机械原点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnHomePoint_Click(object sender, EventArgs e)
        {
            JointTarget target = Public.ctr.MotionSystem.ActiveMechanicalUnit.GetPosition();
            target.RobAx.Rax_1 = 0;
            target.RobAx.Rax_2 = 0;
            target.RobAx.Rax_3 = 0;
            target.RobAx.Rax_4 = 0;
            target.RobAx.Rax_5 = 30;
            target.RobAx.Rax_6 = 0;
            target = MoveAxis(target);
        }

        #region 将点位姿信息增添到listview中
        /// <summary>
        /// 记录点的信息,并将其添加到listview中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRecord_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X;
            //显示记录点名称对话框
            PointnameForm fm = new PointnameForm();
            fm.ShowDialog();
            //将点的位姿信息添加到listview中
            if (System.String.IsNullOrWhiteSpace(Public.pointName))
            {

            }
            else
            {
                ListViewItem iItem = listView1.Items.Add((listView1.Items.Count   1).ToString());
                iItem.SubItems.Add(Public.pointName);
                iItem.SubItems.Add(targetR.ToString());
                iItem.EnsureVisible();
            }


        }
        #endregion

        #region 编程运动
        /// <summary>
        /// 点击按钮开始按照指定点和指定运动方式进行运动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRun_Click(object sender, EventArgs e)
        {            
            try
            {
                RobTarget target = RobTarget.Parse(listView1.SelectedItems[0].SubItems[2].Text);                
                switch (cboRunStyle.Text)
                {
                    case "直线运动":
                        target = LineRun(target);
                        break;
                    case "曲线运动":
                        target = JointRun(target);
                        break;
                    case "圆弧运动":
                        //执行MoveC时总是执行不了,robotstudio中给出的原因如下:
                        //1 终点太靠近起点。2 圆点离起点过近。3 圆点离终点过近。4 不确定的重定向。5 圆过大 > 240 度。
                        //当定义的位姿点正确时,该指令可以进行,所以在前期选择位姿点时要有所选择
                        target = CircleRun(target, RobTarget.Parse(listView1.SelectedItems[1].SubItems[2].Text));

                        break;
                    default:
                        break;
                }
            }
            catch (Exception a)
            {
                MessageBox.Show(a.ToString());
            }
        }
        #endregion

        #region 导轨运动操作
        private void btnTrack_Click(object sender, EventArgs e)
        {
            MechanicalUnitCollection aMechCol = Public.ctr.MotionSystem.MechanicalUnits;
            RobTarget targetG = aMechCol[1].GetPosition(CoordinateSystemType.World);
            RobTarget targetR = aMechCol[0].GetPosition(CoordinateSystemType.World);
            targetR.Extax.Eax_a = targetG.Trans.X   float.Parse(txtAngle.Text);
            targetR.Trans.X  = float.Parse(txtAngle.Text);
            targetR = GuidRun(targetR);
        }

        #endregion

        #region 机器人运动的方法
        /// <summary>
        /// 将变换后的轴度数和更改后的数据传递给控制器,并使得机器人按照绝对轴关节运动
        /// </summary>
        /// <param name="target">加上转动角度后的轴度数</param>
        /// <returns>轴关节度数</returns>
        private JointTarget MoveAxis(JointTarget target)
        {
            RapidData r = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "t");
            RapidData pc = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "pc");
            RapidData time = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "time");
            ABB.Robotics.Controllers.RapidDomain.Num timeN = new Num(float.Parse(txtTime.Text));
            ABB.Robotics.Controllers.RapidDomain.Num n = new Num(1);
            using (Mastership m = Mastership.Request(Public.ctr.Rapid))
            {
                r.Value = target;
                pc.Value = n;
                time.Value = timeN;
            }
            return target;
        }
        /// <summary>
        /// 将变换后机器人位姿信息传递给控制器,并使得机器人按照关节式移动方式运动
        /// </summary>
        /// <param name="target">机器人位姿信息</param>
        /// <returns>变换后的位姿信息</returns>
        private RobTarget JointRun(RobTarget target)
        {
            RapidData r = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "aimtarget");
            RapidData pc = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "pc");
            RapidData time = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "time");
            ABB.Robotics.Controllers.RapidDomain.Num n = new Num(3);
            ABB.Robotics.Controllers.RapidDomain.Num timeN = new Num(float.Parse(txtTime.Text));
            using (Mastership m = Mastership.Request(Public.ctr.Rapid))
            {
                r.Value = target;
                pc.Value = n;
                time.Value = timeN;
            }
            return target;
        }
        /// <summary>
        /// 机器人直线运动
        /// </summary>
        /// <param name="aimtarget">机器人整体位姿信息</param>
        /// <returns>变化后的位姿信息</returns>
        private RobTarget LineRun(RobTarget aimtarget)
        {
            RapidData r = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "aimtarget");
            RapidData pc = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "pc");
            RapidData time = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "time");
            ABB.Robotics.Controllers.RapidDomain.Num n = new Num(2);
            ABB.Robotics.Controllers.RapidDomain.Num timeN = new Num(float.Parse(txtTime.Text));
            using (Mastership m = Mastership.Request(Public.ctr.Rapid))
            {
                r.Value = aimtarget;
                pc.Value = n;
                time.Value = timeN;
            }
            return aimtarget;
        }
        /// <summary>
        /// 机器人按照圆弧类型运动
        /// </summary>
        /// <param name="target1">中间点位姿信息</param>
        /// <param name="target2">目标点位姿信息</param>
        /// <returns>中间点位姿信息</returns>
        private RobTarget CircleRun(RobTarget target1, RobTarget target2)
        {
            RapidData r = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "aimtarget");
            RapidData mid = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "midtarget");
            RapidData pc = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "pc");
            RapidData time = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "time");
            ABB.Robotics.Controllers.RapidDomain.Num timeN = new Num(float.Parse(txtTime.Text));
            ABB.Robotics.Controllers.RapidDomain.Num n = new Num(4);
            using (Mastership m = Mastership.Request(Public.ctr.Rapid))
            {
                r.Value = target1;
                mid.Value = target2;
                pc.Value = n;
                time.Value = timeN;
            }
            return target1;
        }
        /// <summary>
        /// 使机器人沿导轨运动
        /// </summary>
        /// <param name="aimtarget"></param>
        /// <returns></returns>
        private RobTarget GuidRun(RobTarget aimtarget)
        {
            RapidData r = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "aimtarget");
            RapidData pc = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "pc");
            RapidData time = Public.ctr.Rapid.GetRapidData("T_ROB1", "Module1", "time");
            ABB.Robotics.Controllers.RapidDomain.Num n = new Num(5);
            ABB.Robotics.Controllers.RapidDomain.Num timeN = new Num(float.Parse(txtTime.Text));
            using (Mastership m = Mastership.Request(Public.ctr.Rapid))
            {
                r.Value = aimtarget;
                pc.Value = n;
                time.Value = timeN;
            }
            return aimtarget;
        }
        #endregion

        /// <summary>
        /// 将机器人当前各轴的度数显示在对应的label中
        /// </summary>
        private void WriteAxisAngle()
        {
            try
            {
                JointTarget target = Public.ctr.MotionSystem.ActiveMechanicalUnit.GetPosition();
                lblAxis1.Text = "Axis1:"   Math.Round(target.RobAx.Rax_1, 2, MidpointRounding.AwayFromZero).ToString();
                lblAxis2.Text = "Axis2:"   Math.Round(target.RobAx.Rax_2, 2, MidpointRounding.AwayFromZero).ToString();
                lblAxis3.Text = "Axis3:"   Math.Round(target.RobAx.Rax_3, 2, MidpointRounding.AwayFromZero).ToString();
                lblAxis4.Text = "Axis4:"   Math.Round(target.RobAx.Rax_4, 2, MidpointRounding.AwayFromZero).ToString();
                lblAxis5.Text = "Axis5:"   Math.Round(target.RobAx.Rax_5, 2, MidpointRounding.AwayFromZero).ToString();
                lblAxis6.Text = "Axis6:"   Math.Round(target.RobAx.Rax_6, 2, MidpointRounding.AwayFromZero).ToString();
            }
            catch (Exception)
            {

            }

        }

        private void MianForm_Load(object sender, EventArgs e)
        {
            lblSpeed.Text = trackBar1.Value.ToString();
            toolStripStatusLabel1.Text = System.DateTime.Now.ToString();//加载窗体时将时间给状态栏
            WriteAxisAngle();
        }

        /// <summary>
        /// 时间事件,每隔0.1s触发一次,1、显示当前时间在状态栏中;2、将机器人当前位姿传递给label
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = System.DateTime.Now.ToString();
            WriteAxisAngle();
        }

        #region listview中鼠标右键操作
        /// <summary>
        /// 右击鼠标选择删除,则将选中行从listview中删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //int currentIndex = 0;
            if (this.listView1.SelectedItems.Count > 0)//判断listview有被选中项
            {
                for (int i = 0; i < this.listView1.SelectedItems.Count; i  )
                {
                    listView1.Items[i].Remove();
                }
                //currentIndex = this.listView1.SelectedItems[0].Index;//取当前选中项的index
                //listView1.Items[currentIndex].Remove();
            }
        }
        /// <summary>
        /// 右击鼠标选择修改点名称,弹出输入点名称对话框,并将修改后的值传递给listview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 修改点名称ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.listView1.SelectedItems.Count==1)
            {
                PointnameForm fm = new PointnameForm();
                fm.ShowDialog();
                //将点的位姿信息添加到listview中
                if (System.String.IsNullOrWhiteSpace(Public.pointName))
                {

                }
                else
                {
                    int currentIndex = 0;
                    if (this.listView1.SelectedItems.Count > 0)//判断listview有被选中项
                    {
                        currentIndex = this.listView1.SelectedItems[0].Index;//取当前选中项的index
                        listView1.Items[currentIndex].SubItems[1].Text = Public.pointName;//将更改后的名称传递给listview中
                    }
                }
            }
            else if (this.listView1.SelectedItems.Count < 1)
            {
                MessageBox.Show("请先选择位姿点");
            }
            else if (this.listView1.SelectedItems.Count > 1)
            {
                MessageBox.Show("请只选择一个位姿点");
            }
           
        }
        /// <summary>
        /// 右击鼠标选择添加到运动,将位姿信息传递给listbox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 添加到运动ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(this.listView1.SelectedItems[0].SubItems[2].Text);
        }
        #endregion

        #region 点击菜单栏中相应控件出发相应的事件

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("是否退出MoveRobot", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop);
            if (dr == DialogResult.OK)
            {
                this.Close();
            }
        }

        private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://new.abb.com/");//打开指定网站
        }

        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void robotStudioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            process1.Start();
        }
        #endregion

        /// <summary>
        /// 当滑动条的值变化时,将变化后的值传递给speed;同时将滑动条变化后的值给label
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            Public.speed = trackBar1.Value;
            Public.ctr.MotionSystem.SpeedRatio = trackBar1.Value;
            lblSpeed.Text = trackBar1.Value.ToString();
        }

        /// <summary>
        /// 单轴运动时输入角度的限制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtAngle_KeyPress(object sender, KeyPressEventArgs e)
        {
            //当按下的值不是数字或者.时,弹出提示对话框并且不将按键值传入文本框
            if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13 && e.KeyChar != 46 && e.KeyChar != 45)
            {
                MessageBox.Show("旋转角度只能输入数字", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                e.Handled = true;
            }
            if (txtAngle.Text == "-")
            {

            }
            //当文本框内的值大于100或小于-100时,并且按键不是backpace和enter时弹出提示对话框,并不将按键值传入文本框
            else if ((float.Parse(txtAngle.Text) > 100 || float.Parse(txtAngle.Text) < -100) && (e.KeyChar != 8 && e.KeyChar != 13))
            {
                MessageBox.Show("旋转角度过大", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                e.Handled = true;
            }
        }

        

    }
}

标签:

实例下载地址

ABB机器人winform二次开发程序

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 Robin_Yang 发表于: 2020-11-15 14:19 43
无法实现,控制机器人单轴或者线性、重定位运动。望楼主给个解释。

支持(0) 盖楼(回复)

第 2 楼 yumingyue 发表于: 2025-03-27 14:10 52
无法实现,控制机器人单轴或者线性、重定位运动。望楼主给个解释。

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有2条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警