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/255864.html

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

相关文章

Swift 中 User Defaults 的读取和写入

文章目录 前言介绍 User Defaults共享 User DefaultsUser Defaults 存储数据类型响应更改监控 User Defaults 更改覆盖User Defaults 设置考虑的替代方案Keychain 用于安全性用于跨平台的 CloudKit 结论 前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的…

Tomcat的初步学习

Tomcat ~~ 一个 HTTP 服务器 HTTP协议就是HTTP客户端和HTTP服务器之间通信使用的协议, HTTP客户端就是浏览器(当然也有别的). HTTP服务器,则有很多种实现. tomcat 是 Java 圈子中, 最知名, 最广泛使用的 HTTP 服务器 Tomcat的下载安装 官网链接 Apache (阿帕奇)最早也是个开源…

[BJDCTF2020]EzPHP 许多的特性

这道题可以学到很多东西 静下心来慢慢通过本地知道是干嘛用的就可以学会了 BJDctf2020 Ezphp_[bjdctf2020]ezphp-CSDN博客 这里开始 一部分一部分看 $_SERVER[QUERY_SRING]的漏洞 if($_SERVER) { if (preg_match(/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|…

python+paddleocr 进行图像识别、找到文字在屏幕中的位置

目录 前言 1、安装paddleocr 2、安装PIL 3、安装numpy 4、 安装pyautogui 5、进行文本识别 6、识别结果 7、获取文字在图片/屏幕中的位置 8、pyautoguipaddleocr鼠标操作 9、完整代码 前言 最近在做自动化测试&#xff0c;因为是处理过的界面&#xff0c;所以使用pyw…

class036 二叉树高频题目-上-不含树型dp【算法】

class036 二叉树高频题目-上-不含树型dp code1 102. 二叉树的层序遍历 // 二叉树的层序遍历 // 测试链接 : https://leetcode.cn/problems/binary-tree-level-order-traversal/ code1 普通bfs code2 一次操作一层 package class036;import java.util.ArrayList; import java…

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…

JVM虚拟机(已整理,已废弃)

# JVM组成 ## 简述程序计数器 线程私有&#xff0c;内部保存class字节码的行号。用于记录正在执行的字节码指令的地址。 线程私有-每个线程都有自己的程序计数器PC&#xff0c;用于记录当前线程执行哪个行号 ## 简述堆 ## 简述虚拟机栈 ## 简述堆栈区别 ## 方法内局部变量是…

leetcode 622. 设计循环链表

这道题讲了两种方法&#xff0c;第一个代码是用数组实现的&#xff0c;第二个是用指针实现的&#xff0c;希望对你们有帮助 622. 设计循环链表 题目 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并…

SwiftUI 中创建一个自定义文件管理器只需4步!你敢信!?

概览 在 SwiftUI 中写一个自定义文件内容的管理器有多难呢&#xff1f; 答案可能超乎小伙伴们的想象&#xff1a;仅需4步&#xff01;可谓是超级简单&#xff01; 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 概览1. 第一步&#xff1a;定义文件类型2. 第二步&…

智能优化算法应用:基于人工大猩猩部队算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工大猩猩部队算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工大猩猩部队算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工大猩猩部队算法4.实验参数设…

python六子棋ai对战(alpha-beta)剪枝算法

核心代码 def __init__(self): #初始化函数self.num0 #对yi次数self.rows 10 #初始化棋盘10行self.cols 10 # 初始化棋盘10列self.rank6 #阶数 代表六子棋self.empty_board() #清空棋盘self.V 10 #攻击程度self.E10 #防守程度self.depth2 #思考深度…

嵌入式板级系统设计【课设】

笔记【嵌入式板级系统设计】 前言版权笔记【嵌入式板级系统设计】资料学习面包板焊接注意焊接教程 焊接电路板基础代码GPIO 外部中断 定时中断 三合一串口 综合实验 风扇控制系统下板三合一窗口综合实验 最后 前言 2023-11-20 08:49:57 以下内容源自《【创作模板五】》 仅供学…