正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?

news2024/11/16 19:54:00

本文主要介绍如何使用MOVESYNC指令快速实现单轴/多轴同步跟随功能,适用于XYZ(R)、SCARA、DELTA等常见机械结构,在流水线点胶、流水线产品分拣、流水线产品搬运等场景中广泛应用。

阅读本文,学习同步跟随的原理和实现方法,提高工作效率!

01 同步跟随功能介绍

同步跟随的主要作用是快速控制运动机构,实现产线上产品的同步和跟随,再辅助其他运动指令实现产线产品的抓取、分拣、点胶等功能需求;

同步跟随的功能主要由MOVESYNC指令实现,该指令方便用户通过程序快速实现单轴或多轴同步跟随功能,实现多皮带抓取摆放,属于凸轮指令的一种。

常用场景为:流水线点胶、流水线产品分拣、流水线产品搬运等。

常见机械结构:XYZ ®、SCARA、DELTA等。

在这里插入图片描述

02 MOVESYNC指令说明

1、指令介绍

同步跟随是指点的跟随,跟随的是位置,皮带与跟随轴的位置之间由算子去协调位置关系,需要处理的仅仅是第一个跟随时刻的位置。

MOVESYNC指令内重要参数是给出皮带的位置和跟随轴的位置,只需要把跟随点跟随的这个“时刻”静态化处理就行,即可以想象成当皮带上物体到了传感器mark位置时刻皮带停止了。

跟随轴这个时候移动到达产品mark点,这个时刻得到了两组坐标位置:

第一组:皮带的位置syncposition。

第二组:跟随轴的位置pos1,只需要将这两个位置对应填进指令内即可,算子会自动计算规划两者位置,保证两者相对静止。

2、指令函数语法

MOVESYNC(mode,synctime,syncposition,syncaxis,pos1[,pos2, pos3…])

支持单轴或多轴同步跟随。

3、一般使用形式

base(0,1,2) //指定参与同步跟随轴号,这里以0,1,2为例

MOVESYNC (mode,加速时间,syncposition,syncaxis,pos1,pos2, pos3) //加速段

MOVESYNC(mode,同步时间,syncposition,syncaxis,pos1,pos2, pos3) //同步段

MOVESYNC(mode,减速时间,syncposition,syncaxis,pos1,pos2, pos3) //减速段(复位段)

一个完整的跟随过程分为三步,加工头先加速达到与皮带相同的速度,实现了同步运动,在同步段完成加工操作,然后加工头再回到等待位置,等待下一次触发加工。触发条件采用传感器检测来料,记录来料的位置,填入MOVESYNC指令。

4、指令参数说明

(1)mode:模式

加速段和同步段一般使用模式0,一般是在X轴方向跟随,减速段一般使用模式-2(可以强制结束前面的跟随运动)。

在这里插入图片描述

特别说明:当跟随的产线与机台存在夹角时使用模式0,并且加上机台与产线的夹角的弧度值实现跟随偏斜补偿,例:

mode=0+angle,angle:皮带旋转角度,角度=皮带与BASE第1/2轴的正向旋转夹角。例如:

① Mode=PI/4,皮带在45度的方向;

② Mode=PI/2,皮带在y方向;

③ Mode=PI,皮带在x负向;

④ Mode=(PI*1.75),皮带在-45度的方向;

(2)synctime:同步时间,时间单位ms,同步时间一般分为三段

加速段时间多久代表机台跟随轴加速达到产线速度,并且跟上目标产品,0表示根据运动轴的速度加速度来估计同步时间,可能不准确,一般相对设置长点,确保能实现同步;

同步段时间表示跟随产品运动多长时间,抓取等动作在此期间完成,一般相对设置较长,保证动作完成;

减速段时间表示多久回到指定位置,一般减速段时间和加速段一样,推荐使用-2模式;

(3)syncposition:皮带轴物体被感应到时皮带轴的位置

特别说明:此指令支持皮带轴坐标循环,但是在指令被调用时确保此参数位置和当前皮带轴位置之间没有发生坐标修改或循环操作,因此此指令调用时不要在坐标循环点附近;

(4)syncaxis:皮带轴轴号,-1表示没有皮带轴,可以是电机轴,也可以是编码器

(5)pos1:皮带轴物体被感应到时的BASE第1个轴(一般是跟随轴)的绝对位置

