综测仪MT8862A控制方法

实现自动化控制,本次为大家讲解综测仪MT8862A的控制逻辑。

新建底层控制逻辑

在这里插入图片描述

在文件basis_contorl.py中写入仪器控制底层代码,代码如下:

import tkinter.messagebox
import pyvisaclass InstrumentControl(object):inst = Nonedef __init__(self, equipment_name: str, equipment_visa: str, visa_dll='c:/Windows/System32/visa32.dll'):"""建立仪器初始对象@param equipment_name: 仪器名@param equipment_visa: 仪器visa地址@param visa_dll: visa.all地址"""try:self.rm = pyvisa.ResourceManager(visa_dll)print("打开visa32.dll文件成功")self.inst = self.open_by_name(equipment_name, equipment_visa)except Exception as e:tkinter.messagebox.showerror('错误', '在{}中找不到visa32.dll,请确认正确安装了NI-MAX和驱动')print(f"打开visa32.dll文件失败, 报错原因:{e}")passdef open_by_name(self, device_name, gpib_ip):"""仪表通讯@param device_name:@param gpib_ip:@return: 仪器控制对象"""self.inst = self.rm.open_resource(gpib_ip)print(self.inst)print("打开资源:" + gpib_ip)query_name_str = self.command_query("*IDN?")print("查询名称为:" + query_name_str)if device_name in query_name_str:print("打开仪表成功,打开的是:" + device_name)print("打开仪表成功,打开的是:" + device_name)return self.instreturn self.instdef command_write(self, write_cmd):"""命令写入@param write_cmd: 写入指令@return: 执行结果"""print("执行了写入指令:" + write_cmd)ret_res = self.inst.write(write_cmd)print("返回了:" + str(ret_res))return ret_resdef command_read(self, read_cmd):"""命令读取@param read_cmd: 读取指令@return: 读取信息"""print("执行了读取指令:" + read_cmd)ret_res = self.inst.read(read_cmd)print("返回了:" + str(ret_res))return ret_resdef command_query(self, query_cmd):"""命令查询@param query_cmd: 查询指令@return: 查询信息"""print("执行了查询指令:" + query_cmd)ret_res = self.inst.query(query_cmd).replace('\n', '')print("返回了:" + str(ret_res))return ret_res

编写好底层控制代码,在文件instrument_MT8862A.py写入综测仪MT8862A的控制指令,代码如下:

