Python-can:属性错误:'list'对象没有属性'channel'



我正在尝试使用公共汽车。Send_periodic发送多个周期为100ms的消息。然而,当我运行下面的代码时,我得到了错误:AttributeError: 'list'对象没有属性'channel'在第50行:task = bus。send_periodic(消息,0.1)

这对我来说没有意义,因为它的编写方式与源代码的示例相同。

import logging
import time
import can
import cantools
bus = can.interface.Bus(channel='can0', bustype='socketcan', bitrate='500000')
db = cantools.database.load_file('CAN_v2.2.kcd')
def cyclic_multiple_send(bus):
messages = []
# LLC_Mode_Control = Voltage feedback
messages.append(
can.Message(
arbitration_id=0x30041,
data=[8],
is_extended_id=True,
)
)
# LLC_Voltage_Limits
LLC_Voltage_Limits_data = db.encode_message('LLC_Voltage_Limits_3', {
'Input_voltage_min_3': 0, 'Input_voltage_max_3': 750, 'Output_voltage_min_3': 0, 'Output_voltage_max_3': 750
}
)
messages.append(
can.Message(
arbitration_id=0x30047,
data=LLC_Voltage_Limits_data,
is_extended_id=True,
)
)
#LLC_Current_Limits
LLC_Current_Limits_data = db.encode_message('LLC_Current_Limits_3', {
'Output_current_min_3': 0, 'Output_current_max_3': 75
}
)    
messages.append(
can.Message(
arbitration_id=0x30048,
data=LLC_Current_Limits_data,
is_extended_id=True,
)
)
task = bus.send_periodic(messages, 0.1)
assert isinstance(task, can.CyclicSendTaskABC)
time.sleep(100)
if __name__ == "__main__":
cyclic_multiple_send(bus)

查看示例代码的第6行。

bus = can.interface.Bus(channel='can0', bustype='socketcan', bitrate='500000')

在审查你的链接示例代码时,我会这样写。

bus = can.Bus(channel='can0', interface='socketcan', bitrate='500000')

因为您没有提供开箱即用的运行示例,所以我无法测试此解决方案。这只是在比较您的代码与python-can示例代码时的猜测。

和使用StackOverflow的另一个建议:请阅读如何询问和如何创建一个最小的,可重复的例子仔细。下次请给我们提供一个更小的和可复制的例子。你必须帮助我们,这样我们才能帮助你。

最新更新