例如希望,通过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)