调试工具:1.显示量程可以通过下拉框设置;

main
wangbo 3 weeks ago
parent 3cd2ac7d84
commit 78d95376ba

@ -30,10 +30,14 @@ class WaveformPage(BasePage):
self.sample_duration = 2.0
self.time_axis = np.linspace(0, self.sample_duration, self.sample_points)
# 量程选项
self.range_options = [200, 500, 1000, 2000]
self.current_range = 1000 # 默认1000mV
# 纵轴配置
self.y_min = -1000
self.y_max = 1000
self.y_precision = 200
self.y_min = -self.current_range
self.y_max = self.current_range
self.y_precision = self.current_range // 5 # 每大格为量程的1/5
# 通道配置
self.channels = list(range(1, 9))
@ -43,6 +47,9 @@ class WaveformPage(BasePage):
self.selected_channel = tk.IntVar(value=1) # 默认选择通道1
self.previous_channel = 1 # 记录上一个通道
# 量程选择
self.selected_range = tk.StringVar(value="1000mV") # 默认选择1000mV
# 波形开启开关
self.wave_enabled = False
@ -61,9 +68,13 @@ class WaveformPage(BasePage):
control_frame = ttk.LabelFrame(main_frame, text="控制面板", padding=10)
control_frame.pack(fill=tk.X, pady=5)
# 第一行:通道选择和量程选择
top_frame = ttk.Frame(control_frame)
top_frame.pack(fill=tk.X, pady=5)
# 通道选择
channel_frame = ttk.Frame(control_frame)
channel_frame.pack(fill=tk.X, pady=5)
channel_frame = ttk.Frame(top_frame)
channel_frame.pack(side=tk.LEFT, padx=(0, 20))
ttk.Label(channel_frame, text="通道选择:").pack(side=tk.LEFT, padx=(0, 10))
@ -78,11 +89,28 @@ class WaveformPage(BasePage):
# 绑定选择事件
channel_combo.bind('<<ComboboxSelected>>', self.on_channel_selected)
# 量程选择
range_frame = ttk.Frame(top_frame)
range_frame.pack(side=tk.LEFT)
ttk.Label(range_frame, text="量程选择:").pack(side=tk.LEFT, padx=(0, 10))
# 创建量程选择下拉框
range_combo = ttk.Combobox(range_frame,
textvariable=self.selected_range,
values=["200mV", "500mV", "1000mV", "2000mV"],
state="readonly",
width=10)
range_combo.pack(side=tk.LEFT, padx=5)
# 绑定量程选择事件
range_combo.bind('<<ComboboxSelected>>', self.on_range_selected)
# 通道信息显示
self.channel_info_var = tk.StringVar(value="当前通道: 1")
ttk.Label(channel_frame, textvariable=self.channel_info_var).pack(side=tk.LEFT, padx=(20, 0))
ttk.Label(top_frame, textvariable=self.channel_info_var).pack(side=tk.RIGHT, padx=(20, 0))
# 控制按钮
# 第二行:控制按钮
button_frame = ttk.Frame(control_frame)
button_frame.pack(fill=tk.X, pady=5)
@ -103,6 +131,43 @@ class WaveformPage(BasePage):
self.setup_plot(plot_frame)
self.setup_udp()
def on_range_selected(self, event=None):
"""量程选择变化时的回调函数"""
range_str = self.selected_range.get()
# 从字符串中提取数字部分
new_range = int(range_str.replace("mV", ""))
if new_range != self.current_range:
print(f"切换量程: {self.current_range}mV -> {new_range}mV")
self.current_range = new_range
# 更新纵轴配置
self.y_min = -self.current_range
self.y_max = self.current_range
self.y_precision = self.current_range // 5 # 每大格为量程的1/5
# 更新坐标轴显示
self.update_plot_scale()
# 更新状态显示
self.status_var.set(f"量程已切换到 {new_range}mV")
def update_plot_scale(self):
"""更新坐标轴刻度"""
if hasattr(self, 'ax'):
# 更新纵轴范围
self.ax.set_ylim(self.y_min, self.y_max)
# 更新纵轴刻度
y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision)
y_minor_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision // 4) # 每小格为量程的1/20
self.ax.set_yticks(y_major_ticks)
self.ax.set_yticks(y_minor_ticks, minor=True)
# 重绘画布
self.canvas.draw_idle()
def on_channel_selected(self, event=None):
"""通道选择变化时的回调函数"""
new_channel = self.selected_channel.get()
@ -142,7 +207,7 @@ class WaveformPage(BasePage):
# 设置坐标轴标签
self.ax.set_xlabel('Time (us)')
self.ax.set_ylabel('Amplitude(mV)')
self.ax.set_ylabel('Amplitude (mV)')
self.ax.set_title('Real-time Waveform Display')
# 设置坐标轴范围
@ -156,8 +221,8 @@ class WaveformPage(BasePage):
x_minor_ticks = np.arange(0, self.sample_duration + 0.05, 0.05)
# 纵轴刻度
y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision) # 每10mV主刻度
y_minor_ticks = np.arange(self.y_min, self.y_max + 1, 50) # 每2mV次刻度
y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision)
y_minor_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision // 4) # 每小格为量程的1/20
self.ax.set_xticks(x_major_ticks)
self.ax.set_xticks(x_minor_ticks, minor=True)
@ -167,7 +232,7 @@ class WaveformPage(BasePage):
# 设置网格线
# 主网格线0.1us间隔,颜色较深
self.ax.grid(True, which='major', alpha=0.4, linestyle='-', linewidth=0.8)
# 次网格线0.05us间隔和2mV间隔,颜色较浅
# 次网格线0.05us间隔和纵轴小刻度间隔,颜色较浅
self.ax.grid(True, which='minor', alpha=0.2, linestyle='--', linewidth=0.5)
# 创建画布
@ -184,6 +249,7 @@ class WaveformPage(BasePage):
# 添加图例
self.ax.legend(loc='upper right')
# 其他方法保持不变...
def setup_udp(self):
"""设置UDP socket"""
try:
@ -438,7 +504,7 @@ class WaveformPage(BasePage):
self.show_info("波形地址设置成功")
self.start_udp()
else:
elf.show_info("波形地址设置成功")
self.show_info("波形地址设置成功")
self.stop_udp()
def ip_to_int(self, ip):

Loading…
Cancel
Save