Нет вывода при извлечении данных журнала CAN-шины с использованием файлов DBC в asammdf (закрыто)Python

Программы на Python
Anonymous
Нет вывода при извлечении данных журнала CAN-шины с использованием файлов DBC в asammdf (закрыто)

Сообщение Anonymous »

Обновление 7 /12: Проблема заключалась в том, что файл mdf не был закрыт.
mdf.close() помогает.
Я пытаюсь извлечь данные журнала CAN-шины. из файла MDF, используя набор файлов DBC с библиотекой asammdf в Python. Я проверил, что файл MDF содержит каналы и сообщения CAN. Однако после попытки извлечь данные полученный объект MDF, похоже, не содержит никаких каналов или сообщений CAN. Вот код, который я использую:

Код: Выделить всё

from asammdf import MDF

# Load MF4 file
file_path = r'somepath'
mdf = MDF(file_path)

# Define the path for DBC files
pathdbc = r'dbcpath'

# Define the databases dictionary
database_files = {
"CAN": [
(pathdbc + "ch1.dbc", 1),
(pathdbc + "ch2.dbc", 2),
(pathdbc + "ch3.dbc", 3),
(pathdbc + "ch4.dbc", 4),
(pathdbc + "ch5.dbc", 5)
],
}

# Extract bus logging data using the DBC files
print("Extracting bus logging data using the provided DBC files...")
try:
extracted = mdf.extract_bus_logging(database_files=database_files)
print("Extraction successful.")
except Exception as e:
print(f"Extraction failed: {e}")

# Function to list messages in a specified CAN network
def list_messages_in_can_network(network_id):
can_networks = extracted.bus_logging_map.get('CAN', {})
if network_id in can_networks:
messages = can_networks[network_id]
print(f"\nCAN Network {network_id}: {len(messages)} messages")
for message_id, index in messages.items():
print(f"Message ID: {message_id}, Index: {index}")
else:
print(f"No messages found for CAN Network {network_id}")

# List the names of CAN networks after extraction
def list_can_networks_after_extraction():
can_networks = extracted.bus_logging_map.get('CAN', {})
print(f"Number of CAN networks after extraction: {len(can_networks)}")
for network_id in can_networks.keys():
print(f"CAN Network ID after extraction: {network_id}")

# List messages in CAN Network 4
network_id = 4

# Run the functions
list_can_networks_after_extraction()
list_messages_in_can_network(network_id)
Выход:
Извлечение данных журнала шины с использованием предоставленных файлов DBC...
Извлечение успешно.
Количество сетей CAN после извлечения: 0
Сообщения для сети CAN 4 не найдены
У меня есть проверил, что исходный файл MDF содержит сообщения и каналы. Вот что я пробовал на данный момент:
  • Проверил структуру файла MDF, чтобы убедиться, что она содержит данные CAN.
  • Проверил файлы DBC, чтобы убедиться в их правильности и доступности.
  • Убедился в правильности и доступности. Файлы DBC содержат ожидаемые определения сообщений.
Однако после извлечения полученный объект MDF не показывает ни сетей CAN, ни сообщений. .
Вопрос: Что может быть причиной того, что функция extract_bus_logging не находит никаких каналов CAN или сообщений в извлеченном объекте MDF, несмотря на исходный MDF файл, содержащий их? Как правильно извлечь и сопоставить файлы DBC с данными MDF?

Подробнее здесь: https://stackoverflow.com/questions/786 ... mmdf-close

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