3.23-重新定义操作者框架
计划
- 重新定义操作者架构
- 解决基本的启动和关闭问题
- 思考一些最基础的问题的通用解决方法
- 如操作者开启,关闭时使用什么样的线程同步方式
- 消息数据结构的细粒度怎么组织
- 思考一些问题解决的模式
- 如Actor间的消息通信模式
- 实现程序框架
- 将基本的关系处理好
- 程序设计要优秀
- 继续画图,已经有多层次的数据流图,该画程序结构图了
- 画完程序结构图之后,介绍LVAF的基本信息
- 画类图就可以了
- 设计更合理的数据结构和消息通信数据结构
- 继续画图,设计体系结构容纳构件及构件间关系
- 设计静态的构件间通信模式(哪些消息,消息结构是什么)
- 针对设计进行实现
- 进行数据建模
理论依据
- 数据流图及导出的程序结构图
- 分布式的情况
前提
- 结构就这样
- 操作者之间传递触发信号即可,尽可能不要传递实体数据,实体数据使用共享数据
- 数据怎样建模呢?LV上怎么共享呢?网络间怎么共享呢?
- 用本地数据库么?
- 查取相关资料!
- 语音操作者的现有功能并不能包含“自然语言处理”功能
修改
- 所有机器人的状态显示都显示到Mapdisplayer操作者上,所有输入的都放在Operating Panel上,不要揉在一起
正文
由数据流图映射到程序结构图
。。。需要写很多东西
建立LV项目
- 建类和操作者
- 所有名字一个组合单词,首字母大写
- 注意建立文件夹
- 设置类继承关系
- 给框图设置图像
- 建立每个操作者的核心函数
- 在新建类成员函数的过程中出现应用程序引用无效错误,需要将包覆盖,考虑将附加的网络操作者和状态操作者包先卸载,重新开始。
- 在新建的时候制作类图
- 制作类图的时候,LV类属性中访问范围“库内”,理解为定义友元,即protected method。
- EA在类图中怎样定义友元?
- 看看Handle Error.vi到底怎么用的?
编程过程中尝试对所有函数进行面向对象封装
开启停止操作者试验
- 只给根操作者发标准停止,两个中层操作者是否关闭?
- 是
- 嵌套操作者将“自动停止”设置为是时可以自动关闭
- 是否可以两层连续自动停止?
- 是的,不过有一个条件是:中层不能有循环,中层若有循环,则根操作者的按钮无法控制其结束,则中层不能结束,中层虽然不能结束,但是端部操作者不受影响。
- 是否可以由中层给根部发消息而停止所有操作者?
- 是,都可以停止,因为根部操作者收到了停止消息,则所有操作者都停止了,因为其他操作者都没有循环
- 实际情况,每一个操作者都有很多循环,怎样结束其循环呢?除了INOP的循环结束可以使用按钮外,其他的都不能使用按钮,所以建议使用通知器,通过传递通知器,触发另一个操作者核心函数中的事件,将循环结束掉。
- 建议的两种停止方法
- 一种是操作者自己的停止核心函数中对通知器置位,进而停止自己的循环,而停止核心函数由主调方调用
- 一种是主调方通过消息给通知器置位,其实本质上和上一个方法一样,因为停止核心函数也是“标准停止”消息触发的,只不过被库封装了而已。使用这种方法,主调方要想停止一个操作者,需要发送两个消息,一个是通知器消息,一个是标准停止消息
- 因为我们想要一个操作者自己将自己掐灭,所以采用第一种方法,这样停止就成了一个操作者的一个状态
- 为什么当前项目停止这么卡?
- 可能是大部分循环中都有延时函数。
计划
- 在人机界面中实现启动某种操作者和关闭某种操作者,这样的话可以自发扩展和删除
- 即首先只打开两个操作者,其他的全部手动打开
- 扩展的时候可以选择启动哪种构件,取什么名字等等
- 取消“自动停止”
- 在人机界面中实现停止所有操作者,因为取消“自动停止”,所以要逐级停止。
- 怎样在一个操作者出现错误时只停止这一个操作者,而不是停止整个程序,错误处理问题
- 使用状态操作者库,实现操作者的两个状态:“运行”,“停止自身”?
- 性能问题
父类设计