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 содержат ожидаемые определения сообщений.
Вопрос: Что может быть причиной того, что функция extract_bus_logging не находит никаких каналов CAN или сообщений в извлеченном объекте MDF, несмотря на исходный MDF файл, содержащий их? Как правильно извлечь и сопоставить файлы DBC с данными MDF?
Подробнее здесь: https://stackoverflow.com/questions/786 ... mmdf-close