(6)posn:皮带轴物体被感应到时的BASE第n个轴的绝对位置

5、指令使用图解(单轴为例)

movesync指令只需要给出同步跟随触发时的几个轴的位置参数即可,作为启动同步跟随的条件,再加速达到同步之后执行加工。

首先构思搭建一个跟随模型,如下:

在这里插入图片描述

假设当产品到传感器位置时实现跟随;借助传感器的信号实现皮带位置锁存,即当产品到达传感器锁存的位置时,依靠锁存记录下皮带坐标(syncposition参数),此时将跟随轴X轴运行到产品锁存点位置,得到跟随轴X轴位置为(pos1);

这样就得到了MOVESYNC指令里面的坐标位置,即同步时刻皮带的位置(syncposition)、跟随轴的位置(pos1),再根据实际运行情况规划出加速段的时间、同步段的时间和减速段的时间,指令运行即可实现一次同步跟随过程。

03 主代码

下面示例以单轴跟随为例子,辅助以感应器作为位置记录条件。

在没有机台的情况下,可手动给锁存信号,模拟检测到物料,记录同步运动指令要填写的位置信息,在HMI界面上点击启动开始执行同步运动,程序的主要函数调用关系如下图。

在这里插入图片描述

配置HMI界面便于操作,支持修改轴参数,灵活调整同步跟随各阶段的时间,通过手动运动操作跟随轴到等待触发同步运动的位置,并记录下来跟随轴的当前位置,然后启动皮带轴的运动,在运动中手动给传感器信号,触发同步运动,跟随轴在MOVESYNC指令的控制下完成一次同步跟随动作。

界面显示了皮带轴和跟随轴的位置信息,并且方便配置轴的基础参数,同步运动加速,同步和减速段的时间。

在这里插入图片描述

HMI操作步骤:

⊙第一次运行,需要进行对位操作,确认跟随轴的位置,点击产品到位,模拟产品放到了传送带上开始运动,到达锁存位置停止,将跟随轴移动到产品位置处停下。记录下跟随轴此时的坐标,此坐标MOVESYNC指令将会用到。

⊙配置轴号,轴的运动参数,合理设置三段运动的时间。

⊙点击启动,传送带运行,通过模拟信号给来料检测信号,触发锁存得出皮带轴坐标,触发同步跟随开始。

注意:此例程因为用到了硬件锁存功能,需要在控制器平台运行,没有传感器时,可以将OUT口短接到IN口,通过OP指令模拟传感器锁存信号的输入,示例将OUT0接入IN0。

锁存函数:依靠锁存传感器检测来料,触发同步跟随运动,锁存功能记录开始跟随时,锁存皮带轴位置,记录下当前同步轴的位置信息,传入MOVESYNC指令参数。

global sub get_mark_pos(mode) '使用3或者4,其他方式修改等待条件和获取的数据寄存器,reg_pos
    REG_INPUTS(belt_axis) = $0000    '映射皮带锁存输入
    reg_count = 0
    DMSET mark_flag(0,100,-1)   '每次开始前清空标志,避免误判
    WHILE 1
        base(belt_axis)REGIST(mode)axis(belt_axis)
        wait until mark
        if reg_count >= 100 then     '位置数组循环存储值判断
            reg_count = 0
        endif
        mark_pos(reg_count) = REG_POS
        ?REG_POS
        mark_flag(reg_count) = 1
        reg_count = reg_count + 1
    wend
endsub

同步跟随函数:依靠锁存函数给的参数,设置跟随时间,执行同步跟随动作,分为加速、同步和减速回原位置三个阶段,注意每个阶段的时间规划合理,完成一个跟随步骤之后等待触发下一次跟随。

