[0044] 参见图1,所示为本发明实验平台的整体架构图,实验平台包括服务器端,客户端PC机、射频测试仪器和射频实验箱。服务端和客户端PC机通过局域网连接进行通信,服务器端和射频测试仪器之间通过GPIB转USB接口线连接进行通信,射频仪器之间通过GPIB总线连接进行通信,射频测试仪器和实验箱上的射频电路之间通过同轴电缆相连。
[0045] 上述技术方案中,客户端通过局域网和服务端连接进行远程控制射频测试仪器,避免了实验室空间有限,时间有限,测试人员有限等弊端;通过客户端程序控制仪器,与传统人工测试相比更加简单,数据获取和共享也更加方便。
[0046] 参见图2,所示为本发明远程射频电路实验平台实现方法的流程图,包括以下步骤:
[0047] 步骤1:将每套射频测试仪器按实验要求与相应的射频微波实验箱相连接;
[0048] 步骤2:将所有射频测试仪器接入GPIB总线;
[0049] 步骤3:将GPIB总线通过GPIB-USB转接线接入服务器;
[0050] 步骤4:服务器端获得已连接射频测试仪器的类型和地址并通过labview的多线程技术实现服务器端对多台仪器数据的快速采集以及将接收到的射频测试仪器的数据格式从ASCII格式转变成二进制格式存储在服务器中;采用上述技术手段,从而极大提升服务器端控制射频测试仪器采集数据的速度;同时,采用二进制格式进行数据存储和传输,进一步提高了数据传输速度。
[0051] 步骤5:客户端通过DSTP协议连接局域网内的远程服务器并采用DSTP协议进行通信和数据传输,客户端通过IP地址与服务器连接,并读取已接入服务器的仪器型号和仪器地址,以及通过发送控制命令实现对射频测试仪器的控制;
[0052] 步骤6:服务器向客户端传输测试数据时,采用本发明设计的数据压缩算法。
[0053] 参见图3,所示为本发明的功能结构图,服务端由服务端PC机构成,服务端PC机中安装有Datasocket server,Datasocket server manager以及由Labview编写的服务端程序。服务器和客户端之间的通信协议为dstp协议。数据以订阅目录形式储存。
[0054] 服务器端的Datasocket server是一个独立运行程序,负责监管Manager中所设定的具有各种权限的用户组和客户端程序之间的数据交换。
[0055] 服务器端的Datasocket server Manager用于设定服务器缓存区大小,连接服务端的客户端权限和数量等等设置。
[0056] 服务端程序由Labview编写,服务端程序会检测连接到服务端PC机的仪器设备,并从中过滤其他设备得到射频仪器的仪器GPIB地址和名称,同时建立对应的订阅目录,并且不断遍历扫描对应的订阅目录检测是否有命令从客户端发出。同时服务端PC机通过GPIB转USB线连接多台三种射频仪器AV3656矢网分析仪,AV1441信号发生器,AV4037频谱仪。
[0057] 服务端程序会建立对应订阅目录储存从射频仪器发送过来的数据,以供客户端读取。
[0058] 服务端程序会首先判断特定订阅目录是否存在命令,只有存在命令才会发送,避免了发送空命令给仪器而造成程序崩溃的可能性。
[0059] 每套射频测试仪器由AV3656矢网分析仪,AV1441信号发生器,AV4037频谱仪三种仪器构成。这三种仪器通过GPIB总线连接和通信,可以用一条总线互相连接若干台装置,以组成一个测试系统,并且通过GPIB转USB线与服务端PC机相连。GPIB总线可支持最多达15套仪器同时连接,极大地提高了本发明的拓展性。
[0060] 三种射频仪器采用SCPI(可编程仪器标准命令)控制,当命令从服务器端发出,对应地址的仪器会接受命令并且执行,如果有返回值则返回给服务器端。
[0061] 射频实验箱为AV6532射频微波实验箱。实验箱具有实验所需的各种待测射频电路模块,按照实际实验需求与射频测试仪器相连接。
[0062] 参见图4,所示为本发明设计的数据压缩算法的流程图,包括以下步骤:
[0063] 首先将全部数据储存到数组中,遍历数组取得这个曲线数据的中位值A;
[0064] 其次判断数组中是否有构成曲线的点的数据与A的值相差大于阈值δ,如果有,取得这些点作为特征点,并将中位值A作为第一个和最后一个特征点。
[0065] 然后判断每两个特征点之间的数据与这两个特征点中的前一个特征点之差是否超过阈值δ,若超过,则两个特征点之间超过阈值的数据作为新的特征点。以此类推循环若干次。
[0066] 当循环到一定程度,将所有特征点组成的数组作为新的曲线数据发送给客户端。
[0067] 采用上述技术方案,通过获取数据特征点对数据进行压缩,从而能够大大提高数据的传输速率。
[0068] 针对dstp协议本身的限制,即当旧帧到达服务器端或者客户端一段时间内还未被程序读取的情况下,此时又有新帧到达服务器端或者客户端,此时新帧就会覆盖还没被读取的旧帧,从而造成了有数据的丢失。为了克服上述技术问题,本发明在服务器和客户端中均设置自动重发机制,参见图5,所示为自动重发机制的流程图,具体包括以下步骤:
[0069] 1)客户端处于就绪状态时,当其向服务器发送指令,将创建一个自动重发定时器,并进入等待响应状态;
[0070] 2)若自动重发定时器未超时且未收到服务器响应,将继续等待。此时新的指令发送请求将被挂起;
[0071] 3)若自动重发定时器未超时,接收到服务器响应,将从响应订阅目录下读取并解码响应结果,并回到就绪态;
[0072] 4)若自动重发定时器超时,将进行1次重发,并累加超时次数;
[0073] 5)在此期间若接收到服务器响应,或者连接失效,将回到就绪态。
[0074] 系统对于简单命令响应过慢是因为系统执行命令的方式是遍历各个仪器的目录,获取储存在目录里的命令并执行,这样的执行方式下,程序会把每个目录下的命令都执行一遍,甚至一些已经执行过的命令都会重复执行,消耗大量程序资源,使系统的响应速度变慢。
[0075] 为了提高运行效率和速度,在数据协议中设置新旧指令标识,客户端和服务器通过判断新旧指令标识,每次只执行新指令的结果,旧指令的结果自动给出。节省系统资源,加快数据读取和显示。参见图6,所示为本发明实现新旧指令区别的流程图。
[0076] 客户端会发送一个二维字符串数组到特定订阅目录下,数组包含两个元素,元素0为要发送的命令,元素1为一个布尔型的标识数据。
[0077] 服务端程序收到命令后会解析该数组,当判断出元素1为′真′时,则表明这条指令为最新的尚未执行过的指令,那么服务端程序会读取元素0的内容,即客户端发送的命令,并进行下一步操作。
[0078] 如果判断出元素1为′假′时,则表明这条指令已经被执行过,那么服务端程序会跳过这个订阅目录,到下一个订阅目录读取命令。
[0079] 客户端程序由Labview编写,程序通过IP地址与服务端PC机上的Datasocket server进行连接,并读取由服务端程序提供的已连接的仪器型号和仪器地址。
[0080] 客户端可对特定一台射频仪器发送命令进行控制,发送的命令会被服务端程序读取并发送到对应地址的射频仪器进行执行。如果该命令有返回值,客户端程序会自动从特定订阅目录读取数据,并根据数据不同类型在文本框或者波形图上呈现。
[0081] 使用上述实验平台的实验方法,具体步骤如下:
[0082] 1)连接实验仪器和客户端,使客户端PC机和服务器端PC机连上同一个局域网,开启Datasocket server和服务端程序。
[0083] 2)当打开服务端程序后,程序会查找到已连接服务器端PC机的仪器的仪器GPIB地址,然后通过正则表达式,过滤掉不是射频仪器的地址。获得的仪器地址具有一样的格式″GPIBO::具体数字::INSTR″。Datasocket中′:′为非法字符,所以″::″改成″I″。
[0084] 3)服务端会向已连接的射频仪器发送查询命令,并接受仪器的返回值,从返回值中过滤提取出仪器类型,将数据储存在″/shebei″订阅目录下
[0085] 4)客户端界面启动,首先输入服务器URL。URL以″dstp://″开始,服务器的局域网IP地址作为一级目录,设置完成服务器URL后,通过″刷新″按钮可显示″/localhost/shebei″订阅目录下的仪器信息。客户端选择仪器地址后,可以访问服务器生成的仪器订阅目录。在订阅目录下有三类功能子目录:/data,/get,/set。
[0086] 当用户请求设置仪器参数时,客户端访问:/set/[参数对应订阅名],并写入所需的附加参数。
[0087] 当用户请求获取仪器参数时,客户端访问:/get/[参数对应订阅名],并写入所需的附加参数。附加参数中包含了帧标识ID,相邻帧的标识ID不同。服务器可以根据帧标识ID的变化,区分上一次操作和当前操作。
[0088] 5)同时服务端程序会不断遍历特定订阅目录来读取客户端发送过来的命令,同时判断该订阅目录是否为空。
[0089] 为了防止服务端发送空指令到射频仪器导致程序奔溃。如果该订阅目录为空,则不执行命令。
[0090] 注:订阅目录名称为″/localhost/[仪器类型]/[仪器GPIB地址]/[功能操作]/[数据项名称]″的格式,其中仪器类型有″AV3656,AV1441,AV4037″,仪器GPIB地址为″GPIB0|具体数字|INSTR″,功能操作分为″set″(设置命令),″get″(查询命令),″data″(数据储存),数据项名称有″zhongxinpinlv″(中心频率),″saomiaodianshu″(扫描点数)等,以汉语拼音来命名。除上述描述外有个特例即″/localhost/shebei″,这个订阅目录不符合以上格式,是专门用来储存仪器名称。
[0091] 6)服务端程序会判断当前命令是否执行过。当服务端程序读取到一条尚未执行过的指令,程序会分析这条指令存在的订阅目录名称,并且从中解析出具体的仪器GPIB地址,此时的仪器GPIB地址格式如下″GPIBO|具体数字|INSTR″,将其中的′|′还原成′::′,此时仪器GPIB地址如下″GPIBO::具体数字::INSTR″,并根据这个地址发送读取到的这条命令。
[0092] 7)当服务端程序往仪器发送指令后,如果有返回值,服务端程序会读取相应数据,并且存放到特定的订阅目录下等待客户端程序的读取。
[0093] 8)当客户端从特定订阅目录读取服务器写入的结果数据时,首先会判断数据是否为空,当数据不为空时判断为读取成功。
[0094] 9)至此,一次完整的服务端和客户端,服务端和射频仪器端的通信过程结束。
[0095] 以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。对这些实施例的多种修改对本领域的专业技术人员来说是显而易见的,本申请中所定义的一般原理可以在不脱离本发明的精神或范围的情况下在其它实施例中实现。因此,本发明将不会被限制于本申请所示的这些实施例,而是要符合与本申请所公开的原理和新颖特点相一致的最宽的范围。