LabVIEW 2009递归研究

Part I : Handson

各位安装LabVIEW2009的同学请跟我做以下动作:

1:打开LabVIEW 2009.

[![image](https://f2gz7g.bay.livefilestore.com/y1mVYx9-iHIRHcVhl1R903uSWy0-7PkCqDKWTjNmCB171fHEVJhJmm79IjSw8KMzvYCuM6Z5NBkVimPJR-mpTTYeg90perGOqBtBghB04N9a5TZxdGEpKA43q7B8oH0ZeBmT9DvaqRKUNied1mU6jx0Hg/image_thumb 63232C87.png “image”)](https://f2gz7g.bay.livefilestore.com/y1mJf781TsQY2lMDPJPSS-Ciy9j5BqCKwwYq4up4HegzWdSPRRoK9XmPUSm0MhcjjsGdO3yBFl5o2ZUoHcAEFlDD9Idvou3kEx52H_zGgNN4Qq5OZzivi1JsoCTqmPU_J_g-6lkWGxiRub0O8NdLW8Kxw/image2 7AFEC386.png)

2:Ctrl+N

[![image](https://f2gz7g.bay.livefilestore.com/y1m0ogiAD6Jc2Cbxy3vpUAV6MrpE_K_Dabfar0aXUtgde7OEMLg1Ikyjmx3q6DM4dkzDU_ZVa6Vytc1aN8w4VtsYpBTtJfnyzax9NbFx2nJxlG1Xl3AxOMCDjiSzLGO49ZYdrJkMuRUh4NDF1juq0lLrw/image_thumb2 1A28A6A4.png “image”)](https://f2gz7g.bay.livefilestore.com/y1mqUA4E2HIjdW9Gb3BZtx2IS9OvqufNm9ay5c3yoX7YyZtiExwtvNyKY6zO4IzSS5_hYD1H1mT82bnVU8GrzxlS_AzTvrzEsxkIBloXGJEeXVT03GQDPTy5-7VXeuYh0kU6fKN5Cf7WXnw8gIPYYITWQ/image8 2D5308B1.png)

3:Ctrl+I,按下图配置

![image](https://f2gz7g.bay.livefilestore.com/y1mWhcbcuZQz7gwaAOLMDXl0lxrADAEmDyvRlECQD82oaX6EZrXUYRrfHsVXGO5GeLIRwcnLZvKAYu-BD54k0csbzWE7BjJ2JoQWhEkENXymMMwr49aIlhjK48h_aaq6c4M4AbE7BrVuzcnTQsPSm0VWg/image_thumb4 796A50DA.png “image”)

4:Ctrl+E,选择程序框图,将图标拖到程序框图

![image](https://f2gz7g.bay.livefilestore.com/y1mcDpF6XgX1ChPJouSMEIE3qw8z_IizPqK5nXIwFlwPTl6ctx5Sw4BOgOf6XBGnJ66dpW_iJwhD3q6fWGya3VDTf5jr2lAylB_2U88qUcEnbUvEFn6OVw03NftdN2c39p1nxqkamVlrhq0EH9BIeRwEQ/image_thumb6 708CFF2E.png “image”)

5:Ctrl+R,然后稍等5分钟:

image

恭喜你编写了第一个递归VI并且让他挂掉了。

** Part II : Basic I**

好,我们来玩点实在的,先看看LabVIEW 的例程:

image

Demo Recursion

Recursion

在LabVIEW以前的版本只有类才能使用递归,不过现在已经比较成熟,普通的VI也可以递归了。

注意事项正如图中注释,我就不多废话。

Part III : Basic I

为了更详细的演示递归,我们请出教科书里的经典例程汉诺塔。

首先附赠一个汉诺塔小游戏:

image

hanoi tower

附赠小游戏汉诺塔下载:

(LabVIEW2009)

#include <stdio.h>
void hano(int n,char a,char b,char c)
{
    if(n==1) 
        printf("t将%d个盘片从%c移动到%cn",n,a,c);
    else {
        hano(n-1,a,c,b);
        printf("t将第%d个盘片从%c移动到%cn",n,a,c);
        hano(n-1,b,a,c);
    }
}
main()
{
    int n;
    printf("输入将要移动多少个盘子n:");
    scanf("%d",&n);
    printf("递归结果:n");
    hano(n,'x','y','z');
} 

然后我们来看看LabVIEW里面如何实现这个算法:

![auto hanoi tower](https://f2gz7g.bay.livefilestore.com/y1mprygHzelJggiWKEkuwsSFY4M5mNbiguBIY5D7W2O9OD5HWZEsrxZuv2G5dv0Xm0gKLPXG60Tm1TqkTvBTIdvpxXoYjKlQG6JepC8a0f9Q4pOsO7iWMu1mKv7QYUrD0oWkuV2bYUM7tVMWd4Y0Wtbnw/auto hanoi tower[2].png “auto hanoi tower”)

主程序调用算法,然后演示步骤。

auto hanoi tower recursion

递归调用算法。

Quit Recursion

当然不要忘记设置退出递归的条件。

源代码下载

[auto hanoi tower demo.7z](https://f2gz7g.bay.livefilestore.com/y1mzRAxsj5doJkMoW9WmdSPEQ3iq-X2OaTxJbPM4puKlPm79rh8T6O4U2h3pG8ZBzN8D6gzvsqrP-Sga8PVoRgSpxoLS5mprGxbuzJ3iO-ta5ZzyiZVb0tZ8eG5p_fnTbMme4M5-aBWVFHDog-XemQRKg/auto.hanoi.tower.demo.7z)
(LabVIEW2009)

Part IV : Advance I

到底递归有什么用呢?我们来看一个实用一点的工具:VI图标提取器

image

主程序:

output vi icon

递归代码

enum vi icon

源目录

image

输出目录

image

Part V : Advance II

另外程序里附赠了一个利用LabVIEW自带的枚举函数写的同功能VI,大家可以看看,这个是可以枚举llb的。

labview recusion path

[Recursion VI Icon.7z](https://f2gz7g.bay.livefilestore.com/y1mnRGuf_j3Gb5TpKVjOD5CxZ8UBELgZPqY3gZOVgWHl5DBflI0ZjbDuo1EUl-risW3uaQ7wgUlVRHJIDQ_ypyOhRQddP40jPnRG5uEJ1q_4sGMc7lSHn84388p379VGkZgLTFRvZ--1OjwUlAVXTMCtA/Recursion.VI..Icon.7z)

最后总结一下递归要注意的事项:

1:真的有必要用递归么?

2:你的程序能否正常退出递归?

3:递归的过程是无法直接调试的,有没有好的办法保证VI按照我们的预期执行?

如果这三个问题都能保证,恭喜你,你可以使用递归来提高你程序的效率了。

[代码分享]将Excel报表转换为PDF

有的时候我们往往不希望操作人员能修改生成的报表,转换为PDF就是一种不错的解决办法.

http://decibel.ni.com/content/docs/DOC-4552

这就是一种不错的方案,不过需要安装一个软件才行。

其实Office2007SP2自带了转换为PDF的功能,调用的代码如下:

xls2pdf

拖到LabVIEW2009里面可以转换为代码。

Msdn的例程:

http://msdn.microsoft.com/en-us/library/bb407651.aspx

NI 驱动下载一览表

第一项 NI Device Driver CD,现在可能叫Device Driver DVD更好一些。

目前最新版2009年8月驱动下载地址:

ftp://ftp.ni.com/support/drivercd/2009.08/dcd-aug09-1.exe

ftp://ftp.ni.com/support/drivercd/2009.08/dcd-aug09-2a.exe

ftp://ftp.ni.com/support/drivercd/2009.08/dcd-aug09-2b.exe

三个包下载完毕以后依次解压即可。

通用下载地址(包含所有版本):

ftp://ftp.ni.com/support/drivercd/

第二项 高精度温度记录仪驱动,NI 435x系列驱动。

目前最新版 NI 435x 2.5.2下载地址:

ftp://ftp.ni.com/support/NI-435x/2.5.2/NI435X252.zip

通用下载地址:

ftp://ftp.ni.com/support/NI-435x/

第三项 NI同步板卡驱动,NI 665x系列板卡驱动。

目前最新版 NI Sync 3.1下载地址:

ftp://ftp.ni.com/support/softlib/Timing_Sync/3.1/NISync310.zip

介绍页面:

http://joule.ni.com/nidu/cds/view/p/id/1367/lang/zhs

Readme:

http://ftp.ni.com/support/softlib/Timing_Sync/3.1/readme.htm

所有版本下载地址:

ftp://ftp.ni.com/support/softlib/Timing_Sync/

第四项 NI低噪音放大器驱动,对应NI 5690板卡。

最新1.0.6下载地址:

ftp://ftp.ni.com/support/softlib/RF/NI-5690/1.0.6/NI5690106.ZIP

所有版本下载地址:

ftp://ftp.ni.com/support/softlib/RF/NI-5690/

第五项 NI中频收发器驱动,对应NI 564x系列板卡。

最新1.3下载地址

http://ftp.ni.com/support/softlib/RF/NI-5640R/1.3/NI5640R130.zip

所有版本下载地址:

ftp://ftp.ni.com/support/softlib/RF/NI-5640R/

第六项 PXI控制器驱动:

Trigger Bus,Watchdog driver(8130 for Vista/Server2008/7/Server2008R2 64bit/32bit)

[ftp://ftp.ni.com/support/pxi/pxie-8130/PXIe-8130%20Peripherals%20(VISTA).zip](ftp://ftp.ni.com/support/pxi/pxie-8130/PXIe-8130 Peripherals (VISTA).zip)

其他:

ftp://ftp.ni.com/support/pxi/

第七项 流盘驱动:

http://digital.ni.com/public.nsf/allkb/5D08C51AF3C748BD86257560000F7E44

8264

http://digital.natinst.com/public.nsf/$CXIV/ATTACH-AEEE-7EUTDK/$FILE/HDD-8264_Version_2.20.0.32_XP.zip

http://www.lsi.com/storage_home/products_home/internal_raid/megaraid_sas/megaraid_sas_84016e/index.html?locale=EN&remote=1

8263

http://digital.natinst.com/public.nsf/$CXIV/ATTACH-AEEE-7EUTDF/$FILE/HDD-8263_Version_v2.2_XP.zip

http://www.highpoint-tech.com/USA/bios_rr2310.htm

WE DO THE 3RD POWER OF X RIGHT(2)+LabVIEW Unit Test Framework Toolkit 1.0试用

上回我们说到茴香豆有四种写法X的立方已经有四种办法可以搞定,下面我们来看看更多得办法~

使用公式节点也可以

image

M脚本也可以

image

微软的.NET也可以

image

如果我们都使用同样的算法,到底这几种接口有没有不同,那种效率更高呢?

我们还是用事实说话:

首先有请 LabVIEW Unit Test Framework Toolkit 1.0 for LabVIEW 8.6.1

image

安装好以后我们就可以对LabVIEW VI进行自定义的测试了

image 

我们来回顾一下程序代码这里我把循环次数都变为控件

image

然后新建一个测试

image

配置输入和输出参数

image

别忘了在工程里面配置一下报表

image

image

点击运行测试就可以让LabVIEW替我们干活了

image

image

大功告成~

image

我们来总结一下~

  Use LabVIEW Power Function Use Expression Node with Power Function Use Formula Node with Power Use M Script with Power Use Dot NET Power
Calculating Time(ms) 0.0004777 0.0004948 0.0005344 0.1214 0.925

 

从表格和下图可以看出**LabVIEW的原生节点和框图效率都还不错,使用外部接口和脚本时效率较低。**

image

另付LabVIEW Unit Test Framework Toolkit的测试报告:

The 3rd Power of X

Time: 2009-3-27 14:54:04
Operator: lhb
Operating System: Windows NT 5.1
LabVIEW Version: 8.6.1 (en)

Test Summary

0 Test Errors
0 Tests Failed
0 Tests Skipped
5 Tests Passed
Time elapsed: 00:00:36

Test Results

Failed

None.

Passed

Test Name Test Location VI Name Test Cases Duration [s] Code Coverage [%] Requirements
[Use LabVIEW Power Function.lvtest](#Link0) My Computer/LabVIEW Block Diagram Use LabVIEW Power Function.vi 1 5.77 100.0  
[Use Expression Node with Power Function.lvtest](#Link1) My Computer/Expression Node Use Expression Node with Power Function.vi 1 5.91 100.0  
[Use Formula Node with Power.lvtest](#Link2) My Computer/Fomula Node Use Formula Node with Power.vi 1 6.20 100.0  
[Use M Script with Power.lvtest](#Link3) My Computer/M SCRIPT Use M Script with Power.vi 1 2.03 100.0  
[Use Dot NET Power.lvtest](#Link4) My Computer/Dot NET Use Dot NET Power.vi 1 1.77 100.0  

Test Details

1. My Computer
1.1. LabVIEW Block Diagram
1.1.1. Use LabVIEW Power Function.lvtest

VI Under Test: C:Documents and SettingslhbDesktopInterface TestUse LabVIEW Power Function.vi
Result: Passed
VI Timestamp: 2009-3-27 11:59:53
VI Revision: 10
Test Started: 2009-3-27 14:53:27
Test Duration: 00:00:06
Code Coverage: 100.0 %
Setup VI:  
Teardown VI:  

  1. Test Case 1: Passed**1.2. Expression Node

1.2.1. Use Expression Node with Power Function.lvtest
**

VI Under Test: C:Documents and SettingslhbDesktopInterface TestUse Expression Node with Power Function.vi
Result: Passed
VI Timestamp: 2009-3-27 11:59:53
VI Revision: 6
Test Started: 2009-3-27 14:53:33
Test Duration: 00:00:06
Code Coverage: 100.0 %
Setup VI:  
Teardown VI:  

1.3. Fomula Node
1.3.1. Use Formula Node with Power.lvtest

VI Under Test: C:Documents and SettingslhbDesktopInterface TestUse Formula Node with Power.vi
Result: Passed
VI Timestamp: 2009-3-27 13:56:38
VI Revision: 12
Test Started: 2009-3-27 14:53:40
Test Duration: 00:00:06
Code Coverage: 100.0 %
Setup VI:  
Teardown VI:  

1.4. M SCRIPT
1.4.1. Use M Script with Power.lvtest

VI Under Test: C:Documents and SettingslhbDesktopInterface TestUse M Script with Power.vi
Result: Passed
VI Timestamp: 2009-3-27 14:19:42
VI Revision: 11
Test Started: 2009-3-27 14:53:58
Test Duration: 00:00:02
Code Coverage: 100.0 %
Setup VI:  
Teardown VI:  

1.5. Dot NET
1.5.1. Use Dot NET Power.lvtest

VI Under Test: C:Documents and SettingslhbDesktopInterface TestUse Dot NET Power.vi
Result: Passed
VI Timestamp: 2009-3-27 11:59:53
VI Revision: 12
Test Started: 2009-3-27 14:54:01
Test Duration: 00:00:02
Code Coverage: 100.0 %
Setup VI:  
Teardown VI:  

WE DO The 3rd Power of X RIGHT(1)

我们常常有这样一个错觉,在LabVIEW里面使用文本性的代码往往执行效率不如原生的框图高,究竟是不是这样呢?

我们可以看看下面这个例子,如何才能最快的在LabVIEW里计算出X的三次方:

首先我们看看几种计算立方常用的办法(对啦,茴香豆有几种写法啊?)

1:LabVIEW math选版的幂函数VI

image

2:表达式节点的power函数

image

3:用乘法VI连乘(简单好用就是硬道理)

image

4:对啦!连乘而已,表达式节点一样能搞定

image

为了测试出到底每种花了多少时间,我们首先记录下算法计算100,000次所花的时间,然后为了消除单次计数的误差,我们循环100次然后平均,最后得出每种算法花费的时间。

image

下面是程序运行的结果,为了保证不互相影响,所有VI都提前打开并运行一次,以确保内存都已分配,结果如下图

  连乘 幂运算
公式节点 28.84 50.8
框图函数 34.4 49.55

 

image

可以看出来,**LabVIEW 执行文本代码和框图代码效率基本相同,而且改进算法的影响要远远大于代码的表现形式。**

附程序执行截屏一张,大图杀猫!

image

LabVIEW 图标编辑器相关技巧两则

 

1. 在LabVIEW 8.6下安装图标编辑器报错的解决

下载的安装包直接运行会提示以下错误

clip_image002

clip_image004

clip_image006

重启后打开图标编辑器闪过新界面后还是原来的编辑器。

clip_image008

以下是解决方案:MASScompile整个目录

clip_image010

clip_image012

clip_image014

再次安装即可正常使用

clip_image016

2. 批量获取新图标

1)浏览到合适网页,选择另存全部网页.

clip_image018

clip_image020

clip_image022

clip_image024

这时候我们就有了大量的新图标,不过透明的部分在不支持alpha通道的软件(LabVIEW、画图等)里会显示黑块。

clip_image026

2)此时合该祭出PS

clip_image028

我们以PS化之

clip_image030

3)打开一个图标,打开动作面板,我们新建一个动作

clip_image032

clip_image034

然后另存为PNG

clip_image036

clip_image038

[clip_image032[1]](http://lhb5883.files.wordpress.com/2009/02/clip_image0325b15d5b25d.jpg)

关闭GIF文件后结束动作录制。

使用文件菜单下批处理,配置好输入输出目录静待PS发威。

clip_image040

4)然后我们打开PNG,再建一个转换背景的动作

clip_image042

clip_image044

首先更改颜色到RGB模式

clip_image046

然后添加背景

clip_image048

最后保存关闭,结束录制

clip_image050

再批处理一次

clip_image054

clip_image052

5)最后复制到相应路径下即可使用

image

LabVIEW 正则表达式应用

在传统的文本式编程里,最常用的字符串处理方法就是正则表达式。在LabVIEW里面,虽然也提供了大量的文本处理函数包括查找替换等等,供我们处理字符串。

image

不过LabVIEW里面也提供了正则表达式这一强大的工具:

image image image

 

下面我们看看这个例子,将输入字符串的数字、冒号、小数点保留,其他字符去掉。

使用Case结构和字符串函数:

image

image 

然后可以看看用正则表达式实现:

image

image

可以看到正则表达式是一个非常强大的工具。推荐两篇文档可以看看

正则表达式30分钟入门教程

[http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm](http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm "http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm")

Introduction to Regular Expressions(MSDN)

[http://msdn.microsoft.com/en-us/library/28hw3sce.aspx](http://msdn.microsoft.com/en-us/library/28hw3sce.aspx "http://msdn.microsoft.com/en-us/library/28hw3sce.aspx")

LabVIEW 程序下载:
[http://cid-866b8f96a2761bbe.skydrive.live.com/embedrowdetail.aspx/Public/regular.zip](http://cid-866b8f96a2761bbe.skydrive.live.com/embedrowdetail.aspx/Public/regular.zip)

如何加速FPGA开发?

NI LabVIEW FPGA模块提供了一个非常方便的接口供我们以LabVIEW图形化的方式开发FPGA程序,不过也有令人困扰的问题就是LabVIEW FPGA代码编译的速度较慢,如果机器的配置不够高就是一件折磨人的事情。

所以今天给大家介绍几个小技巧:

1. IPnet

对于LabVIEW开发者,最常用的就是范例查找器这个工具,俗话说得好:“有范例,无问题。”

对于FPGA,还有一个非常好的工具:

LabVIEW FPGA IPNET

[http://zone.ni.com/devzone/cda/tut/p/id/6870](http://zone.ni.com/devzone/cda/tut/p/id/6870 "http://zone.ni.com/devzone/cda/tut/p/id/6870") >

LabVIEW FPGA IPNET是您浏览、领会和下载LabVIEW FPGA函数或IP(知识产权)的一站式资源中心。下表是从LabVIEW FPGA函数调色板、NI内部开发人员和LabVIEW FPGA社区收集的FPGA IP与范例的集合。您应当使用这一资源中心,以获取您的应用所需的IP、下载范例以帮助掌握编程技术和深入探究LabVIEW FPGA平台所提供的IP。除了探究这里所提供的资源外,您也可以通过点击下面的链接,为LabVIEW社区共享您的LabVIEW FPGA IP或者提交您对现有IP的更新。

IP是知识产权的缩写,这里就是指NI FPGA的算法。

2.LabVIEW验证

当我们自己写好一个算法或者我们找到了别人写好的IP以后,为了减少编译后在返工的情况,我们可以在LabVIEW里面验证一下算法是否有逻辑问题。

A:在My Computer新建一个VI把FPGA算法复制进去,然后在My Computer下调试。

B:在建好的VI下修改程序运行的位置。

[![image](https://aftv2q.bay.livefilestore.com/y1mVCBaze_B73nnXu9lsLJpGKuFuUQK1iPmaQjTGIOPRkBGIelNyBG-V47Clnc88V7vkwAFyGV06S0baTjnrPC0gwHv5rW0UKOKmGzZXZ87x_Nmy8CvtRAFbTiNP1CuQ6l8cs-nW8JumGA/image_thumb[1].png "image")](https://aftv2q.bay.livefilestore.com/y1m16CiQX4LAsE9oz0_nT9oAPGaxircpCKDunowiDEkwRpRA8a_dtd1ahoztEJzH2fLqq5VONClJxbx-wJJMajnGrCfGRRqIDe4wDsKqggbfhOSFMOWLVfPRm--pW4RPUSotvSRaw6JaIs/image[3].png)

3.设置Compile Server:

LabVIEW FPGA编译过程是比较长的,并且速度和计算机配置有关,我们可以在一台机器上开发,另一台机器上编译,这样可以节约时间。

首先在服务器端打开compileServer,并确保防火墙开放96端口或者关闭防火墙,

[![image](http://lhb5883.files.wordpress.com/2009/02/image5b65d.png?w=300 "image")](http://lhb5883.files.wordpress.com/2009/02/image5b65d.png) [![image](http://lhb5883.files.wordpress.com/2009/02/image5b175d.png?w=300 "image")](http://lhb5883.files.wordpress.com/2009/02/image5b175d.png)

然后在客户端LabVIEW工具菜单下打开FPGA Module Option,点击Configure按钮,在Machine下输入服务器IP地址,点击OK保存,这样在编译FPGA时就会调用服务器进行。

[![image](http://lhb5883.files.wordpress.com/2009/02/image5b125d.png?w=279 "image")](http://lhb5883.files.wordpress.com/2009/02/image5b125d.png) [![image](http://lhb5883.files.wordpress.com/2009/02/image5b165d.png?w=300 "image")](http://lhb5883.files.wordpress.com/2009/02/image5b165d.png)

 

附 FPGA代码的编译过程:

首先将LabVIEW 程序框图转换为临时文件,然后传输到编译服务器生成和优化VHDL代码,最后编译为bitfile供下载到FPGA执行。

其中最耗时就是LabVIEW生成VHDL这一步,因为从图形化代码到逻辑电路关系的翻译需要大量的运算,除此之外还要为FPGA芯片优化,提高执行效率,这样就导致要花费较多的时间。

不折腾——如何在LabVIEW中实现LED数码管显示效果

clip_image002

数码管是一种非常常用的元器件,适合用于数字的显示,在LabVIEW中我们可以有多种方式折腾出这种效果:

第一种:不折腾——改变字体

LabVIEW默认使用系统的应用程序字体,我们也可以使用其它字体来自定义控件。

clip_image004clip_image006

这是一个使用DigifaceWide字体的Numeric控件效果,不过前提是系统有这种字体才可以正常显示,如果要发布到其他机器需要将字体文件复制到Windows文件夹的Fonts目录。

clip_image008

第二种 折腾不——自定义控件

图示是一个LED数码管的段码图,每一段都有亮和暗两种状态,通过不同的组合实现表示各种数字,因此我们可以用布尔控件和簇控件实现该效果。

clip_image010clip_image012

在NI Vision开发软件里就提供了这种簇控件,我们也可以自己实现。

但是比较麻烦的是我们每次用这个空间都需要把数字转换为布尔量序列。

第三种 不,折腾——使用XControl

这个和第二种办法差不多,不过一劳之后我们就可以永逸了

首先先建立一个XControl

clip_image014

然后在Façade加入转换代码

clip_image016

clip_image018clip_image020

然后就可以在程序里调用了:

clip_image022 补上[相关文件](http://cid-866b8f96a2761bbe.skydrive.live.com/self.aspx/Public/xcontrol led.zip):

LabVIEW Simulation module与第三方模型(AMESim)的互联性

 

安装要求

LabVIEW的版本为:8.2, 8.2.1, 8.5 (当前版本为8.5)并需要安装RT(实时)和CDS(控制设计和仿真)模块。

需要支持LabVIEW Cosim Interface的license.dat(由LMS公司提供,放置在D:AMESimv800licensing目录下)。

需要安装Microsoft Visual C++ 6.0以上版本(英文版)。

操作系统必须为为Windows。

许可配置

AMESim的许可配置及编译器的选择(微软VC++编译器)

实时目标机许可配置:

将rttargetslicenses.h 文件(由LMS提供)放置于D:AMESimv800interfaceslabview目录下即可。

AMESim模型准备

1.新建一个AMESim模型,并创建接口如图所示:

clip_image002

然后,在接口对话框中的‘Type of Interface’下拉菜单中选择LabVIEW Simulation Module,设置input和output的个数,并逐一对每个input和output进行定义:

clip_image004

点击‘OK’之后就会生成LabVIEW的接口模块。

2.将接口模块与AMESim模型的其余部分相连接

clip_image006

点击‘parameter mode’(参数模式),AMESim会用VC编译器编译模型,并在工作目录下生成和模型相关的dll文件。假设该模型名为labviewAMERT.ame,则该dll文件名为labviewAMERT_.dll。

clip_image008

这个dll文件可通过LabVIEW的External Model Interface模块加载到LabVIEW中,用于支持Windows环境下与LabVIEW的非实时偶合仿真。

准备LabVIEW 仿真VI

LabVIEW 环境配置:安装LabVIEW8.5和RealTime(实时)、Control Design and Simulation(控制设计仿真)模块,安装完成后应如下图所示:

clip_image010

找到并起动与LabVIEW的插件Simulation Module中的External Model Interface相关的模板vi。在版本8.5中,该例子为bouncingball.vi,位于C:Program FilesNational InstrumentsLabVIEW 8.5examplessimulationExternal Model InterfaceBouncingBall目录下,

注意: 要选择’indirect feedthough’的那个,而不是’direct feedthrough’的那个,否则无法正常运行。

clip_image012

根据模型的具体细节配置External Model Interface Node

clip_image014

的各个端口,主要包括输入clip_image016输出clip_image018端的配置,

指定AMESim生成的dll文件clip_image020

设置后得到完整的vi,及虚拟控制面板:

clip_image022

clip_image024

保存并关闭LabVIEW,在AMESim中重写文件,强制编译(确保被调用的dll文件能够反映模型的当前设置)并从AMESim中启动LabVIEW VI。

注意:AMESim要处于参数模式下

clip_image026

clip_image028

clip_image030

clip_image032

clip_image034

在虚拟控制面板中点击‘运行’,即可实现软件在环(Software-in-the-loop),即随意操作输入控制信号,可以看到输出响应的变化,该响应来自于AMESim生成的dll被调用后得到的结果(这个dll文件包含了物理模型的数学方程)

clip_image036

生成目标机需要的实时dll文件

当前四步正常完成后,即可在AMESim界面下生成目标机所需要的实时dll文件。

clip_image038

注意:实时平台的选择要选’LabVIEW SimModule x86:obj’,点击generate。

 clip_image040

此时,在工作目录下面,就会生成一个目标机所需要的实时dll文件。假设你的AMESim模型名为labviewAMERT.ame,则该dll文件名即为labviewAMERT.dll(不带下划线_)。

注意:在目标加载的过程中不要关闭AMESim,并要保证其处于run模式下,等到上传dll文件完毕后再关闭。

在LabVIEW vi中加载实时的dll文件并生成实时目标代码

上传DLL:打开MAX,选择目标机——右键——文件传输,将labviewAMERT.dll上传到/ni-rt/startup/目录下。

clip_image042

clip_image044

clip_image046

在LabVIEW中定义目标机,并将要生成实时代码的vi及dll文件拖放到该目标机的项目下

clip_image048

clip_image050

clip_image052

上图为对应的vi程序框图,上上图为程序界面。

点击运行即可进行实时仿真。

发布RT程序

其操作如下:右键点击目标机project下的Build Specification,选择‘Create new real-time application’,并作如下设置:

clip_image054

clip_image056

点击Build

clip_image058

通过右键点击My Real-time application,选择Deploy,即可将代码导入到目标机上。

[clip_image048[1]](http://byfiles.storage.msn.com/y1p_D3SqJR9TR3TTG8NyHNAFegWkwhCHAWYLfGVG7OOyGZ1IjC6OPpK53bFmvaxhs0nLfsJnUyXxt0?PARTNER=WRITER)

最后,即可在虚拟控制面板中运行并控制目标了。