hardbyte / hardbyte/python-can

USB2CAN Korlan on Windows

Abierto
#964 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
1.6k
Forks
697
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I am trying to use an 8devices Korlan usb2can adapter in Windows 10 64bit. The adapter is using the WinUSB driver and sucessfully captures CAN traffic inside wireshark, so I assume it to be functional.

Then I made a simple test in Python 3.8, to open the bus as instance of Usb2canBus. Initially this did not work because find_serial_devices() inside serial_selector.py tries to match with the legacy usb2can devices that had a serial number starting with "ED".
I modified the code as such:

```
def find_serial_devices(serial_matcher="ED"):
"""
...
"""
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(".", "root\cimv2")
items = objSWbemServices.ExecQuery("SELECT * FROM Win32_USBControllerDevice")
ids1 = (item.Dependent for item in items if "VID_0483&PID_1234" in item.Dependent)
ids = (d.strip('"')[-8:] for d in ids1)
return [id for id in ids]
```

Now the call to CanalOpen returned 0 until I swapped .dll's from the 8devices website. The tools/doc page at the 8devices wiki is a bit of a mess and very confusing. Some files are for the older usb2can. Eventually a non-zero Canal dll handle was returned with the dll from https://www.8devices.com/media/products/usb2can_korlan/downloads/usb2can_winusb.zip

However, now the code is running without errors, but I do not see any traffic on the bus while sending.
When I put the device in loopback mode and send, python-can receives a message with length of 0.

```
import os
import ctypes
from can.message import Message
import time

if __name__ == '__main__':
check = ctypes.WinDLL(r'./usb2can.dll')
from can.interfaces.usb2can.usb2canInterface import Usb2canBus

bus = Usb2canBus(bitrate=500000, flags=0x00000001)#Loopback
# bus = Usb2canBus(bitrate=500000, flags=0x00000008)

data = bytearray([1,2,3,4,5,6,7,8])
msg = Message(arbitration_id=1872, is_extended_id=False, data=data, extended_id=False)

while True:
bus.send(msg)
print(msg)
rcv_msg = bus.recv(timeout=1000)
if rcv_msg is not None:
print(rcv_msg)
time.sleep(1)
```
Output of this code is:
```
Timestamp: 0.000000 ID: 0750 S DLC: 8 01 02 03 04 05 06 07 08
Timestamp: 0.000000 ID: 0000 S DLC: 0
Timestamp: 0.000000 ID: 0750 S DLC: 8 01 02 03 04 05 06 07 08
Timestamp: 0.000000 ID: 0000 S DLC: 0
```

At this point I'm out of ideas on how to get the Korlan usb2can to work on Windows, but I'm willing to try any suggestions :)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.