Скрипт Python с многопоточностью и связью по шине CAN не прерываетсяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Скрипт Python с многопоточностью и связью по шине CAN не прерывается

Сообщение Anonymous »

Я работаю над сценарием Python, который настраивает связь между несколькими электронными блоками управления (ECU1 и ECU2) с использованием библиотеки python-can. Скрипт предназначен для чтения сообщений из файла BLF, их фильтрации на основе определенных идентификаторов и обработки с использованием отдельных потоков для каждого ЭБУ. Однако сценарий не завершается должным образом и, похоже, зависает после печати сообщений «main_ECU выполнено», «фильтрация выполнена», «Поток ECU1 завершен».
поток выполнения сценария< /strong>:


[*]main_ecu fucntion — читает сообщение и отправляет его на виртуальную шину.
[*]функция ecu_filter - фильтровать сообщения на основе идентификатора и останавливаться при получении идентификатора 'oxDE0Q
[*]'main' функция - создать виртуальную шину, использовать потоки, как показано ниже

def main():
bus = can.interface.Bus(interface='virtual', channel='0', bitrate=500000,receive_own_messages=True)

can_id_filter_ecu1 = [0xKEREE, 0xWJKL0, oxDE0Q]
can_id_filter_ecu_2 = [0xIOBF, oxDE0Q]

main_ECU(bus, "input.blf")
#two seperate threads for ecu 1 and ecu 2
ecu_thread_1 = threading.Thread(target=ecu_filter,args= (bus,can_id_filter_ecu1,"File_1_msg.asc",))
ecu_thread_2 = threading.Thread(target=ecu_filter, args=(bus,can_id_filter_ecu_2,"File_2_msg.asc",))

ecu_thread_1.start()
ecu_thread_2.start()

ecu_thread_1.join()
print("ECU1 Thread has finished.")
ecu_thread_2.join()
print("ECU2 Thread has finished.")
bus.shutdown()

обновить[/b]

теперь скрипт запускается и возникает ошибка значения: ValueError: байт должен находиться в диапазоне (0 , 256) для строки (добавленной ниже), включенной в функцию ecu_filter

response_msg = can.Message(arbitration_id=msg_id,data= bytearray([count]), is_extended_id=False)
Фрагмент функции фильтра ЭБУ приведен ниже:
def ecu_filter(bus, filter_ids, asc_file):
stop_break = False
log_ecu = can.ASCWriter(asc_file)
msg_count = {}

while not stop_break:
mesg = bus.recv(1)
print(mesg) # Debugging output
if mesg is not None and mesg.arbitration_id in filter_ids:
log_ecu.log_event(mesg)
if mesg.arbitration_id == oxDE0Q:
stop_break = True
elif mesg.arbitration_id in msg_count:
msg_count[mesg.arbitration_id] += 1
else:
msg_count[mesg.arbitration_id] = 1
for msg_id, count in msg_count.items():
response_msg = can.Message(arbitration_id=msg_id, data=bytearray([count]), is_extended_id=False)
bus.send(response_msg)
log_ecu.stop()



Подробнее здесь: https://stackoverflow.com/questions/786 ... -terminate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Настройки CANoe для перехвата сообщений, отправленных по виртуальной шине Can с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Скрипт Python для доступа к служебной шине Azure с управляемым удостоверением
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Скрипт Python для доступа к служебной шине Azure с управляемым удостоверением
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Скрипт Python для доступа к служебной шине Azure с управляемым удостоверением
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Скрипт оболочки для журнала CAN сообщений с FIFO
    Anonymous » » в форуме Linux
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»