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

cRIO摧残记(中)——RealTime篇

上次我们提到cRIO是由RT控制器、FPGA、模块三部分构成的,今天我们要研究的是cRIO的RT控制器的定时精度。

在LabVIEW的RT例程里面专门有一个benchmark程序,可以用来测试代码的执行时间。

image

今天我们要测试的是RT的wait函数:

image

Wait函数有三种定时单位可以选择:

image

mSec毫秒:这个和一般非Rt的程序里面等待函数用法是一样的

uSec微秒:顾名思义,以微秒为单位定时

Ticks时钟:这个比较诡异,根据下面的实验是以纳秒为单位定时。

下面就是实验的截图,点击可以看大图,图中横轴代表定时的时间,纵轴代表测得的延时时间:

Ticks方式:      
100 1000 2000 2500
tick 100ns tick 1000ns tick 2000ns tick 2500ns
uSec方式:      
  1us 2us 3us
  uSec 1us  uSec 2us uSec 3us

可以得出的几个结论:

1 Ticks的计时单位是纳秒

2 cRIO的定时间隔在20us下是不准确的,在20us以上基本上可以认为是线性的。

Ticks方式:      
100 1000 2000 2500
21000ns之后可以认为是线性的 22000ns 22000ns 20000ns
uSec方式:      
  1us 2us 3us
  22us 16us 18us

3 这一点是个人的猜想,仅供参考:20us以上的定时也不是完全线形的,有可能是因为cRIO的RT时钟间隔造成的,

cRIO摧残记(上)

今天我们出场的主角就是它

2008032020080320(016)

控制器

20080320(002)20080320(001)

 

  20080320(005)20080320(007) 20080320(006)

FPGA

20080320(003) 20080320(008) 20080320(013)

插上网线通电以后 我们首先打开MAX

image

在远程系统按F5

image

可以看到已经自动认出来了

image

