Saturday, May 5, 2018

通过LabVIEW生成Excel的六种方法

概览

将NI LabVIEW软件中的数据移动到Microsoft Excel有许多不同的方法。 每种方法都有优缺点,因此我们将探讨一些可用的选项,以帮助您找到适合您应用的选项。

目录

LabVIEW生成Excel的方法比较表格

 
导出
TDMS文件
CSV文件
报告生成
DIY ActiveX
NI DIAdem
交互式

 

 

 

 

以编程方式

1

自定义格式化

 

 

 

未安装Excel时

 

 

 

自动保存元数据

 

 

 

 

需要额外的软件

 

2

 

3

 

4

基于文件的传输

 

 

 

自动化接口传输

 

 

1 数据可以以编程方式发送到Excel,但保存文件需要手动操作
2需要用于Microsoft Excel的TDM Excel加载项 - 可以免费下载并与最新版LabVIEW一起安装
3需要安装用于Microsoft Office的NI LabVIEW报表生成工具包
4需要安装DIAdem

 导出到Excel右键菜单

将可见数据从LabVIEW导入到Excel的最简单方法是:右击前面板上显示有要导出的数据的显示控件,然后选择"导出数据到Excel"。 

导出数据到Excel方法支持任何图形、图表、表格、数组或数字数据控件。 图形和图表仅导出可见数据,这意味着您可以使用图形工具来放大感兴趣的区域,并仅导出需要的数据。 表格仅导出当前选中的数据,而数组则可导出数组中的所有数据。

您还可以使用调用节点,以编程方式调用导出数据到Excel导出绘图数据到Excel方法。 以下代码片段可生成正弦波,然后将绘图数据输出到Excel两次,以显示两种不同的方法。 两种方法之间的区别是导出绘图数据到Excel方法仅导出指定图的数据,而导出数据到Excel方法则导出所有图的数据。 这个简单的例子只有一个图,所以这两个方法产生的结果相同。


使用这种技术时,请注意,Excel必须安装在与LabVIEW相同的机器上,并且无法通过编程来保存Excel文件。 因此,这种方法最适合于需要交互式调查数据并快速将数据发送到Excel进行分析或发布的应用。

注意: "导出到Excel功"功能从LabVIEW 2010版开始提供,此前的版本均不具备该功能。

保存为TDMS文件

NI开发了技术数据管理流(TDMS)文件格式来快速、高效地保存文档化的测量数据。 虽然TDMS本身不支持Excel,但是您可以使用一个免费的Excel加载项将数据导入Excel。

创建TDMS文件最简单的方法是使用文件I/O选板中的 Write To Measurement File Express VI。

与所有Express VI一样,将VI放在程序框图上时,会看到一个配置对话框。这个特定的Express VI可以不仅仅只是保存为TDMS,所以一定要在文件格式部分中选择二进制(TDMS)。 保存文件的方式有多种,当选定文件已经存在时的做法也有多种选择。


[+] 放大图片

您可以通过点击设置...按钮,使用基于时间或文件大小的计划表保存到一系列文件。

这时会产生一个非常简单的程序框图:

对于更习惯手动控制的用户,LabVIEW还提供了一个用于写入TDMS文件的API,而无需使用Express VI。

如果有数据存储到TDMS文件中,则需要确保您已安装用于Microsoft Excel的TDM Excel加载项。 安装LabVIEW时,您可能已经安装了该加载项,如果没有,您可以随时免费下载。 安装加载项后,您可以直接在TDMS文件上单击鼠标右键,然后选择 打开方式»Excel导入器,这时会打开Excel并显示相应的数据。

Excel中的第一个工作表包含了文件属性和其他元数据。


[+] 放大图片

每组通道都作为单独的工作表进行加载,每个通道的数据都显示在各自列中。


[+] 放大图片

数据导入到Excel后,就不会依赖或链接回原始的TDMS文件(但原始文件可以使用LabVIEW或DIAdem中的ExcelTDM DataPlugin重新创建),因此您可以随意与任何Excel用户共享您的工作簿。

 保存到CSV文件

