​快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?

供稿:深圳市正运动技术有限公司

  • 关键词:正运动,运动控制器
  • 摘要:此前,正运动技术给大家讲了,运动控制器的“固件升级”、ZBasic程序开发、ZPLC程序开发以及运动控制器与触摸屏的通讯等,今天我们来学习一下如何进行运动控制器输入/输出IO的应用。

此前,正运动技术给大家讲了,运动控制器的“固件升级”、ZBasic程序开发、ZPLC程序开发以及运动控制器与触摸屏的通讯等,今天我们来学习一下如何进行运动控制器输入/输出IO的应用。


话不多说,直接上视频干货:


image.png


1、材料准备


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

2)ZMC306X控制器1个,ZMC432控制器1个;

3)24V直流电源1个;

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

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

6)网线若干;

7)连接线若干;

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


2、控制器连接配置参考


image.png


ZMC306X连接配置


image.png


ZMC432连接配置


3、ZMC306X控制器接口


控制器基础硬件信息可查看硬件手册或使用编程软件连接控制器,在线命令栏输入?*max打印查看。


基本轴数:6,可实际控制6个脉冲电机轴。

最多扩展轴数:12,实轴+编码器轴+虚轴合计轴数为12。

基本轴类型:差分脉冲输出,所有轴都带ABZ差分编码器反馈输入。

内部IO数:24进12出(12点的输出都带过流保护,支持300mA电流),另外每轴端子内有1进1出(轴内1输入可以用于报警输入,1输出可以用做使能)。

PWM数:2(输出频率1M,PWM0、PWM1占用OP0、OP1)。

锁存通道:2(占用IN0,IN1两个端子,锁存指令REGIST)。

内部ADDA数:2路AD,AIN(0)-AIN(1);2路DA,AOUT(0)-AOUT(1)。

电源输入:24V直流输入(功耗10W内,不用风扇散热)。

通讯接口:RS232、RS485、RS422、以太网、U盘、CAN。RS232为port0,RS485为port1,RS422为port2。


image.png


4、ZMC306X硬件信息查看


在线命令栏输入?*max打印结果:


image.png


max_axis:12   所有轴的最大轴数

max_motor:6   可控的最大电机轴数

max_movebuff:128   每个轴或者轴组的最大运动缓冲

max_in:30,528   控制器自带IN输入个数,最多支持IN输入个数

max_out:18,528   控制器自带OUT输出个数,最多支持OUT输出个数

max_ain:2,128   控制器自带模拟量输入个数,最多支持模拟量输入个数

max_aout:2,64   控制器自带模拟量输出个数,最多支持模拟量输出个数

max_pwm:2   PWM输出个数

max_slot:0   总线个数

max_comport:3   串口个数

max_ethport:3   与PC、API函数的网口通讯连接个数

max_ethcustom:2   自定义网口通讯的连接个数

max_ethiport:1   正运动控制器互联互通的网口通讯连接

max_flashnum:1000    FLASH块数

max_flashsize:20480   每个FLASH空间大小

max_nand:265551872   NandFlash存储总共的数量空间

max_nandremain:267911168   NandFlash存储剩余可用的数量空间

max_pswitch:16   软件位置比较输出的最多个数

max_file:30   系统最多支持的文件数

max_3file:1   系统最多支持的三次文件数

max_task:12   任务数

max_timer:128   定时器个数

max_loopnest:8   内部循环或者选择的次数

max_callstack:7   子程序调用的堆栈层数

max_local of one sub:16   SUB的局部变量数

max_flashnum:1000    FLASH块数


max_flashsize:20480   每个FLASH空间大小


max_nand:265551872   NandFlash存储总共的数量空间


max_nandremain:267911168   NandFlash存储剩余可用的数量空间


max_pswitch:16   软件位置比较输出的最多个数


max_file:30   系统最多支持的文件数


max_3file:1   系统最多支持的三次文件数


max_task:12   任务数


max_timer:128   定时器个数


max_loopnest:8   内部循环或者选择的次数


