当前位置:首页>python>Python控制LitePoint IQxel-MW 无线网络测试仪

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

  • 2026-10-11 08:34:16
Python控制LitePoint IQxel-MW 无线网络测试仪

前言

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

IQxel-MW仪器介绍

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

实现原理

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

射频测试的接线图如下:

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

代码概要

建立连接

控制仪表的第一步就是建立与仪表的连接,建立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)		try:			cls._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)		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的设置为例,网页如下,包含频率,参考电平,测量间隔,采样率,抓包长度等参数。实现的方法如下:

	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命令,然后通过前面提到的发送指令的函数即可完成相关设置:

支持的设备

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等不同制式!这些大家可自行百度,此处不过多赘述!

有需要源码的同学可以私聊我,随时在线!!!

最新文章

随机文章