ProEasy机器人:运动+通讯相关说明

news/2024/7/5 12:01:18

----------------机械手运动-------
--常用指令:MovP弧线运动、MovL直线运动


MovP(1)                --弧线轨迹运动到一号点

MovP(2)                --弧线轨迹运动到二号点





MovL(1)                --直线轨迹运动到一号点

MovL(2)                --直线轨迹运动到二号点





-----拱形运动

MovP(1 .. P.Z(-3000))        --弧线轨迹移动到1号点安全高度上方
MovP(1)                        --弧线轨迹移动到1号点
MovP(1 .. P.Z(-3000))
MovP(2 .. P.Z(-3000))        --弧线轨迹移动到2号点安全高度上方
MovP(2)                        --弧线轨迹移动到2号点
MovP(2 .. P.Z(-3000))


MovL(1 .. P.Z(-3000))        --直线轨迹移动到1号点安全高度上方
MovL(1)                        --直线轨迹移动到1号点
MovL(1 .. P.Z(-3000))
MovL(2 .. P.Z(-3000))        --直线轨迹移动到2号点安全高度上方
MovL(2)                        --直线轨迹移动到2号点
MovL(2 .. P.Z(-3000))





--拱形指令函数封装
--MovP拱形
function Arch_P(Point,Height)        --Point:要移动的点位,Height:拱形最高安全高度

    _,Here = motion.GetFeedbackPosition(1)            --获取当前位置
    
    P[1].x = -1000
    
    SetPointToMem(1,1,"")
    MovP(Here .. P.Z(Height))                    --当前位置抬高到安全高度
    MovP(Point .. P.Z(Height))                    --移动到目标点安全位置
    MovP(Point)                                    --移动到目标点

end

Arch_P(1,-3000)        --拱形弧线移动到1号点,安全高度为-3000
Arch_P(2,-3000)

--MovL拱形
function Arch_L(Point,Height)        --Point:要移动的点位,Height:拱形最高安全高度

    _,Here = motion.GetFeedbackPosition(1)            --获取当前位置
    MovL(Here .. P.Z(Height))                    --当前位置抬高到安全高度
    MovL(Point .. P.Z(Height))                    --移动到目标点安全位置
    MovL(Point)                                    --移动到目标点

end

Arch_L(1,-3000)        --拱形直线移动到1号点,安全高度为-3000
Arch_L(2,-3000)






--动作轨迹优化,在运动指令中可以加PASS指令来平滑过渡运动轨迹,对于机械手运动效果和CT时间都有明显的提升,例如:

MovP(1 .. P.Z(-3000),"PASS")        --弧线轨迹移动到1号点安全高度上方
MovP(1)                                --弧线轨迹移动到1号点
MovP(1 .. P.Z(-3000),"PASS")
MovP(2 .. P.Z(-3000),"PASS")        --弧线轨迹移动到2号点安全高度上方
MovP(2)                                --弧线轨迹移动到2号点
MovP(2 .. P.Z(-3000),"PASS")



--注意: MovP与MovL之间是不同运动指令,不能加PASS,机械手左右手的时候,只能用MovP,不能用MovL

MovP(1 .. P.Z(-3000),"PASS")        --弧线轨迹移动到1号点安全高度上方
MovP(1)                                --弧线轨迹移动到1号点
MovP(1 .. P.Z(-3000))                --MovP与MovL之间不能加PASS

MovL(2 .. P.Z(-3000),"PASS")        --直线轨迹移动到2号点安全高度上方
MovL(2)                                --直线轨迹移动到2号点
MovL(2 .. P.Z(-3000),"PASS")





----------------机械手通讯-------
--常用通讯:IO通讯、TCP——MODBUS通讯、TCP——Socket(无协议)通讯、232/485通讯

--IO通讯,相关指令:User_DI()、User_DO

repeat until User_DI(1) == 1        --等待取料信号
MovP(1 .. P.Z(-3000))
MovP(1)
User_DO(1,1)            --关闭夹爪
DELAY(0.2)
MovP(1 .. P.Z(-3000))

User_DO(2,1)            --发送取料完成

repeat until User_DI(2) == 1        --等待放料信号
MovP(2 .. P.Z(-3000))
MovP(2)
User_DO(1,0)            --打开夹爪
DELAY(0.2)
MovP(2 .. P.Z(-3000))
User_DO(3,1)            --发送放料完成





--TCP——MODBUS通讯,相关指令:ModbusRead16()、ModbusWrite16()

repeat until ModbusRead16(0x2000) == 1        --等待取料信号

MovP(1 .. P.Z(-3000))
MovP(1)
User_DO(1,1)            --关闭夹爪
DELAY(0.2)
MovP(1 .. P.Z(-3000))

ModbusWrite16(0x2001,1)            --发送取料完成

repeat until ModbusRead16(0x2003) == 1        --等待放料信号
MovP(2 .. P.Z(-3000))
MovP(2)
User_DO(1,0)            --打开夹爪
DELAY(0.2)
MovP(2 .. P.Z(-3000))
ModbusWrite16(0x2004,1)            --发送放料完成






--TCP——Socket(无协议)通讯,相关指令:FreePort.ECM_OpenAsClient()、FreePort.ECM_Tx()、FreePort.ECM_Rx()、FreePort.ECM_CloseAll()、FreePort.ECM_ChkConnect()、FreePort.ECM_Clear()


