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 就可以了。

LabVIEW截图技巧-截取全部程序框图

截截截……打截!

今天我们要截的是LabVIEW的程序框图(众人:切!~BS!这谁不会啊?)

image

PrintScreen键很好使,但是还要开画图板,像我们这种注重效率的专业人士(众人围殴中)要截图,当然另有高招

image

首先截个全图

image

截个部分

image

然后截个VI

image

前面板

image

按钮们

想知道怎么截么?一般人我不告诉他!(众人继续围殴中)

=========================我是无辜的分割线===========================

Win + R
打开“运行”对话框。

image

呵呵,猜到没有?

image 

秘诀就是Ctrl+C和Ctr+V

在LabVIEW里面复制代码之后,到其他程序(例如OFFICE)里面粘贴,

因为其他程序不认识LabVIEW的框图代码,所以会把贴进来的对象当作图片处理。

以后做演示PPT、Word注释文档轻松多了吧!再也不用开着画图裁裁减减了!

LabVIEW 图标编辑器与自注释

在LabVIEW里面,图标是VI很重要的一个元素。好的图标可以作为自注释的一部分减少我们做文档的工作量。

image

LabVIEW默认的VI图标我们不能从中得出任何信息;

image

文本型的图标就可以提供更多的信息;

image

文本和图像混合的图标很直观,又能提供一定的信息量;

image

好的图像型图标甚至可以指示出各条连线的功能;

因此,给自己的VI画一个好的图标是很有必要的,不过很多人可能会嫌麻烦,不愿意做这个工作。

现在好了,LabVIEW开发者社区提供了一个高级图标编辑器:

http://community.ni.com/examples/customized-labview-icon-editor

具有以下功能

The following features are provided by the icon editor:

*Open source

*Draw easily an icon with heading and three body lines

*Save icon styles

*Take a template from the library by double clicking on it

*Drag & Drop templates

*Save icon templates (template tab: save the icon as 32x32px; tool tab/selection tool: save the selected area)

*Add/Delete templates

*Flip templates (left CTRL key)

*Rotate templates (Space)

*50 undo steps

*Paint - Tools: Rectangle, Rounded Rectangle, Circle, Line, Fill, Selection, Text, Rubber, Pen and Dropper

*Many colors

*Different line profiles

*Easy to handle

*etc. etc. etc.

比较有用的就是可以快速生成文本型图标,还有可以通过拖动生成图像型图标。

总之一句话就是提供了更方便更强大的功能。

image

clear icon可以清空图标

image

draw icon可以按配置信息生成文本型图标

image

这一页可以拖图标上去

image

这一页和传统的画图工具类似

image

完成之后按submit提交。

总之是个很方便的工具。

下面是注意事项:

Known issues:

  • Using the selection tool in LV 8.2.0 might cause a crash of LabVIEWWorkaround: Recreate all Timed Loop related stuff

  • Starting the Icon Editor by VI-Properties - General - Icon Editor freezes LabVIEWWorkaround: Start it by double clicking on the icon or by right clicking on the icon -> "Edit Icon…"

    另外卸载要按照手册提示的步骤来。

最后是下载地址:

Download Code:
[LabVIEW Icon Editor](http://community.ni.com/examples/customized-labview-icon-editor/iconeditor.zip) (3.2 MB)

包含FOR 8.2和8.5的版本

分流地址:

http://cid-866b8f96a2761bbe.skydrive.live.com/self.aspx/Public/IconEditor.zip

LabVIEW 8.5工程管理器-冲突解决

自从LabVIEW 8.0新添加了工程管理器之后,给我们带来了很多方便,不过讨厌的冲突问题也随之升级。。。。。。

image

在LabVIEW 7里面,当我们打开名字一样的VI时就会弹出来这样一个对话框,告诉我们名不正则言不顺,名字一样的只能有一个,不是你死就是我活。

image

而在LabVIEW 8里面就更加变本加厉,只要在一个工程里,还没有打开就告诉你:有问题,未解决。

image

一般来说这种小CASE只要说服教育,将其转化为LIbrary即可解决。

然后就是老同志遇上新问题:如何在8.5的自动更新文件夹里移动VI的位置?

image

这个自动更新文件夹啊好是好,但是就是太讲原则,文件夹里有什么他就有什么,想拖到新位置—NO WAY。

image

可能你要说,直接在Windows资源管理器拖动之不就ok

image

en ?这个是啥?

image

还好只有一个,

image

不过还是不爽,怎么才能没有冲突呢?

当当当当,正确答案即将揭晓,请大家鼓掌。

image

正确答案就是在FILES里面拖动,从此轻松无忧。

image

LabVIEW会自动处理牵涉到文件。

神州行,我看行。LabVIEW 8.5 今天你升了么?

LabVIEW截图技巧-截取动态帮助窗口内容

当我们在LabVIEW里面编程时,可以随时按Ctrl+H呼叫动态帮助,动态的显示出鼠标指向的LV元素(VI、连线、控件等等)的相关帮助
 
[![context-help](http://byfiles.storage.live.com/y1pf3H7KtzkuRFIshT2QfDKLJDBMfqOOOCLrDU7_HZFZ6HL0v96vn4ocpGWJ7nxPRlpdJLRWViHCkY)](http://byfiles.storage.live.com/y1pf3H7KtzkuRFIshT2QfDKLJDBMfqOOOCLrDU7_HZFZ6HL0v96vn4ocpGWJ7nxPRlpdJLRWViHCkY)
有时候我们只需要截取LabVIEW动态帮助窗口的内容,但是动态帮助窗口会自动丢失焦点的。难道只能截全屏然后再在画图里面裁切么?
回答当然是不需要!
首先按住Alt,然后用鼠标点选动态帮助的标题,这时候我们会发现动态帮助现在一直处于选中状态,现在就可以随心所欲的截图了,按下PrintScreen键之后再松开Alt键,动态窗口就已经被我们截取下来了。
[![context-help-scr](http://by1.storage.msn.com/y1p8NjIsGi7lpzZTG6JYhGUC-B9iIQ_uC1kY5IjS59HD-q_buDCZAuJdtj16N-tVlpsCLNu2gKeK_D_jMljnGfVNkGXdGtooDne?PARTNER=WRITER)](http://byfiles.storage.msn.com/y1pf3H7KtzkuRF2BRXdpxrC4WtxVx6jFNW1euFUVaVfNt_0IpCuWE4_mbImiPOnSLeeqIALBL09--Y?PARTNER=WRITER)
 
 
 
 
 
 
 
 
 
 
 
 
 
LabVIEW是可以插入图片的,我们可以在LabVIEW里面按Ctrl+V贴进去看看效果。
 
 
 
[![labview-ctrl-v](http://by1.storage.msn.com/y1p8NjIsGi7lpyYyAjPQnFpp41mhEY4S63hh6XlsY-HealQ-kw4YLtueFRhpbr9lOULJ9xHZNykh9t6MRhIr2u0Ux4wmRPlQru6?PARTNER=WRITER)](http://by1.storage.msn.com/y1p8NjIsGi7lpw0n6tRgyK45REUbIcQWwhY_B_9s-JJynkTs7lEmWIf_3314D6S8zDn3o7hbYJFisHJZ_xTklTP0_oRb5bFuRxN?PARTNER=WRITER)
[![](http://byfiles.storage.live.com/y1pMKpUp0OdnWrYetpZ1KomidKKmpKHZ1Zyx9Txh8X8FxB5lzvHyppLZR7OI1IO7yEJ4wMpMCTctOA)](http://byfiles.storage.live.com/y1pMKpUp0OdnWrYetpZ1Komib8lBnCQ_1d4MaWAIcLFsDgX18SXwjVH1EdFugtPAhqBjmIj5IWrtVw)