GPIO: 读取、驱动与脉冲¶
GPIO 辅助方法位于 AqProtocolExerciser: 它们直接与仪器的 GPIO 层通信(不是总线器件)。从 aqpxlib 或 aqpxlib.gpio 导入枚举与 GPIO protobuf 类型——一般脚本不需要 aqpxlib.message。
from aqpxlib import AqProtocolExerciser, PxIoState
with AqProtocolExerciser.connect(host="localhost", port=60600) as px:
...
类型参考: GPIO (API)。
逻辑电平(PxIoState)¶
驱动或解读状态时使用 PxIoState:
| 成员 | 含义 |
|---|---|
PxIoState.LOW |
驱动或采样为低 |
PxIoState.HIGH |
驱动或采样为高 |
PxIoState.HIGH_Z |
高阻抗(未主动驱动) |
读取引脚状态(get_gpio_state)¶
Exerciser 会回报所有引脚的状态;库再按 gpio_idx 选出单一 PxGpioPinState,字段如下: | 字段 | 含义 |
| ----- | ------- |
| pin_idx | 引脚索引(对应硬件编号) |
| output_state | 仪器正在驱动的电平(未驱动时为 None/未设置) |
| input_state | 最近一次采样的输入电平(无法取得时为 None/未设置) |
若 gpio_idx 为负值,或超过响应中的最后一个引脚,库会抛出 ValueError。
驱动静态电平(set_gpio_state)¶
这会对单一引脚发出设置状态操作。若该 GPIO 已被仪器上的其他协议占用,服务器可能拒绝请求。
此处对 gpio_idx 没有 Python 端限制(与脉冲不同);有效索引取决于硬件与固件。
发送脉冲(send_gpio_pulse)¶
发出一个脉冲: idle → 以active_time_ns保持 active → idle。
px.send_gpio_pulse(
gpio_idx=8,
active_state=PxIoState.HIGH,
idle_state=PxIoState.LOW,
active_time_ns=5000,
)
| 限制 | 说明 |
|---|---|
| 引脚 | 仅限 gpio_idx 8 或 9(与脉冲宽度触发工具相同)。 |
| 宽度 | active_time_ns 必须大于 5 ns 且小于 1 秒(1_000_000_000 ns)。 |
另见: GPIO 脉冲宽度触发 的 set_gpio_trigger 与 gpio_trigger 全局事件。
相关 GPIO (API)。