C# 机器视觉工控通讯------发那科机器人上位机通讯

这篇具有很好参考价值的文章主要介绍了C# 机器视觉工控通讯------发那科机器人上位机通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C#  采用发那科Robot Interface 中间库和机器人控制柜通过网络通讯,主要功能如下:文章来源地址https://www.toymoban.com/news/detail-529423.html

1. 链接发那科机器人

      /// 连接发那科机器人
        /// </summary>
        /// <param name="IPAddress">机器人IP地址</param>
        /// <param name="DataPosRegStartIndex">PR寄存器开始地址</param>
        /// <param name="DataPosRegEndIndex">PR寄存器结束地址</param>
        /// <returns></returns>
        public static bool ConnectRobot(string IPAddress, int DataPosRegStartIndex, int DataPosRegEndIndex)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    mobjCore = new Core();
                    mobjCore.set_TimeOutValue(1000);
                    mobjDataTable = mobjCore.get_DataTable();
                    mobjDataNumReg_INT = mobjDataTable.AddNumReg(FRIF_DATA_TYPE.NUMREG_INT, 1, 200);
                    mobjDataNumReg_REAL = mobjDataTable.AddNumReg(FRIF_DATA_TYPE.NUMREG_REAL, 1, 200);
                    mobjDataString_NUMREG_COMMENT = mobjDataTable.AddString(FRIF_DATA_TYPE.NUMREG_COMMENT, 1, 10);
                    mobjDataPosReg = mobjDataTable.AddPosReg(FRIF_DATA_TYPE.POSREG, 1, DataPosRegStartIndex, DataPosRegEndIndex);
                    mobjCurPos = mobjDataTable.AddCurPos(FRRJIf.FRIF_DATA_TYPE.CURPOS, 1);

                    if (mobjCore.Connect(IPAddress.Trim()))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

2. 断开发那科机器人通讯

      /// <summary>
        /// 断开和发那科机器人的通讯
        /// </summary>
        public static void DisConnectRobot()
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    mobjCore.Disconnect();
                    mobjCore = null;
                    mobjDataTable = null;
                    mobjDataNumReg_INT = null;
                    mobjDataNumReg_REAL = null;
                    mobjDataString_NUMREG_COMMENT = null;
                    mobjDataPosReg = null;
                    mobjCurPos = null;
                    //MessageBox.Show("连接已终止!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

3 读取发那科机器人DO值

/// <summary>
        /// 读发那科机器人DO值
        /// </summary>
        /// <param name="DO">DO号</param>
        /// <param name="Result">DO值</param>
        /// /// <param name="Count">位数</param>
        /// <returns>返回true或false</returns>
        public static bool ReadRobotDO(int DO, ref Array Result, int Count)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjCore.ReadSDO(DO, ref Result, Count))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

4 写发那科机器人DO值

        /// <summary>
        /// 写发那科机器人DO值
        /// </summary>
        /// <param name="DO">DO</param>
        /// <param name="Value">DO值:0或1</param>
        /// <returns>返回true或false</returns>
        public static bool WriteRobotDO(int DO, int Value)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    Array buf = new short[1];
                    buf.SetValue((short)Value, 0);
                    if (mobjCore.WriteSDO(DO, ref buf, 1))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

5  读发那科机器人DI值

    public static bool ReadRobotDI(int DI, ref Array Result)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjCore.ReadSDI(DI, ref Result, 1))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

6 读发那科机器人R寄存器

   public static bool ReadRobotR(int R, ref object Result)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    mobjDataTable.Refresh();
                    if (mobjDataNumReg_INT.GetValue(R, ref Result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

7   写发那科机器人R数值寄存器(整型)

   public static bool WriteRobotR(int R, int Value, int Count)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjDataNumReg_INT.SetValuesInt(R, ref Value, Count))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

 8  写发那科机器人R数值寄存器(小数)

  public static bool WriteRobotR(int R, float Value, int Count)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjDataNumReg_REAL.SetValuesReal(R, ref Value, Count))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }

                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

