LabVIEW的外部代码接口
第 u|卷 第 v 期 湖 南 大 学 学 报 k自然科学版l ∂ ²tqu|o ²qv
u s s u 年 y 月 ²∏µ±¤¯ ²© ∏±¤± ±¬√ µ¨¶¬·¼k¤·∏µ¤¯ ≥¦¬¨±¦¨¶∞§¬·¬²±l ∏±q u s s u
文章编号}tsss2uwzukussulsv2sswt2sx
¤¥∂ ∞• 的外部代码接口Ξ
刘红显 o黄文梅
k湖南大学 机械与汽车工程学院o湖南 长沙 wtss{ul
摘 要}简要介绍了 ¤¥∂ ∞• 的外部语言代码接口o重点分析使用
⁄和 ≤...
第 u|卷 第 v 期 湖 南 大 学 学 报 k自然科学版l ∂ ²tqu|o ²qv
u s s u 年 y 月 ²∏µ±¤¯ ²© ∏±¤± ±¬√ µ¨¶¬·¼k¤·∏µ¤¯ ≥¦¬¨±¦¨¶∞§¬·¬²±l ∏±q u s s u
文章编号}tsss2uwzukussulsv2sswt2sx
¤¥∂ ∞• 的外部代码接口Ξ
刘红显 o黄文梅
k湖南大学 机械与汽车
学院o湖南 长沙 wtss{ul
摘 要}简要介绍了 ¤¥∂ ∞• 的外部语言代码接口o重点分析使用
⁄和 ≤时的参数类型匹配问题o以及二者在使用上的优缺点q
关键词}虚拟仪器~¤¥∂ ∞• ~参数类型匹配
中图分类号}× °uzwn qu~× °v|tqzy 文献标识码}
∞¬·¨µ±¤¯ ≤ ²§¨ ±·¨µ©¤¦¨¶¬± ¤¥∂ ∞•
²±ª2¬¬¤±o • ±¨2° ¬¨
k≤ ²¯ ¯¨ ª¨ ²© ¦¨«¤±¬¦¤¯ ¤±§ ∏·²°²·¬√¨∞±ª¬±¨¨ µ¬±ªo ∏±¤± ±¬√o ≤«¤±ª¶«¤ wtss{uo ≤«¬±¤l
Αβστραχτ}× «¬¶³¤³¨ µ¥µ¬¨©¯¼ ¬±·µ²§∏¦¨¶·«¨ ¬±·¨µ©¤¦¨¶²© ¬¨·¨µ±¤¯ ¦²§¨ ¬± ¤¥∂ ∞• q
°²·¨±·¬¤¯ ³µ²¥¯ °¨ ²©³¤µ¤° ·¨¨µ·¼³¨ °¬¶°¤·¦« ¬¶¤±¤¯¼½¨ §¤±§ µ¨¶²¯ √ §¨q ¶¯²o ·«¨ ¤§2
√¤±·¤ª¨ ¶¤±§§¬¶¤§√¤±·¤ª¨ ¶²©∏¶¬±ª⁄¤±§∏¶¬±ª≤ ¬± ¤¥∂ ∞• ¤µ¨ §¬¶¦∏¶¶¨§q
Κεψ ωορδσ}√¬µ·∏¤¯ ¬±¶·µ∏° ±¨·~¤¥∂ ∞• ~³¤µ¤° ·¨¨µ·¼³¨ °¤·¦«
微电子技术和计算机技术的飞速发展o测试技术与计算机技术的深层次结合o在测试
仪器领域引起了一场革命o直接导致了虚拟仪器k∂ ¬µ·∏¤¯ ±¶·µ∏° ±¨·l的到来Λ 虚拟仪器
由功能强大的计算机和获取调理信号的 Ù 接口设备组成ΛÙ 接口设备k如数据采集卡
⁄ ± !°
总线仪器!∂ ÷
总线仪器模块!°÷ 标准总线仪器模块!串口 ≥uvuÙw{x
仪器lo完成数据的采集!调理~计算机及其显示器完成数据的分析处理与显示Λ由此可见o
虚拟仪器具有很强的开放性!灵活性和扩展性Λ 基于 语言的 ¤¥∂ ∞• k¤¥²µ¤·²µ¼
∂ ¬µ·∏¤¯ ±¶·µ∏° ±¨·• ²µ®¥¨ ±¦«l是目前最流行的虚拟仪器软件开发工具Λ¤¥∂ ∞• 便捷
的图形化
开发环境!基于 语言kµ¤³«¬¦¶¤±ª∏¤ª¨ o图形化编程语言l的编程方式
使得用户可以快速地开发出功能强大!界面精美的虚拟仪器Λ
¤¥∂ ∞• 不仅有豪华精美的控件o功能强大的内核o还提供了调用外部语言代码的
接口Λ
Ξ 收稿日期}usss2sx2s|
作者简介}刘红显kt|zy2lo男o河南方城人o湖南大学硕士研究生 1
1 调用 ⁄
¤¥∂ ∞• 可以调用用任何语言k如 ∂ ¬¶∏¤¯ ≤ n n o≤ n n
∏¬¯§¨ µo∂ ¬¶∏¤¯
¤¶¬¦l编写
生成的动态链接库Λ 调用时o¤¥∂ ∞• 所能支持的参数类型有}通用数据类型k空类型!
整型!字符型!浮点型l及其指针!字符串!数组Λ字符串又分为 w种o详细的
述见表 tΛ对
于数组o详细的表述见表 uΛ
若调用已存在的本机 ⁄k如 ¶¨µvuq§¯ !¯¨ µ±¨¯vuq§¯ l¯用户必须通过查阅相关文
档k如对于 • ¬±vu °¶o查阅 ≥⁄lo弄清楚被调用的 ⁄所含的目标函数的原形o而
且¤¥∂ ∞• 应用程序的实参类型要与目标函数虚参类型相匹配 Λ 此时o调用规范一般
为 • °k ¶·§¦¤¯ l¯Λ 若自己编制 ⁄o则应根据应用程序的需要o确定参数个数和参
数类型及调用规范o然后在¤¥∂ ∞• 中正确地配置 ⁄Λ
表 1 字符串类型参数分类o匹配
¤¥∂ ∞• 描述 ≤Ù≤ n n 描述 说 明
≤ ≥·µ¬±ª°²¬±·¨µ ∏±¶¬ª± §¨¦«¤µ3 以 s作为字符串的结尾Λ
°¤¶¦¤¯ ≥·µ¬±ª°²¬±·¨µ ∏±¶¬ª± §¨¦«¤µ3 以字符串的长度作为字符串的开始o长度不大于 uxxΛ
¤¥∂ ∞• ≥·µ¬±ª ¤±§¯ }¨
≥·µ°·µ
¤¥∂ ∞• ≥·µ¬±ª ¤±§¯¨ °²¬±·2
µ¨} ≥·µ ¤±§¯¨
·¼³¨ §¨ ©¶·µ∏¦·¾¬±·vu ¦±·~
∏±¶¬ª± §¨¦«¤µ¶·µ≈t ~ À
≥·µo 3 ≥·µ°·µo
3 3 ≥·µ ¤±§¯ ~¨
数据成员 ¦±·记录字符串的长度o数据成员
¶·µ≈s 存放第一个字符Λ若长度大于 to可以
在 ⁄中动态分配内存o但必须调用 ≤
函 数 来 完 成o 如 ≥ ·¨≤ µµ¤¼2
≥¬½¨ ∏° µ¨¬¦ µµ¤¼ ¶¨¬½¨ Λ
表 2 数组的参数传递k以带符号长整形 2 维数组为例l
¤¥∂ ∞• 描述 ≤Ù≤ n n 描述 说 明
µµ¤¼ ⁄¤·¤°²¬±·¨µ ¬±·3 ¤µµ¤µ¼°²¬±·¨µ 数组元素的首地址Λ 不能改变数组的大小
µµ¤¼ ¤±§¯ }¨× ⁄t §¯
·¼³¨ §¨ ©¶·µ∏¦·¾
¬±·§¬°≥¬½¨ ¶≈u ~
¬±·∏° µ¨¬¦≈t ~
À × ⁄to3 3 × ⁄t §¯~
§¬°≥¬½¨ ¶≈s 为行数o§¬°≥¬½¨ ¶≈t 为列数o
∏° µ¨¬¦≈s 存放第一个元素o按行存储Λ可
以调用 ≤ 函数动态内存分配o改变数组的
大小Λ
µµ¤¼ ¤±§¯¨°²¬±·¨µ × ¼³¨ §¨ ©× ⁄t 3 3 × ⁄t §¯°·µ 即指向 µµ¤¼ ¤±§¯¨变量的指针Λ
例如o¤¥∂ ∞• 后面板如图 to则相应的 ⁄函数可声明如下}
·¼³¨ §¨ ©¶·µ∏¦·¾
¬±·§¬°≥¬½¨ ¶≈u ~ ÙÙµ²º¶o¦²¯∏°±¶
¬±·∏° µ¨¬¦≈t ~ÙÙ²·«¨ µ¨¯ °¨ ±¨·¶¶∏¦¦¨¶¶¬√¨¯¼ ©²¯ ²¯º §¨¬± ° °¨²µ¼ ³«¼¶¬¦¤¯ ¼¯
À × ⁄t~
·¼³¨ §¨ ©× ⁄t 3 3 × ⁄t §¯~
¬¨·¨µ± / ≤ 0 §¨ ¦¯¶³¨ ¦k§¯¯¨ ¬³²µ·l √²¬§§¯ ƒ¯¬±k× ⁄t §¯ ¤µµl~ÙÙ≤ ¦¤¯ ¬¯±ª¦²±√ ±¨·¬²±}≤
该函数被调用时 §¬°≥¬½¨ ¶≈s 的值为 vo§¬°≥¬½¨ ¶≈t 的值为三个数组中元素个数的最大
值Λ 访问数组元素k¬ol可以采用如下语句}
uw 湖南大学学报k自然科学版l ussu年
¬±·µ²º¶ k3 ¤µµlp §¬°≥¬½¨ ¶≈s ~ ÙÙ·²·¤¯ µ²º¶²©·«¨ ¤µµ¤¼
¬±·¦²¯¶ k3 ¤µµlp §¬°≥¬½¨ ¶≈t ~ÙÙ·²·¤¯ ¦²¯∏°±¶²©·«¨ ¤µµ¤¼
¬±·3 ³µµ¤¼ i kk3 ¤µµlp ∏° µ¨¬¦≈s l~ÙÙ¤§§µ¨¶¶²©·«¨ ¤µµ¤¼
¬±·∞¯¨ ° ±¨· 3 k³ µµ¤¼n ¬3 ¦²¯¶n l~ÙÙ°³²µ·¤±·} ¬ µ²º¶¤±§ ¦²¯¶
又如图 u所示的¤¥∂ ∞• 后面板o相应的 ⁄函数可声明为}
§¨ ¦¯¶³¨ ¦k§¯¯¨ ¬³²µ·l √²¬§• °§¯ ƒ¯¬±k§²∏¥¯¨
∏©≈ o¬±·¶¬½¨ l~
图
t
µµ¤¼ ¤±§¯¨方式传递参数 图 u µµ¤¼ ⁄¤·¤°²¬±·¨µ方式传递参数
2 Χοδε Ιντερφαχε Ν οδε
≤ 是 ¤¥∂ ∞• 图形化编程语言环境与 ≤ Ù≤ n n 语言的接口Λ 当遇到某些用 ¤¥2
∂ ∞• 难以实现或实现起来比较繁琐的功能时o可以通过 ≤ 在 ¤¥∂ ∞• 中引入 ≤ Ù≤
n n 源代码o这其实是对 ¤¥∂ ∞• 编程功能的强大补充Λ
当使用 ≤ 时o首先设置参数的个数o然后对参数的输入!输出连线o这样就可以
/ ≤ µ¨ ¤·¨ q¦ƒ ¬¯¨ 0Λ在q¦Ùq¦³³文件中 ¤¥∂ ∞• 已给出了虚参的类型o但有些参数类型是
¤¥∂ ∞• 自定义的o在 ≤ Ù≤ n n 环境下编程时o我们必须知道该类型所代表的具体意义
或能够操纵这些类型的参数Λ 例如o我们可以在 ¤¥∂ ∞ • 后面板看出 ¬¶·¥²¬ ≤ ²±·µ²¯
所代表的数据类型为 ¬±·vuo用它和一个 ∏° µ¨¬¦±§¬¦¤·²µ≤ ²±·µ²¯相连时o后者的显示
值总为前者的选中项基于 s 的索引Λ 当用 ¬¶·¥²¬ 作为 ≤ 的唯一输入时o / ≤ µ¨ ¤·¨ q¦
©¬¯¨ 0o≤ ∏± 的函数原型如下}
≤ ª∞µµ≤ ∏±k¬±·vu 3 ¬¶·¥²¬l~
通过试验o发现k3 ¬¶·¥²¬l的值仍为选中项的基于 s 的索引o这样我们就知道了参数
¬¶·¥²¬ 所代表的意义Λ 又如 ƒ ¬¯¨ °¤·« ≤ ²±·µ²¯o 当用它作为 ≤ 的唯一输入时生成的
≤ ∏± 函数原型为}
≤ ª∞µµ≤ ∏±k°¤·« °¤·«l~
在头文件 ¬¨·¦²§¨ q«中找到类型 °¤·«的有关定义如下}
f §¨ ©¬±¨ °µ¬√¤·¨k× l ·¼³¨ § ©¨ ¶·µ∏¦·× f f ·¾√²¬§ 3 ³~ À 3 ×
f §¨ ©¬±¨ °µ¬√¤·¨ k× l ¶·µ∏¦·× f f ·~ ·¼³ §¨¨ © ¶·µ∏¦·× f f ·3 3 ×
°µ¬√¤·¨ k°¤·«l~
此时o从编程的角度讲o我们对参数 °¤·«什么都不能做o但至少应该已经知道它表示文件
路径及相关信息Λ ¤¥∂ ∞ • 提供了有关文件操作的一系列 ≤ 函数}ƒ ≤ µ¨ ¤·¨o ƒ ≤ ²³¼o
ƒ ƒ ∏¯¶«oƒ °¨ ²√¨等Λ 有关 ≤ 函数的更多帮助o参见 ¤¥∂ ∞ • 联机帮助文档Λ
vw 第 v期 刘红显等}¤¥∂ ∞ • 的外部代码接口
下面我们尝试一个更为复杂的例子Λ 在¤¥∂ ∞• 前面板上首先布置一个 ≤ ∏¯¶·¨µo
然后依次往 ≤ ∏¯¶·¨µ中拖入 ≥·µ¬±ª ≤²±·µ²¯ oƒ ¬¯¨ °¤·« ≤²±·µ²¯ o µµ¤¼各一个o最后往 µ2
µ¤¼中拖入一个∏° µ¨¬¦≤²±·µ²¯ Λ 切换到后面板o布置一个 ≤o然后 ≤ ∏¯¶·¨µ与 ≤之
间连线o最后生成 ≤源代码文件k已添加了必要的代码l如下}
f ¬±¦¯∏§¨ / ¶·§¤©¬q«0 ÙÙ·«¬¶ ¬¯±¨¬¶± ¦¨¨¶¶¤µ¼ º «¨ ± ∏¶¬±ª∂ ¬¶∏¤¯ ≤ n n
f ¬±¦¯∏§¨ / ¬¨·¦²§¨ q«0
·¼³¨ §¨ ©¶·µ∏¦·¾ ÙÙ¤µµ¤¼ ·¼³¨ §¨ ©¬±¬·¬²±
¬±·vu §¬°≥¬½¨ ~
©¯²¤·yw ∏° µ¨¬¦≈t ~
À × ⁄u~
·¼³¨ §¨ ©× ⁄u 3 3 × ⁄u §¯~
·¼³¨ §¨ ©¶·µ∏¦·¾ ÙÙ¦¯∏¶·¨µ·¼³¨ §¨ ©¬±¬·¬²±
≥·µ ¤±§¯¨≥·µ¬±ª~ ÙÙ¶·µ¬±ª¦²±·µ²¯
°¤·« °¤·«~ ÙÙ©¬¯¨ ³¤·«¦²±·µ²¯
× ⁄u §¯ µµ¤¼~ ÙÙtp ⁄ ¤µµ¤¼
À × ⁄t~
¬¨·¨µ± / ≤ 0 ≤ ª∞µµ≤ ∏±k× ⁄t 3 ≤ ∏¯¶·¨µl ¾
Ù3 ∞× ∞ ≠ ≤ ⁄∞ ∞ ∞ 3 Ù
µ¨·∏µ± ±²∞µµ~ À
有了前面的阐述o相信有 ≤Ù≤ n n 背景的¤¥∂ ∞• 开发者完全能读懂上面的代码Λ
更重要的是o这些代码能帮助我们能更深入地理解¤¥∂ ∞• 的一些控件o认识它们的本
质Λ 这样o我们在用¤¥∂ ∞• 开发应用程序时o能更加熟练地驾驭¤¥∂ ∞• o高效地开
发出高质量的应用程序Λ
3 应用实例
用¤¥∂ ∞• 不支持的数据采集卡采集数据o数据采集卡的驱动程序一般要设计者
自己编制o这时可以选择使用 ≤Λ 笔者曾使用过 • i • ¤¯¥2 ≤ tsxyo¤¥∂ ∞• 后面板
如图 v所示Λ
图 v 用 • i • ¤¯¥2 ≤ tsxy进行数据采集
相应的数据采集代码如下}
f ¬±¦¯∏§¨ e¶·§¤©¬q«e
ww 湖南大学学报k自然科学版l ussu年
f ¬±¦¯∏§¨ e ¬¨·¦²§¨ q«e
f ¬±¦¯∏§¨ e¦²±¬²q«e
·¼³¨ §¨ ©¶·µ∏¦·¾
¬±·vu §¬°≥¬½¨ ¶≈u ~
¬±·vu ¤µªt≈t ~
À × ⁄t~
·¼³¨ §¨ ©× ⁄t 3 3 × ⁄t §¯~
¬¨·¨µ± e≤ e ≤ ª∞µµ≤ ∏±k¬±·vu 3 ¶·¤µ·¬±ª≤«o ¬±·vu 3 ³²¬±·¶o
¬±·vu 3 ¦«¤±±¨¯¶o ¬±·vu 3 ©µ¨ ∏´¨ ±¦¼o × ⁄t §¯ √¤µxl
¾ ª∞µµµ¨¶ ±²∞µµ~
k3 √¤µxl2 §¬°≥¬½¨ ¶≈s 3 ¦«¤±±¨¯¶~ÙÙ·²·¤¯ µ²º¶¬¶¦«¤±±¨¯¶
k3 √¤µxl2 §¬°≥¬½¨ ¶≈t 3 ³²¬±·¶~ÙÙ·²·¤¯ ¦²¯∏°±¶¬¶¶¤° ³¯¨³²¬±·¶
¬±·vu 3 ³ ¶¨∏¯· i kk3 √¤µxlp ¤µªt≈s l~ÙÙ¬±¬·¬¤¯ ¤§§µ¨¶¶²©·«¨ µ¨¶∏¯·
©²µk¬±·° s~° 3 ³²¬±·¶~° n n l
¾ ©²µk¬±·¬ s~¬ 3 ¦«¤±±¨¯¶~¬n n lÙÙ¶¤° ³¯¨§¤·¤·«µ²∏ª« ¤¨¦«¦«¤±±¨
¯ ¾ ÙÙ¶¤° ³¯¨¦²§¨ ¶¤§§«¨ µ¨
ÙÙ·²¶·²µ¨ §¤·¤o ∏¶¨ 3 k³ ¶¨∏¯·n ¬3 3 ³²¬±·¶n °l qqq À
ÙÙ§¨ ¤¯¼ ·¬°¨·¬¯¯ ± ¬¨·¶¤° ³¯ ¨ À
µ¨·∏µ± µ¨¶~
À
使用时o只需在前面板上输入起始通道!通道数!采样点数!采样频率o • ¤√ ƒ¨²µ° µ¤³«
便可显示出各个通道所采集数据的波形Λ
4 结束语
⁄和 ≤的使用有其相似之处}都需要制作动态链接库o但 ≤不需要输出库函
数Λ 若选用 ∂ ¬¶∏¤¯ ≤ n n 制作 ⁄o则有以下不同点}制作 ⁄可选用 • ¬±vu ⁄¼±¤°¬¦2
¬¯±® ¬¥µ¤µ¼或 ƒ≤ ³³• ¬½¤µ§k§¯ l¯~制作 ≤只能用 • ¬±vu ⁄¼±¤°¬¦2¯¬±®¬¥µ¤µ¼Λ二
者又各有优缺点}≤的制作过程复杂一些o但 ≤所支持的参数类型比 ⁄函数多o
可以是¤¥∂ ∞• 能自定义的任何数据类型Λ
参考文献}
≈t 刘君华o等q虚拟仪器图形化编程语言 ¤¥∂ ∞• 教程≈ q西安}西安电子科技大学出版社qusstq
≈u 汪敏生译著Λ ¤¥∂ ∞ 基础教程≈ q北京}电子工业出版社oussuq
xw 第 v期 刘红显等}¤¥∂ ∞• 的外部代码接口
本文档为【LabVIEW的外部代码接口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。