hardbyte / hardbyte/python-can

slcan interface needs some time-tweaking (Possible solution provided)

Đang mở
#1,746 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
Ngôn ngữ chính
Python
Star
1.6k
Fork
697
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

### Describe the bug
Messages are truncated while using send command.
Messages are truncated while using close command.

### To Reproduce
Code as example. Requires python-can and pyserial modules.
Windows PC and CANable with original firmware: https://github.com/normaldotcom/canable-fw
Counter-interface: PCAN USB dongle and oscilloscoop

Problem 1: When looping messages within the "with can.Bus", one can see on the scope that the messages are corrupted/truncated.
Problem 2: When looping messages main, one can see that the last message in the "with can.Bus" is truncated.

Possible solution:
End the _write-function with: "time.sleep(3.0e-5)"
Begin the close-function with: "time.sleep(3.0e-5)"

Additional information, experimentally obtained:
10kbps: total fail (!)
20kpbs: requires 5.0e-3 seconds
50kpbs: requires 2.0e-3 seconds
83kpbs: requires 2.0e-3 seconds
100kpbs: requires 6.0e-4 seconds
125kpbs: requires 6.0e-4 seconds
250kpbs: requires 5.0e-5 seconds
500kpbs: requires 3.0e-5 seconds
750kpbs: other side (PCAN in this case) has no setting for 750, it has 800 which is not compatible
1000kpbs: requires 4.0e-6 seconds or even lower

### Expected behavior
Truncated messages: seen on a oscilloscoop. PCAN viewer tels me stuffing errors. The error will result in resending infinite retrying messages.

### Additional context
OS and version: Windows 11
Python version: Python 3.12
python-can version: 4.3.1
pyserial version: 3.5
python-can interface/s (if applicable): slcan
Hardware interface: CANable 2.0 Pro
IDE: PyCharm recent version
Oscilloscope: Rigol DS1000-series
Counter-interface: PCAN USB isolated version and PCAN-View software

Possible solution:
End the _write-function with: "time.sleep(3.0e-5)"
Begin the close-function with: "time.sleep(3.0e-5)"

Traceback and logs

None

See code example.

```
def send_one():
with can.Bus(interface="slcan", channel="COM7@115200", bitrate=500000, sleep_after_open=0.0) as bus:
msg = can.Message(
arbitration_id=0x555, data=[0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55], is_extended_id=False
)

try:
j = 0
while j < 2:
bus.send(msg)
j = j + 1
except can.CanError:
print("Message NOT sent")

if __name__ == "__main__":
i = 0
while i < 2:
send_one()
i = i + 1
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.