一。
WAIT UNTIL PROC_STATUS PROC (3) =0 的意思是等待3号进程运行结束,因为Trio控制器是多任务控制器,每个运行的用户任务都有其独一无二的进程编号(进程编号为1,2,3...n,不同控制器允许的进程数量是不同的,最少的只有3个,最多可以有14个)。在编程时,往往需要知道相关进程的当前状态,比如用run指令指定一个用户程序开始在1号进程运行,在run指令后面写上WAIT UNTIL PROC_STATUS PROC (1) =1,这样保证1号进程启动后,再继续运行下面的语句。当使用stop语句停止每个运行的程序时,由于多任务系统调度的原因,stop指令执行后,被停止的进程只会在下一个伺服周期才被真正停止,所以在stop语句后面加上WAIT UNTIL PROC_STATUS PROC (3) =0 则可以保证在对应进程被停止后再运行接下来的语句。例如:
run 't1',1
wait until proc_status proc(1)=1
stop "t1"
wait until proc_status proc(1)=0
run "t2",1
wait until proc_status proc(1)=1
在上面的这个例子中,首先在1号进程内运行t1,然后再停止t1,再在1号进程内运行t2,如果在stop “t1”和run "t2",1直接没有wait until proc_status proc(1)=0这句话,则系统会在执行run "t2",1时保错,原因是因为1号进程还没有被停止,此时1号进程还被t1所使用,所以t2无法在1号进程内启动。
二。
WAIT UNTIL PMOVE PROC(3) =0的意思是等待对应进程存放运动指令的缓存为空,Trio运动控制器在执行运动指令时有着一套特定的逻辑规则,简单说,对于每个轴都分配一个运动指令的缓存(缓存的大小依据不同的系统版本有所不同,少则2个,多则64个),每个轴的运动缓存用计算机术语说就是一个FIFO(先入先出寄存器),各个进程都可以向各个轴的运动缓存添加指令,因此为确保逻辑正确及系统执行效率,底层为每个进程都再分配一个运动指令缓存,名称为PMOVE,其专门用来存放当前进程所执行的运动指令,也就是说运动指令首先被放入到当前进程的运动缓存,然后系统再根据指令对应轴的关系将其放入对应轴的缓存,如果对应轴缓存已满,则pmove不会被清除。如果pmove不为空,当前进程再次执行运动指令时,该进程会处于阻塞模式(一直等待被执行的运动指令装载到pmove为止,否则会一直等待,程序不会再向下执行),有些情况下为避免出现这种阻塞,则需要判断pmove状态,则可以用到WAIT UNTIL PMOVE PROC(3) =0。