机器视觉运动控制一体机结构体功能上线,助力客户高效开发

应用背景

运动控制器正朝着高速度、高精度、开放式的方向发展,不仅对运动控制功能精益求精,还增加了视觉相关的定位、测量、检测和识别等,多种功能的穿插使用进一步增加了在编程设计代码时的复杂程度。

为了给客户提供更好地软件框架,简化程序结构、节省内存空间、提高代码可读性。

正运动技术在VPLC532E机器视觉运动控制一体机上增加了结构体功能,方便客户在大型项目上更高效的进行项目开发。

在这里插入图片描述

VPLC532E是正运动推出的一款EtherCAT视觉总线控制器,控制器集成了2个千兆以太网以及2个USB3.0、2个USB2.0接口,支持多种工业相机,支持多种视觉功能和复杂的运动控制功能。

在这里插入图片描述

VPLC532E硬件介绍

1.集成RS232、RS485、CAN接口、2路USB3.0、2路USB2.0接口。

2.2路千兆EtherNet、1路百兆EtherCAT、6个本地轴接口。

3.24进12出数字IO,其中4路高速输出,4路高速输入、2路模拟量输出。

4.支持市场主流的USB3.0相机与GigE相机。

VPLC532E功能介绍

1.支持最多达32轴直线插补、任意空间圆弧插补、螺旋插补、样条插补。

2.支持电子凸轮、电子齿轮、位置锁存、同步跟随、虚拟轴等功能。

3.支持硬件比较输出(HW_PSWITCH2),硬件定时器,运动中精准输出。

4.支持脉冲闭环,螺距补偿等功能。

5.支持ZBasic多文件多任务编程。

6.多种程序加密手段,保护客户的知识产权。

7.掉电检测,掉电存储。

实现指令

1.STRUCTURE – 结构体定义

Structure 结构名称

   Dim 成员1名称 [As数据类型1]
   ... ...
   Dim 成员n名称[(数组长度)] [As数据类型1]

End Structure

2.FLASH_WRITEDBL – flash存储-double

FLASH_WRITEDBL sect_num [, varname] [, arrayname] [, arrayname(a)] [, arrayname(a,length)]

sect_num:flash块编号,不同类型不一样。

varname:变量名。

arrayname:数组名,可以为TABLE,VR,MODBUS。

a:操作的数组索引。

length:操作的数组元素个数。

结构体应用例程

该例程主要是对三轴的机械参数和配方文件以结构体框架来实现,通过结构体变量嵌套使用来减少变量,降低内存占用,提高代码的可复用性。

在这里插入图片描述

1.创建结构体变量

GLOBAL SUB HMI_INIT()
    GLOBAL gv_CurParamNum      '当前配方号
        gv_CurParamNum=0
    GLOBAL gv_PageNum        '页码
        gv_PageNum=0
    GLOBAL CONST gv_SysMaxAxis=3  '最大轴数
    GLOBAL STRUCTURE AxisParam
        '''轴参数
        DIM No        '轴号
        DIM AxisAtype    '轴类型
        DIM AxisDpos    '轴的当前位置
        DIM OnePulses    '轴电机一圈脉冲数
        DIM AxisPitch    '轴螺距
        DIM AxisSpeed    '轴的运动速度
        DIM AxisAccel    '轴的加速度
        DIM AxisDecel    '轴的减速度
        DIM AxisSramp    '轴的S曲线时间
        DIM AxisLspeed    '轴的起始速度
        DIM FsLimit      '轴正限位
        DIM RsLimit      '轴负限位
        '''回零参数
        DIM DatumMode    '轴回零模式
        DIM BackZeroSpeed  '轴的回零速度
        DIM AxisCreep    '轴的回零第2段速度
        DIM DatumIn      '轴原点信号
        DIM FwdIn      '轴正限位信号
        DIM RevIn      '轴负限位信号
    END STRUCTURE
    GLOBAL STRUCTURE SysParam
        DIM SysAxis(gv_SysMaxAxis) AS AxisParam    '系统轴数
        DIM FileName(50)              '参数文件名
    END STRUCTURE
    GLOBAL gs_SysParam(50) AS SysParam    '定义系统结构体变量
    LOCAL lv_i
    FOR lv_i=0 to gv_SysMaxAxis-1
        '初始化轴参数变量
        gs_SysParam(0).SysAxis(lv_i).No=lv_i
        gs_SysParam(0).SysAxis(lv_i).AxisAtype=0          '轴类型
        gs_SysParam(0).SysAxis(lv_i).OnePulses=8388608        '轴电机一圈脉冲数
        gs_SysParam(0).SysAxis(lv_i).AxisPitch=20          '轴螺距
        gs_SysParam(0).SysAxis(lv_i).AxisSpeed=100          '轴的运动速度
        gs_SysParam(0).SysAxis(lv_i).AxisAccel=1000          '轴的加速度
        gs_SysParam(0).SysAxis(lv_i).AxisDecel=1000          '轴的减速度
        gs_SysParam(0).SysAxis(lv_i).AxisSramp=0          '轴的S曲线时间
        gs_SysParam(0).SysAxis(lv_i).AxisLspeed=0          '轴的起始速度
        '初始化回零参数变量
        gs_SysParam(0).SysAxis(lv_i).DatumMode=104          '轴的回零模式
        gs_SysParam(0).SysAxis(lv_i).BackZeroSpeed=50        '轴的回零速度
        gs_SysParam(0).SysAxis(lv_i).AxisCreep=2          '轴的回零第2段速度
        gs_SysParam(0).SysAxis(lv_i).DatumIn=-1            '轴的回零信号
        gs_SysParam(0).SysAxis(lv_i).FwdIn=-1            '轴的正向硬限位信号
        gs_SysParam(0).SysAxis(lv_i).RevIn=-1            '轴的负向硬限位信号
        gs_SysParam(0).SysAxis(lv_i).FsLimit=1000          '轴正限位
        gs_SysParam(0).SysAxis(lv_i).RsLimit=-1000          '轴负限位
        '初始化参数文件
        gs_SysParam(0).FileName="NONE"                '初始化参数文件名
    NEXT
    FOR lv_i=0 to 49
        gs_SysParam(lv_i)=gs_SysParam(0)      '初始化其他配方参数
    NEXT
