Python控制LitePoint IQxel-MW 无线网络测试仪

前言

由于项目需要进行WIFI和BT(蓝牙)的射频测试,所以需要开发一款支持WIFI/BT射频测试的工具。开发射频测试工具的话那肯定离不开仪表的控制。我们项目用的就Litepoint的IQxel-MW无线网络测试仪。这篇文章主要就是介绍一下如何控制仪表以及实现的过程!

IQxel-MW仪器介绍

LitePoint是美国硅谷的一家仪器厂商,主要做一些无线通讯测试仪表,包括WIFI,BT(Bluetooth),LTE等等。IQxel-MW是一款支持WIFI/Bluetooth射频测试的仪表,图片如下:

Python控制LitePoint IQxel-MW 无线网络测试仪_第1张图片

实现原理

一般的测量仪表都会同时GPIB或者Ethernet或者RS232等等通信方式,但是该仪表没有GPIB接口,可以看出不支持GPIB通信,所以最后控制该仪表的方式是通过Ethernet通信的,通过Ethernet建立Socket连接,然后即可收发指令,实现PC和仪表的通信。

射频测试的接线图如下:

要想实现PC和仪表的通信,首先要确保PC和仪表的IP地址在同一网段,

Python控制LitePoint IQxel-MW 无线网络测试仪_第2张图片

代码概要

建立连接

控制仪表的第一步就是建立与仪表的连接,建立Socket连接,返回socket对象

	def _open_tester_connection(cls, ipAddress=None, port=None, timeout=None):
		ipAddress = cls._ip if ipAddress is None else str(ipAddress)
		port = cls._port if port is None else int(port)

		cls._validate_ipAddress(ipAddress)
		connectParams = (ipAddress, port)

		try:
			cls._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
			cls._socket.connect(connectParams)
			cls._socket.settimeout(timeout)
		except socket.error:
			raise AssertionError('Setup socket connection failed')
		else:
			cls._lock_device(ipAddress)

		return cls._socket

 发送指令

封装一个发送指令的底层函数,供其他函数调用

	def _send_raw_command(cls, cmd, repeat=5):
		cmd = str(cmd)
		repeat = int(repeat)
		resp = None

		while repeat:
			resp = cls._send_tcp_data(data=cmd)
			if not cls._error_occurred():
				#logger.info('Command {:s} was sent successfully'.format(cmd))
				break
			repeat -= 1

		return resp

初始化设备

在使用设备之间需要先初始化设备,因为设备上可能存在之前的设置参数,不初始化的话可能会影响测试结果;所以每次连接设备时都建议做一次初始化的动作。

	def _initialize_device(cls):
		try:
			cls._send_raw_command('SYS;*CLS;*RST;FORM:READ:DATA ASC')
		except Exception as err:
			raise TestDeviceError('Error during initializing device: {:s}'.format(err))

VSA Hardware Setting

这里以WIFI的TX测试的设置,也就是VSA的设置为例,网页如下,包含频率,参考电平,测量间隔,采样率,抓包长度等参数。实现的方法如下:

Python控制LitePoint IQxel-MW 无线网络测试仪_第3张图片

	def config_vsa_hardware_settings(self, freq=None, referLevel=None, enableAGC=None, interval=None, samRate=None, capLength=None):
		"""
		This function can be used for WiFi SISO and Bluetooth hardware VSA Settings.
		"""

		freq = int(freq) if freq is not None else freq
		referLevel = int(referLevel) if referLevel is not None else referLevel
		enableAGC = robottypes.is_truthy(enableAGC) if enableAGC is not None else enableAGC
		interval = int(interval) if interval is not None else 5
		samRate = Utils.to_enum(samRate, SamplingRate) if samRate is not None else samRate
		capLength = int(capLength) if capLength is not None else capLength

		vsaParams = []

		if freq is not None:
			vsaParams.append('FREQ {}'.format(freq * 1000000))

		if enableAGC is not None:
			vsaParams.append('RLEV:AUTO')
		else:
			if referLevel:
				vsaParams.append('RLEV {}'.format(referLevel))

		if samRate is not None:
			vsaParams.append('SRAT {}'.format(samRate.value * 1000000))

		if capLength is not None:
			vsaParams.append('CAPT:TIME {}'.format(capLength / 1000))

		if len(vsaParams) >= 1:
			self.send_raw_command('VSA1;{:s}'.format(';'.join(vsaParams)))
		else:
			logger.error('No command sent, no parameter was set')

 网页上其他功能的设置也是同样的道理,首先需要在官方手册中找到每个功能相应的SCPI命令,然后通过前面提到的发送指令的函数即可完成相关设置:

Python控制LitePoint IQxel-MW 无线网络测试仪_第4张图片

支持的设备

IQxel-MW, IQxel-M

后记

对于WIFI/BT的射频测试工具来说控制测量仪表只是其中的一部分,更重要的一部分则是对不同芯片平台的WIFI/BT信号输出的控制。WIFI部分又分为IEEE.802.11a, IEEE.802.11b, IEEE.802.11g, IEEE.802.11n, IEEE.802.11ac, IEEE.802.11ax,等等

对于BT部分来说又分为BR, EDR, LE等不同制式!这些大家可自行百度,此处不过多赘述!

有需要源码的同学可以私聊我,或者直接wx加 xgh321324即可!

你可能感兴趣的:(仪器仪表控制,python,数学建模,开发语言,WIFI,射频测试,蓝牙测试,仪表控制)