from instrument_control.basis_contorl import InstrumentControlclass MT8862A(InstrumentControl):def __init__(self, equipment_name: str, equipment_visa: str):super(MT8862A, self).__init__(equipment_name, equipment_visa)def reset_inst(self):"""初始化仪表"""self.command_write('*RST;*OPC?')self.command_write('*CLS;*OPC?')self.command_write('NWTYPE AP;*OPC?')self.command_write('MODE RXMODE;*OPC?')self.command_write('ILVL 12;*OPC?')self.command_write('OLVL -50;*OPC?')def query_equipment(self):"""查询设备的sn:return: 设备sn"""result = self.command_query("*IDN?")return resultdef set_ppuu_type(self, ppuu_type: str, standard: str):"""设置带宽@param ppuu_type: 20MHZ@param standard: 测试制式"""self.command_write(f"PPDUTYPE_{standard.upper()} {ppuu_type};*ESR?")def query_ppuu_type(self, standard: str):"""查询带宽@return: 查询结果@param standard: 测试制式"""result = self.command_query(f"PPDUTYPE_{standard.upper()}?;*ESR?")return resultdef set_mcs_index(self, mcs_index: str, standard: str):"""设置速率@param mcs_index: 0,1。。。。。@param standard: 测试制式"""self.command_write(f"MCSINDEX_{standard.upper()} {mcs_index};*ESR?")def query_mcs_index(self, standard: str):"""查询速率@return: 查询结果@param standard: 测试制式"""result = self.command_query(f"MCSINDEX_{standard.upper()}?")return resultdef set_channel_band(self, channel_band: str, standard: str):"""设置2/5g信道或6g信道@param channel_band: 6G,2PT4G_5G@param standard: 测试制式"""self.command_write(f"CHANNELBAND_{standard.upper()} {channel_band};*ESR?")def query_channel_band(self, standard: str):"""查询信道模式@return: 查询结果@param standard: 测试制式"""result = self.command_query(f"CHANNELBAND_{standard.upper()}?")return resultdef set_wifi_ssid(self, wifi_ssid):"""设置WiFi的ssid@param wifi_ssid: WiFi名字"""self.command_write(f"NWSSID {wifi_ssid}")def query_wifi_ssid(self):"""查询WiFi的ssid@return: 查询结果"""result = self.command_query(f"NWSSID?")return resultdef set_security_type(self, security_type: str):"""设置加密方式@param security_type:WPA3"""self.command_write(f"SECURITY_TYPE_AP {security_type};*ESR?")def query_security_type(self):"""查询加密方式@return: 查询结果"""result = self.command_query("SECURITY_TYPE_AP?")return resultdef set_psk_passphrase(self, psk_passphrase: str):"""设置密码@param psk_passphrase: 12345678"""self.command_write(f'SECURITY_PSKPASSPHRASE_WPA3_AP "{psk_passphrase}";*ESR?')def query_psk_passphrase(self):"""查询密码@return: 查询结果"""result = self.command_query("SECURITY_PSKPASSPHRASE_WPA3_AP?")return resultdef set_country_state(self, country_state: str):"""设置是否支持国家码@param country_state: ENABLE"""self.command_write(f"COUNTRY_STATE {country_state};*ESR?")def query_country_state(self):"""查询是否支持国家码@return:"""result = self.command_query("COUNTRY_STATE?")return resultdef set_country_code_mode(self, country_code_mode: str):"""设置国家码模式@param country_code_mode: STR"""self.command_write(f"COUNTRY_REGION_MODE {country_code_mode};*ESR?")def query_country_code_mode(self):"""查询国家码模式"""result = self.command_query(f"COUNTRY_REGION_MODE?")return resultdef set_country_code_one(self, country_code: str):"""设置国家码@param country_code: CN"""self.command_write(f"COUNTRY_REGION {country_code};*ESR?")def query_country_code_one(self):"""查询国家码"""result = self.command_query(f"COUNTRY_REGION?")return resultdef set_loss_state(self, state: str):"""设置线损开关状态@param state: 开:ON  关:OFF"""self.command_write(f'EXTLOSSW {state}')def set_rate_11g(self, rate: int):"""设置802.11g速率@param rate: 速率"""self.command_write(f'DATARATE_G {rate}')def set_rate_11b(self, rate):"""设置802.11b速率@param rate: 速率"""self.command_write(f'DATARATE_B {rate}')def set_rate_11a(self, rate):"""设置802.11a速率@param rate: 速率"""self.command_write(f'DATARATE_A {rate}')def set_wifi_system(self, tech: str):  # 11a-5G 11b-2g"""设置制式@param tech: 802.11a:A, 802.11b:B, 802.11g:G, 802.11n:N, 802.11ac:AC, 802.11ax:AX"""cmd = 'WLANSTD {}'.format(str(tech).upper())self.command_write(cmd)def query_wifi_system(self):"""查询设置制式@return: 返回制式"""result = self.command_query("WLANSTD?")return resultdef set_rx_or_tx_mode(self, mode: str):"""更改RX mode或TX mode@param mode: tx:TXMODE rx:RXMODE"""self.command_write('MODE {}'.format(mode))def set_data(self):"""更新目标参数"""cmd = "NWUPDATE;*ESR?"self.command_write(cmd)def set_channel(self, ch: int):"""频段设置@param ch: 测试频段"""cmd = 'CHANNELNUM {}'.format(str(ch))self.command_write(cmd)def set_start_and_end_level(self, start_level: str, end_level: str):"""设置start_level 和 end_level@param start_level: 起始电平值@param end_level: 结束电平值"""self.command_write(f'RXSEARCH_LVL {start_level},{end_level}')def set_output_level_one(self, level: str):"""设置输出电平@param level: 电平值"""self.command_write(f"OLVL {level};*ESR?")def query_output_level_one(self):"""查询电平值@return:"""result = self.command_query("OLVL?;*ESR?")return resultdef set_input_level_one(self, level: str):"""设置输入电平@param level: 电平值"""self.command_write(f"ILVL {level};*ESR?")def query_input_level_one(self):"""查询电平值@return:"""result = self.command_query("ILVL?;*ESR?")return resultdef set_primary_channel(self, primary_channel: str):"""设置测试信道@param primary_channel: 0,1.。。。"""self.command_write(f"CHANNELNUM {primary_channel};*ESR?")def query_primary_channel(self):"""查询测试信道@return: 查询结果"""result = self.command_query("CHANNELNUM?;*ESR?")return resultdef set_assign_ip_address(self, assign_ip_address: str):"""设置assign_ip_address@param assign_ip_address: MANUAL"""self.command_write(f"IPPROP {assign_ip_address};*ESR?")def query_assign_ip_address(self):"""查询assign_ip_address@return: 查询结果"""result = self.command_query("IPPROP?")return resultdef set_dut_ip_address(self, dut_ip_address: str):self.command_write("")def set_anti_seize(self):"""卡住重连"""self.command_write("ABORT;*ESR?")self.command_write("DISCONNECT;*ESR?")def get_ack(self):"""查询PER(丢包率)测量值@return: 丢包率"""ret = self.command_query('MEAS_PER?').split(',')[1]return retdef check_connect(self):"""查询wifi连接状态@return: Idle:0 Scanning:2 Connecting:6 Connected:7 Disable:9"""try:ret = self.command_query('NWSTAT?').replace('\r', '')except:ret = Nonereturn retdef set_pkt(self, pkt: int):"""设置执行PER测试时MT8862A传输的数据包数@param pkt: 数据包数"""self.command_write('PERPKTS {}'.format(pkt))def single_on(self):"""发射WIFI信号 (前提需要先连接上仪表WIFI 带8862A字样)"""self.command_write('SNGLS')def query_pkt_statue(self):"""查询测试状态@return: 测试状态"""pkt_statue = self.command_query("MPSTAT?")return pkt_statuedef query_test_statue(self):"""查询测试状态@return: 测试状态"""test_statue = self.command_query("MSTAT?")return test_statuedef set_test_step(self, step: str):"""设置测试步进@param step: 测试步进"""self.command_write("RXSEARCH_STEP {}".format(step))def query_test_step(self):"""查询测试步进@return: 测试步进"""result = self.command_query("RXSEARCH_STEP?")return resultdef query_line_loss(self):"""查询输出电损@return: 输出电损"""result = self.command_query("LOSSTBLVAL_LIST?")return resultdef set_loss(self, loss_value: float, cent_freq: int, port: str):"""设置对应频段线损:param loss_value: 线损值:param cent_freq: 测试频段:param port: 输出端口,Main1或Main2"""if 'MAIN1' in port:self.command_write(f'LOSSTBLVAL_LIST {cent_freq}MHZ,{loss_value},{loss_value},0.00,0.00,0.00;*ESR?')else:self.command_write(f'LOSSTBLVAL_LIST {cent_freq}MHZ,0.00,0.00,0.00,{loss_value},{loss_value};*ESR?')def set_lvl_status(self, status: str):"""设置lvl状态@param status: ON为开,OFF为关"""self.command_write(f"LVL {status};*ESR?")def disconnect_wifi(self):"""断开WiFi"""self.command_write("DISCONNECT;*ESR?")def set_wifi_sign(self):self.command_write("TRGSRC COM;*ESR?")self.command_write("COMTRGMODE MODE3;*ESR?")self.command_write("TXDATARATE_CTRL MODEB;*ESR?")def set_output_port(self, port: str):"""设置输出端口@param port:"""self.command_write(f"PORT MAIN{port};*ESR?")def query_output_port(self):"""查询输出端口@return: 返回端口结果"""result = self.command_query(f"PORT?")return result

