在射频研发、天线调试、滤波器量产检测、射频线缆故障排查场景中,台式矢量网络分析仪动辄几万、十几万,体积庞大不适合外场调试;市面廉价简易 VNA 普遍存在动态范围不足、缺少 TDR、校准流程复杂、续航差等痛点。
本文全面拆解VNA6 便携式矢量网络分析仪,一款 1MHz~6.3GHz 双端口手持 VNA,支持 S11 反射、S21 传输、驻波比、史密斯圆图、相频曲线、TDR/DTF 电缆时域测量,全金属机身、3.97 寸触屏、32 组校准预设存储,搭配完整 OSLT 校准套件,兼顾实验室研发、户外天线外场测试、产线批量检测,低成本替代台式 VNA。 全文包含硬件参数、机身接口、完整触屏操作、OSLT 标准校准步骤、TDR 使用、固件升级、典型应用场景,干货完整可直接上手操作。
一、VNA6 产品概述与核心硬件指标
1.1 产品简介
VNA6 是深圳国商技术推出的双端口便携式矢量网络分析仪,测量频段覆盖 1MHz~6.3GHz,支持单端口 S11 反射参数、双端口 S11/S21 传输参数测量。 适用被测件:短波 / ISM/WiFi/BLE/GPS 天线、LC 滤波器、声表滤波器、放大器、衰减器、射频同轴电缆、功分器、耦合器、双工器。 特色功能:内置 TDR/DTF 时域反射功能,可测量电缆长度、定位线缆断点、阻抗不连续点;支持多格式波形显示、4 组标记、32 组校准方案存储,Type-C 充电 + 数据传输 + 固件升级三合一。
1.2 核心产品亮点
- 宽频覆盖:1MHz~6.3GHz,覆盖绝大多数民用射频通信频段;
- 优秀动态范围:S21 最高 65dB,S11 最高 50dB,弱损耗 / 高隔离器件测量精度高;
- 双端口标准 OSLT 校准:配套全套 SMA 开路 / 短路 / 负载校准件,测量误差极低;
- 多视图显示:对数幅值、线性幅值、相位、驻波比 VSWR、史密斯圆图、TDR 时域六种视图;
- TDR 时域故障定位:检测射频电缆长度、断点、接头阻抗异常;
- 大容量存储:32 组校准参数预设,不同频段测试方案一键调取;
- 大屏便携机身:3.97 寸 800×480 高亮 IPS 触摸屏,全铝合金屏蔽外壳;
- 续航与拓展供电:5000mAh 锂电池续航≥4.5h,自带 USB 5V/1A 对外供电;
- 多语言系统:中文 / 英文 / 俄文三语言界面,户外强光可视;
- 便捷升级:Type-C 串口固件升级,无需专用编程器。
1.3 完整技术参数表
表格
| 参数项 | VNA6 技术规格 |
|---|---|
| 频率测量范围 | 1MHz ~ 6.3GHz |
| 最大射频输出功率 | +10dBm |
| 频率稳定度 | 频偏<±1ppm |
| S21 动态范围 | <3GHz:65dB;>3GHz:60dB |
| S11 动态范围 | <3GHz:50dB;>3GHz:40dB |
| 扫描点数 | 101~1001 点自定义 |
| 测量速度 | 200 点 / 秒 |
| 同步显示迹线 | 4 条独立迹线 |
| 标记点数量 | 4 个可自定义频点标记 |
| 校准存储槽位 | 32 组 OSLT 校准方案 |
| 显示屏 | 3.97 寸 IPS,800×480,电阻触摸屏 |
| 电池规格 | 3.7V 5000mAh 锂电池,续航≥4.5h |
| 接口 | Type-C 充电 / 数据;额外 USB 5V 输出;双 SMA 射频端口 PORT1/PORT2 |
| 射频接口 | SMA 母座(PORT1 RX、PORT2 TX) |
| 整机尺寸 | 130×75×22mm |
| 外壳 | 铝合金全金属屏蔽 |
| 工作温度 | 0℃ ~ 45℃ |
| 配套配件 | SMA 开路 / 短路 / 负载校准件、RG405 SMA 延长线缆 |
1.4 VNA 基础原理科普
矢量网络分析仪用于测量射频器件反射(S11)与传输(S21)特性:
- S11(反射系数):PORT1 端口信号反射量,用于天线驻波、器件输入匹配、阻抗分析,史密斯圆图、VSWR 驻波比均基于 S11;
- S21(传输系数):PORT1→PORT2 信号传输损耗 / 增益,用于滤波器插损、放大器增益、线缆衰减测试;
- 双端口测量必须完成 OSLT 四步校准(开路 Open / 短路 Short / 负载 Load / 直通 Through),消除线缆、接头引入的测量误差;
- TDR 时域模式:将频域数据通过 IFFT 转换为时域曲线,直观定位电缆断点、接头阻抗突变、线缆长度。
二、产品外观与接口说明
整机正面布局:
- 物理按键:MENU 菜单键、Fn 功能键;
- 射频端口:PORT1(RX 接收)、PORT2(TX 发射,最大 + 10dBm 输出);
- 侧边接口:Type-C 充电 / 数据 / 升级口、电源开关 ON/OFF、电源指示灯;
- 拓展功能:机身自带 USB 5V 输出口,可给外设供电。
使用规范:
- 单端口天线匹配测试:仅使用 PORT1,完成 OSL 三校准;
- 双端口滤波器 / 线缆插损测试:PORT1 接 DUT 输出,PORT2 接 DUT 输入,完整 OSLT 四步校准;
- 禁止向 PORT1 输入超过 + 10dBm 外部大功率射频信号,避免烧毁前端接收电路。
三、整机用户界面全解析
3.1 主界面区域划分
主界面是测量核心,分区功能一目了然:
- ①起始 / 终止频率:当前扫频带宽范围;
- ②校准状态标识:O = 开路、S = 短路、L = 负载、T = 直通;全部显示代表四步校准完成;
C+数字为校准预设存储编号,*代表临时校准未保存; - ③扫描点数:当前 101~1001 扫频点数;
- ④暂停按钮:一键冻结波形,方便读取标记数值;
- ⑤视图切换区:对数幅值、相频、驻波比、史密斯、TDR 时域快速切换;
- ⑥标记信息栏:4 组标记频点、幅值 / 相位数据,橙色为当前选中标记,支持拖动移动;
- ⑦电量显示:实时电池电压,红色低电量提醒;
- ⑧左右刻度标尺:上下滑动调整幅值 / 相位显示范围。
3.2 侧边总菜单(MENU 按键呼出)
按下机身 MENU 物理键,调出右侧隐藏主菜单,四大核心模块:
- 扫描:频率、扫宽、点数、频域 / TDR 切换;
- 校准:开路 / 短路 / 负载 / 直通 OSLT 校准入口;
- 设备:亮度、语言、屏幕翻转、设备固件信息;
- 预设:32 组校准方案保存 / 调取。
3.3 数字键盘
点击任意频率数值框弹出数字输入键盘,支持数字、小数点、MHz/GHz 单位快速切换,输入完成点击 OK 确认,退格键删除输入内容。 示例:输入 2400MHz 直接输入2400+M;输入 5.8GHz 输入5.8+G。
四、核心菜单功能详细操作教程
4.1 扫描菜单:设置扫频测量区间
菜单入口:MENU → 扫描 可配置参数:
- 中心:设置扫频中心频率(如 2440MHz 中心测蓝牙 WiFi);
- 扫宽:设置频率跨度;
- 起始 / 终止:自定义完整起止频段;
- 点数:101/201/501/1001 可选,点数越高曲线越平滑,扫描速度变慢;
- 模式切换:频域 S 参数 / TDR/DTF 时域测量一键切换。
实操建议:
- 宽带粗测:101 点,扫描速度快;
- 滤波器窄带精准测试:1001 点,细节更清晰。
4.2 校准菜单|OSLT 四步标准校准(重中之重)
4.2.1 校准前准备
必备配件:SMA 开路件、短路件、50Ω 负载、直通转接头、测试线缆。
每次更换测试线缆、更换测试频段、更换被测件类型,必须重新校准,否则测量误差极大。
4.2.2 完整校准步骤
- 设置扫频区间:先在扫描菜单设定需要测量的起止频率;
- 开路校准 Open将开路校准件接在 PORT1(或测试线缆末端),点击【开路】,等待 2~3 秒,按钮变绿、界面出现标识 O;
- 短路校准 Short更换短路校准件,点击【短路】,完成后界面出现 S;
- 负载校准 Load更换 50Ω 匹配负载,点击【负载】,界面出现 L; 以上三步完成单端口 S11 校准,可直接测天线驻波;
- 直通校准 Through(双端口 S21 必做)使用直通转接头连接 PORT1 与 PORT2,点击【直通】,界面出现 T; O/S/L/T 全部显示即完整双端口校准完成。
4.2.3 校准合格判定标准
校准完成后自检验证:
- PORT1 接负载:S11 汇聚史密斯圆中心,幅值接近 0dB;
- PORT1/2 直通:S21 曲线贴近 0dB,插损测量误差极小;
- 开路 / 短路状态 S11 位于史密斯圆左右两端。
4.3 设备系统菜单设置
MENU → 设备,包含 5 项功能:
- 屏幕亮度:拖动滑块调节 0~100% 亮度,户外强光调高;
- 语言切换:中文 / English/Русский俄文一键切换;
- 关于本机:查看设备型号、固件版本、频率范围、电池电压、设备序列号;
- 翻转屏幕:屏幕 180° 倒置,适配不同摆放场景;
- 预设校准存储:32 组存储槽,可保存当前校准 + 频率配置,下次测试一键调取,产线标准化测试必备。
4.4 标记功能操作(4 组 Mark 频点测量)
点击界面标记栏展开标记控制面板:
- 标记开关:单独开启 / 关闭 Mark1~Mark4;
- 频点定位:点击数字框输入指定频率,标记自动跳转;
- 左右微调:按键左右移动标记,读取曲线任意点数值;
- 视图格式切换:切换当前窗口显示 S11/S21、对数幅值 / 相位 / VSWR / 史密斯圆图;
- 刻度调节:上下拖动标尺,放大 / 缩小曲线观测范围。
五、TDR 时域电缆检测功能使用教程
VNA6 内置 DTF 时域反射,用于射频线缆故障排查:
- 在【扫描】菜单切换至 TDR 时域模式;
- 完成 OSLT 基础校准;
- PORT1 连接待测同轴电缆,电缆末端开路;
- 时域曲线出现峰值位置对应电缆长度,突变尖峰代表接头松动、线缆破损、阻抗不连续; 适用场景:机房射频馈线故障定位、车载天线线缆长度检测、长线缆断点排查。
六、固件升级完整流程
- 设备关机,按住 Fn 功能键不松手,打开电源开关,进入 Loader 升级模式;
- Type-C 数据线连接电脑与仪器,电脑识别 CH340 串口;
- 打开配套 VNA6 升级上位机,扫描串口、选择对应 COM 口;
- 加载固件文件,点击下载,进度完成设备自动重启升级。
七、典型应用场景实操方案
场景 1:WiFi / 蓝牙天线驻波匹配测试(S11)
- 频段设置 2400~2500MHz;
- PORT1 接天线,完成 OSL 三校准;
- 切换史密斯圆图 / VSWR 驻波视图;
- 添加标记 2440MHz、2480MHz 读取驻波比,VSWR<1.5 为匹配良好。
场景 2:滤波器插损、阻带抑制测试(S21)
- 设置滤波器工作频段;
- PORT2 输出→滤波器输入,滤波器输出→PORT1;
- 完整 OSLT 四步校准;
- 切换对数幅值视图,标记读取通带插损、阻带衰减。
场景 3:射频线缆衰减测试
- 先直通校准得到基准 0dB 曲线;
- 串入待测线缆,读取 S21 差值即为线缆损耗;
- TDR 模式快速测量线缆实际长度、排查接头故障。
场景 4:产线标准化批量检测
- 调试好对应产品频段与校准;
- 进入预设菜单保存至槽位;
- 每次测试直接调取预设,无需重复校准,提升批量检测效率。
八、使用避坑注意事项
- 输入功率限制:PORT1 最大耐受 + 10dBm,大功率射频信号必须外接衰减器,否则烧毁硬件;
- 校准不可省略:更换线缆、频段必须重新 OSLT 校准,否则插损、驻波数据偏差巨大;
- 6.3GHz 上限:不可超出频段测量,高频段动态范围会下降;
- 电池使用:低电量及时充电,长期不用每月补电;可 Type-C 边充边测;
- TDR 使用前提:必须完成基础 OSL 校准,时域曲线才具备参考价值;
- 金属外壳保护:请勿拆除铝合金外壳,屏蔽层防止外界电磁干扰影响测量精度。
适用场景
天线调试:Wi-Fi、蓝牙、GPS、5G 天线的驻波比与阻抗匹配检测
射频器件检测:滤波器、功分器、耦合器、放大器、衰减器、射频线缆
户外现场运维:基站天线、馈线巡检,物联网设备现场测试
科研教学:高校射频实验室、电子竞赛、便携式实验测量工具
核心优势
九、总结
VNA6 作为千元级便携式矢量网络分析仪,覆盖 1MHz~6.3GHz 全主流射频频段,同时具备 S11/S21 双参数测量、TDR 时域故障检测、标准 OSLT 全校准、32 组预设存储,完美解决实验室研发、户外天线调试、产线批量检测、线缆维修等场景需求。 对比进口台式 VNA 拥有极高性价比,整机小巧便携、操作全触屏可视化,配套完整校准套件,零基础射频工程师也可快速上手,是无线硬件开发、射频维修、高校教学的高性价比测试仪器。
拓展开发方向(延伸阅读)
设备通过 Type-C 虚拟串口通信,支持上位机数据读取、自动化测试脚本开发,后续可基于 Python/ C# 开发自动化产线测试程序,实现波形数据导出、批量参数判定、CSV 数据存储。
- 通信接口:VNA6 通过 Type-C 虚拟串口 CH340 通信,波特率固定 115200;
- 功能说明:自动扫描串口连接仪器、下发 SCPI 指令配置扫频、读取频域 S 参数、4 组标记数据;
- 依赖安装
bash
运行
pip install pyserial matplotlib- 配套文章使用:直接复制到 CSDN 文末附录,带代码高亮,附带使用说明。
完整 Python 源码
python
运行
import serial import serial.tools.list_ports import struct import time import matplotlib.pyplot as plt class VNA6_Instrument: def __init__(self): self.ser = None self.baud = 115200 # 自动扫描串口并连接设备 def auto_connect(self) -> bool: port_list = serial.tools.list_ports.comports() if not port_list: print("未识别到串口,请检查Type-C线、设备开机、驱动CH340已安装") return False for port in port_list: try: self.ser = serial.Serial(port.device, self.baud, timeout=0.8) print(f"连接成功:{port.device}") return True except Exception as e: continue print("所有串口连接失败") return False # 下发SCPI指令,读取返回字符串 def send_cmd(self, cmd: str) -> str: if self.ser is None or not self.ser.is_open: return "" tx = (cmd + "\r\n").encode("ascii") self.ser.write(tx) time.sleep(0.06) resp = self.ser.read_all().decode("utf-8", errors="ignore").strip() return resp # 设置扫频范围:start_MHz 起始,stop_MHz终止,points点数(101~1001) def set_sweep(self, start_MHz: float, stop_MHz: float, points: int = 1001): self.send_cmd(f"SWEep:START {start_MHz}") self.send_cmd(f"SWEep:STOP {stop_MHz}") self.send_cmd(f"SWEep:POINts {points}") print(f"已配置扫频:{start_MHz} ~ {stop_MHz} MHz,点数 {points}") # 读取S21幅值曲线(dB) def get_s21_data(self): self.send_cmd("DATA:S21?") raw = self.ser.read(8192) return self.parse_s_param(raw) # 读取S11幅值曲线(dB) def get_s11_data(self): self.send_cmd("DATA:S11?") raw = self.ser.read(8192) return self.parse_s_param(raw) # 二进制帧解析函数,输出频率数组、幅值dB数组 def parse_s_param(self, raw_bytes: bytes): # 帧格式:#D[长度] + 浮点频点数组 + 浮点幅值数组 + \r\n if not raw_bytes.startswith(b"#"): print("帧头校验失败,数据无效") return [], [] ptr = 1 D = int(raw_bytes[ptr:ptr+1]) ptr += 1 data_len = int(raw_bytes[ptr:ptr+D]) ptr += D data_buf = raw_bytes[ptr:ptr+data_len-2] # 剔除末尾\r\n float_cnt = len(data_buf) // 4 float_data = struct.unpack("<" + "f" * float_cnt, data_buf) half = float_cnt // 2 freq_list = [float_data[i] for i in range(half)] # MHz db_list = [float_data[i] for i in range(half, float_cnt)] return freq_list, db_list # 读取4组标记数据 Mark1~Mark4 def get_markers(self): mark_data = [] for i in range(1, 5): resp = self.send_cmd(f"MARK{i}?") if resp: parts = resp.split(",") freq = float(parts[0]) db_val = float(parts[1]) mark_data.append({"mark":i, "freq_MHz":freq, "dB":db_val}) return mark_data # 关闭串口、释放资源 def close(self): if self.ser and self.ser.is_open: self.ser.close() print("串口已关闭") if __name__ == "__main__": vna = VNA6_Instrument() # 1. 连接仪器 if not vna.auto_connect(): exit(1) # 2. 配置扫频范围 2400~2500MHz WiFi频段,1001点 vna.set_sweep(start_MHz=2400, stop_MHz=2500, points=1001) time.sleep(0.5) # 3. 读取S11、S21曲线 freq_arr, s11_db = vna.get_s11_data() _, s21_db = vna.get_s21_data() markers = vna.get_markers() print(f"采集点数:{len(freq_arr)}") print("=== 标记点数据 ===") for m in markers: print(f"Mark{m['mark']}:{m['freq_MHz']:.2f} MHz , {m['dB']:.2f} dB") # 4. Matplotlib 实时绘图 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(freq_arr, s11_db, label="S11 反射(dB)", color="#ff3333", linewidth=1.2) ax.plot(freq_arr, s21_db, label="S21 传输(dB)", color="#0066ff", linewidth=1.2) # 绘制标记点 for m in markers: ax.scatter(m["freq_MHz"], m["dB"], s=40, color="orange", zorder=5) ax.text(m["freq_MHz"], m["dB"]+0.8, f"M{m['mark']}", fontsize=9) ax.set_xlabel("频率 MHz") ax.set_ylabel("幅值 dB") ax.set_title("VNA6 S11/S21 扫频曲线") ax.legend() ax.grid(True, alpha=0.3) plt.show() # 循环持续采集波形(按Ctrl+C终止) try: print("\n持续采集波形,Ctrl+C退出循环") while True: freq_arr, s21_db = vna.get_s21_data() max_loss = min(s21_db) print(f"当前最大插损:{max_loss:.2f} dB") time.sleep(1) except KeyboardInterrupt: print("\n手动停止采集") finally: vna.close()二、代码配套使用说明(粘贴到 CSDN 文章)
2.1 前置准备
- 电脑安装 CH340 串口驱动,否则识别不到设备 COM 口;
- VNA6 正常开机,Type-C 直连电脑,不要使用拓展坞;
- 设备完成 OSLT 校准后再运行代码,数据才具备测量精度;
- 波特率固定 115200,无需修改。
2.2 核心功能介绍
auto_connect():自动枚举全部 COM 串口,无需手动填写串口号,新手友好;set_sweep():远程下发扫频起止频率、扫描点数,替代触屏手动设置;get_s11_data() / get_s21_data():读取频域幅值曲线,内置二进制帧解析;parse_s_param():解析仪器下发的二进制数据流,拆分频率、dB 幅值;get_markers():读取 4 个标记点的频点与对应损耗 / 反射值;- Matplotlib 绘图:自动绘制 S11/S21 双曲线,标记点橙色高亮显示。
2.3 典型测试场景修改示例
- 天线 S11 驻波测试(433MHz ISM 频段)
python
运行
vna.set_sweep(start_MHz=400, stop_MHz=460, points=501)- GPS 滤波器测试(1550~1600MHz)
python
运行
vna.set_sweep(start_MHz=1550, stop_MHz=1600, points=1001)2.4 拓展二次开发思路(写进文章增加深度)
bash
运行
pip install pyserial matplotlib完整 Python 源码
python
运行
import serial import serial.tools.list_ports import struct import time import matplotlib.pyplot as plt class VNA6_Instrument: def __init__(self): self.ser = None self.baud = 115200 # 自动扫描串口并连接设备 def auto_connect(self) -> bool: port_list = serial.tools.list_ports.comports() if not port_list: print("未识别到串口,请检查Type-C线、设备开机、驱动CH340已安装") return False for port in port_list: try: self.ser = serial.Serial(port.device, self.baud, timeout=0.8) print(f"连接成功:{port.device}") return True except Exception as e: continue print("所有串口连接失败") return False # 下发SCPI指令,读取返回字符串 def send_cmd(self, cmd: str) -> str: if self.ser is None or not self.ser.is_open: return "" tx = (cmd + "\r\n").encode("ascii") self.ser.write(tx) time.sleep(0.06) resp = self.ser.read_all().decode("utf-8", errors="ignore").strip() return resp # 设置扫频范围:start_MHz 起始,stop_MHz终止,points点数(101~1001) def set_sweep(self, start_MHz: float, stop_MHz: float, points: int = 1001): self.send_cmd(f"SWEep:START {start_MHz}") self.send_cmd(f"SWEep:STOP {stop_MHz}") self.send_cmd(f"SWEep:POINts {points}") print(f"已配置扫频:{start_MHz} ~ {stop_MHz} MHz,点数 {points}") # 读取S21幅值曲线(dB) def get_s21_data(self): self.send_cmd("DATA:S21?") raw = self.ser.read(8192) return self.parse_s_param(raw) # 读取S11幅值曲线(dB) def get_s11_data(self): self.send_cmd("DATA:S11?") raw = self.ser.read(8192) return self.parse_s_param(raw) # 二进制帧解析函数,输出频率数组、幅值dB数组 def parse_s_param(self, raw_bytes: bytes): # 帧格式:#D[长度] + 浮点频点数组 + 浮点幅值数组 + \r\n if not raw_bytes.startswith(b"#"): print("帧头校验失败,数据无效") return [], [] ptr = 1 D = int(raw_bytes[ptr:ptr+1]) ptr += 1 data_len = int(raw_bytes[ptr:ptr+D]) ptr += D data_buf = raw_bytes[ptr:ptr+data_len-2] # 剔除末尾\r\n float_cnt = len(data_buf) // 4 float_data = struct.unpack("<" + "f" * float_cnt, data_buf) half = float_cnt // 2 freq_list = [float_data[i] for i in range(half)] # MHz db_list = [float_data[i] for i in range(half, float_cnt)] return freq_list, db_list # 读取4组标记数据 Mark1~Mark4 def get_markers(self): mark_data = [] for i in range(1, 5): resp = self.send_cmd(f"MARK{i}?") if resp: parts = resp.split(",") freq = float(parts[0]) db_val = float(parts[1]) mark_data.append({"mark":i, "freq_MHz":freq, "dB":db_val}) return mark_data # 关闭串口、释放资源 def close(self): if self.ser and self.ser.is_open: self.ser.close() print("串口已关闭") if __name__ == "__main__": vna = VNA6_Instrument() # 1. 连接仪器 if not vna.auto_connect(): exit(1) # 2. 配置扫频范围 2400~2500MHz WiFi频段,1001点 vna.set_sweep(start_MHz=2400, stop_MHz=2500, points=1001) time.sleep(0.5) # 3. 读取S11、S21曲线 freq_arr, s11_db = vna.get_s11_data() _, s21_db = vna.get_s21_data() markers = vna.get_markers() print(f"采集点数:{len(freq_arr)}") print("=== 标记点数据 ===") for m in markers: print(f"Mark{m['mark']}:{m['freq_MHz']:.2f} MHz , {m['dB']:.2f} dB") # 4. Matplotlib 实时绘图 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(freq_arr, s11_db, label="S11 反射(dB)", color="#ff3333", linewidth=1.2) ax.plot(freq_arr, s21_db, label="S21 传输(dB)", color="#0066ff", linewidth=1.2) # 绘制标记点 for m in markers: ax.scatter(m["freq_MHz"], m["dB"], s=40, color="orange", zorder=5) ax.text(m["freq_MHz"], m["dB"]+0.8, f"M{m['mark']}", fontsize=9) ax.set_xlabel("频率 MHz") ax.set_ylabel("幅值 dB") ax.set_title("VNA6 S11/S21 扫频曲线") ax.legend() ax.grid(True, alpha=0.3) plt.show() # 循环持续采集波形(按Ctrl+C终止) try: print("\n持续采集波形,Ctrl+C退出循环") while True: freq_arr, s21_db = vna.get_s21_data() max_loss = min(s21_db) print(f"当前最大插损:{max_loss:.2f} dB") time.sleep(1) except KeyboardInterrupt: print("\n手动停止采集") finally: vna.close()二、代码配套使用说明(粘贴到 CSDN 文章)
2.1 前置准备
2.2 核心功能介绍
2.3 典型测试场景修改示例
python
运行
vna.set_sweep(start_MHz=400, stop_MHz=460, points=501)python
运行
vna.set_sweep(start_MHz=1550, stop_MHz=1600, points=1001)2.4 拓展二次开发思路(写进文章增加深度)
- 数据导出 CSV:将
freq_arr、s11_db、s21_db写入 csv 文件,Excel 离线分析滤波器插损、驻波; - 产线自动化判定:设置上下限阈值,自动判断器件 OK/NG 并打印日志;
- TDR 时域数据读取:新增
DATA:TDR?指令解析电缆时域曲线,定位线缆断点; - 搭配 GUI:使用 PyQt5 制作上位机可视化界面,替代官方配套软件;
- LabVIEW 对接:复用本文 SCPI 指令逻辑,仅替换串口通信 API。
Python 串口读取 VNA6 矢量网络分析仪波形完整 Demo
前置说明
- 通信接口:VNA6 通过 Type-C 虚拟串口 CH340 通信,波特率固定 115200;
- 功能说明:自动扫描串口连接仪器、下发 SCPI 指令配置扫频、读取频域 S 参数、4 组标记数据;
- 依赖安装
- 配套文章使用:直接复制到 CSDN 文末附录,带代码高亮,附带使用说明。
- 电脑安装 CH340 串口驱动,否则识别不到设备 COM 口;
- VNA6 正常开机,Type-C 直连电脑,不要使用拓展坞;
- 设备完成 OSLT 校准后再运行代码,数据才具备测量精度;
- 波特率固定 115200,无需修改。
auto_connect():自动枚举全部 COM 串口,无需手动填写串口号,新手友好;set_sweep():远程下发扫频起止频率、扫描点数,替代触屏手动设置;get_s11_data() / get_s21_data():读取频域幅值曲线,内置二进制帧解析;parse_s_param():解析仪器下发的二进制数据流,拆分频率、dB 幅值;get_markers():读取 4 个标记点的频点与对应损耗 / 反射值;- Matplotlib 绘图:自动绘制 S11/S21 双曲线,标记点橙色高亮显示。
- 天线 S11 驻波测试(433MHz ISM 频段)
- GPS 滤波器测试(1550~1600MHz)
- 数据导出 CSV:将
freq_arr、s11_db、s21_db写入 csv 文件,Excel 离线分析滤波器插损、驻波; - 产线自动化判定:设置上下限阈值,自动判断器件 OK/NG 并打印日志;
- TDR 时域数据读取:新增
DATA:TDR?指令解析电缆时域曲线,定位线缆断点; - 搭配 GUI:使用 PyQt5 制作上位机可视化界面,替代官方配套软件;
- LabVIEW 对接:复用本文 SCPI 指令逻辑,仅替换串口通信 API。