Я хочу периодически отправлять сообщения, используя socketCAN с этим устройством
Я создал небольшой скрипт для достижения этой цели, который выглядит следующим образом:
import os
import time
msg = "1FF#FFFFF00000000000"
os.system("sudo slcand -o -c -f -s6 /dev/serial/by-id/*CANtact* can0")
os.system("sudo ifconfig can0 up")
os.system("sudo ifconfig can0 txqueuelen 1000") # this does not help
start = time.time()
while True:
if round(time.time() - start, 1) % 60 == 0.:
print(str(int((time.time() - start) / 60)) + " minutes")
os.system("cansend can0 " + msg)
time.sleep(0.1)
Я уже проводил некоторые исследования и обнаружил, что для некоторых людей он установил txqueuelen
. Однако это не помогло мне. Вывод этого скрипта выглядит следующим образом:
0 minutes
1 minutes
[...]
15 minutes
16 minutes
18 minutes
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
write: No buffer space available
[and so on]
Устройство прекращает отправку этих сообщений до того, как произойдет эта ошибка. Светодиодный индикатор входящего и исходящего трафика перестает мигать примерно за 10 секунд до нескольких минут до появления сообщения об ошибке. Кроме того, я не могу ничего читать на принимающей стороне. Время, необходимое для заполнения буфера, сильно меняется, от нескольких минут до нескольких часов. Обычно в течение 10-20 минут.
Мне казалось, что может быть что-то вроде принимающего буфера, и потому что я никогда не читал, что он просто заполняется. Но я не знаю, так ли это на самом деле, а также не о том, как это проверить, или как очистить буфер или сбросить его или что-то еще. Мне нужно только отправить мои сообщения. Меня больше ничего не волнует.
Единственное решение после этого - перезапустить Raspberry Pi, который питает устройство.