max_callstack:7   子程序调用的堆栈层数


max_local of one sub:16   SUB的局部变量数


max_vr:1024   VR寄存器空间个数


max_table:300000   TABLE数组空间个数


max_modbusbit:4096   MODBUS_BIT位寄存器空间大小


max_modbusreg:4096   MODBUS_REG字寄存器空间大小


max_var:4096   最多支持变量个数(含全局变量与文件变量)


max_array:1024   最多支持数组个数(含全局数组与文件数组)


max_arrayspace:640000   所有数组总共的空间大小


max_sub:1500   最多支持SUB子程序的个数


max_edgescan:1024   最多可支持的上升沿/下降沿扫描个数


max_lablelength:17    数组与变量等自定义字符的最大长度


max_hmi:1,x:1024 y:600   支持1个远端HMI,最大尺寸为1024*600


function support:Coder Cam MultiMove Circ Merge Frame   支持的运动控制功能


5、ZMC306X控制器状态


使用ZDevelop软件连接控制器,菜单栏->控制器->控制器状态,查看控制器的基本信息。


image.png


VirtualAxises:支持最大虚拟轴数

RealAxises:支持最大电机轴数

Taskes:最大任务数

Files/3Files:最大文件/三次文件数

Modbus0x Bits:Modbus位寄存器用户可用空间大小

Modbus4x Regs:Modbus字寄存器用户可用空间大小

VR Regs:VR寄存器用户可用空间大小

TABLE Regs:TABLE数组用户可用空间大小

RomSize:Rom容量

FlashSize:Flash容量

SoftType:软件型号

SoftVersion:系统软件版本+固件版本

IpAddress:控制器IP地址

HardVersion:硬件版本

ControllerID:控制器唯一ID

Axis features list:轴类型列表

使用ZDevelop软件连接控制器,菜单栏->控制器->控制器状态 。

ZCAN节点:查看控制器本地信息与CAN总线上连接的的扩展模块信息。

通讯配置:查看CAN信息与串口通道RS232/RS485/RS422信息。

包含EtherCAT接口的控制器可以在控制器状态里查看槽位节点信息,显示总线槽位上连接的所有设备信息。


image.png


6、ZMC306X数字量输入口


通用数字输入口可接NPN型。光耦和滤波器的作用是防止干扰信号通过信号线和电源线进入控制器。


输入口特殊功能:IN0-1口同时具有锁存输入A与锁存输入B的功能,锁存高速输入口允许的输入信号硬件滞后时间为1us。剩余的为普通输入口,允许输入信号的硬件滞后时间为50us左右,可设置滤波器参数增大滤波时间。


特殊信号定义:数字量输入口在硬件上没有做特殊定义,都是通用的,原点,限位,报警快速点动,正向JOG,反向JOG,进给保持等特殊信号都是通过软件指令进行设置。

DATUM_IN,REV_IN,FWD_IN,ALM_IN,FAST_JOG,FWD_JOG,REV_JOG,FHOLD_IN等指令可用于配置。


INVERT_IN:输入信号的反转配置。


image.png


输入反转: 

   INVERT_IN(8,ON)  '输入反转

输入口滤波:

   INFILTER=5  '值越大,滤波时间越长, 2-9,缺省2

输入口的读取:

   IN(0) 读取IN0数据    IN(0,7) 一次性读取IN0~IN7数据

读取上升沿/下降沿状态:

方法一:

   SCAN_EVENT(IN(0)) > 0    上升沿     

   SCAN_EVENT(IN(0)) < 0    下降沿

方法二:

   IN_SCAN(0,23) 之后,IN_EVENT(0) > 0    上升沿

   IN_SCAN(0,23) 之后,IN_EVENT(0) < 0    下升沿

输入信号的诊断:ZDevelop->视图->输入口。

运行如下程序,得出输入口状态如图所示。

base(0)

atype=1

units=1000

alm_in=24

fwd_in=8

rev_in=9

datum_in=10

INVERT_IN(24,on)

INVERT_IN(8,on)

