如何进行运动控制器数据与存储的应用

2025-05-29 06:18:10

一、材料准备与控制器接线参考

材料准备:

1、电脑1台,安装ZDevelop3.01以上版本软件;

2、控制器1个;

3、24V直流电源1个;

4、总线驱动器+电机(或步进驱动器+电机)若干;

5、控制器接线端子若干;

6、网线若干;

7、连接线若干;

另:IO设备、扩展模板、触摸屏等根据需求选用

如何进行运动控制器数据与存储的应用
如何进行运动控制器数据与存储的应用

控制器中MODBUS字寄存器占用同一片系统变量空间,其中一个LONG占用两个REG地址,一个IEEE也占用两个REG地址,使用时要注意错开字寄存器编号地址。

如何进行运动控制器数据与存储的应用
如何进行运动控制器数据与存储的应用

2、数据转换

不同类型数据之间的操作,会产生下列问题:

A.数据丢失:浮点型向整型转换时会丢失小数部分。

示例:VR(0)=10.314MODBUS_REG(0)=0MODBUS_REG(0)=VR(0)?MODBUS_REG(0)       '结果为10

B.强制转换:整型存储到浮点型寄存器后会变成浮点型,再使用整型操作数据可能会不正确。

C.单精度数据只有7位有效数值,在计算的过程中如果有长期累加的数值,建议使用4系列控制器。

五、Basic演示例程

以下是Basic演示例程及示波器演示图。


'急停,清空运动缓冲区,等待轴0运动空闲

RAPIDSTOP(2)

WAIT IDLE(0)

'函数调用模块

ConstInit '常量初始化

GlobalInit '变量初始化

AxesInit '轴参数初始化

read_flash '读flash块

CalcCamTable '存储凸轮运动参数到table

WHILE 1 'while循环扫描

'启动5组凸轮曲线的运行任务

IF MODBUS_BIT(0)=on THEN '条件判断

MODBUS_BIT(0)=0 '复位,使IF条件满足只执行一次

STOPTASK 1

RUNTASK 1,Motion1_job '启动任务1

ELSEIF MODBUS_BIT(1)=on THEN

MODBUS_BIT(1)=0

RAPIDSTOP(2)

STOPTASK 1 '停止任务1

RAPIDSTOP(2)

'往flash块写入数据

ELSEIF MODBUS_BIT(2)=on THEN

MODBUS_BIT(2)=0

PRINT "写入数据"

distance(0)=10

velocity(0)=200

ms_do(0)=0.3

distance(1)=-10

velocity(1)=200

ms_do(1)=0.4

distance(2)=20

velocity(2)=200

ms_do(2)=0.5

distance(3)=-20

velocity(3)=200

ms_do(3)=0.6

distance(4)=10

velocity(4)=200

ms_do(4)=0.8

write_flash() ' 调用函数,将数组数据写入flash块

ENDIF

WEND

END

'以任务1运行

Motion1_job:

TRIGGER ' 触发示波器采样

BASE(0)

DPOS=0

FOR i=0 to 4

m=distance(i) ' 代表距离的倍数

t=ms_do(i) ' 运行时间

SPEED=velocity(i) ' 运行速度

CAM(0,1000,m,SPEED*t)

WAIT IDLE

next

END

GLOBAL SUB CalcCamTable() '凸轮参数存储到table

num_p=1000 '变量不定义直接赋值,自动为文件模块变量

scale=500

FOR p=0 TO num_p

TABLE(p,((-SIN(PI*2*p/num_p)/(PI*2))+p/num_p)*scale)

NEXT

END SUB

GLOBAL SUB write_flash() '写flash块子程序

FLASH_WRITE flashnum,distance,velocity,ms_do

PRINT "写入flash完成"

END SUB

GLOBAL SUB read_flash() '读flash块子程序

FLASH_READ flashnum,distance,velocity,ms_do

PRINT "读取flash完成"

END SUB

GLOBAL SUB ConstInit() '全局Const定义

GLOBAL const AxesNum=3 '定义总轴数

END SUB

GLOBAL SUB GlobalInit() '全局变量初始化

GLOBAL flashnum 'flash块编号

flashnum=1 '选择编号1

'定义数组,distance 距离,velocity 速度,time_do 时间

GLOBAL distance(5),velocity(5),ms_do(5)

'清空数组

FOR i=0 TO 4

distance(i)=0

velocity(i)=0

ms_do(i)=0

NEXT

END SUB

GLOBAL SUB AxesInit() '轴参数的初始化

'批量初始化轴参数

FOR i=0 TO AxesNum-1

BASE (i)

DPOS(i)=0

ATYPE(i)=1

UNITS(i)=500

SPEED(i)=100

ACCEL(i)=1000

DECEL(i)=1000

SRAMP(i)=10

'将轴参数存储到modbus寄存器

MODBUS_IEEE(10+i*10)=UNITS(i)

MODBUS_IEEE(12+i*10)=SPEED(i)

MODBUS_IEEE(14+i*10)=ACCEL(i)

MODBUS_IEEE(16+i*10)=DECEL(i)

MODBUS_IEEE(18+i*10)=SRAMP(i)

NEXT

END SUB


任务1运行,执行凸轮表指令,得出波形如下图:

如何进行运动控制器数据与存储的应用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