本帖最后由 lryxr2507 于 2013-3-14 16:20 编辑
求助大师:
遇到一台设备,有较多的感应器,每一个动作必须按顺序动作,每一次动作后必须感应到感应器信号后才能执行下一个动作,在这里就出现一个问题,在执行的过程中,如果需要终止动作回到初始状态,这时因为再等待感应点已进入死循环,无法终止程序,即使在中断里面强制执行了,但死循环后面的程序还在等待,无法完全退出.当然我用过break 等方法进行返回,可是当有很多动作时就麻烦了,怕执行过程中错开感应器.
例如:
if(run_flag) //运行标志开
{
A=0; //动作1执行
while(A_D); //等待1动作的下感应 请教各位:怎样较好地避免这种死循环
A=1; //动作1停止
while(A_U); //等待1动作的上感应
B=0; //动作2执行
while(B_A); //等待2动作的前感应
A=0; //动作3执行 ;与动作1相同
while(A_D); //等待3动作的下感应
A=1; //动作3停止
while(A_U); //等待3动作的上感应
B=1; //动作2停止
while(B_B); //等待2动作的后感应
........
run_flag=0; //关闭运行
''''''
}
请各位不吝赐教,表示感谢.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
或者用状态机,啥状态执行啥,
也尝试这种方法,但里面有些动作是相同的,这样的标志将相当多,最主要的是感应器在动作时感应时间很短,怕在怕判断时错过.
void step0()
{
................................
if(x1) step_num=1;
}
void step1()
{
................................
if(x2) step_num=2;
}
......................
void auto()
{
switch(step_num)
case 0:
{
}break;
case 0:
{
}break;
...............
default:break;
}
注意程序中不要有阻塞的地方,不停循环扫描
一周热门 更多>