0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机工控事件

汽车电子技术 来源:工控码农 作者:工控码农 2023-02-07 09:40 次阅读

单片机工控通常有延时,电机状态,传感器状态等通用耗时操作,业务程序查询这些状态,就会产生大量的冗余代码,不简洁.使用事件则是把这些通用操作丢给系统去处理,系统操作完成后,则运行业务程序的下一个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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2545

    文章

    50411

    浏览量

    750768
  • 单片机
    +关注

    关注

    6030

    文章

    44482

    浏览量

    631750
  • 代码
    +关注

    关注

    30

    文章

    4717

    浏览量

    68197
  • step
    +关注

    关注

    0

    文章

    41

    浏览量

    20424
收藏 人收藏

    评论

    相关推荐

    专注单片机工控编程开发#步控电子#步骤编程#单片机 #单片机开发

    单片机
    东莞市步控电子科技有限公司
    发布于 :2022年08月03日 22:55:10

    单片机工控

    ,指示灯,计数器,拨码开关)如果用PLC成本太高,即使时最入门的也不是太合算,而且还需要自备24V开关电源,对配线也是个难题,就有这个一个想法,可对单片机了解甚少,还望对如上所列给予指点1.能否实现2.开发这个通用的班子费用和周期3.有意向合作开发的mail至:leon51717@163.com
    发表于 03-18 14:31

    超齐全单片机工具集

    超齐全单片机工具集单片机工
    发表于 11-03 16:49 155次下载

    超级单片机工具软件

    电子发烧友网站提供《超级单片机工具软件.exe》资料免费下载
    发表于 07-13 17:49 26次下载

    8051单片机工作原理介绍

    8051单片机工作原理 8051单片机工作原理
    发表于 10-28 11:19 43次下载

    单片机初学者迈向单片机工程师

    单片机初学者迈向单片机工程师从单片机初学者迈向单片机工程师
    发表于 01-15 16:33 45次下载

    单片机工具大全

    收藏的单片机工具,分享出来
    发表于 02-15 23:04 19次下载

    单片机工控常用IC—sn74lvc07a资料下载.pdf

    单片机工控常用IC
    发表于 05-25 15:46 6次下载

    实用单片机工具应用程序合集免费下载

    本文档的主要内容详细介绍的是超级单片机工具软件应用程序合集免费下载包括了:51波特率计算应用程序,超级单片机工具软件,单片机小精灵。
    发表于 04-28 16:24 33次下载
    实用<b class='flag-5'>单片机工</b>具应用程序合集免费下载

    MSP430单片机工程配置driverlib库

    MSP430单片机工程配置driverlib库
    发表于 11-19 16:36 22次下载
    MSP430<b class='flag-5'>单片机工</b>程配置driverlib库

    单片机工控应用

    电机状态 传感器状态 时间状态都是系统管理查询的,极大的提高了代码的复用,因为一个项目一般都有几十个动作动作函数.
    的头像 发表于 02-07 09:34 579次阅读

    单片机工控实现任务执行管理

    前面写了switch case做任务调度的应用,这边写一下如何实现.像一般的RTOS一样都有一个任务控制块(TCB)列表来管理所有的任务,所以这里也需要一个结构体来管理动作任务,这里叫做ACB吧.
    的头像 发表于 02-07 09:37 821次阅读

    单片机工控的电机减速算法是什么?

    单片机给步进驱动一个脉冲,电机转动一个步距角,单片机给脉冲越快,步进电机单位时间内,转动的角度也就越大.即脉冲频率正比于电机转速.
    的头像 发表于 02-07 09:43 1504次阅读
    <b class='flag-5'>单片机工控</b>的电机减速算法是什么?

    单片机工控的工程分离是什么?

    单片机电路板一般专有的,如汽车的车灯控制电路板和EPS控制的电路板是完全不同的。专有的电路板,软件就比较难通用,软件编程比较强调的是单片机系统。
    的头像 发表于 02-07 09:47 869次阅读
    <b class='flag-5'>单片机工控</b>的工程分离是什么?

    51单片机工程模板创建方法

    本教程将向大家介绍如何使用KEIL C51 软件以及如何创建51 单片机工程。通过本教程的学习,让大家创建属于自己的51 单片机工程模板,为后面学习51 单片机编程做好铺垫。
    发表于 07-15 15:27 4675次阅读
    51<b class='flag-5'>单片机工</b>程模板创建方法