历史上的今天
今天是:2025年03月15日(星期六)
2020年03月15日 | labview串口数据保存_labview如何对串口数据缓存
2020-03-15 来源:elecfans
LabVIEW是一种基于图形编程语言的开发环境。它与传统编程语言有着诸多相似之处,如相似的数据类型、数据流控制结构、程序调试工具等。但二者最大的区别在于:传统编程语言是用文本语言编程,而LabVIEW用图形语言(即各种图标、图形符号、连线等)编程。
编程简单方便,界面形象直观,具有强大的数据可视化分析和仪器控制能力。
Labview有丰富的文件操作函数库,可以方便地进行文件的读写。Labview可以读写文本文件、数据报表文件、二进制文件和测试文件。主程序中从VISAread的readbuffer端读上来的数据需要转换成表格数据进行保存,数据的保存分为两个阶段。第一阶段,通过表单形式(带时间头)显示在主程序界面,方便用户直观查看测试参数是否已满足要求。第二阶段,把表单数据保存到Excel文件中,可供用户打印查询。如果数据不需直观显示在主程序界面上,也可保存到TXT(可以用Excel打开)文件中。
1、数据显示模块的设计
工程中充分考虑动态实时性,显示的每一帧数据都对应不同的时刻,并且对于数据显示、存储功能可以进行时间大小、时间间隔设定,以满足不同测试时刻的数据要求。图1为显示子程序显示的动态数据表格。

图1
考虑到读串口的频繁性,我们提出两种可能:①上位机需要周期性的对串口进行读操作,这样一来串口上来的数据最好也能周期行性地显示、保存;②上位机对串口的读操作是非周期性的,而且间隔时间有时较长,这样串口数据上来时显示,没有数据上来就不显示。
对于第一种情况图2给出了具体的子程序代码。主程序中上来的一串串口数据经过StringSubset这一功能模块各个参数被依次分割开来。再经过MergeSignals和BuildTable最终实现为图1中的Table3。从图1中我们看到了数据被以3s的间隔周期性的保存在表单中。怎么来实现这种周期性呢?这就需要在While循环中用到Combobox控件,预设好各种需要的保存周期以供选择。值得注意的是图1中子程序显示的数据是模拟输入的固定值。

图2
对于第二种情况需要在源程序(图2)的基础上稍加改动,在原程序中去掉Combobox控件。为了实现数据上来才显示,没数据上来就不显示的功能,可以考虑增加一个Case框,设置一个局部变量(串口是否有数据读上来)来决定执行显示操作还是执行不显示操作。具体的程序读者可自行编写。
工程中因为要直观实时显示各个测试参数,把每个参数数据都接到了各自的WaveformChart(实时趋势图控件),这样各个参数的波形变化就能被趋势图实时显示了。用户就能直观地从PC上判断测试参数是否满足要求了。
2、把主程序显示的表单记录保存到文件
程序中串口数据可以直观的显示在前面板上并保存下来,但是为了对实验结果进行精确分析,数据存储也很重要。好的数据保存有利于数据的后期处理和分析。
在实时测试主程序的界面图中,继上个模块数据显示在主程序表单中后,测试设置按钮用一个Boolean类型按钮“保存数据”,它就是用来设置数据是否保存的设置按钮。当它为True时,表单中所显示的所有实时测试数据即可保存到指定的测试文件中;当它为False时,实时测试数据将不被保存。其实质是用户通过保存设置按钮的状态有选择地决定数据是否保存。在LabVIEW7.1/help/findexample自带的例子中就有这样的程序,所需要改动的就是把其中的Table换成所需要保存的Table,创建相应的属性节点,并分别选中Rowheaders[],Columuheaders[]有效。这样⑴中的表单文件就可以连同行表头和列表头一并保存到文件中。
史海拾趣
|
几天前一个学生问我ARM中断嵌套的问题,我才发现原在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一 ...… 查看全部问答> |
|
有2个延时的子程序 1.用for循环 void delay(void) { unsigned int i; for (i = 0; i < 100; i++) {} } 2.用while循环 void delay(void) { ...… 查看全部问答> |
|
最近想好好系统学习一下嵌入式开发,但是自己学,真的太费劲,所以找了找学习的地方,看到一个叫尚观的机构里有一个叫conke的高手,请问大家有知道这个人的吗?因为课程是他讲,所以想了解了解,小弟先跪谢了。… 查看全部问答> |
|
求一个电流源方案(要求幅度最大1A且可调,频率最高1M可调) 现在系统中需要一个电流源(输出正弦波,要求幅度最大1A且可调,频率最高1M可调),很多函数发生器芯片还是DDS芯片都是输出电压很容易的,如果用来做电流源,V-I转换模块太麻烦了。 求助下高手们,有什么好的建议,谢谢了!… 查看全部问答> |
|
触摸屏驱动的TOUCH_MAX_X、TOUCH_MIN_X等值是根据什么设定的? 我开发板的LCD是800*480的,开发板提供的nk.bin文件没有问题,但是我自己使用其提供的BSP包定制的时候,出现边缘无法正确点击的情况。我查找资料是TOUCH_MAX_X、TOUCH_MIN_X定义的问题,但是我不知道这几个值该如何确定。 &n ...… 查看全部问答> |
|
移植linux到U盘时,启动遇到mount: could not find filesystem '/dev/root' 本人想把硬盘上的linux 2.6.28系统移植到U盘上,一个vmlinux 和 initrd.img在硬盘上运行良好。硬盘分了7个分区,sda1 是boot分区,sda2是根分区,一个2G的U盘,分了2个分区,都格式成ext3,sda1是boot分区,copy硬盘boot里的东西,打算把root挂在sd ...… 查看全部问答> |
|
比如32宽数据口的cpu想问的是: 我用16、32位方式访问设备,A0怎么办?用arm cpu时,例如接16位外设时,a0不用,直接把a1接到芯片的“a0”上了。哪位大侠能给详细讲讲?… 查看全部问答> |