global sub run_sync()
    base(sync_axis)
    move_count = 0   '运动计数清0
    TABLE(10) = -1    '以table 10 的值,作为同步结束标志
    WHILE 1
        if move_count >= 100 then    '循环
            move_count = 0
        endif
        if mark_flag(move_count) = 1 then    '判断是否有产品触发
            if abs(sync_star_dis + mark_pos(move_count)) >= abs(mpos(belt_axis)) then     '尚在有效触发距离内,即可以跟随
                '开始跟随
                '第一段:加速段(追赶段)     跟随模式看机构具体而定,一般皮带编码器方向与跟随轴运动方向一致就用0 反方向就用 0 + pi/2
                MOVESYNC(0, accel_time, mark_pos(move_count), belt_axis, sync_pos)
                '第二段:同步段与加速段唯一不同是时间
                MOVESYNC(0, sync_time, mark_pos(move_count), belt_axis, sync_pos)
                '此处可以开启线程去操作其他动作
                '使用 move_task 指令操作
                '用table 10 的值来作为其他运动的结束标志,这里使用move_table,是为了使同步完全结束,后面开发时可以将MOVE_TABLE放在其他运动的线程里面使用
                MOVE_TABLE(10,10)
            elseif abs(sync_star_dis + mark_pos(move_count)) < abs(mpos(belt_axis)) then     '超出范围,直接跳过,
                TABLE(10) = 10
                ?"跳过"
                '?abs(sync_star_dis + mark_pos(move_count)) , abs(mpos(belt_axis))
            endif
            '判断结束
            wait UNTIL table(10) = 10
            '第三段:复位段   以当前位置为停止位置,可以添加变量设置待机位。
            MOVESYNC(-1, decel_time, mark_pos(move_count),-1, sync_pos)
            move_table(10,-1)   '结束标志复位
            mark_flag(move_count) = -1     '同步条件标志复位
            move_count = move_count + 1    '计数+ 1
        endif
    wend
endsub

04 运行效果

跟随轴(轴0)跟随皮带(轴2)运动的速度曲线:加速段,同步段,减速回起点。

在这里插入图片描述

跟随轴(轴0)跟随皮带(轴2)运动的位置曲线。

在这里插入图片描述

在这里插入图片描述

本次,正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音seo源码系统开发服务商选择

“账号矩阵”是一种账号运营的高阶玩法&#xff0c;指一个运营主体同时开设多个平台多个账号利用品牌联动的形式来实现账号之间的相关引流&#xff0c;以账号组的形式实现企业营销价值最大化。那么运营多个账号&#xff0c;短视频平台内容是核心&#xff0c;势必要招募多个剪辑…

RK平台使用IO指令

简介 RK平台开发过程经常要用到IO指令&#xff0c;主要是用来读写CPU各个模块寄存器的值&#xff0c;从而实现在线调试。 RK平台的SDK默认有包含IO指令的源码&#xff0c;如果执行的时候找不到指令&#xff0c;可能是没有编译进去&#xff0c;找到对应的编译脚本编译进去即可。…

Dream音频芯片开发虚拟环绕声算法概论

1 项目需求 2 开发平台介绍 Dream S.A.S France公司网站&#xff1a;https://www.dream.fr Dream全系列的芯片包含SAM2000 series ICs、SAM3000 series ICs以及SAM5000 series ICs。 SAM5000 series ICs包括 sam5504、sam5704、sam5708、sam5808、sam5716、sam5916。 目前drea…

为什么电源纹波那么大?

某用户在用500MHz带宽的示波器对其开关电源输出5V信号的纹波进行测试时&#xff0c;发现纹波和噪声的峰峰值达到了900多mV&#xff08;如下图所示&#xff09;&#xff0c;而其开关电源标称的纹波的峰峰值<20mv。虽然用户电路板上后级还有LDO对开关电源的这个输出再进行稳压…

出学校干了 5 年外包,已经废了

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟 本科大专&#xff0c;17年通过校招进入某软件公司做测试&#xff0c;干了接近5年的功能。 今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经…

Spring面向切面编程(AOP)

Spring面向切面编程&#xff08;AOP&#xff09; 概念 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;利用一种称为"横切"的技术&#xff0c;剖开封装的对象内部&#xff0c;并将那些影响了多个类的公共行为封装到…

DICOM笔记-CT图像的边界

常见CT图像在有效范围内都是有效CT值。 对CT值的处理也就仅限于做斜率和截距的线性处理&#xff1b; 可参加常用的DICOM标签信息&#xff1a; DICOM笔记-DICOM常用Tag标签汇总_dicom tag列表_黑山老妖的博客的博客-CSDN博客文件引言MetaInfoGroupElementTag Description中文解…

尚无忧货运物流app系统享集运转运uniapp系统

物流货运app系统 找货源 找车源 查找货源 开通会员 开创性的物流货运管理云系统&#xff0c;将货运环节中的制造商、承运商、司机和收货方链接在同一平台&#xff0c;轻松管理运输。 <template> <diy ref"diy" v-if"isDiy"></diy&…

