hardbyte / hardbyte/python-can

Kvaser Shutdown Error With Multiple Tasks

Abierto
#899 1 comentario 0 reacciones 0 asignados Ver en GitHub
backend:kvaser question
Lenguaje dominante
Python
Estrellas
1.6k
Forks
697
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I observed (on python-can 3.3.3 / Python 3.7.0) that with multiple periodic tasks, when calling the shutdown() function for a kvaser interface, the following error message is shown, maybe :
```
RESTART: testfile.py
Message sent on Kvaser Memorator, S/N XXXX (#1)
>>> Function canWrite failed - Handle is invalid
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\site-packages\can\broadcastmanager.py", line 136, in _run
self.bus.send(self.message)
File "C:\Program Files\Python37\lib\site-packages\can\interfaces\kvaser\canlib.py", line 555, in send
flags)
File "C:\Program Files\Python37\lib\site-packages\can\interfaces\kvaser\canlib.py", line 99, in __check_status
raise CANLIBError(function, result, arguments)
can.interfaces.kvaser.canlib.CANLIBError: Function canWrite failed - Handle is invalid
```
Does anyone have any idea?

Code for issue reproduction:
(with only one task, there is no error message)
```
import can
import time

from can.bus import BusABC

def send_periodic(bus_a):

msg1 = can.Message(arbitration_id=0x444,
data=[0, 25, 0, 1, 3, 1, 4, 1],
is_extended_id=False)

msg2 = can.Message(arbitration_id=0x454,
data=[1, 26, 1, 2, 4, 2, 5, 2],
is_extended_id=False)

msg3 = can.Message(arbitration_id=0x464,
data=[2, 27, 2, 3, 5, 3, 6, 3],
is_extended_id=False)

try:
#task1 = bus_a.send_periodic(msg1, 0.3)
task2 = bus_a.send_periodic(msg2, 0.5)
task3 = bus_a.send_periodic(msg3, 1.0)
if not isinstance(task1, can.ModifiableCyclicTaskABC):
print("This interface doesn't seem to support modification")
task1.stop()
return
counter=0
while counter<10:
msg2.data[0] = msg2.data[0] + 1
task2.modify_data(msg2)
time.sleep(1)
counter+=1
print("Message sent on {}".format(bus.channel_info))
except can.CanError:
print("Message NOT sent")

if __name__ == '__main__':
counter=0
bus = can.interface.Bus(bustype='kvaser', channel=0, bitrate=250000)
send_periodic(bus)
time.sleep(10)
bus.stop_all_periodic_tasks()
bus.shutdown()
```

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.