ProEasy机械手案例:电池边包胶

如下图所示,对一个电池三边包边,因客户现场有很多规格电池的大小,所以就需要建立动态的工具坐标来实现适配所有种类的电池

程序如下:Ddome程序


function Speed(num)      --速度设置

    MaxSpdL(2000)                --movl最大速度
    MaxAccL(20000)                --movl最大加速度
    SetMovL_MODE(1)                --movl运动的速度参数模式
    AccL(num)                    --movl加速度
    DecL(num)                    --movl减速度
    SpdL(num)                    --movl速度
    
    MaxSpdJ(9000)                --movp最大速度
    MaxAccJ(300)                --movp最大加速度
    AccJ(num)                    --movp加速度
    DecJ(num)                    --movp减速度
    SpdJ(num)                    --movp速度
    

end

function TLSet(TF_Idx, W, H, E, dC) --设置工具坐标系的值
    local tValid = _LUA_NONE_ERR
    local TmpValid = {}
    local tmpIdx = 1
    local TmpData = {}
    local dA, dB = 0, 0
    
    local function_code_write_teach_buffer_1 = 0x00010013 --W
    local function_code_write_teach_buffer_2 = 0x01010013 --H
    local function_code_write_teach_buffer_3 = 0x02010013 --E
    local function_code_write_teach_buffer_4 = 0x03010013 --A
    local function_code_write_teach_buffer_5 = 0x04010013 --B
    local function_code_write_teach_buffer_6 = 0x05010013 --C
    local function_code_write_tf_whe = 0x00011132 + (TF_Idx*0x01000000) --工具坐标系中w,h,e的地址功能码
    local function_code_write_tf_abc = 0x00010632 + (TF_Idx*0x01000000) --工具坐标系中a,b,c的地址功能码    
    local function_code_write_tf_whe_Cal = 0x00000231  + (TF_Idx*0x01000000) --计算w, h, e教导点功能码
    local function_code_write_tf_abc_Cal = 0x00000631  + (TF_Idx*0x01000000) --计算a, b, c教导点功能码
    
    --输入数据类型判断
    if type(W) ~= "number" or type(H) ~= "number" or type(E) ~= "number" or type(dA) ~= "number" or type(dB) ~= "number" or type(dC) ~= "number" or type(TF_Idx) ~= "number" then
        motion.ProgramStop(string.format("Function TLSet(): input type is error!"))
    end
    
    --判断工具坐标系编号
    if TF_Idx < 1 or TF_Idx > 9 then
        motion.ProgramStop(string.format("Function TLSet(): Value of TF_Idx is out of range!"))
    end

    --写入a, b, c索引值,写入参数值
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_4)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, dA)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_5)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, dB)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_6)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, dC)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,06, function_code_write_tf_abc)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,06, function_code_write_tf_abc_Cal)
    DELAY(0.004)
    
    --写入w, h, e索引值,写入参数值
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_1)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, W)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_2)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, H)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,07,function_code_write_teach_buffer_3)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    TmpValid[tmpIdx] = para.Write(0,2,08, E)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,06, function_code_write_tf_whe)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)
    
    TmpValid[tmpIdx] = para.Write(0,2,06, function_code_write_tf_whe_Cal)
    tmpIdx = tmpIdx + 1
    DELAY(0.004)

    return 0
end


function Tool_Generate(Length,Width,Num)        --动态工具坐标生成,Length物料长度,Width物料宽度,Num工具坐标编号

    tcmd, data = motion.GetFeedbackPosition(1)
    
    -----------------------使用方法如下----------------------------
    --------------------------------------------------------------
    
    local Length1 = data.x + Length/2            --计算电池对角点的X坐标
    
    local Width1 = data.Y + Width/2                --计算电池对角点的Y坐标
    
    
    Relative_X = Length1 - data.x     --工具中心X - 丝杆中心X (X方向偏移量),单位μm
    Relative_Y = Width1- data.y     --工具中心Y - 丝杆中心Y (Y方向偏移量),单位μm
    
    
    Relative_W = math.sqrt(Relative_X^2 + Relative_Y^2)            --工具坐标长度,三角函数√(X^2 + Y^2)
    Relative_E = math.deg(math.atan2(Relative_Y, Relative_X))*1000        --工具坐标角度,反正切函数atan2(Y/X)。不能用Atan,因为需要注意角度象限。注意单位。
    
    
    TLSet(Num, Relative_W, 0, Relative_E - data.c, 0)        --将工具长度与工具角度填入TLSet生成Num工具坐标系,工具角度需要减去当前C轴的值。
    DELAY(0.5)
    
    
end

Speed(20)                      --速度设置

----例如长50000um,宽20000um

Tool_Generate(50000,-20000,1)        --动态工具坐标1生成    

Tool_Generate(-50000,-20000,2)        --动态工具坐标2生成