ENDSUB

2.保存配置文件

GLOBAL SUB SaveCurParam()
    LOCAL iflsflag
    iflsflag=70214733
    FLASH_WRITEDBL gv_CurParamNum,iflsflag,gs_SysParam(gv_CurParamNum)
    ?"下载成功"
ENDSUB

3.读取配置文件

GLOBAL SUB LoadCurParam()
    LOCAL iflsflag,lv_i,addnum
    FOR lv_i=0 TO 49
        iflsflag=0
        FLASH_READDBL lv_i,iflsflag
        IF iflsflag=70214733 THEN
            FLASH_READ2DBL lv_i,1,gs_SysParam(lv_i)
            addnum=addnum+1
        ENDIF
    NEXT
    ?"上传完成,上传配置文件数:"addnum
ENDSUB

4.删除配置文件

GLOBAL SUB DeleCurParam()
    LOCAL lv_i
    FOR lv_i=0 to gv_SysMaxAxis-1
        '初始化轴参数变量
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).No=lv_i
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisAtype=0        '轴类型
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).OnePulses=8388608    '轴电机一圈脉冲数
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisPitch=20        '轴螺距
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisSpeed=100      '轴的运动速度
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisAccel=1000      '轴的加速度
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisDecel=1000      '轴的减速度
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisSramp=0        '轴的S曲线时间
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisLspeed=0        '轴的起始速度
        '初始化回零参数变量
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).DatumMode=104      '轴的回零模式
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).BackZeroSpeed=50      '轴的回零速度
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisCreep=2        '轴的回零第2段速度
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).DatumIn=-1        '轴的回零信号
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).FwdIn=-1          '轴的正向硬限位信号
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).RevIn=-1          '轴的负向硬限位信号
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).FsLimit=1000        '轴正限位
        gs_SysParam(gv_CurParamNum).SysAxis(lv_i).RsLimit=-1000      '轴负限位
        '初始化参数文件
        gs_SysParam(gv_CurParamNum).FileName="NONE"            '初始化参数文件名
    NEXT
    LOCAL iflsflag
    iflsflag=0
    FLASH_WRITEDBL gv_CurParamNum,iflsflag,gs_SysParam(gv_CurParamNum)
    ?"删除成功"
ENDSUB

本次,正运动技术机器视觉运动控制一体机结构体功能上线,助力客户高效开发,就分享到这里。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32是一款常用的微控制器,具有广泛的应用场景,其中单轴步进电机梯形加减速控制也是常见的应用之一。使用结构体对象化编程方法,可以方便灵活地进行编程,让操作更加简单高效。下面就以单轴步进电机梯形加减速精准控制为例,介绍如何使用STM32结构体对象化编程实现该控制。 首先,需要定义一个结构体来描述电机运动参数,包括加速度、初速度、目标速度、加速时间、减速时间、运动距离、当前位置等等。在STM32的代码中,可以使用typedef struct的方式定义结构体,让结构体的成员变量更加清晰明了。 typedef struct Motor{ float acceleration; float initial_velocity; float target_velocity; float acceleration_time; float deceleration_time; float distance; float current_position; }Motor; 接下来,可以定义一个将结构体作为参数的函数,该函数可以根据电机的运动参数,实现电机的精准控制。 void MotorControl(Motor m){ float t1,t2,t3; //加速时间、匀速时间、减速时间 float v1,v3; //起始速度、结束速度 float a; //加速度 //计算加速时间、匀速时间、减速时间 t1 = m.acceleration_time; t2 = (m.distance - 2*m.acceleration_time*m.target_velocity) / m.target_velocity; t3 = m.deceleration_time; //计算起始速度、结束速度、加速度 v1 = m.initial_velocity; v3 = m.target_velocity; a = m.acceleration; //控制电机运动 //…… } 通过以上代码,我们可以定义一个Motor结构体类型的对象,然后将该对象作为参数传递给MotorControl函数,进而实现单轴步进电机梯形加减速精准控制的功能。 总之,STM32结构体对象化编程是一种灵活、高效的编程方式,可以较为方便地实现单轴步进电机梯形加减速精准控制等应用。当然,在具体实现中还需要结合具体情况进行调整,以获得更好的控制效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正运动技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值