大多数情况都支持逗号分隔值(CSV)文件格式,因此您可以在Excel中打开文件,但也可以将其导入到其他电子表格、数据库或分析工具。 CSV文件是人类可读的文本文件,列与列之间通过逗号隔开,行与行之间则通过换行隔开。 这通常需要我们在LabVIEW中进行一些数据操作,以便将测量数据转换为适当的格式,因为我们无法使用复杂的数据类型(如波形),也不能将数值存储更高效的二进制格式,以便LabVIEW或TDMS文件内部使用。

您可以使用文件I/O选板中的Write To Spreadsheet File VI来创建要在Excel中打开的CSV文件。

简单的一维数组并不需要进行任何额外的处理。默认情况下,Write To Spreadsheet File VI使用制表符(/t)作为分隔符,因此您只需要指定逗号(,)作为分隔符即可。

一个更复杂的例子是将Express VI返回的数据(如DAQ助手模拟信号)写入CSV文件中,并标记时间,同时在下一列显示测量值。 下面的代码片段显示了如何将动态数据转换为波形数组; 然后将数组中每个波形的所有测量值转换为字符串; 接着再为每个样本制定一个时间字符串; 并最终为这些字符串创建二维数组,以便传递给Write To Spreadsheet File VI。


[+] 放大图片

您可以使用Excel打开CSV文件,这时会看到数据按列和行正确分割。


[+] 放大图片

如果您使用上面的代码片段,Excel将会理解您的时间戳,但可能无法以有用的方式进行格式化 - Excel是为商业办公而开发的,通常无法在数秒甚至更短的时间内处理数据。 要解决这个问题,您必须使用自定义格式来格式化包含时间数据的单元格,如下所示。


[+] 放大图片

这种方法的一个缺点是此格式化信息无法保存在CSV文件中,因此每次将新文件导入Excel时都必须手动重复该过程。 虽然只能在Excel中打开一次,但您仍可以将数据保存为Excel文件来保留格式,以便后续使用。

Microsoft Office报表生成工具包

在将数据发送到Excel时,用于Microsoft Office的NI LabVIEW报表生成工具包提供了很大的灵活性。 最大的优点之一是您可以在Excel中创建一个模板工作簿,并将其保存为.xltx或.xlt文件,然后使用LabVIEW在VI运行时使用数据填充模板。 此代码段显示如何使用MS Office Report Express VI填充此类模板。


[+] 放大图片

创建模板时,您可以像任何其他Excel工作簿一样自定义格式。 然后将单元格命名为数据要放置的位置(对于表格或数组,您只需要命名左上方的单元格即可)。


[+] 放大图片

创建模板后,将Express VI指向模板,并告诉LabVIEW您希望数据如何显示在报表中(以表格或图表形式显示)以及是否要打开、保存或打印Excel文件。

运行上面的代码片段会产生如下所示的输出。 这个简单的例子介绍了这种方法的使用 - 顾名思义,报表生成工具包通常用于自动化生成完整的报表,而不是将简单的数据发送到Excel。


[+] 放大图片

除了Express VI之外,报表生成工具包还提供了一个可用于自动化Excel的完整API。 下面的示例代码产生的输出类似于上述示例,但不需要模板工作簿。 此外,该示例不是使用LabVIEW图形的图像,而是使用Excel图表工具绘制图形。


[+] 放大图片

运行上面的例子得到以下输出:


[+] 放大图片

 DIY ActiveX/.NET

报表生成工具包基于Excel ActiveX接口。 您可以通过直接ActiveX调用或Microsoft.Office.Interop.Excel .NET程序集自动创建Excel文件来使用此API。 下面的代码片段生成与Report Generation Toolkit示例基本相同的结果,但是使用的是.NET互操作程序集来与Excel进行通信。 可以看到,代码最后更为复杂,但任何有ActiveX/.NET编程背景的人员都不会觉得陌生。