while 1 do

    
    MovL(1)                        --物料起始点
    
    
    -------第一条边贴胶-------------
    
    MovL(1 + P.Y(50000))        --直线偏移物料长边贴胶
    
    
    
    -------第一角贴胶-------------
    para.Write(0,2,6, 0x01010050) --修改控制器参数 P2-06 ,把当前坐标系 TF=1
    
    _,Here = motion.GetFeedbackPosition(1)        --获取当前位置
    
    MovL(Here + P.C(90000))        --以旋转中心1旋转90贴胶
    
    
    
    
    -------第二条边贴胶-------------
    para.Write(0,2,6, 0x00010050) --修改控制器参数 P2-06 ,把当前坐标系 TF=0
    
    _,Here = motion.GetFeedbackPosition(1)        --获取当前位置
    
    MovL(Here + P.Y(20000))        --直线偏移物料宽边贴胶
    
    
    
    -------第二角贴胶-------------
    para.Write(0,2,6, 0x02010050) --修改控制器参数 P2-06 ,把当前坐标系 TF=2
    
    _,Here = motion.GetFeedbackPosition(1)        --获取当前位置
    
    MovL(Here + P.C(90000))        --以旋转中心2旋转90
    
    
    
    
    -------第三条边贴胶-------------
    para.Write(0,2,6, 0x00010050) --修改控制器参数 P2-06 ,把当前坐标系 TF=0
    
    _,Here = motion.GetFeedbackPosition(1)        --获取当前位置
    
    MovL(Here + P.Y(50000))        --直线偏移物料长边贴胶

end
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/245349.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Hive(部署+SQL)

Hive架构 Hive部署 VMware虚拟机部署 一、在node1节点安装mysql数据库 二、配置Hadoop 三、下载 解压Hive 四、提供mysql Driver驱动 五、配置Hive 六、初始化元数据库 七、启动Hive(Hadoop用户) chown -R hadoop:hadoop apache-hive-3.1.3-bin hive 阿里云部…

netcore swagger 错误 Failed to load API definition

后端接口报错如下&#xff1a; 前端nswag报错如下&#xff1a; 根据网上查询到的资料说明&#xff0c;说一般swagger这种错误都是控制器里有接口代码异常造成的&#xff0c;通常是接口没有加属性Attribute&#xff0c; 比如[HttpPost("Delete")]、[HttpGet("Del…

【Echarts】基本的关系图

基本的关系图 let data {nodes: [{name: 操作系统集团11223,category: 4 // index},{name: 操作系统集团123,category: 3 // index},{name: 操作系统集团center,category: 2 // index},{name: 操作系统集团,category: 0 // index},{name: 浏览器有限公司,category: 0 // inde…

双指针算法: 快乐数 与 盛水最多的容器

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 前言 声明…

医院不良事件报告系统源码带鱼骨图分析

医院不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件…

32.768KHz时钟RTC晶振精度PPM值及频差计算

一个数字电路就像一所城市的交通&#xff0c;晶振的作用就是十字路口的信号灯&#xff0c;因此晶振的品质及其电路应用尤其关键。数字电路又像生命体&#xff0c;它的运行就像人身体里的血液流通&#xff0c;它不是由单一的某个器件或器件单元构成&#xff0c;而是由多个器件及…

力扣7.整数反转

题目描述 代码 自己写的像屎山&#xff0c;虽然能通过&#xff0c;但多了很多不必要的代码。 class Solution {public int reverse(int x) {int count 0;int res 0;//用temp2记录x的正负int temp2 x;if(x < 0){x -x;}int temp x;while(temp ! 0){temp temp / 10;cou…

10分钟带你学会python模块和包的使用

如果你用过 Python&#xff0c;那么你一定用过 import 关键字加载过各式各样的模块。但你是否熟悉 Python 中的模块与包的概念呢&#xff1f;或者&#xff0c;以下几个问题&#xff0c;你是否有明确的答案&#xff1f; 什么是模块&#xff1f;什么又是包&#xff1f;from matp…

synchronized底层原理(一)

文章目录 1. 问题引入2. 相关概念3. Synchronized使用4. Synchronized底层原理1. 简介2. Monitor&#xff08;管程/监视器&#xff09;3. Java语言的内置管程synchronized4. Java对象的内存布局5. 如何使用MarkWord记录锁状态6. 偏向锁7. 轻量级锁 1. 问题引入 假设我们有1000…

Java项目学生管理系统四编辑学生

编辑学生 欢迎阅读本篇博客&#xff0c;今天我们将继续探索Java项目学生管理系统的功能&#xff0c;重点关注学生信息的修改模块。在学生管理系统中&#xff0c;修改学生信息是一个关键操作&#xff0c;通过该功能可以方便地更新学生的个人信息、成绩以及其他相关数据。通过本…

Android滑动列表索引波浪侧边栏与电话拨打功能

✍️作者简介&#xff1a;大鹏编码&#xff08;专注于HarmonyOS、Java、Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、知乎、简书、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞…

NIFI源码编译部署在服务器CentOS环境中

一、下载Apache NiFi源码&#xff1a; Apache NiFi官网地址&#xff0c;文档 Apache NiFi源码GitHub地址 二、部署nifi 2.1进入opt目录&#xff0c;并创建software、module [rootlocalhost /]# cd /opt/ [rootlocalhost opt]# ls containerd [rootlocalhost opt]# mkdir s…