3.23-重新定义操作者框架

计划

  • 重新定义操作者架构
    • 解决基本的启动和关闭问题
    • 思考一些最基础的问题的通用解决方法
      • 如操作者开启,关闭时使用什么样的线程同步方式
      • 消息数据结构的细粒度怎么组织
    • 思考一些问题解决的模式
      • Actor间的消息通信模式
  • 实现程序框架
    • 将基本的关系处理好
    • 程序设计要优秀
    • 继续画图,已经有多层次的数据流图,该画程序结构图了
    • 画完程序结构图之后,介绍LVAF的基本信息
      • 画类图就可以了
  • 设计更合理的数据结构和消息通信数据结构
    • 继续画图,设计体系结构容纳构件及构件间关系
    • 设计静态的构件间通信模式(哪些消息,消息结构是什么)
  • 针对设计进行实现
    • 进行数据建模

理论依据

  • 数据流图及导出的程序结构图
  • 分布式的情况

前提

  • 结构就这样
  • 操作者之间传递触发信号即可,尽可能不要传递实体数据,实体数据使用共享数据
  • 数据怎样建模呢?LV上怎么共享呢?网络间怎么共享呢?
    • 用本地数据库么?
  • 查取相关资料!
  • 语音操作者的现有功能并不能包含“自然语言处理”功能

修改

  • 所有机器人的状态显示都显示到Mapdisplayer操作者上,所有输入的都放在Operating Panel上,不要揉在一起

正文

由数据流图映射到程序结构图

。。。需要写很多东西

建立LV项目

  • 建类和操作者
    • 所有名字一个组合单词,首字母大写
    • 注意建立文件夹
    • 设置类继承关系
    • 给框图设置图像
  • 建立每个操作者的核心函数
  • 在新建类成员函数的过程中出现应用程序引用无效错误,需要将包覆盖,考虑将附加的网络操作者和状态操作者包先卸载,重新开始。
  • 在新建的时候制作类图
    • 制作类图的时候,LV类属性中访问范围“库内”,理解为定义友元,即protected method
    • EA在类图中怎样定义友元?
  • 看看Handle Error.vi到底怎么用的?

编程过程中尝试对所有函数进行面向对象封装

开启停止操作者试验

  • 只给根操作者发标准停止,两个中层操作者是否关闭?
    • 嵌套操作者将“自动停止”设置为是时可以自动关闭
  • 是否可以两层连续自动停止?
    • 是的,不过有一个条件是:中层不能有循环,中层若有循环,则根操作者的按钮无法控制其结束,则中层不能结束,中层虽然不能结束,但是端部操作者不受影响。
  • 是否可以由中层给根部发消息而停止所有操作者?
    • 是,都可以停止,因为根部操作者收到了停止消息,则所有操作者都停止了,因为其他操作者都没有循环
  • 实际情况,每一个操作者都有很多循环,怎样结束其循环呢?除了INOP的循环结束可以使用按钮外,其他的都不能使用按钮,所以建议使用通知器,通过传递通知器,触发另一个操作者核心函数中的事件,将循环结束掉。
  • 建议的两种停止方法
    • 一种是操作者自己的停止核心函数中对通知器置位,进而停止自己的循环,而停止核心函数由主调方调用
    • 一种是主调方通过消息给通知器置位,其实本质上和上一个方法一样,因为停止核心函数也是“标准停止”消息触发的,只不过被库封装了而已。使用这种方法,主调方要想停止一个操作者,需要发送两个消息,一个是通知器消息,一个是标准停止消息
    • 因为我们想要一个操作者自己将自己掐灭,所以采用第一种方法,这样停止就成了一个操作者的一个状态
  • 为什么当前项目停止这么卡?
    • 可能是大部分循环中都有延时函数。

计划

  • 在人机界面中实现启动某种操作者和关闭某种操作者,这样的话可以自发扩展和删除
    • 即首先只打开两个操作者,其他的全部手动打开
    • 扩展的时候可以选择启动哪种构件,取什么名字等等
    • 取消“自动停止”
  • 在人机界面中实现停止所有操作者,因为取消“自动停止”,所以要逐级停止。
  • 怎样在一个操作者出现错误时只停止这一个操作者,而不是停止整个程序,错误处理问题
  • 使用状态操作者库,实现操作者的两个状态:“运行”,“停止自身”?
  • 性能问题

父类设计

  •  

posted @ 2019-07-25 08:20  哈骑士  阅读(586)  评论(0编辑  收藏  举报