一、实验目的
在前面的实验里,用户需要为每个实验添加网络通信部分的程序。因此在这一章里将通信部分(以ComManagerTCP程序或ComManagerUSB程序方式)从各个应用程序中抽取出来,从而简化各程序在设计时的复杂度。通信方式除前面实验用到的网络通信外,在这里增加了通过USB进行通信的方式,两者在通信接口上有所不同,但数据的发送与接收的实现基本一致,故本书将以网络通信(即ComManagerTCP程序)的实现为主,USB通信方式(即ComManagerUSB程序)只作使用上的介绍。
通过这个实验,可以学习到全局变量及队列等知识点的应用。另外,这个实验通过演示了采集电压的过程验证ComManagerTCP程序与实验箱通信,这可以和实验十五的测量电压程序作比较,找出它们的异同之处。
二、实验内容
编写一个与实验箱进行通信的ComManagerTCP程序,并编写一个通过ComManagerTCP来获取测量电压程序来检测通信状况。
三、实验原理及说明
首先说明一下ComManagerTCP这个程序所扮演的角色。设计ComManagerTCP程序的目的主要是管理所有的网络通信,包括连接、接收、发送、检测等功能,而其它的程序则通过通知及功能性全局变量与ComManagerTCP程序通信,从而获取实验箱发送来的数据。
下面这张结构图1说明了ComManagerTCP(或ComManagerUSB)这个程序与实验箱以及各个子程序之间千丝万缕的关系:

图1
从图中可以了解到,ComManagerTCP(或ComManagerUSB)程序与各子程序之间主要是通过通知以及功能性全局变量来实现通信,当然还有用到了普通全局变量来传递网络连接的状态。
先看ComManagerTCP这个程序,从功能上说主要分接收、发送、检测三部分。通过TCP协议接收到实验箱发来的数据根据包头将有效数据通知到对应的子模块,而对比较大的数据先是写入到一个功能性全局变量中,再通知相应的模块取出进行处理。再来看右边各个子模块,子模块有两种属性:被动显示和主动控制,一个子模块至少有其中一种属性。
所谓被动显示是指这个模块需要接收来自实验箱的数据并将处理后的结果显示在屏幕上;主动控制是指这个模块能控制实验箱上的硬件,让实验箱对应的硬件输出或状态改变。
带被动显示属性的模块都会有一个线程(循环)用来监听通知事件,监听来自ComManagerTCP程序的数据;带主动控制属性的模块有一个产生通知的功能,先将需要发送的数据包加入发送队列,然后通知ComManagerTCP程序通过TCP协议发送出去。下面详细说明一下这个程序所完成的功能,用户可以对照原程序上标注的程序块序号。
1、初始化:第(0)部分是程序的初始化部分,主要完成对一些控制的赋初值。
2、网络连接:由(1)、(2)、(3)、(4)四个部分组成一个状态机,负责网络通信连接,包括连接、检测以及连接成功和连接断开后的一些状态设置。
(1)Connect:第(1)部分是网络连接部分,作为客户端,需要制定连接IP地址和端口号,同时还需设置了连接超时时间为1秒,连接成功后状态更换为Success;
(2)Success:对应程序中(2)部分,这里一方面是设置连接指示灯为TRUE状态,另一方面向外面广播,把这个状态发送到其他的子程序;
(3)Check:对应程序中第(3)部分,为检测阶段,每隔一秒通过Windows的Ping命令来判断网络的通断状态;
(4)LostConnect:在程序中对应第(4)部分。
3、连接IP设置:在程序中对应第(5)部分,主要通过调用一个子VI来实现。
4、数据接收:由(6)、(7)、(8)、(9)这四个部分完成网络通信中的接收功能。在(6)中,设置了阻塞模式接收数据,接收数据包的前5个字节,包括了模块名和包长度。这两个段在程序块(7)中的子VI完成,解析出包长度后进入(8)接收剩下的数据,最后送入(9)进行数据分检,主要分成了三类:
一类是比较短的数据包,通过通知的形式发送到对应的子程序中进行处理;
另外两类是音频和AD采样的数据,这两种数据的包都比较大,采用了功能性全局变量来存储。
5、数据发送:对应程序中(10)部分,完成网络通信中的发送功能,通过一个发送队列来存储要发送的数据包,开始先取得队列中数据包的数目,然后将这些数据包出队列通过TCP协议发送出去。
6、程序控制:主要处理用户界面操作。(11)、(12)、(13)实现了鼠标拖动窗口的非标题栏移动的功能;(14)、(15)是停止程序运行,两者区别在于一个只停止但不关闭前面板,一个不仅停止而且关闭前面板,而真正处理停止和关闭的操作在第(17)部分。第
(14)、(15)部分只是触发了一个用户事件,而这个用户事件的处理在第(17)部分;第(16)部分实现了前面板最小化的功能。
同时,根据实验十五——测量电压实验,要完成一个采集电压的过程需要发送三个命令给实验箱:激活、选择量程、关闭。所不同的是原来是直接通过TCP协议的发送、接收函数来传递命令包,而现在是通过ComManagerTCP程序,发送命令时只需要将命令加入到发送队列里,获取命令时只需要等待ComManagerTCP程序接收到数据的通知就可以了。
四、实验设备
一套OURS-ELVIS实验箱、一台安装LabVIEW的PC机。
五、实验方法
1、硬件连接
按照实验十一的步骤,连接宿主PC机和一台OURS-ELVIS实验箱。
2、设计前面板,如图2、图3所示。测量电压程序的布局和实验十五测量电压程序的类似。

