#!/usr/bin/env python3 """ 测试Modbus暂停/继续控制值 """ def test_hex_values(): """测试十六进制控制值""" print("测试十六进制控制值") print("=" * 40) # 定义控制值 START_VALUE = 0x5555 # 继续/开始 PAUSE_VALUE = 0xAAAA # 暂停 print(f"继续/开始值:") print(f" 十六进制: 0x{START_VALUE:04X}") print(f" 十进制: {START_VALUE}") print(f" 二进制: {bin(START_VALUE)}") print(f"\n暂停值:") print(f" 十六进制: 0x{PAUSE_VALUE:04X}") print(f" 十进制: {PAUSE_VALUE}") print(f" 二进制: {bin(PAUSE_VALUE)}") # 验证值的范围 print(f"\n值范围验证:") print(f" 0x5555 = {START_VALUE} (在16位寄存器范围内: {0 <= START_VALUE <= 65535})") print(f" 0xAAAA = {PAUSE_VALUE} (在16位寄存器范围内: {0 <= PAUSE_VALUE <= 65535})") def simulate_pause_resume_logic(): """模拟暂停/继续逻辑""" print("\n模拟暂停/继续逻辑") print("=" * 40) # 模拟实验状态 paused_experiments = set() exp_id = 123 def toggle_experiment_pause(exp_id, is_paused): """模拟切换实验暂停状态""" if is_paused: # 当前是暂停状态,点击后继续 target_value = 0x5555 paused_experiments.discard(exp_id) new_label = "暂停" status_msg = "实验已继续" else: # 当前是运行状态,点击后暂停 target_value = 0xAAAA paused_experiments.add(exp_id) new_label = "继续" status_msg = "实验已暂停" return target_value, new_label, status_msg # 测试场景1: 运行中 -> 暂停 print("场景1: 实验运行中,点击暂停") is_paused = exp_id in paused_experiments target_value, new_label, status_msg = toggle_experiment_pause(exp_id, is_paused) print(f" 当前状态: {'暂停' if is_paused else '运行'}") print(f" 发送值: 0x{target_value:04X} ({target_value})") print(f" 按钮文本: {new_label}") print(f" 状态消息: {status_msg}") # 测试场景2: 暂停中 -> 继续 print("\n场景2: 实验暂停中,点击继续") is_paused = exp_id in paused_experiments target_value, new_label, status_msg = toggle_experiment_pause(exp_id, is_paused) print(f" 当前状态: {'暂停' if is_paused else '运行'}") print(f" 发送值: 0x{target_value:04X} ({target_value})") print(f" 按钮文本: {new_label}") print(f" 状态消息: {status_msg}") def test_modbus_register_format(): """测试Modbus寄存器格式""" print("\n测试Modbus寄存器格式") print("=" * 40) values = [0x5555, 0xAAAA, 1, 0] print("寄存器1200写入值格式:") for value in values: # 模拟pymodbus的write_register调用 print(f" write_register(1200, {value}) -> 0x{value:04X}") # 显示字节表示 high_byte = (value >> 8) & 0xFF low_byte = value & 0xFF print(f" 高字节: 0x{high_byte:02X}, 低字节: 0x{low_byte:02X}") def main(): print("Modbus暂停/继续控制测试") print("=" * 50) print("修改内容:") print("- 继续/开始: 0x5555 (21845)") print("- 暂停: 0xAAAA (43690)") print("- 寄存器地址: 1200") print("=" * 50) # 1. 测试十六进制值 test_hex_values() # 2. 模拟暂停/继续逻辑 simulate_pause_resume_logic() # 3. 测试Modbus寄存器格式 test_modbus_register_format() print("\n" + "=" * 50) print("修改总结:") print("✅ _toggle_experiment_pause 方法已更新") print("✅ 继续操作发送 0x5555 到寄存器1200") print("✅ 暂停操作发送 0xAAAA 到寄存器1200") print("✅ 日志显示十六进制和十进制值") print("✅ 方法文档已更新") print("\n测试方法:") print("1. 启动程序并创建实验") print("2. 开始实验进入'进行中'状态") print("3. 点击'暂停'按钮 -> 发送0xAAAA") print("4. 点击'继续'按钮 -> 发送0x5555") print("5. 查看日志确认发送的值") print("\n注意事项:") print("- 确保Modbus TCP配置正确") print("- 寄存器1200必须支持16位写入") print("- 设备需要正确解析0x5555和0xAAAA") if __name__ == "__main__": main()