在同一个地方跌倒两次,才能体会到“好记性不如烂笔头”!
一、字符串数组→字符串
最近在做一个项目,需要使用LabVIEW开发上位机软件,在软件的流程图上显示第三方仿真软件发送过来的数据,并将下位机倍福PLC采集的开关量数据发送给第三方仿真软件,LabVIEW上位机与第三方仿真软件之间采用UDP协议进行通信。
使用过LabVIEW进行UDP通信的都知道,LabVIEW的UDP收发模块只能发送和接收字符串,不能发送数组或其他类型的数据,如果要发送,就必须将这些类型的数据转化为字符串。一般我们的数据都是保存在数组中的,我们就来看看labview中字符串数组是如何转化为字符串的。
1. 既然是数组,我首先想到的是索引数组,将数组的每一项索引,然后用字符串连接符将每一项连接起来,就变成了一个长字符串,如下图:

但是,如果我要发送的数据是100个变量时,也就是说字符串数组有100个元素,如果也采用数组索引,那数组索引这个模块岂不是要拉的无限长(100个索引值),LabVIEW不应该只有这么无脑的方法,肯定还有更简洁的方法!
2. 后来不断尝试发现字符串数组的索引功能可以用for循环代替,如下图:

那么,LabVIEW是不是还有更简单的方法呢?
3. 必然还有更简单的方法,既不需要数组索引,也不需要for循环以及移位寄存器,实现如下:

简直是 So Easy!
需要注意一点的就是,默认的连接字符串模块是有两个输入节点的,鼠标上移将2个输入节点缩成一个就可以使用了。
二、字符串→字符串数组
既然字符串数组可以转换成字符串,那字符串能不能分解成字符串数组呢?
LabVIEW必然可以啊!主要有两种方法,区别就在于,分解成的字符串数组中的每一元素占多少个字节。
1. 当分解成的每个数组元素只占一个字节比如16进制字符串01、英文单词等,实现方法如下:

2. 当分解成的每个数组元素占多个字节,比如表示浮点数的4字节16进制字符串或者占2个字节的中文汉字,实现方法如下:

如果不想使用while循环,使用for循环也可以实现,如下:

这样,就可以通过改变删除数组元素模块的长度参数,来获取任意字节数的字符串数组。
3. 对于纯英文字符串,还有如下简易方法:

这个程序中需要注意一点就是,最上方的分隔符参数里需要敲入一个空格符。
网友评论