Q编程介绍
SCL指令的使用已经有很多年的历史。Q程序是建立在SCL指令基础之上的一个新的平台,扩展了SCL命令的使用,允许用户创建与存储SCL指令。这些程序可以保存在驱动器的非易失性存储器中,驱动可以脱离主机独立运行这些程序。Q程序为系统设计提供了高度的灵活性和强大的功能。主要特点如下:
• 运动控制(例如FL、FP、SH等)
• 执行驻留程序
• 多任务处理(请参阅MT指令)
• 条件判断(例如OI、TI等指令)
• 数学运算(例如R+、R-、R*、R/、R|、R&等指令)
• 寄存器操作(例如RX、RM等指令)
1个Q程序支持多达12个程序段,每个程序段最多可以编写62条指令。
参考例程
以下内容给出了Q编程的参考例程,并对这些指令逐条进行了解释,Q编程中所有指令均为缓存指令(Buffered Commands)
点到点相对运动(Feed to Length)
FL(Feed to Length)指令用来完成点到点相对位置运动,当执行该指令时,电机将按照设定的加速度(AC),减速度(DE)及运行速度(VE),完成一段固定的相对位置距离(DI)。电机转动的方向由DI指令的正负极性决定。比如,DI32000 代表电机顺时针转动32000步(或微步),而DI-32000代表电机逆时针转动32000步(或微步)。上图中列出了一个参考例程,Q程序通过WI指令首先等待输入口3接收一个下降沿触发信号,如果条件满足,电机将按照20 转/秒的转速,转动4圈;如果条件不满足,程序将一直停留在WI指令处等待输入口3接收正确的触发信号为止。
点到点绝对运动(Feed to Position)
FP(Feed to Position)指令用来完成点到点绝对位置运动,当执行该指令时,电机将按照设定的加速度(AC),减速度(DE)及运行速度(VE),完成一段绝对位置距离(DI)。DI指令代表目标绝对位置,电机转动方向不由其正负极性决定,而由电机当前绝对位置与目标绝对位置来决定。上图中列出了一个参考例程,Q程序通过WI指令首先等待输入口3接收一个下降沿触发信号,如果条件满足,电机将按照20 转/秒的转速,转动4圈,然后等待1秒(WT指令),然后电机以20 转/秒的转速回到绝对位置0点;如果条件不满足,程序将一直停留在WI指令处等待输入口3接收正确的触发信号为止。
SP(Set Position)指令用来设置电机当前的绝对位置,如发送“SP0”指令,将电机当前位置设为绝对位置零点。注意,SP指令设置的参数是以编码器Encoder Counts作为基本单位的,比如一个装有500线编码器的电机,一圈有2000个Encoder Counts,如发送“SP5000”指令,将电机当前位置设为以绝对位置零点顺时针方向2.5圈的位置。
运动到传感器位置(Feed to Sensor)
FS(Feed to Sensor)指令使电机以一个固定速度转动,直到一个输入口的电平状态满足触发条件,电机减速,运动停止。运动参数由AC,DE,VE及DI指令决定,注意DI指令在FS指令执行时代表输入口电平状态满足触发条件后,电机减速到0的运动距离,注意DI设定的减速具体必须大于最小减速距离Dm,最小减速距离由DE,VE,EG指令决定,计算公式如下,其中V代表VE设定值,R代表EG设定值,D代表DE设定值:
注意:当DI设定值大于最小减速距离Dm时,电机接收到输入口触发电平状态(找到传感器)后,会继续以当前速度向前运动(DI-Dm)的距离,然后以DE设定的减速度减速,直到完成Dm的减速距离。同时,DI指令也决定了电机刚开始运动的方向,比如,DI8000 代表执行FS指令后,电机顺时针转动,而DI-8000代表执行FS指令后,电机逆时针转动。输入口电平状态分为H(高电平),L(低电平),R(上升沿),F(下降沿)这几种状态。
上图中列出了一个参考例程,Q程序通过WI指令首先等待输入口3接收一个下降沿触发信号,如果条件满足,取消限位功能,电机以5转/秒的转速顺时针方向转动,直到输入口7接收到一个高电平触发状态,驱动器找到了传感器,于是以DE设定的减速度,DI设定的减速距离完成减速到0。然后电机等待1秒钟,随后以20转/秒的速度运行到绝对位置零点处,打开限位功能。
循环(Looping)
用户可以通过两种方式来实现程序的循环。第一种使用QG(Queue Goto)指令,设置QG参数使程序回到设定的行数。下图中列出了一个参考例程,在FL指令后等待时间0.5秒(WT0.5),然后使用QG指令,使程序回到第一行重新执行,实现不断循环。
第二种方法是使用QR(Queue Repeat)指令,QR指令指明跳转到哪一行和循环次数。下图中列出了一个参考例程,QR指令表示跳转到第二行,参数为3,即循环次数由用户自定义寄存器3中的值决定,在这里RX指令写入数值5到自定义寄存器3, 所以程序循环执行5次。
跳转(Jumping)
程序跳转由QJ(Queue Jump)指令实现,跳转和循环不同,跳转主要判断条件是否满足,即跳转指令通常和TI(输入检测),TR(寄存器检测),CR(寄存器比较)指令配合使用。下图中列出了一个参考例程,有两种可能的运动,顺时针旋转,当输入信号5有效时(低电平有效)电机开始逆时针旋转,加速度300,减速度450,速度18.5,两种运动间有0.25秒的等待时间。然后,检测X5信号的状态,当 X5信号有效时(True),程序跳转到第10行,开始逆时针旋转,如果X5信号为高时程序直接到第7行进行顺时针旋转, 执行完后回到第一行进行循环。
程序调用(Calling)
程序调用是在不同的程序段(Segment)之间实现的。QC(Queue Call)指令允许用户结束一个当前程序段,调用另一个程序段,执行完后,回到执行调用指令的第一个程序段。这样,用户可以把需要多次循环的程序单独放到一个段中进行调用,以减少循环的次数和降低程序结构的复杂度。下图中列出了一个参考例程,由第1程序段(Segment 1)和第2程序段(Segment 2)组成:
第1程序段在第6、10行调用第2程序段,第2程序段中设置Y1低电平输出,等待0.25秒,设置Y2低电平输出,等待0.25秒。然后设置Y2高电平输出,等待0.25秒,设置Y1高电平输出,回到第1程序段,继续执行第1程序段内后续指令。
多任务处理(Multi-tasking)
多任务处理模式(MT1)允许程序在执行运行指令(如FL,FP,CJ,FS等)时,同时执行其他指令,而不需要等待前一个运行指令的结束。在单任务处理模式(MT0)下,Q程序是顺序执行的,即执行下一条指令会等待上一条指令的结束。例如,FL指令后是SO指令,那么驱动器在FL指令结束后才会设置输出。当开启多任务处理模式(MT1),Q程序执行运行指令的同时会执行后面的指令。例如,上面的FL,SO指令,执行多任务处理,驱动器开始运行并且立即执行输出设置,不需要等待FL指令执行完毕。多任务处理由MT指令设置,MT1为多任务处理开启,MT0为多任务处理关闭(单任务处理模式)。
例如上图所示,当MT=1,驱动器执行FL指令,等待0.5秒后设置输出口Y1为低电平,不需要等待FL指令结束后,再等待0.5秒才输出低电平。以上是一个最基本的例子,如果您尝试对您的驱动器进行编程,请尽量保证DI值足够大以观察不同的指令执行后的区别。注意,因为电机不能同时执行两种运动,即使多任务处理开启后,运动指令还是会有先后顺序。例如,多任务处理开启后,程序中连续有两种运行指令,那么驱动器还是会等待第一条指令完成后执行下一条指令。