学习LabVIEW(十一)——UTF8字符串解码

发布者:wmghyu最新更新时间:2015-08-19 来源: eefocus关键字:LabVIEW  UTF8  字符串解码 手机看文章 扫描二维码
随时随地手机看文章
    之前在《同步Android设备和Windows PC的Clipboard》中,我们用Python实现了一套PC和Android的Clipboard同步程序,其中通信方式使用的是UDP。我今天想,在LabVIEW中实现UDP通信的程序框图会是一个什么样子呢?可能会比较麻烦吧。试过之后,才发现,简易的UDP通信并不麻烦,麻烦的是字符串的编解码问题。我们在Android上实现的脚本通过UDP传输使用UTF8编码过的字符串,而LabVIEW(Windows平台)显然不支持UTF8字符串的解码,Google之后才知道LabVIEW使用系统默认的编码,在中文的Windows中,大概用GBK就可以。我又继续Google了LabVIEW中有什么节点可以实现字符串的编解码,结果出人意料的是没有,大家都是通过调用dotNET的方式实现编解码的。本《学习LabVIEW》之前有好几篇都是讨论调用dotNET对象的,所以使用dotNET并没有什么问题,但是这里我想换一种方式:通过MATLAB节点实现字符串的解码。可能有人会觉得奇怪,MATLAB也能做这种事情吗?答案是肯定的,在好多年前,我们在《我发现Matlab可以用来解乱码》中就利用MATLAB的unicode2native和native2unicode实现过这样的操作。
    首先还是看一下UDP通信的问题。Android端的QPython脚本如下:
学习LabVIEW(十一)——UTF8字符串解码

这个脚本会向IP地址为192.168.1.153的机器的32500端口发送当前Android设备的Clipboard中的文本,文本使用utf-8编码。
    那么在接收端,需要创建一个UDP节点监听32500端口的数据,在LabVIEW中使用节点“打开UDP”和“读取UDP数据”即可。其中“读取UDP数据”有一个设置超时的参数,将它设为-1即可实现无限等待。看到这里大概群里无聊的文艺程序员又能发现写情书的新句型:waitYou(timeout=-1)。真是受不了这群人。
    利用While(True)循环,框在“读取UDP数据”的外面,即可实现一个无止境的监听过程。到这里基本问题就解决了。但是正如前文所述,没有想到的,真正麻烦的是字符串的编解码问题。我插入了一个MATLAB节点,首先的想法是将输入和输出设置为字符串类型,在节点内部的MATLAB脚本中使用unicode2native和native2unicode实现解码,但是发现不好用,因为LabVIEW的中文字符串数据在传入到MATLAB的过程中就已经损坏了,再怎么解码也不可能正确解出来。所以我换了一个做法,以数值数组作为MATLAB节点和LabVIEW交互的数据类型,而数值数组里面就是字符串的代码。一般来说选择字节数组肯定是没问题的,但是MATLAB节点的端口没有字节数组类型,所以只好指定为1D Array of Real。
    在输入端,我们先使用LabVIEW的“字符串到字节数组”节点,将字符串转换成字节数组,传递给MATLAB节点的输入端,尽管MATLAB的输入端是1D Array of Real类型,LabVIEW能够很好地进行类型转换。MATLAB脚本利用native2unicode将UTF8字符串转换成Unicode表示,然后利用unicode2native将Unicode字符串转换成GBK编码,这是的数据时uint8数组,然而MATLAB中的uint8数组似乎不能被LabVIEW自动转换成LabVIEW的double数组,所以我在MATLAB中添加了double()将uint8数组转成double数组。
    数据离开MATLAB节点后,利用LabVIEW的“字节数组到字符串”节点将数值数组转换成字符串,并连接到“字符串显示”控件上。程序就完成了。程序框图如下图所示:
学习LabVIEW(十一)——UTF8字符串解码
试验一下UDP数据传输和字符串解码。首先在Android平板中复制一段中文文本:
学习LabVIEW(十一)——UTF8字符串解码

复制之后,打开QPython,执行传输数据的脚本:
学习LabVIEW(十一)——UTF8字符串解码

执行了脚本之后,LabVIEW成功接收到数据,并将数据中的UTF-8字符串解码,呈现到了“字符串显示”控件中,如下图所示:
学习LabVIEW(十一)——UTF8字符串解码

大功告成。
关键字:LabVIEW  UTF8  字符串解码 引用地址:学习LabVIEW(十一)——UTF8字符串解码

上一篇:学习LabVIEW(十二)——公式节点
下一篇:学习LabVIEW(十)——关于Matlab的eps函数(十三)

推荐阅读最新更新时间:2024-03-30 23:03

