131 lines
4.4 KiB
Python
131 lines
4.4 KiB
Python
|
|
#!/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()
|