INVERT_IN(9,on)

INVERT_IN(10,on)

base(1)

atype=1

units=1000

alm_in=25

fwd_in=11

rev_in=12

datum_in=13

INVERT_IN(25,on)

INVERT_IN(11,on)

INVERT_IN(12,on)

INVERT_IN(13,on)

灰色表示无输入,绿色表示有输入,特殊信号输入在窗口里有提示,IO编号的显示可在“IO选择”中自定义。


image.png


7、ZMC306X数字量输出口


通用数字输出口可接NPN型。光耦和滤波器的作用是防止干扰信号通过信号线和电源线进入控制器。

通用的输出口的单个输出最大电流为300mA,轴端子上面的输出最大电流为50mA。

通用输出的指令为OP。

输出口特殊功能:OUT0~1口支持PWM输出,当PWM功能关闭时为普通输出。PWM高速输出口允许的输出信号频率为1M,剩余的为普通输出口,允许输出的频率频率为10K左右。


image.png


使用PWM_DUTY和PWM_FREQ指令分别设置占空比和频率。

PWM_DUTY(0)=0.4  '0.4占空比  PWM_FREQ(0)=1000  '1k频率。

PWM_DUTY(1)=0.5  '0.5占空比  PWM_FREQ(1)=1000000  '1M频率。


image.png


输出信号的诊断:ZDevelop->视图->输出口。

运行如下程序,得出输出口状态如图所示。

op(0,15,0)   '输出口0-15全关

op(0,on)     '输出口0开启

op(4,7,$f)   '按位设置,bit4-bit7 全开

op(12,15,$c) 'bit12~bit13关,bit14~bit15开


image.png


8、数字量输入输出扩展


当数字量输入输出点数不够用时,可连接扩展模块扩展输入输出,可采用CAN总线和EtherCAT总线连接扩展模块。

ZMC306X由于只包含CAN接口,只能采用CAN总线扩展,最多可扩展512个IN输入口,512个OUT输出口,当脉冲轴数不够用时,支持采用ZCAN扩展模块扩展脉冲轴,接线方法参见下图。

一定要保证控制器的EGND与ZCAN IO的GND连在一起,且CANL和CANH之间接入120欧电阻。


image.png


9、ZMC306X模拟量输入输出


ZMC306X包含两路AD模拟量输入,和两路DA模拟量输出, 内部 AD/DA 采用了内部电源。

控制器模拟量精度为12位,刻度范围为0~4095,输入输出电压范围为0~10V。

模拟量输入输出点数不够用时,可选用扩展模块扩展,模拟量可扩展256路AD和128路DA。

相关指令:

模拟量输入:AIN    读取AIN(0),AIN(1)

模拟量输出:AOUT   写入AOUT(0),AOUT(1)

ZMC306X的AD/DA信号的诊断:ZDevelop->视图->AD/DA,实时监控模拟量各通道的电压。


image.png


10、在运动的过程中同步输出


在运动的过程中同步输出OP、DA、PWM。

相关指令:

MOVE_OP     运动的过程中输出OP

MOVE_OP2     运动的过程中输出OP一段时间

MOVE_PWM     运动的过程中输出pwm

MOVE_AOUT    运动的过程中输出模拟量


image.png


11、触摸屏的IN,OP,ADC,DAC等数据读写


● IN(0)~IN(4095)对应MODBUS_BIT(10000)~MODBUS_BIT(14095)  只读

● OP(0)~OP(4095)对应MODBUS_BIT(20000)~MODBUS_BIT(24095)  读写

● AIN(0)~AIN(255)对应MODBUS_REG(14000)~MODBUS_REG(14255) 只

● AOUT(0)~AOUT(127)对应MODBUS_REG(13000)~MODBUS_REG(13127) 读写

● DPOS,MPOS,VPSEED 对应MODBUS_IEEE(10000)~MODBUS_IEEE(12198)只读


image.png


12、位置比较输出


