第三部分基于网络变量的复杂数据传输
在上一篇文章中,我们通过LabVIEW和VC#演示了网络变量通信。可以看到,在分布式系统管理器中创建网络变量时,可以为网络变量分配多种数据类型,这为我们实现各种类型的数据传输提供了便利。然而,这里仍然存在很大的局限性,设想我们有如下应用,在学生信息管理系统中存储了学生的基本信息和各门课程的成绩,举例如下:
学生信息表
序号 |
信息名称 |
信息值 |
信息类型 |
|
1 |
姓名 |
张三疯 |
字符串 |
|
2 |
年龄 |
20 |
整形 |
|
3 |
学号 |
5209527 |
字符串 |
|
4 |
班级 |
三年级二班 |
字符串 |
|
5 |
班主任 |
火龙真人 |
字符串 |
|
6 |
婚否 |
否 |
布尔型 |
|
7 |
成绩 |
古文鉴赏 |
65.0 |
浮点型 |
8 |
高等数学 |
23.0 |
浮点型 |
|
9 |
宇宙物理 |
78.5 |
浮点型 |
|
10 |
装13高手的修炼手册 |
89.0 |
浮点型 |
|
11 |
泡妞大法 |
96.0 |
浮点型 |
现在我们要使用网络变量来传输学生的这组信息。从表中可以看出,这个学liú生máng的信息非常丰富,信息数据类型包括布尔型、整形、浮点型和字符串型,一共有11个数据。难道我们要在分布式系统管理器中为这11条信息创建11个网络变量吗?当然,你可以说把5门成绩组合为一个数组,这样就少了4个。是的,确实少了一些,但哪天要是校长一拍脑袋,觉得信息还是太少,需要加入籍贯、出生地、身份证号、政治面貌等等信息呢?显然,为每条信息去创建一个网络变量会让网络变量的维护管理变得困难,还会增加软件的设计复杂度。
那么有没有一种高效的数据传输方式来解决这个问题呢?答案是肯定的。在LabVIEW中有一种叫做簇的东东,它是一种容器类数据类型,可以装入不同类型的数据……等等,怎么感觉到一股熟悉的味道扑面而来?没错,它与C语言中的结构体类型非常类似,或者说簇就是LabVIEW中的结构体。现在我们就把学生信息打包入簇。
在LabVIEW中新建一个VI,在函数面板中找到簇常量,然后往里面加入各个元素,其中成绩先组织为一个数组再放入簇中,最后结果如图1所示。
图1
我们再给包含学生信息的簇取一个响亮的名字Student Info,这样,这个簇就把零散的信息打包起来成为了一个整体。
下一步要做的就是把这个簇发布到网络变量上去。按常规套路,我们应该先在分布式系统管理器中新建一个与需要发布的数据类型相同的网络变量,可是在网络变量的数据类型中根本找不到簇这个类型,如下图所示。