注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

LabATSS

关注自动测试软件

 
 
 

日志

 
 

LabVIEW 实战编程代码库之MMS多通道测量程序  

2017-06-19 23:57:27|  分类: LabVIEW |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
LabVIEW实战编程代码库系列文章都是我个人在日常测试工作和科研项目开发中,使用LabVIEW虚拟仪器编程语言完成实际问题时的解决方案,通过写博客进行文档记录化,主要目的还是个人汇总总结,复盘提高,当然如果你碰到类似问题情景的时候,也可以予以借鉴参考,另外你也可以看看在实战项目中都涉及了那些技术基础点,对了我这里的实战指的都是能挣来白花花银子的工程实际项目应用。

MMS多通道测量程序是为了满足美国迅腾公司生产的多通道时间间隔测量比对仪MMS(配图)的数据采集、分析显示及保存处理的专用测试程序;该程序通过网络接口LAN与设备进行远端程控连接,并使用Telnet网络传输协议将测试数据(时间间隔差值)的文本值采集上来,然后通过相应的数据处理公式进行运算并动态实时呈现给用户,最后完成过程数据、计算结果的数据保存任务。
LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS
 

按照LabVIEW一般的开发模型认知,这是一个比较经典的“配置、测试采样、处理存储”的数据采集程序,常规的处理方式是将大型的功能函数分解成模块,然后顺序编程,循环采样、保存数据即可,但是由于该测试任务为时间间隔测量比对测试领域,其比对测试信号为精准的秒脉冲信号(1PPS),采样间隔严格定义为1s,其中的过程测量数据不能有任何遗漏和丢失,并且在测试过程中需要动态实时的将数据处理结果呈现给用户观测,显而易见简单的单循环测试采样并存储方式不能满足项目苛刻的技术性能要求,这是由于当把采样、数据处理呈现及保存都放置在一个单循环周期内时,数据处理和保存会随着数据量的增大而增加处理时间,从而影响采样周期严格要求的时间特性。

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS
 

所以,简单且朴素的想法就是把采集和处理分开单独处理,各做各的工作任务互不干扰,采集测试模块完成测试数据(时间间隔差值)的文本值采集任务功能,处理模块完成动态实时结果显示和全部测试数据保存任务功能,采集和处理通过能够共同访问的数据构件完成数据的传递,由于数据采集和处理具备天然的单向性依赖,因此一个是数据的生产者(采集),另外一个是数据的消费者者(处理),很明显:这就是LabVIEW多线程编程中最常用的设计模式——生产者/消费者模式了。

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 


确定了程序的主设计模式后就像是建筑物主体结构封顶,将各个完成主要功能的上层程序模块VI按功能设计逻辑,归放到相应图形化编程结构体内,即可进行程序快速搭建开发,所以图形化编程G语言中特点就是“设计就是开发”,上层程序模块再将复杂VI进行必要的功能分解、逻辑拆分后,层级组合调用完成必要功能需求。

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

在程序的搭建开发过程中突然发现:还有一个问题尚未解决,就是业务领域场景中要求动态实时的将数据处理结果呈现给用户观测,由于数据处理功能和显示功能都在消费者角色的While循环体内,可以通过该循环内的移位寄存器作为测量数据结果数组存储器来使用,当有新的数据获取后,与左(前)侧端移位寄存器输出重新组合后处理计算,显示结果以图表的界面形式提供给用户观测,并且再将组合了本次采集数据的数据集合传送至右(后)侧端移位寄存器输入端为下一次循环实时动态做准备。


移位寄存器的解决思路当然可以完成任务目标,但是还是不够完美,多年来使用LabVIEW给我最大的一个感触就是“没有它做不到的事!只有你想不到的!”当然这句话一定要加一个定语:“在计算机测控领域范围内”,[顽皮笑脸]。数据存储要和逻辑算法操作结合在一起要提供更好的封装性,从而达到更好的代码重用性,呵呵,听着又像是要鼓吹采用面向对象的编程技术,实际上由于每个动态实时处理的算法只是一个单独算法运算,为此用LVClass类来封装有点高射炮打蚊子的过度封装嫌疑,幸好LabVIEW为我们提供了一种更好的解决思路:连续逐点累计算法模式。

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 


连续逐点累计算法模式主要是通过功能全局变量(未初始化的循环移位寄存器)作为数据存储器来使用,算法代码内置在循环结构体内,重点是把VI属性设置为可重入执行的方式,并且特别注意要勾选“为各个实例预分配副本(保持各个实例的状态)”,可重入执行保证了代码段实例的各自单独性,这样一个VI中就可以包含多个重入VI实例代码段,分配副本完成每处调用生成的实例VI都拥有各自独立的数据保存区域。


连续逐点累计算法模式很好的平衡了封装与重用,优雅的提供了统一累计运算方式,其实该功能早在LaBVIEW 2009版本中就完美提供了,并按此模式提供了一组通用逐点算法库(NI_PtbyPt.lvlib)能够完成大多信号处理场景算法需求。我在连续点累计算法模式基础上按自己领域的算法需要开发了自己的算法函数VI,顺利地完成了实时动态的数据处理及显示的需求。

LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 


另外,Telnet远端数据采集和TDMS文件数据保存模块功能VI等都是从LabVIEW中自带的范例(Examples)代码库中照搬挪用过来的!大大省却了开发时间和精力,提升了开发效率。我一直都认为,“LV的自带范例库代码言简意赅,上手快见效高,并且绝对符合著名二八原则,即自带的范例知识技能点能够覆盖满足开发工程师日常80%的用例需求情况。”,但是各个LV论坛中最热闹的就是找培训视频、培训资料,殊不知最好、最权威的培训资料就是自带范例库,大家却熟视无睹,舍近求远的追求来源神奇的各种花式材料。


LabVIEW 实战编程代码库之MMS多通道测量程序 - labats - LabATSS

 

  评论这张
 
阅读(22)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017