我们今天简要介绍RS指令在状态机中怎么处理的。有些设备按下停止按钮后,没有马上停止,而是到原点后才停止,那么这种情况在状态机中如何表示呢?我们以案例说明之,下面是我们的控制描述。

控制描述

小车从左位开始,从左向右行使,到达右位后停5秒,然后从右向左运行,到达左位后停3s,继续向右运行。当按下停止按钮后,小车不是马上停止,而是到达左位后才停止。我们假设左边的到位信号位isOnLeftPos,右边的到位信号为isOnRightPos,向左的运行动作为GoLeftPos,向右的运行动作为GoRightPos,启动停止按钮分别为start和stop。

对于这样的控制任务,我们该怎么作呢?难点在于处理stop按钮信号,小车运行中,按下stop按钮,不是马上停止,而是要到达左位后才停止。这里我们用了状态机的并行结构。Signals状态处理stop信号,Logic状态处理逻辑动作。

这一张图是程序的总体,图右侧的OnRightPos和OnLeftPos是方便我们观察左右位的状态,实际使用中可以不用输出。

这张图是实际的控制。左边处理stop信号,右边处理小车控制逻辑。另外这里我们要说明一下命名规则:大写开头的是指各状态,比如OnLeftPos,Signals等等,小写开头的是条件,比如isOnRightPos, stop. 假设小车的当前状态处于GoRightPos,按下stop按钮,Stop的子状态Set就激活,那么〔in(Signals.Stop.Set)]条件满足,但当前状态不在OnLeftPos,没有发生转移,此时小车继续运行,等小车到达OnLeftPos状态时,OnLeftPos状态才开始转移到Idle状态,此时〔in(Logic.Idle)]条件满足,Stop的子状态从Set转移到Reset。

控制程序

这次的控制程序和以前稍有不同,用个并行状态处理stop信号,在第一篇博客中,我们也用一个并行状态处理上升沿问题。整个程序多了一段case,一段描述Signals,一段描述Logic,方法和以前一样,也是比较简单的,等下次我们在此状态机的基础上,介绍完历史状态后,一并写出程序。另外,为了方便,我们以后就用ST语言写了。

最新文章

  1. SQL SERVER修改排序规则——脚本篇
  2. 洛谷 P1414 又是毕业季II Label:None
  3. Jmeter调试工具---Debug Sampler
  4. vc2010 win32 控制台应用程序中文乱码
  5. pthread_key_t和pthread_key_create()详解
  6. Qt之HTTPS登录
  7. C#调用Excel VBA宏
  8. [转]关于ASP.NET(C#)程序中TEXTBOX下动态DIV跟随[AJAX应用]
  9. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析
  10. SharePoint 2016 installation error The program can not start because api-ms-win-crt-runtime-l1-1-0.dll is missing
  11. HTMLCollection 对象和NodeList 对象
  12. python调用虹软2.0
  13. oracle sql developer登录
  14. Js_实现3D球体旋转
  15. nyoj528-找球号(三) 【位运算】
  16. POJ 1789:Truck History(prim&&最小生成树)
  17. NumberUtils、ArrayUtils和RandomUtils工具类用法
  18. sql代码段添加数据
  19. GIT基本概念和用法总结【转】
  20. _utf8_encode _utf8_decode base64_encode base64_decode

热门文章

  1. Hibernate课程 初探多对多映射2-4 测试
  2. 基于nodejs的DNS查询工具
  3. IntelliJ IDEA详细配置和使用教程(转)
  4. JavaScript流程控制语句脑图
  5. SASS简介及使用方法
  6. Android 设置软键盘搜索键以及监听搜索键点击事件
  7. nProtect APPGuard安卓反外挂分析
  8. u-boot分析(二)----工作流程分析
  9. js中字符串怎么转化为日期
  10. meta详解(常用)