如何在PyTransitions有限状态机(FSM)的YAML配置中定义状态输出动作
PyTransitions原生支持状态绑定回调动作,你只需要将YAML中原本字符串格式的状态项,调整为包含回调配置的字典结构即可,修改后的配置示例如下:
initial: A states: - name: A on_enter: led1_on - name: B on_enter: led2_on - name: C on_enter: [led1_on, led2_on] transitions: - {trigger: "AtoC", source: "A", dest: "C"} - {trigger: "CtoB", source: "C", dest: "B"}
配置说明:
- 每个状态项改为字典结构,
name字段填写原状态名称,on_enter字段填写进入该状态时需要触发的回调函数名,需要同时触发多个动作时,用列表格式填写多个函数名即可。 - 除了进入状态的回调,你也可以用
on_exit字段配置离开当前状态时需要执行的动作,用法和on_enter完全一致。 - 你需要在状态机绑定的Python类中,提前实现对应名称的回调方法,执行点亮LED的实际逻辑。
配套的Python加载参考代码:
from transitions import Machine import yaml class LEDStateMachine: def led1_on(self): # 此处替换为实际点亮LED1的硬件操作逻辑 print("LED1 已点亮") def led2_on(self): # 此处替换为实际点亮LED2的硬件操作逻辑 print("LED2 已点亮") # 加载YAML配置 with open("fsm_config.yaml", encoding="utf-8") as f: fsm_config = yaml.safe_load(f) # 初始化状态机 led_machine = LEDStateMachine() machine = Machine(model=led_machine, **fsm_config) # 功能测试 print(f"初始状态:{led_machine.state}") led_machine.AtoC() print(f"切换后状态:{led_machine.state}") led_machine.CtoB() print(f"切换后状态:{led_machine.state}")
内容的提问来源于stack exchange,提问作者Mtk59
相关产品推荐
相关产品推荐