控制仪器时先设置控制对象,具体例子如下:

    set_equipment_name = "MT8862A"set_equipment_visa = "仪器的GPIB地址"d66319_object = MT8862A(equipment_name=set_equipment_name, equipment_visa=set_equipment_visa)

关于综测仪MT8862A的控制方法就到这里了,博主后续还会更新不同仪器的控制方法,各位敬请期待吧,有疑问欢迎找博主解答,我是活动的笑脸。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习总结】Linux tmux 使用

1. 使用背景 本地连接服务器 AutoDL 训练模型时,使用 ssh 连接时: ssh -p xxxxx rootconnect.westc.gpuhub.com输入密码登录成功后 为了训练过程中本地和服务器始终连接,可以使用 tmux 终端复用工具开启后台训练 2. 安装 ~# sudo apt-ge…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment (部署)是一种 Kubernetes 资源对象,用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态,并负责确保所需数量的 Pod…

聚簇索引与非聚簇索引b+树实现的区别

文章目录 聚簇索引非聚簇索引B树中聚簇索引的查找(匹配)逻辑B树中非聚簇索引的查找(匹配)逻辑 聚簇索引 特点: 索引和数据保存在同一个B树中 页内的记录是按照主键的大小顺序排成一个单向链表 。 页和页之间也是根据…

算法设计与分析实验报告c++java实现(矩阵链连乘、投资问题、完全背包问题、旅行商问题、数字三角形)