如何学习LabVIEW
还记得当初是因为一个项目才与labview结缘的,使用图像化的编程方式操作外设,通过NI和研华的板卡采集和控制外设的数据,一直对自己很大的吸引力。从未接触过的程序语言,要在短时间内满足项目的需求,刚开始是压力是有的,没哟接触过这门语言,又是短时间的要求,有点信心不足,但后来慢慢使用了之后觉得这门语言挺好用的,可视化的界面编程,方便的编程指导,不到两周就能熟练应用在项目中了。 才开始在网上搜索资料,查找相关的学习资源,发现还是挺多的。后来还参加了NI的学校毕业设计竞赛,最后获得了参与奖,但是参加竞赛的过程还是挺让人记忆犹新的。先简述下学习labview的学习方法吧。(以下部分为摘自网络)   学习LabVIEW一般有以下
[测试测量]
如何学习<font color='red'>LabVIEW</font>
GHz高频信号的LabVIEW和MATLAB混合处理新方法
随着技术力量的不断提升,被处理的信号的频率越来越高。例如,手机的信号便是上GHz的超高频信号。在采集这类超高频信号的过程中,系统很容易受到各种电磁波的干扰,从而使有用信号夹带各式各样的谐波成分,这就给后续的信号处理带来了很大的麻烦,诸如数据量过大,计算复杂等。因此设计一套效率高,可用性强的系统来对高频信号进行采集及处理显得尤其重要。 1 设计思路 在这篇文章中,作者讨论一种可行的方法,即是使用LabVIEW来进行数据采集,使用MATLAB作为数据处理的平台。那么如何高效的将两者结合将成为设计的关键。本文将对不同的结合方法进行实验,具体执行步骤如下:首先使用LabVIEW将高频信号采集回来并暂时保存;鉴于MATLAB强大的计算能力,
[测试测量]
GHz高频信号的<font color='red'>LabVIEW</font>和MATLAB混合处理新方法
基于LabVIEW的心电信号采集系统
心电信号是人体生物电活动信息的表征,通过心电信号可以判断人体的健康状况。心电研究一直是医学领域的一个重要课题,心电图是心血管等疾病临床检查诊断的重要方法。心电信号主要频率范围为0.05~100 Hz,幅度约为0~4 mV,信号十分微弱。 传统的心电记录方法主要靠心电图机来完成,其信号采集、处理和显示主要由硬件电路完成,电路生产技术要求较高,设备价格较贵,且维护和更新不便。 基于LabVIEW的心电信号采集系统,除了能实现传统心电图机的采集功能外,还可通过编程可使用高效且功能强大的软件来自定义采集、分析、存储、共享和显示功能等;仪器面板布置简捷,设计灵活。 本设计系统采用的是编程软件系统LabVIEW 8.2和数据采集
[测试测量]
基于<font color='red'>LabVIEW</font>的心电信号采集系统
LabVIEW string/array Type
LabVIEW CLN调用dll时,接口只能是c99的类型,不可以使用c++的string类型。 LabVIEW有其定义的string类型: LStrHandle。 -------------------------------------------------------------------------------------------- C++的code如下: #include extcode.h // extcode.h 的路径是在C:Program FilesNational InstrumentsLabVIEW 2009cintools 里面。如
[测试测量]
用PXI硬件开发分析能源存储设备特性的仪器
  可再生能源是当今世界上增长最快的市场之一。能源存储技术在风能、太阳能和生物能等“绿色”能量产生源中起着重要的作用。应用于能源存储的公共和个人资金正在暴涨,使大量前所未有的研究领域推展到新电池,电容,燃料电池和其他能源存储技术上。根据可再生能源市场的需求,我们设计了SolRayo 电化学测试系统(SolRayo ETS),以满足新一代创新的电化学研究团队的需要,加快开发能源存储技术中的关键部分。   恒电位仪是用来输出或吸收电压或者电流到测试单元上,并测试它的响应的一种仪器。在快速发展的高创新产业,如可再生能源中,现有的恒电位仪产品缺乏高效率电化学研究所需要的测试自动化和易用性。通常,这些仪器的学习过程比较长,软件复杂且不易于
[测试测量]
养成良好的LabVIEW程序编写习惯之三部曲
首部曲 ~ VI 把VI有系统地放置,您可以用资料夹来管理subVI或是把subVI储存成LLB档。 不样将过多的VI存到LLB档,因为往后要储存VI到LLB档时,会花费较多的时间。 利用:Tools Edit VI Library去设定LLB里面的顶层VI(Top VI)。通常会将主程序设成Top VI,这样下次要开启主程序时,比较容易找的到主程序。 如果你开发的某一个subVI常常被其它VI当成subVI的话,不妨设一个.mnu档吧,把这个subVI放到「Functions All Functions User Libraries」,这样下次你会更容易找到这个subVI。 给你的VI一个有意义的档名吧!不要老是叫它te
[测试测量]
labview生成执行程序和安装程序
生成应用程序和应用程序安装包 下面我们将项目简单的生成一个应用程序(.exe文件)和制作一个应用程序安装包。当然,在制作安装包之前我们必须要先制做一个应用程序。 我们的应用程序开发环境是:LabVIEW 2010。 打开项目管理器,鼠标右键单击:程序生成规范,在弹出的快捷菜单中 选择》新建》应用程序 参见下图。 图 10-27 新建应用程序操作 用鼠标点击上图中的应用程序选项,系统会自动弹出一个应用程序属性对话框,参见下图所示。 图 10-28 应用程序 信息对话框 在这些属性设定中,我们基本上选择的都是给出的默认值。 下面在看看源文件的设定。参见下图。
[测试测量]
<font color='red'>labview</font>生成执行程序和安装程序
NI FlexRIO是否必须使用FPGA模块
NI LabVIEW FPGA模块可以帮助您利用LabVIEW程序框图对一个FPGA进行编程。在其底层,该模块采用代码生成技术实现图形化开发环境与FPGA硬件的整合。这种利用程序框图处理FPGA的方式非常适用于FPGA所提供的对内在并行机制的一种直观描述。不论您是否曾使用过硬件描述语言(HDL),您都可以利用该模块以及商业现成可用的(COTS)硬件来创建基于FPGA的测量与控制硬件。 systems 支持包括PCI/PXI板卡和模块化独立系统的硬件目标平台,超过100个面向快速开发的FPGA IP组块, 内置的I/O直接存储器访问(DMA)提供与主机系统的快速通信, 创建可以在40 MHz、80 MHz或者更高时钟下
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
最新测试测量文章
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved