370 likes | 590 Views
LabVIEW 交流. 交流的议题和针对的对象. LabVIEW 和图形化编程 程序设计中的一些常用方法和注意事项 程序设计的几种模板 编程风格 一些应用案例 有用的资源 主要针对的是已经使用过 LabVIEW 的同志 只是讨论关于 LabVIEW 软件,不涉及硬件. LabVIEW 和图形化编程. LabVIEW 是数据流驱动的编程语言 是一种编译语言 自动多线程的. 工程管理器. 工程文件的树形管理 硬件目标主机的管理 VI 的交叉连接 Library 的管理 LabVIEW 类的管理 程序的发布. 顺序结构.
E N D
交流的议题和针对的对象 • LabVIEW和图形化编程 • 程序设计中的一些常用方法和注意事项 • 程序设计的几种模板 • 编程风格 • 一些应用案例 • 有用的资源 • 主要针对的是已经使用过LabVIEW的同志 • 只是讨论关于LabVIEW软件,不涉及硬件
LabVIEW和图形化编程 • LabVIEW是数据流驱动的编程语言 • 是一种编译语言 • 自动多线程的
工程管理器 • 工程文件的树形管理 • 硬件目标主机的管理 • VI的交叉连接 • Library的管理 • LabVIEW类的管理 • 程序的发布
顺序结构 • 尽量利用LabVIEW的数据流 • 少采用顺序结构
禁用结构 • 程序框图禁用结构 • 条件禁用结构
循环结构 • While和For循环 • 在While循环中必须加入等时 • While循环是Do…While • 当知道循环次数时使用For循环 • 自动索引 • 善用移位寄存器优化代码
事件结构 • 事件是一种异步的信号 • 来源是用户界面、外部I/O或程序代码 • 相当于一种“中断”,需要时才响应 • 常与Wile一起使用,多用于UI的编程
事件类型 Control This VI Application
事件类型 • 应用程序事件 这类事件主要反映整个应用程序状态的变化,例如,程序是否关闭等 • VI事件 这类事件反映当前VI状态的改变,例如,当前VI是否选择了菜单中的某一项等 • 动态事件 用于处理用户自己定义的或在程序中临时生成的事件 • 控件事件 是最常用的一种事件,用于处理某个控件状态的改变,例如,控件值的改变或鼠标键盘的操作
事件种类 • 消息事件 是在LabVIEW处理完用户操 作之后发出的事件 • 过滤事件 是在LabVIEW处理用户操 作之前发出的事件
事件结构使用时应注意的问题 • 每个事件中代码执行的时间不能太长 • Timeout事件的使用
定时函数的使用 • 使用定时的目的 控制代码执行的速率 降低CPU占用率 • Wait 给它一个输入参数n,每次程序执行到它的时候,它就停下来,等待n毫秒,再继续运行后续程序 • Wait Until Next 给它一个输入参数n,每次程序执行到它的时候,会暂停在这里,Wait Until Next函数每隔n毫秒醒来一次,醒来后再继续运行后续程序
使用定时函数时的注意事项 • Wait函数 每次运行到它才开始计时一次,单次的误差会被累积。假如每次误差四五毫秒,迭代五次误差可能就达到十几毫秒了。 • Wait Until Next函数 不需要再每次调用的时候计算延时。假设Wait Until Next函数从0时间开始计时,那么程序已开始,它就可以知道自己每一次醒来的时间分别应当是100ms,200ms,300ms…。假如误差是± 4ms,那么它实际每次醒来的时间就是100 ± 4ms,200 ± 4ms…,这个误差不会被累积,但该函数不能确定第一次醒来的时间
全局变量 • 优点 很简单的就能实现不同进程间的数据访问 • 缺点 不利于代码的可读性 安全性低 效率低 存在竞争状态
功能型全局变量 • 用一个不可重入的VI实现 • 解决了竞争问题 • 封装了内部数据,控制访问
VI的重入 • 考虑子VI在一个程序中多次调用 • 希望得到不同的运行结果 子VI 执行左边的例子看看运行的结果是什么? 主VI
传值与传引用 • 传值会有数据拷贝的问题,内存使用大 • 传引用可以避免数据拷贝,但安全性不如传值,尤其在多线程编程的情况下 • 如果只是简单的应用直接传值,当有占用内存较大的数据类型时建议使用传引用的方式
动态调用并执行VI • 用于在一个VI中弹出多个VI界面 • 用于后台动态加载VI
内存优化 • VI内存占用包括四个部分:前面板、框图、代码和数据 • 把一个复杂VI分解为数个子VI • 在没有必要时不要设置子VI的重入属性 • 尽量避免开启子VI前面板,例如,属性节点的使用会将它的前面板调入内存,可以使用局部变量代替 • 打开的资源,在使用完毕后必须关闭,如打开的文件句柄 • 编程时尽量使用缓存重用
子面板技术 • 子面板就是一个容器,在主VI的前面板中显示子VI前面板的内容,并允许和子VI的控件交互
程序设计中的几种模板 • 对程序设计能更好的架构 • 有统一的设计框架 • 提高代码的可读性 • 容易发现问题,便于调试
LabVIEW面向对象编程 Class: 是数据(簇)和方法(VI)的集合 Object: 是类的实例化 • LabVIEW的类 • 数据是自定义的控件 • 方法是VI • 必须在Project中存在
编程风格 • 前面板 1 选择合适的数据类型,进行合理布局 2 按照从上到下、从左到右的原则布置界面 3 对于一些工业应用要少采用对话框 4 限制前面板显示信息的数量 5 保持控件风格(大小和字体)的一致性 6 定义合适的标签名 7 对一些重要的控件要突出显示,并定义Tip文本 8 要善用Ring和Enum控件
编程风格 • 程序框图 1 采用SubVI使程序模块化 2 按照从左到右的方式布置输入/输出控件和代码 3 对于难理解的代码要添加注释 4 尽量添加Error输入/输出端 5 对于比较长的连线要添加说明 6 使用4X2X2X4的连线端模式,并配合背景色说明VI的分层 7 添加VI的Description
大工程的应用案例 Application: FPGA-based motion control system for intercepting misguided or unstable particle beams. Challenge: Measuring and controlling, in real time, the position of bulk components to absorb energetic particles out of the nominal beam core with high reliability and accuracy at the world’s most powerful particle accelerator, the Large Hadron Collider (LHC). Products: NI LabVIEW, LabVIEW Real-Time and LabVIEW FPGA modules, R Series data acquisition modules, NI SoftMotion controllers, and PXI/CompactPCI Key Benefit: Custom motion control using small, rugged controllers for approximately 600 stepper motors with millisecond synchronization. “We selected the LabVIEW and PXI solution for the deployment platform due to the small size, ruggedness, and cost savings over the traditional VME and programmable logic controller-based model.” – Roberto Losito, CERN CERN Uses NI LabVIEW Software and PXI Hardware to Control the World’s Largest Particle Accelerator
有用的一些资源 • 论坛:http://formus.ni.com • NI Develper Zone • http://www.ni.com/china/labviewtips • http://www.gsdzone.net • http://www.ni.com/webcasts
问题 • RS232、485,GPIB等各种传输方式的速度比较 • 如何利用LabVIEW调用dll,使用的时候有什么需要注意的内容 • 如何获得当前时间相对于时间起点(LabVIEW里面规定的时间起点)的绝对数值(秒) • 机器视觉相关方面的应用 • LabVIEW的响应速度和效率,普通台式机和PXI的差别 • LabVIEW从9版本到2010和2011有哪些改变,程序在不同版本下的兼容性如何 • 讲解下生产者消费者的编程例子 • 讲解一个状态机的例子