使用前请先摇一摇(误

需要配置一下网络参数

然后给cRIO里面装软件:

image 

我是不管3721全部装上去了

image

装完软件,接下来的工作就要在LabVIEW下进行了:

image

让我们来调试一下吧

image

一路下一步即可

image

image

image

image

image

image

然后配置一下程序架构

image

image

image 点这个自动生成代码

image

image

image

大功告成!

image

其实还MADAMADANANE!

image

恩 还有漫长的编译在等待着我们

image

image 

image

image

正所谓不用FPGA不知道机器慢,各位可以吃饭去了,一般需要半个小时到几个小 时左右才能OK。

555 我果然被调试了。。。

image

I will be back!我们下次继续。。。

Ctrl+C~Ctrl+V归来,快捷键万岁!

对于我们这些LabVIEW专业人士(众人:靠!CLAD都还没过居然还敢说自己专业,拉出去打!)

快捷键是必不可少的。尤其是Ctrl+C和Ctrl+V,是我们居家旅行杀人灭口必备良药。

不过在前些日子介绍的LabVIEW高级图标编辑器里面,我们竟然没有办法使用Ctrl+C和Ctrl+V了!

image

这怎么可以呢?

身为专业人士当然有解决办法,让我们请出今天的主角:

ctrl+.

看看,胡汉三又回来了!

image

这时候你就可以随意Ctrl+C和Ctrl+V了。

下面再来一个:

image

这个程序一运行就会报错

image

我们想把错误信息复制出来搜索,应该怎么办呢?

还是请ctrl+.出马!

image

这下就可以把错误信息Ctrl+C和Ctrl+V了。

Error -1073807343 occurred at niScope Initialize.vi

Possible reason(s):
Insufficient location information or the device or resource is not present in the system.

不错吧!Ctrl+.可以停止很多东西哦,大家可以试一试,不过引发地震火山等等后果概不负责。

最后送上LabVIEW快捷键一览表,常用的我已经涂红:

键盘快捷键

下表列出了LabVIEW环境下的键盘快捷键。也可为VI菜单项创建自定义快捷方式。

**注:**   下列快捷方式中的<Ctrl>键对应于(Mac OS)的<Option>或<Command>键。

键盘快捷键 说明

**对象/动作**

Shift-单击 选取多个对象;将对象添加到当前选择之中。

方向箭头键 将选中的对象每次移动一个像素。

Shift-方向箭头键 将选中的对象每次移动若干像素。

Shift-单击(拖曳) 沿轴线移动对象。

Ctrl-单击(拖曳) 复制选中对象

Ctrl-Shift-单击(拖曳) 复制选中对象,并沿轴线移动对象。

Shift-调整大小 调整选中对象的大小,并保持长宽比例。

Ctrl-调整大小 调整选中对象的大小,并保持中心点。

Ctrl-Shift-调整大小 调整选中对象的大小,并保持中心点和长宽比例。

Ctrl-拖曳一个矩形区域 在前面板和程序框图上添加更多工作空间

Ctrl-A 选择前面板或程序框图上的所有对象。

Ctrl-Shift-A 在对象上进行最终对齐操作。

Ctrl-D 在对象上进行最终分布操作。

双击空白区域 如已启用自动工具选择,则将在前面板或程序框图上添加一个自由标签

Ctrl-鼠标滚轮 依次浏览条件、事件或层叠式顺序结构的子程序框图。

空白键(拖曳) 移动标签和标题时,禁用预设对齐位置。

**浏览LabVIEW环境**

Ctrl-F 搜索对象或文本。

Ctrl-Shift-F 打开搜索结果窗口或查找项目项对话框,其中显示上次搜索结果。

Ctrl-G 搜索下一个对象或文本。

Ctrl-Shift-G 搜索上一个VI、对象或文本。

Ctrl-Tab 根据窗口在屏幕上显示的顺序依次浏览LabVIEW窗口。(Linux) 窗口的顺序取决于窗口管理器。

Ctrl-Shift-Tab 按照相反的顺序浏览LabVIEW窗口。

Ctrl-L 显示错误列表窗口。

Ctrl-Shift-W 显示全部窗口对话框。

**浏览前面板和程序框图**

Ctrl-E 显示前面板或程序框图。

Ctrl-# 启用或禁用网格对齐。在法语键盘上,按<Ctrl-">键。(Mac OS) 按<Command-*>键。

Ctrl-/ 最大化或恢复窗口。

Ctrl-T 分左右或上下两栏显示前面板和程序框图。

Ctrl-Shift-N 显示导航窗口。

Ctrl-I 显示VI属性对话框。

Ctrl-Y 显示历史窗口。

**浏览VI层次结构窗口**

Ctrl-D 重新绘制VI层次结构窗口。

Ctrl-A 在**VI层次结构**窗口中显示所有VI。

Ctrl-单击VI 显示在**VI层次结构**窗口中选中VI的子VI和其它构成该VI的节点。

Enter 在**VI层次结构**窗口中初始化一个搜索,输入文本,按回车键查找下一个匹配的节点。

Shift-Enter 在**VI层次结构**窗口中初始化一个搜索,输入文本,按<Shift-Enter>键查找上一个匹配的节点。

**调试**

Ctrl-向下箭头 单步步入节点。

Ctrl-向右箭头 单步步过节点。

Ctrl-向上箭头 单步步出节点。

**文件操作**

Ctrl-N 打开一个空VI。

Ctrl-O 打开一个现有VI。

Ctrl-W 关闭VI。

Ctrl-S 保存VI

Ctrl-Shift-S 保存所有打开的文件。

Ctrl-P 打印窗口。

Ctrl-Q 退出LabVIEW。

**基本编辑**

Ctrl-Z 撤销上次操作。

Ctrl-Shift-Z 重做上次操作。

Ctrl-X 剪切一个对象。

Ctrl-C 复制一个对象。

Ctrl-V 粘贴一个对象。

**帮助**

Ctrl-H 显示即时帮助窗口(Mac OS) 按<Command-Shift-H>键。

Ctrl-Shift-L 锁定即时帮助窗口。

Ctrl-?或<F1> 显示LabVIEW帮助。

**工具和选板**

Ctrl 切换到下一个最有用的工具。

Shift 切换至定位工具。

在空白区域按<Ctrl-Shift> 切换至滚动工具。

空白键 如自动工具选择被禁用,在两个最常用的工具间循环选择。

Shift-Tab 启用自动工具选择。

Tab 如通过单击**自动工具选择**按钮禁用了自动工具选择,则按<Tab>键可在最常用的四个工具中循环选择。 如通过其它方式禁用了自动工具选择,则按<Tab>键将启用自动工具选择。

方向箭头键 在临时的**控件**和**函数**选板上进行方向移动。

Enter 选择并进入一个临时选板。

Esc 跳出一个临时选板。

Shift-右键单击 在光标处显示临时的工具选板。

**子VI**

双击子VI 显示子VI的前面板

Ctrl-双击子VI 显示子VI的前面板和程序框图

拖曳VI图标至程序框图 将该VI作为子VI放置在程序框图上。

Shift-拖曳VI图标至程序框图 将该VI作为子VI放置在程序框图上,并将没有默认值的输入控件与常量相连。

Ctrl-右键单击程序框图并从选板中选择VI 打开所选VI的前面板。

**执行**

Ctrl-R 运行VI

Ctrl-. 停止VI,在VI运行时使用。

Ctrl-M 切换至运行或编辑模式。

Ctrl-运行按钮 重新编译当前VI。

Ctrl-Shift-运行按钮 重新编译内存中的所有VI。

Ctrl-向下箭头 将选中光标移入数组或簇,在VI运行时使用。

Ctrl-向上箭头 将选中光标移出数组或簇,在VI运行时使用。

Tab 按Tab键顺序轮流选择控件,在VI运行时使用。

Shift-Tab 按Tab键反序选择控件,在VI运行时使用。

**连线**

Ctrl-B 删除VI中的所有断线

Esc,右键单击或单击接线端 取消从该接线端起始的连线。

单击连线 选中一个连线段。

双击连线 选中一个连线分支。

三击连线 选中整条连线。

A 连线时,暂停禁用自动连线路径选择。

双击连线(连线时) 中断连线,不连往接线端。

空白键 移动对象时,在启用和禁用自动连线两种状态之间切换。

Shift-单击 撤销对连线设置的最后一个点。

Ctrl-单击有两个输入端函数的某个输入端 互换两条输入连线的位置。

空白键 将连线方向在水平和垂直之间切换。

**文本**

双击 选中字符串中的一个单词。

三次单击 选中整个字符串。

Ctrl-向右箭头 使用单字节字符的文本(如西方字符集)时,在字符串中向前移一个词。使用多字节字符的文本(如亚洲字符集)时,在字符串中向前移一个字符。

Ctrl-向左箭头 使用单字节字符的文本(如西方字符集)时,在字符串中向后移一个词。使用多字节字符的文本(如亚洲字符集)时,在字符串中向后移一个字符。

Home 移至字符串当前行的开始位置。

End 移至字符串当前行的结束位置。

Ctrl-Home 移至整个字符串的开始位置。

Ctrl-End 移至整个字符串的结束位置。

Shift-Enter 在枚举型控件和常量、下拉列表控件和常量或条件结构中添加新项。在字符串常量中,按下<Shift-Enter>键,可禁用已启用的自动调整大小功能。如已禁用自动调整大小功能,则按下<Shift-Enter>键时将在常量中显示滚动条。

Esc 取消当前对字符串的编辑。

Ctrl-Enter 结束字符串输入。

Ctrl-= 加大当前字号。

Ctrl-- 减小当前字号。

Ctrl-0 显示字体对话框。

Ctrl-1 改变**字体**对话框中应用程序的字体。

Ctrl-2 改变**字体**对话框中的系统字体。

Ctrl-3 改变**字体**对话框中的对话框字体。

Ctrl-4 改变**字体**对话框中的当前字体。

NI 7332 搏斗记

NI的Motion卡其实长得都差不多,用法也一样,因此就以7344代替7332搏斗一番:

首先对每个轴进行配置:

image

类型我们选步进电机,可以不接反馈,不要忘了使能。73系列就不用选了,只能接步进电机。

然后是轴配置

image

这里要选的就是输出方式:

方向+步进,一根线控制方向高电平代表一个方向,低电平就反向,另一根线输出脉冲。

顺时针+逆时针,一根线输出正向的脉冲信号,另一根线输出反向的脉冲信号。

还有一个灰色的选项要注意:open collector,开集电极接法。

image

其他的就可以按默认设置来,然后点image 保存,点image 初始化板卡

好了,现在我们可以让他跑跑看

image

我们让他按一个速度来跑,配置好以后点image 运行,电路图如下:

未命名

Step+/-指的是驱动器的脉冲信号接线端。

20080305

看起来不错嘛 5V的TTL电平。

我们加个1K欧电阻作为负载试试,UMI7764借给客户了,只好拿SCB68代替。

image

20080305(001)

?! sorry拍照片的时候刚好没截上,画图说明:

image

加上电阻以后电压从5V掉到了1.3V。说明NI的Motion卡输出功率不足!怎么办呢?

http://digital.ni.com/public.nsf/allkb/CEC9025B2DD11B2786256CC400802D18

有问题?上网站!

image 

我们可以用开集电极接法搞定,前提是驱动器这里信号要隔离。

7332和7344自带了上拉电阻,这样接线即可:

未命名2

20080305(003) image

正好有个4110,拿来用用。

image

可以看到4110输出了大约4mA电流

20080305

这下这个世界再一次恢复了和平~

PS:另外说一下shutdown使用:

image

首先把这个选上

然后点image 初始化

image

当SHUTDOWN线电平为低时7344会停止脉冲输出。

shutdown后需要Reset后才能使用

image

然后再初始化一下image 就可以了。