图2 ComManagerTCP程序前面板

图3测量电压程序前面板
3、编写程序框图
(1)ComManagerTCP程序的程序框图初始化部分,如图4所示:

图4
网络通信程序块包括网络连接部分、接收数据、发送数据三个部分。
1、网络连接部分,由一个简单的状态机构成,根据网络通信状态的不同处理不同的事务。
当网络通信状态为Connect时,程序处理“Connect”事务,如图5所示:

图5
当网络通信状态为Success时,程序处理“Success”事务,如图6所示:

图6
当网络通信状态为Check时,程序处理“Check”事务,如图7所示:

图7
当网络通信状态为LostConnect时,程序处理“LostConnect”事务,如图8所示:

图8
2、接收数据,如图9所示:

图9
3、发送数据,如图10所示:

图10
连接IP设置,如图11所示:
图11
程序控制,由一个简单的事件结构构成,根据事件选择的不同处理不同的事务。当鼠标按下时,程序处理“Pane”事务,如图12:
图12
当鼠标移动时,程序处理“鼠标移动”事务,如图13:
图13
当鼠标释放时,程序处理“鼠标释放”事务,如图14:
图14
当选择是Stop停止程序时,程序处理“Stop”事务,如图15:
图15
当选择是Close关闭程序时,程序处理“Close”事务,如图16:
图16
当选择是Minimize最小化程序时,程序处理“Minimize”事务,如图17:
图17
用户事件的处理,如图18:
图18
(2)测量电压程序的程序框图
编写几个按钮的事件响应程序,功能很简单,实现一个入队列的操作。这里只给出ACTIVE
按钮激活万用表模块的响应程序,如图19所示:

图19
电压采集程序,如图20:

图20
4、连机调试
打开实验箱电源,等待系统启动,启动界面如下图21所示。同时从图中可以得出,实验箱IP为192.168.0.197。

图21
选择系统设置,可在“系统设置页”进行本机IP查看与设置,然后保存IP设置并重启,以确保PC机与实验箱在同一个网段。如下图22:

图22
在PC端运行VI程序:
1、通过ComManagerTCP程序进行通信
(1)打开ComManager文件夹,找到并运行ComManagerTCP.vi程序,如下图所示。

图23
点击小齿轮按钮,弹出如图424所示界面,填写好实验箱IP(即192.168.0.197),然后点击OK。当连接成功后,界面和实验箱界面应有相应变化,如图所示:

图24
(2)打开“17-通过ComManager程序与实验箱通信”文件夹,找到并运行通过ComManager来获取测量电压.vi程序,面板界面如下图25所示:

图25
点击ACTIVE激活万用表,然后点击SetVoltage,在实验箱上的DMM电压输入端口用探针测量电压值,如5V,面板状态出现相应变化,如图26所示:
图26
2、通过ComManagerUSB程序进行通信硬件连接:
(1)将电源线分别连接OURS-ELVIS实验箱与电源插座。
用一根USB延长线将PC机的USB口与OURS-ELVIS实验箱的USBDevice相连。
①在以ComManagerUSB程序进行通信前,需要安装NI-VISA驱动,具体安装过程如下:
将光盘“\Tools”文件夹下visa441full.rar文件拷贝出来解压后,打开visa441full文件夹,找到setup.exe并双击打开,出现如下图29所示界面:
图29
图30
点击Next,进入安装路径选择对话框,如图31所示:
图31
选择默认路径,点击Next,进入下一个页面,如图32所示:
图32
默认选择,点击Next,进入软件许可协议页面,如图33所示:
图33
选择“IaccepttheLicenseAgreement(s)”,点击Next,进行NI-VISA的安装,如图34所示:

图34
点击Finish 完成NI-VISA的安装,并重新启动计算机。如图35、图36所示:
图35
图36
以上安装完成后,点击“开始菜单\程序\NationalInstruments\VISA\DriverWizard”运行DriverWizard程序,运行后会出现如下图37所示对话框:
图37
HardwareBus类型选择USB,如下图38所示:
图38
点击Next,进入下一个对话框,如图39所示:
图39
在这里我们需要填写设备的VID和PID,OURS-ELVIS实验箱的设备信息为USB0::0x045E::0x00CE,填写结果如下图40所示,ManufacturerName和ModelName可随意填写。与此同时,需要打开实验箱电源,等待系统启动。
图40
点击Next,进入下一个页面,如图41所示:
图41