我正在使用 Matlab 从 python-can 包中调用 Python CAN 函数。
Python 中的代码工作正常,但从 Matlab 调用时却不行。问题似乎是 Matlab 是从父类而不是子类调用 send() 方法。Matlab 需要从子类调用 send() 方法。
此链接显示了 Matlab 对 Python 支持的限制: https ://www.mathworks.com/help/matlab/matlab_external/limitations-to-python-support.html
这是我的python代码:
import can
bus = can.interface.Bus(bustype = "slcan", channel = 'COM6', bitrate = 250000)
print(type(bus))
dataToSend = [1, 2, 3, 4, 5, 6, 7, 8]
CAN_Msg = can.Message(arbitration_id = 0x1, is_extended_id = True, data = dataToSend)
bus.send(CAN_Msg)
输出:
<class 'can.interfaces.slcan.slcanBus'>
这是我在 Matlab 中的代码:
kwa = pyargs('bustype', 'slcan', 'channel', 'COM6', 'bitrate', 250000);
bus = py.can.interface.Bus(kwa);
class(bus)
dataToSend = py.list({int32(1), int32(2), int32(3), int32(4), int32(5), int32(6), int32(7), int32(8)});
kwa = pyargs('arbitration_id', hex2dec('1'), 'is_extended_id', 'True', 'data', dataToSend);
CAN_Msg = py.can.Message(kwa);
bus.send(CAN_Msg);
输出:
ans =
'py.can.interface.Bus'
Error using bus>send (line 171)
Python Error: NotImplementedError: Trying to write to a readonly bus?
有没有一种简单的方法可以在 Matlab 中使用 python send() 方法?欢迎任何调用python代码的想法,即使我必须创建一个新的python库或修改python库代码。