1、LabVIEW编程:设计框架 什么是设计框架 ? 在一个给定的问题领域内, 一个固定下来的、用于解决普遍问题的方案 我为什么要用 ? 节省时间 增加代码寿命及可读性 或者 软件工程中的几宗罪 没有源码控制(项目) 文件存放没有层次关系 直到项目结束才生成可执行文件 缺乏说明文档、需求分析等 没有代码审查 差劲的设计 没有测试计划 差劲的错误处理 风格不一致 高耦合、低内聚 为什么而设计 可扩展性 模块化 重用性 易用性 你应该已经熟悉的概念 循环 移位寄存器 条件结构 枚举 事件结构 代码 设计框架 带错误条件结构的子 VI 功能性全局变量 状态机 带事件处理的循环结构 带事件驱动的状态机 生
2、产者 /消费者 带错误条件结构的子 VI 无错误条件结构的子 VI 无法传递错误 当有错误传递到子 VI时,子 VI中的代码不能跳过执行 设计框架分解 条件结构 错误簇 如何使用 代码 如何使用 优缺点 当有错误传递到子 VI时,子 VI正确传递错误的同时跳过代码执行,提高运行效率 通过错误连线控制数据流 需要花时间去编写 Lazyboots Menu Tool - Add Error Case GSDZone开源 功能性全局变量 全局变量和本地变量 导致竞态( race conditions) 在内存中创建多个副本 无法操作数据 无法处理错误连线 设计框架分解 仅运行一次的 While循环
3、没有初始化的移位寄存器 条件结构 枚举控件 没有初始化的移位寄存器 基本操作 设置移位寄存器中的值 基本操作 获取移位寄存器中当前所存的值 数据操作 操作数据,并存储到移位寄存器中 可选择是否输出 数据操作 传统的编码逻辑 简化的方法 LabVIEW2012新特性 条件输出循环通道 根据条件构建数组 工作原理 1. 不可重入的子 VI 2. 通过枚举选择具体操作 3. 将操作后的数据存储在没有初始值的移位寄存器中 4. 仅执行一次的 While循环 功能性全局变量 功能性全局变量 防止竞态 内存中无副本 可操作数据 可处理错误连线 需要花时间去编写 全局变量和本地变量 导致竞态 在内存中创建多个副本 无法操作数据 无法处理错误连线 直接拖拽就可使用 优缺点 建议 使用案例 代码间传递数据而不需要连线 存储数据时需对数据做自定义操作 注意事项 所有调用 VI必须暂住内存 使用簇来减少接线板上接线端子的数量 使用层叠式移位寄存器来保存多个操作周期的数据 状态机 你喝咖啡吗 ? 走开 但我想 把它关掉 咖啡壶里还有多少咖啡 ? 做一壶新的 喝掉 加满并冲泡 是不是上周冲泡的 ? 怕变质 ? 放入微波炉 不怕 有多怕 ? 非常怕 静态序列 A B C D