LABVIEW UDP通信及十六进制数据程序学习记录

由于项目需要实现labview通过UDP通信收发十六进制数据(非十六进制数据的字符串),通过研究学习labview有关例程现将学习心得做些整理。


1、UDP通信

labview中 “数据通信” 类别中的 “协议” 中支持多种通信方式,以前常用TCP和串口,理论上UDP结构与TCP差别不大,labview中的UDP只有“打开”、“发送”、“接收”、“关闭”几个块,用法大致与TCP相同,但连接时程序框图相对简单。
labview的UDP不分服务器或客户端,仅绑定好端口即可进行收发。发送方先绑定一个端口号(任意)然后打开UDP连接,生成连接ID:
LABVIEW UDP通信及十六进制数据程序学习记录
后面连接“发送”块,此时发送块需要指定接收方的IP和远程端口号即可进行数据发送,若发送方还需要接收则后接“接收”块即可。
对于数据接收方,也需要先“打开”指定端口号的UDP,注意,此处指定的端口号要与发送方发送块程序中指定的远程端口号相同,后面连接“接收”即可接收数据,同时“接收”块会返回发送方的IP及端口,可用来区别多个发送方数据,若接收方需要发送配置与发送方类似即可。
由此可见,labview中的UDP通信的双方没有明显的服务器或客户端区分,若双方都采用双向通信则程序结构相同,仅本地端口号和远程端口号交叉相同
LABVIEW UDP通信及十六进制数据程序学习记录


十六进制数据收发

Labview中的通信都只能收发字符串格式,而本项目中必须收发十六进制数据,labview接收数据后程序块输出十六进制数据的ASCII形式,通过添加显示控件可发现数据乱码或不显示,通过右击控件更改显示模式为“十六进制显示”就能看到正确的数据,但程序中需要处理收到的字符串形式的十六进制数据,所以通过程序将收到的十六进制数据转换为字符串样式的十六进制字符就很重要。 通过网上搜索,大多数为设置显示模式观察数据内容。通过一个兄弟的博文 :
[labview教程:十六进制和ASCII之间的相互转换转]https://blog.****.net/xyk0318/article/details/51564123
给了我启发,虽然照着他的方法测试并没有成功转换。但是他使用的“强制类型转换”点醒了我:
1、对于十六进制数据转换为十六进行的字符串显示,先用“强制转换”将十六进制数据转换为INT形式,再通过“数值至十六进制字符串转换”块实现转换。
2、对于十六进制字符串转换为十六进制数据,与上面方法类似,先将字符串格式通过“十六进制字符串至数值转换”块转换为INT格式,再通过“强制转换”转换为十六进制数据。
具体实现如下图
LABVIEW UDP通信及十六进制数据程序学习记录
为了方便将两个转换写在了一起,上半部分为十六进制字符串转换为十六进制数据,即将字符串“AB”转换为0xAB,注意:“十六进制数据”显示控件需要设置为“十六进制显示”;其中的整型数据0选择不同的类型会对转换结果的长度有影响。
图的下半部分为其逆转换,同样整型的数据长度会影响转换后字符串的长度,转换效果为将0xAB转换为字符串“AB”