[+] 放大图片

 

以下是上述代码片段的输出:


[+] 放大图片

 DIAdem作为替代选择

如果您有更高级的数据需求,比如较大型的数据集、大量的文件或特定的报告需求,还可考虑DIAdem。 DIAdem是一款用于快速定位、分析和报告测量数据的工具,通常更能够满足工程师对数据工具的许多需求。

如需了解更多关于使用DIAdem而不是Excel提高工作效率的信息,请阅读本文


Reference

--------

  1. 本文转载至NI官方文章,如有侵权请联系admin删除,来源地址:https://www.ni.com/newsletter/51339/zhs/
  2. 技术探讨可联系support

Wednesday, April 25, 2018

Windows下鼠标键盘的禁用与解禁

        有时候需要通过软件来禁用PC的鼠标键盘,等时机成熟了的时候呢再解禁这种限制。实现方法应该有很多种,这个时候最方便的方法就是调用Windows系统API函数User32.dll来实现。

        简单配置系统函数如下图。DLL所在的目录默认如下,在C:\Windows\System32\user32.dll,其中的函数BlockInput就可以同时禁用鼠标键盘灯输入设备。配置如下,很简单。


        代码也很简单。输入"1"的时候就是禁用,输入"0"则为解禁。


        到这里,看样子是结束了,但是在实际测试过程中发现有的电脑有效,有的无效。这就对了,还有最后一步,需要将UAC设置为低等级。



----

Reference
  1. 转载自微信公众号:LabVIEW-Jobs
This post is forward from Wechat account: LabVIEW-Jobs
     2. 有疑问可以联系support@itestgroup.com
Any questions, please query at support@itestgroup.com more information click here





Friday, March 2, 2018

LabVIEW下基于百度地图的路径规划与拥堵预测

        想必大家刚刚从春节假日回到学习工作中,而每年春节期间的春运又必然是一个热门话题。笔者今年年前也是打算自驾出行的,接近九百公里的长途。临近出行前,一遍一遍的用手机刷地图,看看不同时段的拥堵情况,时间预估,以便能尽量挑选一个最佳的出行时间。费时费力也费心,所以想想不如写个小软件来自动查询并计算,由此预估一个相对靠谱的出行时间点。
        大致思路是每分钟查询一次导航规划路线所预估的花费时间作为纵坐标,与当时的时刻作为横坐标形成一个趋势波形图。由此预测出峰谷点。当然,也可以设计出更详细更靠谱的算法,从而得出更准确的预测。
        主要方法跟此前的文字转语音工具(发送关键词"TTS"获取早期文章)是类似的。也即是调用百度地图API,在线获取我们所需要的数据,记录并统计分析。

        百度API:首先的有百度账号,进入【百度地图开放平台】(http://lbsyun.baidu.com/)。进入【开发文档】--【服务接口】--【Web服务API】,点击打开页面。点击左侧【路线规划】--【路线规划 v2.0】。重点阅读【服务文档】,其中的驾车路线规划:
http://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的ak
        这是一个最基础的请求格式,根据自身需要以及【服务文档】所介绍的参数配置,可以有更个性化的定制。
        有几点注意事项:
        1. API调用是有配额限制的,根据用户认证等级不同有不同的限制,如下图所示:普通用户仅2000次,认证用户则有3万次,对于我们这种小应用已经足够。备注:百度地图API目前均不收费,无论是个人使用还是商业应用,均免费使用。虽然有限额,但是如果有实际真实需求,日使用量即使超百万级别,也是可以申请免费扩容的。

        
        2. 前面提到的接口格式里面,有一个重要的参数就是我们的起始地点的地图坐标。经过这次学习,也知道了一个常识――地图数据应国家保密要求,是经过加密了的,不允许直接提供GPS经纬度坐标系。具体坐标系的含义如下所述,其中使用百度地图,我们通常使用的就是百度自家的坐标系了BD09.

坐标系说明
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标
路线规划服务API v2.0的输入参数支持以上三种坐标系,开发者无需进行任何坐标转换,通过请求参数"coord_type"指明所使用的坐标系即可。输出参数支持国测局坐标(gcj02)和 百度坐标(bd09ll)两种坐标,通过请求参数"ret_coordtype"进行设置。
        3. 获取坐标。【百度地图开放平台】--【开发文档】--【工具支持】--【坐标拾取器】,运用这个工具即可获取物理地址的坐标参数。如北京市东城区人民政府的坐标就是【116.422806,39.934797】,但是一定要注意的是:使用的时候需要将坐标反转过来,否则会报错,如刚才的坐标写成【39.934797,116.422806】才有效,原因不明。

        至于LabVIEW代码就比较简单了,如下图所示。使用HTTP_GET向服务器发送请求,然后解析返回字符串即可。为了保证持续不间断运行,注意在HTTP_GET后面的错误给清除掉,以免由于服务器或网络不稳定原因导致程序停止运行。


        介绍到此结束。下面分享一组数据。

第一组:是收集的部分数据,包含总里程,单位是公里;时间,单位是小时;高速收费金额,单位是元;收费里程,单位是米。

第二组:绘制的简易波形趋势图,纵坐标是耗费时间,单位为小时,横坐标为时刻,每分钟一个点,具体起始时刻要看记录。

第三组:嗯,这是笔者上下班路线的早/晚高峰的数据 :-)

