升降机构

1.lift_up - 升降上升

方法: ctrl.lift_up(spd)

参数:

  • spd:速度值,float 类型,正速度表示上升

返回值:

  • bool:操作结果
    • True:指令发送成功
    • False:指令发送失败

使用示例:

Python
from fd_api import Control

ctrl = Control()
ctrl.init({"node_name": "fd_api_control"})

# 以速度 0.5 上升
result = ctrl.lift_up(0.5)
if result:
    print("上升指令发送成功")
else:
    print("上升指令发送失败")

注意: 速度模式下,升降驱动在约 1s 内未再收到速度命令会自行停止;上位机须 周期性调用(建议间隔 小于 500ms),单次调用不足以维持连续升降。

2.lift_down - 升降下降

方法: ctrl.lift_down(spd)

参数:

  • spd:速度值,float 类型,负速度表示下降

返回值:

  • bool:操作结果
    • True:指令发送成功
    • False:指令发送失败

使用示例:

Python
from fd_api import Control

ctrl = Control()
ctrl.init({"node_name": "fd_api_control"})

# 以速度 0.3 下降
result = ctrl.lift_down(-0.3)
if result:
    print("下降指令发送成功")
else:
    print("下降指令发送失败")

注意: 与 lift_up 相同,速度模式下需周期性调用以维持连续下降。

3.lift_pos - 升降位置控制

方法: ctrl.lift_pos(spd, pos_mm)

参数:

  • spd:速度值,float 类型
  • pos_mm:目标位置,float 类型,单位:毫米 (mm),为相对于原点的位置

返回值:

  • bool:操作结果
    • True:指令发送成功
    • False:指令发送失败

使用示例:

Python
from fd_api import Control

ctrl = Control()
ctrl.init({"node_name": "fd_api_control"})

# 以速度 0.2 移动到 100mm 位置
result = ctrl.lift_pos(0.2, 100.0)
if result:
    print("位置控制指令发送成功")
else:
    print("位置控制指令发送失败")

注意: 位置控制基于原点(可调用 lift_set_orig 设置)的相对位置,指定位置后电机在无中途打断的情况下移动到目标位置即停止。

4.lift_stop - 升降停止

方法: ctrl.lift_stop()

参数:

  • 无

返回值:

  • bool:操作结果
    • True:指令发送成功
    • False:指令发送失败

使用示例:

Python
from fd_api import Control

ctrl = Control()
ctrl.init({"node_name": "fd_api_control"})

# 停止升降运动
ctrl.lift_stop()
print("升降已停止")

5.lift_set_orig - 升降设置原点

方法: ctrl.lift_set_orig(save_flash=False)

说明: 将当前位置设置为原点(0 mm)。位置控制(lift_pos)基于该原点计算相对位置。

参数:

  • save_flash:是否保存到 Flash,bool 类型,默认 False。设为 True 时原点信息写入 Flash,断电重启后仍生效

返回值:

  • bool:操作结果
    • True:指令发送成功
    • False:指令发送失败

使用示例:

Python
from fd_api import Control

ctrl = Control()
ctrl.init({"node_name": "fd_api_control"})

# 将当前位置设置为原点(0mm)
result = ctrl.lift_set_orig()
if result:
    print("原点设置成功")
else:
    print("原点设置失败")

# 设置原点并保存到 Flash,断电重启后仍生效
result = ctrl.lift_set_orig(save_flash=True)

注意: 设置原点后,后续 lift_pos 位置控制将基于新原点计算相对位置,请确保在合适的位置设置原点。

6.lift_get_current_pos - 获取升降当前位置(同步读取)

方法: state.lift_get_current_pos()

参数:

  • 无

返回值:

  • float:当前升降位置高度,单位:毫米 (mm)。初始值为 0.0,收到订阅数据后更新为缓存值

使用示例:

Python
from fd_api import State

state = State()
state.init({"node_name": "fd_api_state"})

# 读取当前升降高度
pos = state.lift_get_current_pos()
print(f"当前升降高度:{pos:.2f} mm")

7.lift_sub_current_pos - 订阅升降位置(异步回调)

方法: state.lift_sub_current_pos(callback)

参数:

  • callback:回调函数,签名 callback(pos_mm),pos_mm 为 float 类型,单位:毫米 (mm)。回调在线程池中执行。

返回值:

  • SubscriptionId:订阅ID,类型为 int。可用于后续取消订阅;空回调返回 0

使用示例:

Python
from fd_api import State

state = State()
state.init({"node_name": "fd_api_state"})

# 定义回调函数
def on_lift_pos(pos_mm):
    print(f"升降位置更新:{pos_mm:.2f} mm")

# 订阅升降位置
sub_id = state.lift_sub_current_pos(on_lift_pos)
print(f"订阅成功,订阅ID:{sub_id}")

# 取消订阅
state.unsubscribe(sub_id)
print("已取消升降位置订阅")

建议:

  • 订阅的回调在线程池中执行,注意线程安全
  • 无需接收位置更新时及时取消订阅,避免不必要的回调
  • 可与 lift_get_current_pos 同步读取配合使用