9 写发那科机器人R数值寄存器的注释

  public static bool WriteRobotR_COMMENT(int R, string Value)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjDataString_NUMREG_COMMENT.SetValue(R, Value))
                    {
                        mobjDataString_NUMREG_COMMENT.Update();
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

10   读发那科机器人PR位置寄存器(关节坐标)

  public static bool ReadRobotPRJoint(int PR, ref float[] Result)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    short ut = 0, validJ = 0;
                    mobjDataTable.Refresh();
                    if (mobjDataPosReg.GetValueJoint(PR, ref Result[0], ref Result[1], ref Result[2], ref Result[3], ref Result[4], ref Result[5], ref Result[6], ref Result[7], ref Result[8], ref ut, ref validJ))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

11   读发那科机器人PR位置寄存器(直角坐标)

     public static bool ReadRobotPRXyzwpr(int PR, ref float[] Result)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    float X = 0, Y = 0, Z = 0, W = 0, P = 0, R = 0, E1 = 0, E2 = 0, E3 = 0;
                    short C1 = 0, C2 = 0, C3 = 0, C4 = 0, C5 = 0, C6 = 0, C7 = 0;
                    short ut = 0, validc = 0, uf = 0;
                    mobjDataTable.Refresh();
                    if (mobjDataPosReg.GetValueXyzwpr(PR, ref X, ref Y, ref Z, ref W, ref P, ref R, ref E1, ref E2, ref E3, ref C1, ref C2, ref C3, ref C4,
                        ref C5, ref C6, ref C7, ref uf, ref ut, ref validc))
                    {
                        Result[0] = X;
                        Result[1] = Y;
                        Result[2] = Z;
                        Result[3] = W;
                        Result[4] = P;
                        Result[5] = R;
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

12 写发那科机器人PR位置寄存器(关节坐标)

      public static bool WriteRobotPRJoint(int PR, Array Value, short UF, short UT)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjDataPosReg.SetValueJoint(PR, ref Value, UF, UT))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

13  写发那科机器人PR位置寄存器(直角坐标)

   public static bool WriteRobotPRXyzwpr(int PR, float X, float Y, float Z, float W, float P, float R, float E1, float E2, float E3,
            short C1, short C2, short C3, short C4, short C5, short C6, short C7, short UF, short UT)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    if (mobjDataPosReg.SetValueXyzwpr2(PR, X, Y, Z, W, P, R, E1, E2, E3, C1, C2, C3, C4, C5, C6, C7, UF, UT))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

14 读发那科机器人当前位置(直角坐标)

      public static bool ReadCurrRobotXyzwpr(ref Array xyzwpr)
        {
            lock (Lock_FNCRobot)
            {
                try
                {
                    Array config = new short[7];
                    Array joint = new float[9];
                    short intUF = 0;
                    short intUT = 0;
                    short intValidC = 0;
                    short intValidJ = 0;

                    mobjDataTable.Refresh();
                    mobjCurPos.GetValue(ref xyzwpr, ref config, ref joint, ref intUF, ref intUT, ref intValidC, ref intValidJ);
                    return true;
                }
                catch (Exception e1)
                {
                    MessageBox.Show("异常信息:\r\n" + e1.Message.ToString(), "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
        }

到了这里,关于C# 机器视觉工控通讯------发那科机器人上位机通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 发那科机器人仿真软件FANUCROBOGUIDE打开机器备份

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在电脑端发那科机器人仿真软件打开机器人的备份,来判断到底是那一台机器人的程序,模拟练习,消除故障,零点复归等操作 提示:以下是本篇文章正文内容,下面案例可供参考 安装仿真软件前到电

    2024年02月12日
    浏览(224)
  • ​发那科机器人PROFINET 主站配置

    ​发那科机器人PROFINET 主站配置 前言:今天给大家分享的FANUC机器人PROFINET 网络机器人做主站,下属设备有博士焊机、图尔克IP67 16DX模块、SMC阀岛的配置流程,跟着本流程做就可以把网络配好。 具体步骤: 1.软件安装好后,打开以下图标Profinet Configuration Tool 2.选中设备后--右

    2024年02月05日
    浏览(51)
  • FANUC/发那科机器人基础知识(1)

            弧焊 Arc welding,点焊 Spot welding,搬运 Handing,涂胶 Sealing,喷漆 Painting,去毛刺,切割,激光焊接,测量等等。 Handling Tool 搬运 Paint Tool 油漆 Spot Tool 点焊 Laser Tool 激光焊接和切 Arc Tool 弧焊 Sealing Tool 布胶         SHIFT:与其它键一起执行特定功能     Prev:显

    2024年02月03日
    浏览(35)
  • 关于发那科机器人速度倍率再启动设置

    速度倍率变更的自定义,可以对在按住倍率键或者SHFT键的同时按下倍率键时的速度倍率的动作进行自定义。希望进行自定义时,在系统变量画面上选择$OVRD SETUP,分别独立设定在按住SHFT键的同时按下了倍率键时的动作,和不按SHFT键而按下了倍率键时的动作.系统变量. $OVRD SETUP 

    2024年01月21日
    浏览(167)
  • 发那科机器人:MOTN-049 零点标定结果未更新

    现象如图: 原因:机器人在进行零位标定相关操作后出现 解决方法:MENU---系统---变量---$DMR_GRP--回车---回车 选择有效后查看一下机器人点位 然后重启机器人,开机后查看机器人点位和关机前对比,点位一致则表示成功,上使能机器人就可以手动运动。

    2024年02月01日
    浏览(31)
  • 关于发那科机器人抓手及物料搬运阀配置

    1:首先机器人按 机器人控制模式启动 ​2:MENU—应用选择,将搬运置为有效,剩余其他项根据机器人实际用途进行选择 3:设置搬运有效,抓手是否带点焊可以自行选择,要设置应用选择,物料搬用工具数量,工具上阀岛的数量,夹钳存在数量,工具存在数量,以及真空吸盘

    2024年02月16日
    浏览(126)
  • 关于发那科机器人外部轴零点丢失处理方法

    关于机器人有没有丢零点,可以查看机器人的7轴数据有没有发生变化,菜单 - 下一页 - 系统 - 零点校准打开 ST[2] 有没有变零,变零表示零点丢失,可以在世界坐标或者工具坐标系看看机器人能不能示教,机器人无法示教只能走关节坐标系,则机器人的零点可能丢失,可以查

    2024年02月06日
    浏览(128)
  • 确保发那科机器人零点标定(零点复归)精度的3种方法

    最近接触了库卡的机器人,在上电的过程中,本想着需要确认一下机器人各轴零点是否对齐,深入查看后才发现库卡机器人并没有各轴零点标牌对齐一说,而是有一套专门的零点标定工具叫做EMD。 理解下来,大致原理就是如果机器人机械零点丢失,客户需要使用EMD标定工具,

    2024年02月09日
    浏览(56)
  • 发那科机器人IO信号的种类与常用信号的分配及信号处理

    发那科(Fanuc)机器人是一种广泛应用于工业自动化领域的机器人品牌。它们通常用于执行各种任务,如装配、焊接、搬运等。在机器人的控制系统中,IO(输入/输出)信号起着重要的作用。IO信号用于与外部设备进行通信,例如传感器、执行器和其他辅助设备。本文将详细介

    2024年02月04日
    浏览(40)
  • Epson爱普生手臂机器人与PC通讯 C#

    安装Epson手臂控制软体 EPSON RC+ 7.0 (根据实际需求下载应用),可以去官网下载安装。 准备一台PC,用网线连接PC和EPSON手臂控制器。 EPSON手臂默认IP( 192.168.0.1 ),PC IP改为手臂同一网段(如192.168.0.2),打开EPSON RC+ 7.0软件。如图1和图2 图1 图2 步骤1:打开软件EPSON RC+ 7.0; 步

    2024年02月03日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包