第四组:春运整体拥堵趋势图

PS1: 如果有同学喜欢高德地图导航的,也可以把文中的API换成高德的。笔者高德也注册有账号,体验了一下,大致差不多,甚至格式都是一样的,但是高德的额度没有明确免费,目前的个人免费额度也是3万/天。

PS2:哦,最后近900公里的里程,花费了15个小时,包含服务区休息时间以及路上拥堵时间,还算是在预期内 :-) 

Reference
  1. 转载至微信公众号:LabVIEW-Jobs
This post is from Wechat account: LabVIEW-Jobs
     2. 有疑问可以联系support@itestgroup.com
Any questions, please query at support@itestgroup.com more information click here

Friday, December 22, 2017

Zebra斑马打印机中打印QR码时如何设置大小

        在标签打印中,斑马Zebra打印机可以说是非常流行的,可以说是占据着垄断地位;同时在二维码的世界里,随着智能机的普及,如今QR码是越来越流行了。QR码更多的是在互联网应用中普及,虽然在工业领域没有互联网应用中那么普及,但现在也是越来越流行了。在实际使用中,你会惊奇地发现到目前为止(2017/12/20),Zebra对QR码的支持还不是那么完美――无法直接设置QR码大小。不用怀疑,确实不支持,否则笔者也不会挑这个话题了。

        斑马打印机,我们通常都是用的ZPL(Zebra Programming Language)。其中对于QR码支持的指令如下图所示:其主指令是BQ,参数分别有a,b,c,d,e,其中只有参数c (magnification factor)有一定的调节大小的作用,但是这个作用是非常有限的。顾名思义,这个参数是设置放大倍数的,而且只支持1到10,而且不支持小数。其本意也只是用于适配不同精度的打印机的,并不是用来设置条码大小的。

         斑马打印机对于QR码的大小,目前的主要依据是条码的内容。也就是说,条码内容越长,越多,其原声QR码就越大。
       针对这个局限性现提出3或者4种"解决"办法,打引号的意思是这几种办法都并不算完美。
        第一种,对于条码内容大小固定的QR码,可以首先使用上面提到的magnification factor这个参数来调节。如果正好能调整到期望的大小或者接近期望大小,那么恭喜你,这是最简单的办法,简单的同时其弊端也是显而易见的――不能保证都适用,而且凑出来的大小并不精确。
        第二种,对于条码内容大小固定或相差不大的QR码,使用空格或其他不可见的字符来填充,直到填充到期望的大小。当然同时也可以配合第一种方法一起调整。这个办法谈不上简单,也算不上复杂,但是还是能解决一部分问题。弊端也是显而易见的――多余的字符可能会影响QR码的读取与解析,另外就是也影响了条码的解析度,QR码单位面积内所包含的字符越多,其线条越精细,对于扫码设备的解析精度要求越高,同理也适用于打印机。
        第三种,也是对于条码内容大小固定或相差不大的QR码,使用指令MU来放大调节整个标签,也可以跟第一种方法配合着调整。如下图所示,MU指令一共有3个参数,a,b,c。这个放大原理是重新虚拟一个打印精细度,比如我们通常所说的300DPI或600DPI(dot per inch),是指每英寸单元打印的像素点。虚拟放大之后,自然也就调整了QR码的大小了。其弊端也是显而易见的――这种放大后的打印精度会降低,而且这个调整是全局的,是对整个条码标签的调整,无法只针对QR部分进行调整。
        第四种,堪称一种最完美的办法,当然也是最复杂的一种办法了。原理就是通过第三方软件或API生成一个指定大小与格式的QR码图片,然后通过打印机调用图片来进行打印。这种方法当然也就从根本上解决了问题,不限制条码内容大小。弊端当然也是显而易见的――一个"第三方"既可以说是没有限制也可以说是不确定的限制,因为限制来源于第三方。至于如何通过LabVIEW生成QR码图片,也是另外一个话题了。有兴趣了解的,可以在文后留言,后面可以写相关的话题。
        打印图片的指令分别有IL(Image Load), IM(Image Move)以及IS(Image Save)等等操作,详细指令参数可参考编程手册。

        斑马打印机缺乏对QR码大小的直接设置支持,已经在斑马的开发者论坛上被用户吐槽过多次了,现在也已经引起了官方的注意。但愿在不久的将来,官方能够完善对于QR码的支持,毕竟现在QR码越来越流行了,无论互联网还是工业界。大家如果有什么想法,也欢迎在文后的评论中留言交流或者邮件交流。
        