●比较输出相关指令:软件比较输出PSWITCH指令;硬件比较输出HW_PSWITCH指令(仅支持脉冲轴),HW_PSWITCH2指令(脉冲轴总线轴均支持),在电机位置到达设置位置时,操作某个输出口电平变化。

● 其中4系列及3系列部分控制器支持硬件比较输出,例如ZMC432,包含4个硬件比较输出通道,且各通道独立(部分型号非独立),不同控制器型号支持的硬件比较输出通道个数有所区别,特殊功能对应的输出口IO编号一般从0开始。

● 每个系统周期内只能比较一次,通道独立,一个系统周期支持多个输出口同时使用硬件比较输出,若通道非独立,则一个系统周期只能使用一个输出口,系统周期通过SERVO_PERIOD查询,缺省为1ms。

● HW_PSWITCH2与MOVE_OP精准使用同样的硬件资源,所以不建议在同一个通道同时使用,若通道独立,则可以在不同的通道同时使用。


image.png


13、精准输出


支持硬件比较输出功能的控制器才可使用精准输出功能,使用AXIS_ZSET指令设置是否开启精准输出。开启后使用MOVE_OP指令精准输出生效,注意输出通道要选择支持精准输出的通道,不同控制器型号支持的通道个数有所区别,一般特殊功能从IO编号0开始。

普通的输出操作需要等待一个控制器周期才可以执行。而精准输出操作,可在电机发出一个脉冲内响应,大大提高工艺的精度,同时可以使用MOVEOP_DELAY指令调整响应时间(提前或延迟)。

一般精准输出功能在一个控制器周期内只能执行1个,再次启用需要等到下个周期。不过最新控制器如ZMC420SCAN每个精准输出都是独立的,可以在一个周期内同时使用多个口,是否支持同时使用多个精准输出功能查看硬件手册中的输出口说明。


14、控制器示例程序(basic示例程序)


控制器程序分为五个模块:

1)初始化模块:轴参数设置子程序,IO初始化子程序。

2)输入扫描模块:按下启动输入点,停止输入点的相应程序。

3)轴参数设置子程序:初始化轴参数。

4)IO初始化子程序:初始化IO(OP,AOUT)。

5)按下启动的运动任务:启动按键按下调用执行运动任务1。

RAPIDSTOP(2)

wait idle(0)


AxesInit

IoInit


while 1                 

        if scan_event(in(0))>0 then     'in0 上升沿 启动运行...        

                print "in0 上升沿 启动运行"

                stoptask 1

                runtask 1,        Motion_Task                        

        elseif scan_event(in(1))>0 then  'in1 上升沿 停止运行...

                RAPIDSTOP(2)

                stoptask 1

                RAPIDSTOP(2)                

        endif        

wend

end



'''        轴初始化

Global sub AxesInit()

        base(0)

        atype=1

        units=1000

        speed(0) = 200                '200mm/s

        accel(0) = 2000                '100ms acc time 

        decel(0) = 2000                '100ms dec time  

        sramp(0) = 200                'sramp time:200ms


        dpos(0)=0

        mpos(0)=0


        merge=Off  

end sub



'''        IO初始化

Global sub IoInit()

        op(0,off)                        'op0 输出低电平

        op(0,15,off)                'op0~op15 输出低电平...


        aout(0)=0                        'aout0 输出电压0

        aout(1)=0                        'aout1 输出电压0

end sub



'''        运行的任务

global sub Motion_Task()        

        trigger


        base(0)

        moveabs(0)

        wait idle(0)


        move(100)                  '        

        move_op(0,on)

        move(100)                  '        

        move_aout(0,1000)        

        move(200)                 '正转10r

        move_op(0,off)

        move(100)

        move_aout(0,0)        

        move(100)

        wait idle(0)        

end sub


image.png


今天,正运动技术的如何进行运动控制器输入/输出IO的应用就分享到这里。更多精彩内容,请关注我们的公众号。


发布时间:2020年9月7日 14:39  人气:   审核编辑(王静 )
更多内容请访问(深圳市正运动技术有限公司
相关链接

我有需求