例如希望,通过do0预约程序1,do1预约程序2,包括机器人在执行程序1的时候,也可以预约程序2(即做完程序再做程序2),如何实现。
CS机器人默认提供的事件函数,非上升沿或者下降沿触发。对于预约程序,通常需要边沿触发信号,并将该触发记录到某变量。在程序调用时,再将该变量清零。
机器人程序树如下图,对应线程Event10.script函数实现见下文:
程序树通过全局变量stn1和stn2判断,
线程中一直监控do0,若发生了上升沿,则将stn1置True。主循环判断stn1==True,执行移动到路点_1
线程中一直监控do1,若发生了上升沿,则将stn2置True。主循环判断stn2==True,执行移动到路点_2
def trap1(): global stn1 stn1 = True # 将全局变量stn1置True def trap2(): global stn2 stn2 = True # 将全局变量stn2置True pre_sig = get_standard_digital_out(0) pre_sig2 = get_standard_digital_out(1) while True: sig = get_standard_digital_out(0) # 获取当前do0信号的值 sig2 = get_standard_digital_out(1) # 获取当前do1信号的值 if pre_sig==False and sig==True: # 判断do0信号上升沿时,进入trap1 trap1() if pre_sig2==False and sig2==True: trap2() # 判断do1信号上升沿时,进入trap2 pre_sig= sig # 将当前do0的值作为下一循环的do0的上一次值 pre_sig2 = sig2 # 将当前do1的值作为下一循环的do1的上一次值 sleep(0.1)