------
本文转载自微信公众号LabVIEW-Jobs(LabVIEW伯乐), 关注二维码关注公众号。

More information click here



Thursday, November 9, 2017

LabVIEW下UTF8编码格式的转换


        延续前面的一个话题(公众号LabVIEW-Jobs下回复TTS或百度,直接返回上期话题),上期谈到的文字转语音,是同时支持中英文的。对于英文来说,比较简单,直接输入英文字符串就可以了,但是对于中文的输入,就涉及到编码的转换。需要将中文转换为UTF8编码格式,然后再输入到URL中,才能被识别。

        LabVIEW没有在程序框图面板直接提供这个函数,但是实际上在老版本的LabVIEW的Email发送函数里面已经内置了。在网络应用方面,经常遇到编码问题的。所以今天是搬运工,直接搬运出这个函数。在安装目录下C:\Program Files\National Instruments\LabVIEW 2013\vi.lib\Utility\SMTP,打开smtpeml.llb,看到了熟悉的身影了。
        再打开这个VI就可以看到我们想要的函数了text to UTF-8,拷贝出来就可以直接使用了。
        不明白的是,NI始终没有将这个基础函数放置在函数面板,论坛上一直都有这个话题的讨论。LabVIEW更新了这么多版本,至今都没有开放出来。但是毕竟还是出自官方,所以这个函数的可靠性应该是没有问题的。另外,从UTF8编码反向转换为字符的函数,NI老版本也一样提供了。
        除此外,坊间也有很多其他方法来实现这个功能。在其他语系里面,也算是一个基础函数了。
        延续上次的话题,需要将中文先转化为UTF8编码,然后分解为16进制并添加%作为转义字符才能完美地被识别。参考下面的截图:
Reference
转载自微信公众号:LabVIW-Jobs (This post is forward from Wechat account: LabVIEW-Jobs)

有疑问可以联系support@itestgroup.com
Any question or feedback, please contact with support@itestgroup.com more information click here