function open_client_Vision()   --连接视觉服务器 打开以太网作为客户端
    repeat
        FreePort.ECM_CloseAll()        --关闭所有链接
        FreePort.ECM_Clear(1)       --清楚端口数据
        DELAY(0.2)
        open_result = FreePort.ECM_OpenAsClient(1,"192.168.1.11",6000,nil,nil)  --识别号:1,链接ip:192.168.1.11,端口号:6000,开始符与结束符:nil 
        DELAY(0.2)
        open_result = FreePort.ECM_ChkConnect(1)            --检查链接状态
    until open_result == 0
    print("Link OK" .. "\n")    
end 


function Send_Out_Vision(value)   --发送内容给视觉
    repeat
        send_result = FreePort.ECM_Tx(1,value)        --发送value到识别号1的服务器
    until send_result == 0
    print("SendPC:" .. value .. '\n')
end 


function Receive_Vision()     --接收视觉发过来的内容
    repeat
        c_status_pc,return_text_pc,text_l_pc = FreePort.ECM_Rx(1) ---接收PC发送过来的分BIN结果    
    until return_text_pc ~= ""   --CMD_L>0
    print("ReceivePC:" .. return_text_pc .."\n")   ---------------打印接收到的消息
    return return_text_pc
end 




open_client_Vision()   --连接视觉服务器 打开以太网作为客户端

MovP(1 .. P.Z(-3000))
MovP(1)

User_DO(1,1)            --关闭夹爪
DELAY(0.2)

MovP(1 .. P.Z(-3000))
::AA::                            --NG跳转标签

Send_Out_Vision("A1")           --发送拍照信号给视觉

Data1 = Receive_Vision()         --接收视觉发过来的内容(带有分隔符字符串类型)
Data = string.split(Data1,",")    --以指定的分隔符","来分割字符串,返回的是数组

if Data[1] == "NG" then

    goto AA

end

X_Vision = Data[2]*1000            --X坐标
Y_Vision = Data[3]*1000            --Y坐标
C_Vision = Data[4]*1000            --C坐标


Point = P.new(X_Vision,Y_Vision,-10000,0,0,C_Vision,0,0,0,0,0,0,0)            --创建新点位


MovP(Point .. P.Z(-3000))
MovP(Point)

User_DO(1,0)            --打开夹爪
DELAY(0.2)

MovP(Point .. P.Z(-3000))


http://lihuaxi.xjx100.cn/news/1788285.html

相关文章

CCF 备忘

一、不错的网站 CCF CCSP 竞赛历年资料 官网 http://118.190.20.162/home.page 二、基础套路 循环输入 数组标记法&#xff08;数组下标-数值 的映射&#xff09; 两个矩阵相乘 map<long long, map<long long, long long> > ans; for(int i1;i<d;i){for(int…

10 分钟学会使用 Java 多线程

大家好&#xff0c;我是伍六七。 今天阿七来聊聊 Java 程序员们面试、工作中经常会碰到的线程池。它的概念、原理、使用以及可能会碰到的一个坑。 一、Java 线程池基本概念 1、线程池的 7 个核心参数 这是 Java 初中级程序员们面试必问的面试题了&#xff0c;我们来看&…

【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用(二)

Com.Gitusme.Net.Extensiones.Core 扩展库 1.0.6 版本已发布。 1、版本变更说明 新增Sokcet套接字扩展。简化Socket操作&#xff0c;支持自定义命令封装&#xff0c;使用方便快捷&#xff0c;让您聚焦业务实现&#xff0c;而不必关心底层逻辑&#xff0c;提高开发效率。日志功…

电脑远程监控软件大揭秘

电脑远程监控软件是一种通过互联网远程控制另一台电脑的软件&#xff0c;通常需要安装在被监控的电脑上&#xff0c;并由控制者通过电脑或手机进行远程操作。 这种软件广泛应用于企业、学校、家庭等场景&#xff0c;可以帮助管理者监控员工或孩子的电脑使用情况&#xff0c;保护…

【汇编】计算机的组成

文章目录 前言一、计算机的基本组成1.1 中央处理器&#xff08;CPU&#xff09;1.2 内存指令和数据存储的位置计算机中的存储单元计算机中的总线地址总线数据总线控制总线 1.3 输入设备和输出设备1.4 存储设备 二、计算机工作原理三、计算机的层次结构总结 前言 计算机是现代社…

股市助手:实时股市快讯,真人语音播报,助您第一时间获取最新资讯(自己写的分享给需要的人)

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 使用环境 &#x1f3e1;&#x1f4d2; 使用方法 &#x1f4d2;&#x1f4dd; 软件设置&#x1f4dd; 软件运行 &#x1f4d6; 介绍 &#x1f4d6; 给大家分享一款自己写的软件《股市助手》&#xff0c;老规矩&#xff…

js 处理货币信息转换

// 货币格式化 export function formatCurrency(num) {if (!num) return "0.00";num num.toString().replace(/\$|\,/g, "");if (isNaN(num)) num "0";let sign num (num Math.abs(num));num Math.floor(num * 100 0.50000000001);let ce…

2023湖南省赛

​​​​​​连接 目录 A:开开心心233 B:Square Game F:necklace K:tourist 补题中&#xff0c;会给出大部分代码 A:开开心心233 签到题 &#xff0c;无论二分还是解方程还是直接for循环枚举都能直接通过啦 signed main() {ios_base::sync_with_stdio(0); cin.tie(0),co…