在软件开发中,二进制文件格式相对于文本文件格式的缺点是,没有文本文件通用性强、直观,同时,在读取文件数据时,用户需要知道存储数据的数据类型格式等,才可以准确还原文件内容,但是,二进制文件的优点也比较突出,如文件存取速度快、占用空间小,同时,也可有效保护自己的数据文件。
在上篇文章中已经详细说了LabVIEW平台中文本文件的读写编程方法,这次通过例子再说下二进制文件的编程方法。
例1:入门例子例子要求:将1至16共16个32位的整型数字以二进制文件的格式存储到计算机的D盘上,文件名称为“test1.bin”,存储完成后,立即读出该文件内容,并显示到前面板的数组控件上。
程序运行后界面如下图所示:
实现代码如下:
用For循环产生32位的整型数字1-16,读写二进制文件同读写文本文件的步骤相同,依照着打开文件、读写文件、关闭文件的顺序执行。
对于“写入二进制文件”函数的主要参数说明如下:
- 待写入的数据参数,其类型可以连接任意的数据类型,即可以将任意数据写入二进制文件;
- 是否预置数组或字符串的大小参数,表明当数据为数组或字符串时,LabVIEW是否将数据大小信息添加至文件开头,当为真时,在写入数据时,先写入4个字节的数值,存储了待写入数据的大小,默认为真,此例该参数设为假,即文件的开头未保存数组长度信息。
- 字节顺序,可以是大端、小端或主机字节顺序,例子中使用的是大端序,其特点是最高有效字节占据最低的内存地址,默认是大端序。
本例字节顺序使用的是大端序,存储后文件内容以十六进制格式显示如下,对于1-16之间的32位整型数字明显看出,如对于数字1,低内存地上存储的是数据的高位字节(00),而高内存地址上存储的是数据的低位字节(01):
当以小端序存储时,存储后文件内容以十六进制格式显示如下,其字节顺序与大端序相反:
对于“读取二进制文件”函数的主要参数说明如下:
- 读取文件的数据类型参数,必须给一个参数,该参数与写入文件时数组类型完全一致;
- 读取数据的个数,不接该参数时,只读取一个数值,为-1时,读取所有的数据,本例为-1,表示读取整个文件的数据,为其它值时,读取相应个数的数据。
- 字节顺序,必须与写入文件时字节顺序完全一致。
以上篇文章中的例子说明,模拟一个实际的数据采集与存取场景。在例子中产生一个正弦波形数据,然后将波形数据以二进制文件的格式存储到计算机的D盘上,文件名称为“test2.bin”,波形数据点数为500点,采样频率为1000Hz,正弦信号频率10Hz,幅值为5,文件中不仅包含了每个采样点的数据值,也包含了采样间隔信息。同样,在存储完成后,立即读出该文件内容,将波形数据显示到前面板的波形图控件上。
先看下程序运行后的界面:
实现代码如下:
在文件中,调用了两次“写入二进制文件”函数,分别存储采样间隔dt和采样数据Y。其中,在存储Y时,与上例不同,这儿参数预置数组大小设为真,在读取该文件时可以使用该值作为实际读取Y元素的个数参数。
经分析,存储后文件里面的数据格式分别为:dt(4个字节,double型)、数组大小(4个字节,int32型)及数组Y(500个点的double型数组)。所以,在读取波形数据时,也要按照这个格式进行读取。例子中,调用了三次“读取二进制文件”函数,分别读取dt和数组大小和Y。
最后将dt和Y组合成一个波形数据输出到波形图控件上进行显示即可。
结论LabVIEW中读取二进制文件时,文件中的数据顺序、类型必须与存储时完全一致,才能正确读出文件中的数据。
大家加关注并私信回复:LabVIEW007,可获取该文章对应的LabVIEW原程序下载。
欢迎加关注,共同交流。
,