单片机工控事件

描述

单片机工控通常有延时,电机状态,传感器状态等通用耗时操作,业务程序查询这些状态,就会产生大量的冗余代码,不简洁.使用事件则是把这些通用操作丢给系统去处理,系统操作完成后,则运行业务程序的下一个Step.

** 延时不使用事件**

switch(step)
{
  case STEP1:
    baseTime = systemTime;
    step= STEP2;
    break;
   case STEP2:
   if(systemTime>(baseTime+500))
   {
     ..
   }
   break;
}

延时使用事件:

switch(step)
{
  case STEP1:
  WaitTime(500,STEP2);  //向系统请求延时500ms,让出程序运行权限,500ms后运行到STEP2
  break;
  
  case STEP2:
  break;
}

不使用事件查询传感器状态

switch(step)
{
  case STEP1:
  if(IsSensorOn(X01))
  {
    StopSM(SM101);
  }
  break;
}

使用事件的查询传感器状态

switch(step)
{
  case STEP1:
  //向系统请求查询传感器X101,传感器感应后跳到STEP2
  WaitSensorOn(X101,STEP2);
  break;
}

不使用事件的电机运动

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);  //SM101运行2000步
  step = STEP2;
  break;
  case STEP2:
  if(IsSMStop(SM101))
  {

  }
}

使用事件的电机运动

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);
  //请求系统查询电机状态
  WaitSM(SM101,STEP2);
  break;
}

没有使用事件的找传感器的电机运动

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);
  step = STEP2;
  break;
  case STEP2:
  if(IsSensorOn(X101))
  {
    StopSM(SM101);
    return 1;
  }
  else if(IsSMStop(SM101))
  {
    return -1;
  }
  
  }

使用事件的找传感器电机运动

switch(step)
{
  case STEP1:
  //电机运动2000步,请求传感器状态 电机事件
  FindSensor(SM101,2000,X101,STEP2,STEP_ERROR);
  break;
  case STEP2:
  SetActionOk();
  break;

  case STEP_ERROR:
  SetError("SM101电机丢步-SM101/X101");
  break;
}
从上面的案例可以看出使用事件的程序几乎没有if else 程序更加口语化.事件实现的基本原理为:
  1. 把事件的参数(事件类型,延时时间,电机编号,电机步数,传感器编号)压入任务栈,下一步骤也就是PC指针也压入任务栈。
  2. 让出业务程序的运行权限到系统的通用事件运行,实现方式运行的函数指针指向事件处理的函数
  3. 事件处理程序查询相应的状态变化
  4. 运行权限重新切回业务程序,运行函数指针指向业务函数指针,Step出栈.
//切换到事件处理函数
CurrentAction->ActionCallback = CurrentAction->EventCallback;


//系统循环
while(CurrentAction!=NULL)
 {
    CurrentAction->ActionCallback();
    DelFinishAction();
    CurrentAction = CurrentAction->NextAction;
 }  
 
 //切回业务App
 ThisAction->nStep = nStep;
 ThisAction->ActionCallback = ThisAction->AppCallBack
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分