vue——antd+elementUi——table表格实现滚动加载(分页滚动加载)——技能提升

今天遇到一个需求&#xff0c;就是要实现表格的滚动加载。 通常我们经常实现的效果是&#xff1a;下图中带分页的表格 如果要实现滚动分页加载的话&#xff0c;则需要保证的一点就是数据量不能过大&#xff0c;过多的数据量会导致页面的卡顿。 下面来介绍滚动分页加载的实现…

jmeter的使用

一、jmeter介绍和下载 1.1 jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不…

【Python】FastAPI 配置日志即 logging 模块使用

目录 1. 日志 2. FastAPI 示例 1. 日志 日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用&#xff0c;借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述&#xff08;比如&#xff1a;每个事件发生时的数据都是不同的…

Python之并发编程多线程理论

一、什么是线程 在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程&#xff0c;一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起…

项目开发中异常处理需要注意的问题(详细!!)

文章目录 1、各层在对异常处理时需要注意的问题2、业务代码层面对于异常的处理姿势3、错误的异常处理方式&#xff1a;1、丢弃异常2、丢失异常的原始信息3、抛出异常时不指定任何信息 4、线程池处理异常方法 1、各层在对异常处理时需要注意的问题 这是日常开发中请求的处理过程…

springcloud-alibaba (05)Seata实现分布式事务-个人笔记

前言 本文将介绍如何使用Seata实现分布式事务。将覆盖以下主题&#xff1a; seata下载与安装如何配置和启动Seata服务器如何编写应用程序以使用Seata如何解决常见问题 本文只是我个人seata学习笔记&#xff0c;不是什么学习教程 如果你是一名Java开发人员&#xff0c;那么你…

官方喊你来免费下载 Navicat Premium 16.2 Beta 中文版 | Redis 体验官火热招募中

今天&#xff0c;我们发布了 Navicat 16.2 Beta 中文版&#xff0c;它适用于 Windows、macOS 和 Linux 平台。届时&#xff0c;我们诚邀广大 Redis 用户及爱好者亲测 Beta 版&#xff0c;希望 Redis 新功能将为 Redis 相关工作者&#xff08;应用开发人员、DBA 和数据分析师等&…

【paddlecls】多机多卡-linux(二:环境搭建)

构建并进入 docker 容器后&#xff0c;我们进入下一步&#xff1a; 1. 退出/进入 docker 容器&#xff1a; 在进入 Docker 容器后&#xff0c;可使用组合键 Ctrl P Q 退出当前容器&#xff0c;同时不关闭该容器&#xff1b; 如需再次进入容器&#xff0c;可使用下述命令&am…

微信小程序项目实例——生活记账本

今日推荐&#x1f481;‍♂️ 2023五月天演唱会&#x1f3a4;&#x1f3a4;&#x1f3a4;大家一起冲冲冲&#x1f3c3;‍♂️&#x1f3c3;‍♂️&#x1f3c3;‍♂️ &#x1f52e;&#x1f52e;&#x1f52e;&#x1f52e;&#x1f52e;往期优质项目实例&#x1f52e;&…

蓝牙资讯|Counterpoint发布2023年Q1中国智能手表报告

根据市场调查机构 Counterpoint Research 公布的最新报告&#xff0c;2023 年第 1 季度中国智能手表出货量同比下降 28%&#xff0c;环比下降 16%&#xff0c;达到过去 12 个季度以来的最低水平。 本季度智能手表市场中&#xff0c;华为、苹果和小天才&#xff08;imoo&#…

想要入坑C++?当我拿出菱形虚拟继承,阁下又该如何应对

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;继承的定义方式&#x1f337;继承方式与访问限定符&#x1f337;基类和派生类对象赋值转换&#x1f337;继承中的作用域&#x1f337;派生类的默认成员函数&#x1f337;继承与友元&#x1f337;继承与静态成…

基于 ESP32 通过 SMTP 服务器 来发送电子邮件信息

电子邮件在全球范围内被用作数字通信的重要组成部分。电子邮件主要用于官方通信目的,因为它最方便、成本效益高、保存记录、覆盖全球且环保。电子邮件是一种非常快捷的通信方式,只是您需要稳定的互联网连接。 在这个项目中,我们将使用ESP32开发板发送电子邮件(纯文本和 HTM…