一、 实验目的 1.加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态规…

力扣回溯篇

文章目录 46.全排列78.子集17.电话号码的字母组合39.组数总和79.单词搜索131.分割回文子串 46.全排列 给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],…

Linux:IO多路转接之poll

文章目录 select的缺点pollstruct pollfd解决缺点的方式 代码实现 本篇总结的是poll的相关内容,在总结poll的内容前,先回顾一下select的缺点 select的缺点 select的缺点也比较明显 等待的fd是有上限的,在我们当前这个版本来说,…

【AOSP】手把手教你编译和调试AOSP源码

一、下载AOSP源码 在开始之前,我们先安装编译AOSP需要的一些系统基本依赖,如下命令 sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto…

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 …

Centos7下docker安装jenkins【使用docker-compose图文教程】

个人记录 前置条件:安装Docker与Docker-compose Centos7安装Docker与Docker-compose【图文教程】 查看jenkins最新的版本 https://www.jenkins.io/download/ 配置docker-compose.yml vim docker-compose.yml按i进行编辑模式,粘贴如下内容。把image里…

11-pyspark的RDD的变换与动作算子总结

目录 前言 变换算子动作算子 前言 一般来说,RDD包括两个操作算子: 变换(Transformations):变换算子的特点是懒执行,变换操作并不会立刻执行,而是需要等到有动作(Actions)…

java(7)之跳转语句

1、break跳转语句 说到break其实也不是跳转,它更像是一个终结语句,常用于在循环语句需要停止出现例如 while(){ if(){ break; }} 这样的形式或者 switch(){ case…

蓝桥 python笔记14——KMP、字符串哈希、最长回文子串、字典树

目录 KMP 字符串哈希 最长回文子串 字典树 KMP 模式匹配问题: KMP算法: 用动规的思想求Next数组:如果后缀的i位置前缀的j位置,Next[i1]j1;如果后缀的i位置!前缀的j位置,那就用KMP算法,令jNe…

OpenCV图像处理——基于背景减除实现多目标追踪

1. 基本运动检测 基本运动检测方法的核心在于计算视频帧之间的差异,或者是将某一帧设定为“背景”,然后将其与后续的帧进行比较。这个过程在概念上非常简单:首先保存视频的第一帧作为背景参考,随后将这一帧与新接收到的帧进行逐像…

肖恩带你学C语言·文件操作(上)

1. 为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存&…

【攻防世界】FlatScience

dirsearch 扫描发现四个文件 在login.php 中发现 输入 http://61.147.171.105:61912/login.php/?debug 发现源码 <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3(../fancy.db);$res $db->query(…

Android 360度全景图功能

方法一&#xff1a;OpenGL ES 1.在build.gradle文件中添加依赖 allprojects {repositories {maven { url https://jitpack.io }} } 高版本AS中settings.gradle.kts&#xff1a; dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_RE…

蜂窝物联:智慧大田解决方案

蜂窝物联智慧大田解决方案集成了传感器、自动化控制、农情监测、物联网、无线通讯等技术&#xff0c;对与农作物生长及其物候期观测密切相关的土壤、空气、光照、热量等环境因子进行实时监测&#xff0c;智能预警&#xff1b;对田间灌溉电磁阀、水肥一体机进行远程智能自动化控…

9-浏览器必备插件

9-浏览器必备插件 1.Flash Copilot 浏览器超级助手 解决收藏夹 以及使用的办法 2.fehelper 本身还集成插件&#xff0c;满足开发使用 3.SuperCopy 超级复制 SuperCopy 超级复制 一键破解禁止右键、破解禁止选择、破解禁止复制、破解禁止粘贴&#xff0c;启用复制&#xff0c;…

SpringBoot | Spring Boot“整合Redis“

目录: 1. Redis 介绍2. Redis 下载安装3. Redis “服务开启”和“连接配置”4. Spring Boot整合Redis的“前期准备” :① 编写实体类② 编写Repository 接口③ 在“全局配置文件”中添加 “Redis数据库” 的 “相关配置信息” 5. Spring Boot整合“Redis” (案例展示) 作者简介…

Linux网卡与公网IP地址:一个不可随意配置的世界

在Linux系统的网络配置中&#xff0c;IP地址的配置是基础也是关键。许多人可能好奇&#xff1a;为何不能随意为Linux网卡配置公网IP地址&#xff0c;而私网IP地址似乎就可以随心所欲呢&#xff1f;本文将解开这些问题的答案&#xff0c;探索公网IP地址被严格管控的原因&#xf…