【问题标题】:Use DMXPY with a Transitions state machine将 DMXPY 与转换状态机一起使用
【发布时间】:2020-09-10 18:49:35
【问题描述】:

我正在尝试将 DmxPy 与用 Transitions 编写的状态机一起使用,但尝试将 DmxPy 传递给有限状态机会引发元类错误。似乎 DmxPy 的输出是一个 Nonetype,它没有在 Transitions 状态机中运行。

有谁知道如何使以下简单的、无法运行的脚本工作或根据我们所处的状态使灯亮起的变体?

class DmxPy:
def __init__(self, serialPort):
    self.serial =serialPort(serialPort, baudrate=57600)
    ...other DMX code...

    def set_red(self, channel)
    ...RGBW color red mix...

def set_green(self, channel)
    ...RGBW color green mix...

def render(self)
    self.serial.write(...DMX code...)

上面的内容很简单,但运行它会是

dmx = DmxPy('COM5')
dmx.set_red(1)
dmx.render()

dmx = DmxPy('COM5')
dmx.set_red(1)
dmx.render()

Transitions状态机代码示例,非功能代码为

class State:
    pass

classFSMOpen(State, DmxPy):
    dmx = DmxPy('COM5')
    dmx.set_red(1)
    dmx.render()

classFSMClosed(State,DmxPy):
    dmx = DmxPy('COM5')
    dmx.set_green(1)
    dmx.render()

classFSM(object)
    ...creation of the FSM...

从上面的代码中,我收到一个TypeError: metaclass conflict,当我检查 DmxPy 运行代码的类型时,它告诉我这是一个<class 'NoneType'>

那么,如何使用 FSM 中的 DmxPy 代码根据 FSM 的状态更改灯光?或者,有人有更好的主意吗?

【问题讨论】:

    标签: python-3.x methods transition nonetype pytransitions


    【解决方案1】:

    我已经加密了一种使代码工作的方法,只是不知道为什么。而且我很聪明,不会在这一点上在意,直到下一次它坏了。

    我只是通过像这样删除对 DmxPy 代码的调用来更改这两个类

    class State:
        pass
    
    classFSMOpen(State):
        dmx = DmxPy('COM5')
        dmx.set_red(1)
        dmx.render()
    
    classFSMClosed(State):
        dmx = DmxPy('COM5')
        dmx.set_green(1)
        dmx.render()
    
    classFSM(object)
        ...creation of the FSM...
    

    如果有人有理由这样做,我会全力以赴。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多