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)

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

LabVIEW 8.5的Timed Loop优先级及双核处理器支持

 

Timed loop是LabVIEW 7引入的一个新VI,目的是为了提供具有确定性周期的定时方法。在LabVIEW 8里面又增加了Timed Sequence VI使我们编程更加灵活。不过随之而来也给我们使用造成困扰。

clip_image002

clip_image004

从上面两个图可以看出来Timed Loop和Timed Sequence的参数非常的多,很容易把人搞糊涂。所以就介绍一下主要的几个参数:周期,优先级,处理器分配。

周期Period (dt):

这个是Timed Loop专有的一个参数,指定循环的周期,作用和普通循环里放Wait[![clip_image006](http://byfiles.storage.msn.com/y1plQtNYHsRGl1GA1JOS9lLrlrTovEnvwhA63M5ptwHxPE7xlzLzahosrUwKKFHH5SV?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p3g1I9FEARVkht004Ovpn_CaHJS_z0abLpmuQz0vD544c8zt-kbUqXUoTSO-DFmxh?PARTNER=WRITER)是一样的,定时循环内的代码执行完毕以后会自动释放CPU时间供其它代码执行。

[![clip_image008](http://byfiles.storage.msn.com/y1pHWwtwZtFiNzczLTU1Pe5VuSRezX2fp4nPME0PjuTsXhIr4xZgHLzUOMVP4cnMeQ4?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p_5yQRnvPhM1veaUMfyWTLXKIxFv03jKdiKSl8LGNjJ2ifi6FjkdJKEnSDCOxMgmO?PARTNER=WRITER)

[![clip_image010](http://byfiles.storage.msn.com/y1p9SxAcpOPNa6WsxjLflinwQcGQOcPYo9H2rnwt7Co67AMnFwwgRB9Du33sB0cFxvl?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p2anbNOAzsZXIpKmZPtJahVCKaP2AynAcSXvf8Kqwswd84Z88Zdb2bwcpWIgEtt1Z?PARTNER=WRITER)

假如将循环周期占满则不会给低优先级程序运行,

[![clip_image012](http://byfiles.storage.msn.com/y1pK9OhVcxUho-FnydU7P2uLjwktIjH7BqQYxHzBK2Uo6xAF4Zp6yqLj99QCp8c1XFu?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pWYrElLUaWegCA5efKAxgzTM_GpoKdLsgT29Tq0T6iZui3eW-8TkztkS16hSy5ii6?PARTNER=WRITER)

[![clip_image014](http://byfiles.storage.msn.com/y1pOtJWC7xw-zRbzRCLfTtxcfCjBk-sL682Vasowf4gGjDVIc2qJi4xPqIPVgy1sdoy?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pyEvVmGtvcMbvc7q1WnAK4QJFrGoH7wZH6HD8dPSOy6sYGjmTUg7N4BwyNyPtFID7?PARTNER=WRITER)

注意要取消这两项钩选以确保不会将剩余时间放弃。

[![clip_image016](http://byfiles.storage.msn.com/y1pPML6MyHGFZz6-vvCfnoxHxUSgD5VTAHjUZgq6aUXLsqQXRLQUda-n70mSaQHPxSO?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pGXeQXo_vtM3eJqvn1txMr7vF35lC0ZmFjmxlaETJpM4RJp7I6syIK5b4tS_v0t4T?PARTNER=WRITER)

也可以将周期设为零这样就不会自动释放CPU了。

[![clip_image018](http://byfiles.storage.msn.com/y1p6KaeOHKZhHkURt_fdHLXJkeh7nSJuLiMJ4rddmmv--Tk-sUGApUIUashNbi7qOOO?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pWKf9tbw56dOhFS6BbXicgZO890x-ZzL3YS7fgXFiRHAgJfm-6SUfOCdy56IY5m3R?PARTNER=WRITER)

[![clip_image016[1]](http://byfiles.storage.msn.com/y1p8lnU9kUWGm8k52PTqyQ2-fVOXKa5q6UreYuY8G2DeNvSaNKtFb_bznH1hxhX5Hw2?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pJPZ1KHIMu_xVEvy343JDzK-2WtHtfd4j3lYcOIeEN7-5ZkwfTZE1ti59Koex9FZD?PARTNER=WRITER)

** **

优先级 Priority:

这里容易和Windows的优先级相混淆,所以先介绍一下windows的优先级概念。

对于NT内核系统都属于抢先时多任务操作系统。抢先多任务功能是由操作系统内部的调度器(scheduler)实现的,所谓抢先多任务就是CPU时间被分为一个个时间片, 调度器将时间片分给当前优先级最高的线程(thread ), 一旦有更高优先级的线程就绪,就马上抢先正在运行的线程,如果有多个优先级相同的线程,调度器把它们排队,先执行队头的线程,执行过的则放到队尾。线程的优先级范围从0(最低)到31(最高)。当你产生线程时,并不是直接以数值指定其优先级,而是采用两个步骤。第一个步骤是指定“优先级等级(Priority Class)”给进程,第二步骤是指定“相对优先级”给该进程所拥有的线程。

进程优先级等级共分为四等

“idle”等级只有在CPU时间将被浪费掉时(也就是idle time)才执行。该等级最适合于系统监视软件,或屏幕保护软件。

“normal”是默认等级。系统可以动态改变优先级,但只限于“normal”等级。当进行变成前台,线程优先级提升为9,当进程变成后台时,优先级降低为7。

“high”等级是为了满足立即反应的需要,例如使用者按下Ctrl + Esc时立刻把工作管理器(task manager)带出场。

“realtime”等级几乎不会被一般的应用程序使用。就连系统中控制鼠标、键盘、驱动器状态重新扫描、Ctrl + Alt + Del等的线程都比“realtime”的优先级还低。这种等使用在“如果不在某个时间范围内被执行的话,数据就要遗失”的情况。这个等级一定得在正确评估之下使用,如果你把这样的等级指定给一般的(并不会常常阻塞的)线程,多任务环境恐怕会瘫痪,因为这个线程有如此高的优先级,其它线程再没有机会被执行。

LabVIEW以及我们所编写的VI一般都属于normal级,驱动程序才属于high级。

另外对于XP来说realtime级并不是真正的实时,因为并没有给出时间上确定性的指标。对于CE来说其内核的realtime级才是真正的实时,可惜我们的LabVIEW还写不了CE上的RT程序。

对于线程优先级每一级来说又有7级优先级供调整

[![image](http://byfiles.storage.msn.com/y1pBR3ZF1casLTzP5QcaqUUvlfBKXJ6h2hqJ2XJf8k0GBXQaoS8zNdFG3MmCVIG83AR?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pM4-vL0bRF9rPmQ_tpDka9FMcfMvhQhL_7AgzlpYca7CucvJ4IIn9FxlHsWkgX6eP?PARTNER=WRITER)

我们在任务管理器里只能调整六级

[![clip_image020](http://byfiles.storage.msn.com/y1psFlSUT2h-e_jDbkcuUjC0-cZFjbSLzGH4x9G_705GUmxJZJpxdvfb2T6CfJLdG0Y?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pyMfm-9Dg36pLgmc4Y6ePnEFaweG9gobeJ5-nyIEC6-X3lCS1gtXNbSFAx24Yua7x?PARTNER=WRITER)

在LabVIEW里面对于进程是5级加一个子程序

[![clip_image022](http://byfiles.storage.msn.com/y1pOS0AvSorQNfT5_eH5zVmkC07cZ2iShEocrwBB35MKRdpH3QLwoLc0LeYy_jaKvt_?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p9n4lOnHf5OWkZ3W9DrWkuooQYXGfBBICj8SX9Ip8CmqiepZiK8gVK3_5BVm-FEP0?PARTNER=WRITER)

这个可以设置VI在那个线程里执行

[![clip_image024](http://byfiles.storage.msn.com/y1p1hshgW6kLFomKwGk-W2BUOkNCqXOpn-y3pY2F6jXAcXz-hieSP9Wij2K2WaFmMC-?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pUvll-e0ThEJKCQ1WxiIkUphVHnuB2GRBhRyKqj4l5OCuYGzWuiYWPahyDOeEwfco?PARTNER=WRITER)

对于代码,LabVIEW可以设置Timed loop和Timed sequence的优先级,这里的优先级应该和windows优先级不同,由LabVIEW管理,可以设置从0~65535的任意值。

[![clip_image026](http://byfiles.storage.msn.com/y1pOiaDeEpSrpxCGw2KwpbL_gSF6f1JG2jfZXDv4195CdOOMXxvBs_1J3w5tN4zn3WH?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pG5mOEvQGefKEyx7LSErsbktV-fEVqNqTMHmziN2KEj91CTykJM_EYjvUlYE61Mg2?PARTNER=WRITER)

** **

处理器分配 Processor Assignment:

下面是LabVIEW帮助里面的介绍:

在多核编程中使用定时结构

多核编程指一台计算机有两个或两个以上的处理器,每个处理器能同时运行一个单独的线程。而多线程应用程序能够同时在多个处理器上运行多个单独的线程。LabVIEW 5.0是第一个包含多核编程的LabVIEW版本。LabVIEW 5.0对用户界面线程与执行线程进行了区分。程序框图在一个或多个线程中执行,而前面板在另一个线程中进行相应更新。操作系统将对各线程进行抢占式多任务处理,即首先将执行时间分配给执行线程,其次分配给用户界面线程,依此类推。

定时循环和定时顺序结构的处理器输入端允许以手动方式分配用于执行结构的处理器。通过将输入值连线至结构或帧结构中输入节点的处理器输入端,可以配置如何分配处理器。 (Windows) 在配置定时循环、配置多帧定时循环、配置下一帧定时和配置下一次循环对话框的处理器分配部分,可配置处理定时结构的处理器。

如加载了来自前期版本LabVIEW中的VI并且其中含有定时结构,默认情况下,处理器输入端将被设置为0,其中0表示系统中第一个可用的处理器,在前期版本的LabVIEW中,所有的定时结构都自动运行于处理器0。

上面这段话里面“LabVIEW 5.0是第一个包含多核编程的LabVIEW版本”准确地说应该是包含多线程编程的版本,能充分利用双核技术的还是只有LabVIEW8.5。对于优先级可以看出LabVIEW的优先级有两级,一级是Windows管理的线程优先机,另一级是LabVIEW管理的代码优先级,虽然不知道LabVIEW那一级是如何实现的,不过优先级高的优先执行这个原则应该是不变的。如果要将LabVIEW程序迅速修改为单核运行,可以将程序另存为8.2版本。

如果你使用双核CPU,在windows的任务管理器里面就可以对进程进行核心分配:

[![clip_image028](http://byfiles.storage.msn.com/y1pI7HARdcCnimX_SAVqsluNzo4Sa3myihF_DZFCb-Vui_Dfxxrbzdtgoo-sblXhUSx?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1py6WJdt_nZMOGagXue5zFfltGJL_eOb8jA0aB3IIdTC4w6F7nOi0LwPP3ce9moBEI?PARTNER=WRITER)[![clip_image030](http://byfiles.storage.msn.com/y1pQmDWqgkBk6EH-r1wwq-U1Tf1oh9JP1Fb5pqdAt9x_Q1wwYRKrmvP7f3X5nL0rxOY?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pO072HCX7r2ExFgNWRUaI-pFxCv6OyXNqeNnvRVqhxwe-yrpyINlnO4DZm866hCK_?PARTNER=WRITER)

只给LabVIEW分配一个核心的话,程序运行就和单核上跑结果一致。

在LabVIEW 8.5里默认模式是自动分配,由LabVIEW负责分配不同的代码到CPU各个核心上执行,

[![clip_image032](http://byfiles.storage.msn.com/y1p0Zw1SEMc0FtdtcMNegXJaTTJe0madCkrnPlSAYQEEpbd51anzcnwVKSmkBKX6u1n?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pE5wkzcxI14couWkQLNKHhe1-Umx6Dc7L3AzdOgsOTONpSdrdq3UaonLZ-_QWjiGW?PARTNER=WRITER)

也可以手动指定运行代码的核心,输入介于0和255之间的任意值,0代表当前的处理器。输入的数量超过可用处理器的数量时,将导致一个运行时错误且定时结构不执行。

[![clip_image034](http://byfiles.storage.msn.com/y1pGBo3w0cgME8F5Yo-Y-3YCXK8JwHSbLE1zdgQghD2GMyyh2FD867prmy-w2Jt3kaq?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pNnjrlVfDJYssQODeimdqVJ18pMOjopPwTzQnpn1zuHxJDl0jqgjexmgdHOxQxYYR?PARTNER=WRITER)

对于timed sequence结构,可以指定每一帧的处理器

[![clip_image035](http://byfiles.storage.msn.com/y1p8qloU1H2NT0ij5iRfHEo7oc725IfjqF4jX2tmT31Vcgu-j3HAtqIZGq2jdguj6wr?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p6b0zRWml8lPAAJ-W4bezhipjyIUGI6z-bzIhMlGmRI06kgSqsi-df_JLXHc1pRts?PARTNER=WRITER)

在多核执行的情况下程序执行的结果和可能单核的情况下有所不同,因为不同优先级的代码可能同时执行,如果要严格规定程序的执行顺序,可以使用错误簇和数据连线。

[![clip_image037](http://byfiles.storage.msn.com/y1p2LGP9NiwgXjbPp_5iUnrntr90mlNjjm0lHLtkpL_xv_2pzqwvIVjrKfEoAYt_LDQ?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1p2qZUtSNcRTM97N7dj3shbgSDf0eat4uhPlnQMI8xA1NqKEmfLWWsiOai6cFmpLfP?PARTNER=WRITER)[![clip_image039](http://byfiles.storage.msn.com/y1pwJ91E9dNMAyip5qle4tWXbYo9JMFH8wYH5cPyzd7V2umXHikEvOJo3NAts6wMTvz?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1ptDI7UwfVTmFrWNeHh7kfjQYKRZ3hmQ1epRAAE8--wg433F7E2KG1pM6Uhdi3JH69?PARTNER=WRITER)

总结:

LabVIEW 8.5的优先级可以按Windows的优先级理解,优先级高的优先执行,执行完或者释放CPU之后才轮到低优先级代码执行。在多核的情况下低优先级代码可以和高优先级的代码同时执行,因此程序的结果可能和单核情况下不同。一般来说这是有助于提高程序执行效率的,没有必要更改,不过导致错误的话可以按以下办法解决。

解决办法:

1、 让程序以单核方式运行,可以在LabVIEW里指定核心(例如另存为以前版本就是一个很快速的办法),也可以在任务管理器里指定CPU关系到某个核心上。

2、 对于要求固定顺序执行的代码可以通过错误簇和程序连线来保证,使用信号量也是一种解决办法,还有一种办法是全局都指定成一个时钟源,然后在各个结构指定开始时间。

对于Timed Loop有以下几点要注意:

1、 CPU的释放:循环周期的设置,循环内代码如果没有把时间用完,会把剩余时间释放,分配给其他代码。在超时的情况下,如果钩选了保持初始相位也会把从代码结束到下一循环开始之前的时间释放。另外如果有Wait等函数也会释放时间。要想不释放CPU可以将用代码剩余时间都填满(这一点不好做到容易超时),或者将循环周期设为零。

2、 CPU的分配,建议使用自动分配,因为如果核心指派错误代码会不执行。必须要手动分配的情况下,比较可靠的办法是利用代码测出当前计算机CPU数目,然后用不同的CASE处理。

[**Using the GetSystemInfo Function from Kernel32.dll in LabVIEW**](http://zone.ni.com/devzone/cda/epd/p/id/3720)

[![clip_image041](http://byfiles.storage.msn.com/y1pPkvBHzbFvZSrWkwPmWwnis6jFwOMpA2iO-J301JW6uibVlYGxJ7afKd_RmUAXsf8?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pE4cU26qWk7rtt9INEEE3az-2XbwqHE4iYcs3SjjQus4bSikgF5MlVAeQrEjH1ZSC?PARTNER=WRITER) [![clip_image043](http://byfiles.storage.msn.com/y1pJjRrE9W3CN7M9dCotB3PBh0CLcqlNiVRUMbPNb_uX8gn4i10gEgpJ_-EfYcK_A4G?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pj1u2GaoZNLIUb7Q3G6kycO7A-uzjmo1so-eAfDH4q2AC1I9-X4xP9fwzV_2UsSwj?PARTNER=WRITER)

PXI摧残指南

EN终于连PXI都难逃俺的魔掌,灭哈哈哈~

警告:拆解可能会丧失NI的保修、造成硬件损坏、人身伤害等等,请勿随意模仿!本人概不负任何责任!

适用机箱型号:PXI-1042(Q)、PXI-1045、PXIe1062、PXIe1065.

准备工具:NI螺丝刀,一次性纸杯(用于放螺丝)

操作步骤:

A断电并拔出所有板卡及控制器。

[![clip_image002[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFmSSC5p4JjPTphARYJpy4QXxObM6Ic3e76o6j7t-NOJ4Y_9t0Jj3Aef2pEQgfvxOY?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHvEiNYlLuN0-9dji01_vKj3-bvAd-351ODw9fD7pkRH7w6cTum2afpP6UNoCjspdw?PARTNER=WRITER)

B拆卸机箱后部电源的十个螺丝,取出电源模块。将螺丝放到一次性纸杯内。

[![clip_image004[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFMCOYImiUSrvn2E9NIzs-FvpBXRCnBjWsjYZkVwW4qE2nKLtmkAuUkeyzGiEYhdi0?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRG0waWBMCEu5Tit5TVZQEdmal_4UAJnmkBo61nGmQ019bdtcSu7Kjj9nB4y1yXN0zM?PARTNER=WRITER)

一共十个螺丝

[![clip_image006[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFIkpJhb--VnkKfLPbYUhbDgc_rl49WIvPlFpUlnEdalcffHxaSOT13HK1T2YK_RMw?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRGGSCQxmqDUD86QMfDIQ-DM-0ZlMRZaKX8ToFkvRVDWhq8QI4eVkw_tGJdJRjuHVZo?PARTNER=WRITER)

这个是拆掉电源的后视图

c拆卸把手,注意可能需要撬开铁盖。

[![clip_image008[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFhDvMwT-r2BBaSVR6GSR0rrZDu3UUg3esYSFVWR7BcV8Y6wGqKrkfvlpaNzpmIsdE?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFio1GRcmXAed6yx8-tiP1NHdgzpYDBRvQGjifxFb54CLTGWPLdw4XgVc1cYsivFNQ?PARTNER=WRITER)

画圈处可以撬开

[![clip_image010[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuREdOQrKfNYBDZtSCYobaJpo8WI84gim-J6mhly0DPSC-J5VvnmULEmJj8wsaw-UeVk?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHdFWDMQ6kPC6qfiX2dv6fprytZoQXf8ZUEPPzBhzrj7I8E3_CkK1E8DKNfPYiJXZs?PARTNER=WRITER)

一共四个螺丝

d拆卸另一侧的挡板和底座

[![clip_image012[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHELWA-Bclj_tpZZXQ6edrdjRqBNjHGKmIIv2uxaR78zTx3PncXZ1gXBWtpmMf_h_s?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRH1375ZFzpmimioPc5ek-bMvlzrPpMwu9dF0Ichm4gaZPhf8LlmRWjt-GZMofCMWiY?PARTNER=WRITER)

共计四个底座和两个挡板螺丝

E拆卸下机壳

[![clip_image014[2]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRGHU0fvzaX93OEV0lMJCAH0swSqOnibvcKW4cdSs9dfzhFL1wbyxzswJaUXyElNtCM?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRGxRXSs_C6EKU0C5BJew5WzlB0mYINu6bEpkKBKTLJ5i_PUvjrGyZ2HdBRnxGjIEt8?PARTNER=WRITER)

拆开前

[![clip_image016[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFxeehX4EQ-oxxHdu74OqZ87R-A6hLCRD-J9CbNtFa1Ba7ZvADXySYuhGrBDU4dLVs?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHKQB5TkqifJugHK2gRes9qR0PvF9HnWxeHavJb2eNHeLDgAE3uuOwjC0Q5emHvsoA?PARTNER=WRITER)

拆开后

F上下两个机壳都是可以拆卸的,拆掉就可以看到PXI的背板芯片

[![clip_image021[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRF90kz6anQ7otaYtVcS__AW0dTD0JwlCTzTmAmy7uz5RBBPv0EzbBkwck41D98veDU?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFR7fqiuiR_E4K2QYRX1nUX7wR8K9LnvfCSTVX71PlhjhIS02272S-U3AUSOKPY3po?PARTNER=WRITER)

[![clip_image023[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFJyyUsjx6-gQxHLpN4wLobYR19fFZ6KDC1dD9pQzwkxfuhxSiPx13NjesKePwBU-Y?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFtBivQgCGcrgs8YW5JUKqbi7oxbIe9FjaNqjcbtVwtAfQ3ldbUXLmWo7DfmFV_Opc?PARTNER=WRITER)

这两块电路板也可以卸下来,猜测可能是PXI的桥接芯片。

G、PXI插槽是不能拆卸的,已经焊死在背板上了。

[![clip_image025[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRGrCJKvFjHdejX3NFUlirYEDcjBpOHLLzYbUOwH2zCVUmvbXi0CpzIbBzMf8z38kqU?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRFpzV9sYubJRJ-uwZ6DUtQ0pD13IRWwTJt1N3U6X3IaPyOZPOnzJZtc-qfWlCjPh2U?PARTNER=WRITER)

H导轨可以拆卸,并没有使用螺丝固定,只是卡住的。

[![clip_image027[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHVqcBE5t1bT1JubWW_ADCJfm6LIE8pfkECI0AX5vbdSh4MH8yVSICoGd1Y3s4EFEo?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRHjpsni_vN6vz7pbvPEZ5RFBCMYSr_nxrnFQA3_yJyaW9-45uFTxpBCb7-BELZcOGw?PARTNER=WRITER)

I拆解之后的全家福

[![clip_image029[1]](http://byfiles.storage.msn.com/y1pf3H7KtzkuREjA5Ow09ZlRucya7GVzvFM41o22TuhQwMmXLpjGgC3txouPuQ_eH94dp4GxAV6_Vs?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRGUVJWG8DZ6mkInxROQZc3GCMT9itn4SgwIlmllsP5tBX0ctnfQQuWuEhYb5P6kQJ8?PARTNER=WRITER)

cFP摧残指南——串口篇

大家好,继前一段的cRIO摧残系列之后,今天我们要研究的就是NI的另一系列低成本PAC——cFP。

首先我们来看看cFP长什么样子:

20080509(001) 

和cRIO一样,cFP也是由控制器、背版、模块(包括模块和端子)构成。

硬件上的准备包括电源、网线,最好再有一个螺丝刀用来跳线。

首先插上网线通电,然后就是软件配置了。

image

打开MAX之后在远程系统按F5,如果RP不错的话就能看见cFP出现在MAX里。

 image

如果看不到可以尝试把reset IP Address跳线拨到On再reset一下,应该就能看到了。

image

然后配置一下网络地址,DCHP比较方便,手动设置灵活一些,看自己的喜好,不过不要忘了把reset Ip关掉。

下一步打开cFP上的安全模式安装软件。

image

为了能在LabVIEW里面使用cFP,需要安装软件,推荐使用最新的LabVIEW /RT 8.5.1+NI Device Driver 200803,可以直接选择预制好的软件包。

image

为了能使用串口,请确保安装NI Serial和NI-VISA。

image

接下来的工作就要在LabVIEW下进行了:

image

新建一个LabVIEW RT工程,基本上一路下一步:

image

image

image

这里要选择一下target

image

image

然后LabVIEW会自动替你把cFP的资源都添加进去,还替你生成了基本的程序架构。

image

下面我们就看看如何使用cFP的串口,比较诡异的是你虽然在MAX和LabVIEW工程里面都看不见串口,不过你确实可以使用它(囧rz)

这个是NI网站上的资料:

FP-2000, FP-2010, FP-2015, cFP-2000 cFP-2010 cFP-2020 cFP-2020
Port Type COM1 (RS-232, DTE) COM1 & COM2 (RS-232, DTE) COM1, COM2, & COM3 (RS-232, DTE) COM4 (RS-485, DTE)
Baud Rate 110 to 115200 bps 110 to 115200 bps 110 to 115200 bps 110 to 115200 bps
Data Bits 5, 6, 7, 8 5, 6, 7, 8 5, 6, 7, 8 5, 6, 7, 8
Stop Bits 1, 1.5, 2 1, 1.5, 2 1, 1.5, 2 1, 1.5, 2
Parity Odd, Even, Mark, Space Odd, Even, Mark, Space Odd, Even, Mark, Space Odd, Even, Mark, Space
Flow Control RTS/CTS, XON/XOFF, DTR/DSR RTS/CTS, XON/XOFF, DTR/DSR RTS/CTS, XON/XOFF, DTR/DSR XON/XOFF
Wire mode 2-wire 2-wire 2-wire 4-wire

我这里用的是2120,参数就按下图来配置的

image

接收端使用Windows自带的超级终端,注意串口属性要和cFP这端匹配

image

程序在cFP上运行以后就会出现这样的结果:

image

当然读取也是一样的

image

在超级终端输入后就可以读回来,不过要注意的是超级终端是看不到自己输入的字符的。

image

cRIO摧残记(下)——FPGA篇

同志们,在本人的无良拖稿之下大家期待已久的cRIO摧残记终于迎来了下篇,真是可喜可贺啊~撒花庆祝!

在MAX里面的配置请查看这里 下面我们直接从LabVIEW开始:

首先确认你安装了以下或更新版本软件:

LabVIEW 8.5、LabVIEW RT ETS 8.5、LabVIEW FPGA 8.5、NI RIO 2.4、NI Device Driver 200803,

这是本人所安装的软件:

image

建议安装好以后用LabVIEW把安装目录Mass Compile一遍。

打开LabVIEW 8.5,新建一个FPGA工程:

image 

选择FPGA目标类型:

image

确认cRIO已经配置好:

image

如果一切正常的话应该这样:

image

这里要选discover

image 

这样就会列出cRIO里面所有的模块:

image

这个向导我已经介绍过了,这次就取消,咱们自己动手丰衣足食。

image

我们首先在FPGA上新建一个VI

image

我们把要访问的资源都丢进FPGA VI里面,**并创建相应的控件**。

image

然后在cRIO的控制器上也新建一个VI:

image

先扔一个FPGA引用:

image

然后选择VI:

image

中间通过image 对FPGA进行操作:

image

最后不要忘记关闭FPGA引用。

这样一个最简单的FPGA程序就写好了。

我们这时候还不能直接运行程序,因为FPGA还没有编译:

image

我们在FPGA VI上右键选择编译:

image

image

image

漫长的等待之后我们就可以运行我们的FPGA程序了:

image

要注意的是**直接运cRIO上的程序**即可,无需运行FPGA程序,因为cRIO会通过image 自动调用FPGA程序。

最后是友情提醒+小小广告:

此程序仅仅是为了测试cRIO能否正常工作,如果要进一步发挥出cRIO的强大潜能,

请联系泛华测控NI中国了解更多详情和专业培训课程。

LabVIEW和Visual Studio(ASP.net)的网络发布

我们还是用继续上一次的程序作例子:

首先我们来看一下如何在LabVIEW中发布VI到WEB:

image

首先在LabVIEW的选项里打开Web Server:

image

我们然后在LabVIEW里打开网络发布工具:

image

这一步选择VI的路径和发布的模式:

image 

这里就随意了

image

选择保存位置 默认就可以了:

image

大功告成!

Visual studio(ASP.net)的发布前面已经介绍了,下面直接看结果:

  浏览器 LabVIEW 8.5 ASP.net 2.0
Safari3.1 image image image
IE7 image image image
IE8beta1 image image image
火狐2 image image image
火狐3beta5 image image image

下面是LabVIEW 发布应用程序的几点注意事项:

1 被发布VI最好设成可重入,以便多用户同时访问,否则同时只有一个用户能控制和操作程序。

image image

2 客户端需要LabVIEW Runtime Engine,并且浏览器需要支持LabVIEW控件才可以。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN">
<HTML>
<HEAD>
<TITLE>Title of Web Page</TITLE>
</HEAD>
<BODY >
<H1>Title of Web Page</H1>
Text that is going to be displayed before the VI panel image.<P>
<TABLE BORDER = 1 BORDERCOLOR = #000000><TR><TD>
<OBJECT ID="LabVIEWControl" CLASSID="CLSID:A40B0AD4-B50E-4E58-8A1D-8544233807AF" WIDTH=914 HEIGHT=667 CODEBASE="ftp://ftp.ni.com/support/labview/runtime/windows/8.5/LVRunTimeEng.exe">
<PARAM name="LVFPPVINAME" value="FAQ_DB.lvproj/My Computer/main_v1.0.0.vi">
<PARAM name="REQCTRL" value=true>
<EMBED SRC=".LV_FrontPanelProtocol.rpvi85" LVFPPVINAME="FAQ_DB.lvproj/My Computer/main_v1.0.0.vi" REQCTRL=true TYPE="application/x-labviewrpvi85" WIDTH=914 HEIGHT=667  PLUGINSPAGE="http://digital.ni.com/express.nsf/bycode/exck2m">
</EMBED>
</OBJECT>
</TD></TR></TABLE>
<P>
Text that is going to be displayed after the VI panel image.
</BODY>
</HTML>

 image

3 不要忘记打开80端口,否则无法从其它机器访问。

4 要保证被运行VI在服务器端载入到内存。

小结:

在程序/网站的发布上,我们可以看到LabVIEW的在服务器端配置的易用性远远超过ASP.net,

但是在客户端需要LabVIEW运行引擎和浏览器对LabVIEW WEB控件的支持,

而ASP。net配置虽然复杂,但是客户端只需要浏览器即可。

总体来说LabVIEW的WEB发布更适合工业控制领域,ASP.net则是开发专业网站使用的工具。

LabVIEW和Visual Studio的数据库联接

最近在研究Visual Studio的数据库连接,正好我们的SW同学写了一个基于LabVIEW的数据库程序就被我厚颜无耻拿来学术研究了:

首先我们先看看界面:

这个是他写的LabVIEW程序:

image

开发环境:LabVIEW 8.2/8.5

需要LabVIEW 8.5(or Runtime)、Database Connection Tools支持

本人的高仿山寨版:

image

开发环境:Visual Studio 2008/2005

需要IIS5.1(及以上),.net framework 2.0支持

浏览器支持:Internet Explorer 7.0/8.0 beta1,Firefox 2.0/3.0 beta 5,Safari 3.1

然后我们再看看程序:

数据库的连接

image

LabVIEW可以通过DSN连接,也可以通过其他方式。

image

Visual Studio也是类似的:

String connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;User Id=admin;Password=;";
OleDbConnection conn = new OleDbConnection(connStr)

我使用了连接字符串来连接数据库。

数据库搜索都是用SQL来查询:

LabVIEW:

image

Visual Studio:

select ID,Problem,Answer,keyw from (select * from [Communication Buses] union select * from [DAQmx/DAQ] union select * from [Instrument Drivers] union select * from [LabVIEW] union select * from [LabWindows/CVI] union select * from [Modular Instruments] union select * from [other softwares] union select * from [others] union select * from [PAC] union select * from [Platform] union select * from [Vision and Motion]) as muti where Problem like ‘%6251%’ or KeyW like ‘%6251%’

数据的解析与显示:

image

image

OleDbDataAdapter sda = new OleDbDataAdapter(SQLQueryString, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();

image

小结:可以看到LabVIEW和Visual Studio都提供了很方便的数据库连接接口,使用的方法也比较类似。

区别就是LabVIEW编程可以很方便的利用状态机,而使用C#就要利用事件,这个并没有优劣之分,主要看个人习惯。

因此这次的对比证明了LabVIEW和Visual Studio相比数据库的开发能力差不多,关键还是在开发者的开发习惯。

 

=========================以下是纯洁的分割线================================

如何在XP下配置IIS和ASP。net 2.0

1:安装IIS:

image

image

基本上一路下一步即可,提示插入XP光盘就插进去。

2安装。net framework2.0:

下载链接:

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

image

这个也是一路下一步。

3 配置IIS和ASP。net

clip_image002

首先配置主目录:

[clip_image002[4]](http://by2.storage.msn.com/y1p8NjIsGi7lpwRH0R9u5SFZsznI6HY7VrMu4CnxbfbZUqkKz_Vv1_7rGNcGd503LPWp0hLpgDMW3sdB1bls2CrzBfiyutdAFWR?PARTNER=WRITER)

然后配置ASP。net:

[clip_image002[6]](http://by2.storage.msn.com/y1p8NjIsGi7lpzM00JBJt8m05zZ7sl2ZfOiaNJHTLA0VW6f7iT470mg_ocCdJ8yePjelb2CD3e4ebyN0iFyEOLjjm-Mjr-T-O-W?PARTNER=WRITER)

然后回到主目录这一页配置ASPX关联:

[clip_image002[4]](http://by2.storage.msn.com/y1p8NjIsGi7lpweO_Raw-S1yo9VgHKVd_SioObI6tTYA3y2xpA8B7kQuJX2zHMnr08ix4UBIKAEYdYaA7_1IrL7fIHsaCG_w4h4?PARTNER=WRITER)clip_image002[8]

再添加主页:

[clip_image002[10]](http://by2.storage.msn.com/y1p8NjIsGi7lpwNJF49vYCiIU7cH9xRpOSjbzeV4EP_4mooK8FtWNsgD3_xA2sm8S1W8D_0g2Emi-Sv-_uQmXPoGmLFVDYkZRKY?PARTNER=WRITER)

4 授权IIS用户:

在C:WINDOWSMicrosoft.NETFrameworkv2.0.50727>aspnet_regiis.exe运行GA参数

-ga <user> 为指定的用户或用户组授予权限,使其可以访问 IIS 元数据库和 ASP.NET 使用的其他目录

[clip_image002[12]](http://zdpe9q.bay.livefilestore.com/y1pAFYaglZOQhODm2fi_rdmcFZkSzcnQWLsdb5SeV58nSGgVR-MbX-jzRuijok9CvRIoevikOZtnNNWNV29hDzmpDtUDezu41P3?PARTNER=WRITER)

目标是IWAM打头的那个用户。

[clip_image002[14]](http://by2.storage.msn.com/y1p8NjIsGi7lpyu9-FSxAqCM2LvhSnRNT_OWuNYVRLZz692d2LCUl7T6JmPH4O0L0qofybqBLDl1a--TQ-99JLIFXoqcCWj-_Wm?PARTNER=WRITER)

5 最后打开防火墙80端口

image

6 大功告成!

image