hardbyte / hardbyte/python-can
Unable to send CAN FD frame using python-can (PCAN-USB Pro FD)
- 主要语言
- Python
- 星标
- 1.6k
- 派生
- 697
- PR 合并指标
- 30 天内没有已合并 PR
描述
Hi everyone,
I’m currently working on a test bench that communicates over CAN and CAN FD using a PCAN-USB Pro FD interface.
Sending standard CAN messages like 0x214 works perfectly from both Python and PCAN-View 👍
But I can't seem to send a CAN FD frame properly through Python. My goal is to send a frame with ID 0x1E38400C, data length = 2, and data = [0xEB, 0x10], using CAN FD (with is_fd=True, bitrate_switch=True, is_extended_id=True) 👎
I can send this same frame via PCAN-View successfully when enabling FD mode. So I know the hardware and channel config are okay.
I’ve tried a few code samples including the official ones from the [python-can documentation](https://python-can.readthedocs.io/en/stable/), but I either get:
- No error, but the frame is sent as standard CAN (not FD), or
- can.CanError: A parameter contains an invalid value
### Configuration:
- Interface: pcan
- Channel: PCAN_USBBUS2
- Bitrate: 500000
- Data bitrate: 2000000 (Can FD = 2Mb/s) ?
### My setup:
OS and version: window11
PCAN-USB Pro FD
Python version: 3.12.9
python-can version: 4.50.0
VScode : 1.100.2
notepad++: 8.8.1
my functions
```python
def periodic_message_can2(can_id=0x1E38400C, interface='pcan', channel='PCAN_USBBUS2'):
try:
bus = can.interface.Bus(interface=interface, channel=channel, fd=True, bitrate=500000, data_bitrate=2000000)
can_data_on = [0xEB, 0x10]
msg = can.Message(
arbitration_id=can_id,
data=can_data_on,
is_extended_id=True,
is_fd=True,
bitrate_switch=True,
dlc=2
)
bus.send_periodic(msg, 1.0)
print(" Message FD envoyé en périodique.")
except can.CanError as e:
print(f" Erreur CAN : {e}")
except Exception as e:
print(f" Erreur générale : {e}")
#OUTPUT for this one : can.CanError: A parameter contains an invalid value
############################################################
#Second function
def periodic_message_can(can_id=0x1E38400C, interface='pcan', channel='PCAN_USBBUS2'):
try:
bus = can.interface.Bus(interface=interface, channel=channel, fd=True)
can_data_on = [0xEB, 0x10]
msg = can.Message(arbitration_id=can_id, data=can_data_on, is_extended_id=True, is_fd=True, dlc=2, is_rx=False)
bus.send_periodic(msg, 1)
except can.CanError as e:
print(f"Erreur CAN : {e}")
except Exception as e:
print(f"Erreur générale : {e}")
#The function executes without any errors, but it looks like my frame is not sent as CAN FD...
```
When I check this frame in PCAN-View, the “Type” field is empty, which usually indicates it's a standard CAN frame and not an FD one. So even though I set is_fd=True in the code, it seems like it's not actually taking effect.
贡献指南
评估
这个 Issue 还没有评估数据。