В системе matlab файлы с расширением mdl предназначены для хранения
Какая информация доступна об этих форматах файлов? Какие инструменты доступны для анализа этих файлов?
Обновление (2015/04/02)
В новой версии библиотеки Simulink для Java есть полная поддержка формата SLX. Документация не является явной, но исходный код содержит все подробности для ее анализа.
Старый ответ
Как ответил Роб, Библиотека Simulink для Java поддерживает формат файла Simulink MDL, а также может анализировать содержимое Stateflow. Библиотека с открытым исходным кодом, но единственная документация - это исходный код.
В настоящее время (по состоянию на сентябрь 2014 г.) мы работаем над поддержкой SLX и планируем выпустить ее в ближайшие 1-2 месяца. Если вам понадобится код до этого времени, свяжитесь со мной.
PS: Я бы опубликовал это как комментарий к ответу rob, но, похоже, у меня недостаточно репутации для этого :(
Раскрытие информации: я являюсь одним из разработчиков упомянутой библиотеки.
В открытом доступе очень мало информации. Вот немногое, что я нашел:
MDL и SLX - это проприетарные форматы файлов MathWorks для хранения моделей Simulink. SLX был представлен в Simulink R2012a и сделал формат файла по умолчанию в R2012b. Помимо файловой структуры, содержимое файлов SLX и MDL очень похоже. Например, пары "ключ-значение" в двух форматах выглядят одинаковыми. Люди часто говорят, что синтаксический анализ этих файлов - плохая идея, потому что они могут меняться между версиями Simulink (см., Например, am304 и мои комментарии выше), но я не видел много доказательств этого.
Формат MDL, похоже, был разработан внутри компании MathWorks. Похоже, был парсер MDL для python, но он имел ограниченную функциональность, а веб-сайт не работает с Май 2014.
Файл SLX - это zip-файл, содержащий коллекцию файлов XML, при этом большая часть спецификации модели хранится в simulink/blockdiagram.xml . @ am304 указал на эту информацию с веб-сайта MathWorks.:
Обычно уменьшает размер файла по сравнению с MDL. Уменьшение размера файла между MDL и SLX зависит от модели.
Решает некоторые проблемы предыдущих выпусков с загрузкой и сохранением файлов MDL, содержащих корейские и китайские символы.
Включает инкрементную загрузку и сохранение. Simulink оптимизирует производительность и использование памяти, загружая только необходимые части модель и сохранение только измененных частей модели.
Какая информация доступна об этих форматах файлов?
В MathWorks действительно есть документация для формата файла MDL в R2007b.
Файлы SLX представляют собой контейнеры zipfile, внутренняя структура которых основана на OOXML: //en.wikipedia.org/wiki/Open_Packaging_Conventions "rel =" nofollow "> формат OPC . Файлы SLX содержат один или несколько файлов XML, внутренняя структура которых аналогична структуре файла MDL, но в формате XML. Кроме того, двоичные ресурсы, такие как графика, могут храниться в отдельных файлах JPG, а не кодироваться текстом и напрямую вставляться, как в файл MDL.
Оба формата меняются по мере добавления новых функций в Simulink, но можно ожидать, что SLX будет менее стабильным, поскольку MathWorks реорганизует внутреннюю файловую структуру SLX. Например, в R2014b MathWorks начал разбивать разделы традиционно монолитного blockdiagram.xml на отдельные файлы, такие как stateflow.xml и graphicalInterface.xml.
Какие инструменты доступны для анализа этих файлов?
Есть несколько общедоступных библиотек / API для синтаксического анализа Simulink, но я не использовал ни одну из них, поэтому не уверен, насколько хорошо они работают.
Вы также можете найти других, выполнив поиск по синтаксическому анализатору Simulink .
Если ни один из них не помогает, некоторые коммерческие инструменты анализируют MDL и SLX напрямую, а не полагаются на MATLAB API. Вы могли бы узнать о лицензировании парсера, используемого в каком-нибудь коммерчески доступном инструменте Simulink.
MAT-files are binary MATLAB ® files that store workspace variables. Starting with MAT-file Version 4, there are several subsequent versions of MAT-files that support an increasing set of features. MATLAB releases R2006b and later all support all MAT-file versions.
By default, all save operations create Version 7 MAT-files. The only exception to this is when you create new MAT-files using the matfile function. In this case, the default MAT-file version is 7.3.
To identify or change the default MAT-file version, access the MAT-Files Preferences.
On the Home tab, in the Environment section, click Preferences.
Select MATLAB > General > MAT-Files.
The preferences apply to both the save function and the Save menu options.
The maximum size of a MAT-file is imposed only by your native file system.
This table lists and compares all MAT-file versions.
Saving and loading parts of variables, and all Version 7 features
Unicode ® character encoding, which enables file sharing between systems that use different default character encoding schemes, and all Version 6 features.
N-dimensional arrays, cell arrays, structure arrays, variable names longer than 19 characters, and all Version 4 features.
Two-dimensional double , character, and sparse arrays
Note
Version 7.3 MAT-files use an HDF5 based format that requires some overhead storage to describe the contents of the file. For cell arrays, structure arrays, or other containers that can store heterogeneous data types, Version 7.3 MAT-files are sometimes larger than Version 7 MAT-files.
Accelerate Save and Load Operations for Version 7.3 MAT-Files
Version 7.3 MAT-files use an HDF5-based format that stores data in compressed chunks. The time required to load part of a variable from a Version 7.3 MAT-file depends on how that data is stored across one or more chunks. Each chunk that contains any portion of the data you want to load must be fully uncompressed to access the data. Rechunking your data can improve the performance of the load operation. To rechunk data, use the HDF5 command-line tools, which are part of the HDF5 distribution.
Файлы – это довольно распространенные объекты системы MATLAB. О некоторых типах файлов уже говорилось в предшествующих главах. В этом уроке рассматриваются свойства файлов, которые не зависят от их типа и относятся к любым файлам.
Файл обычно является некоторой совокупностью данных, объединенных одним именем. Тип файла, как правило, определяется его расширением. Мы рассматриваем файл как некое целое, хотя физически на диске он может быть представлен несколькими областями – говорят, что в этом случае файл фрагментирован.
Перед использованием любого файла он должен быть открыт, а по окончании использования – закрыт. Много файлов может быть открыто и доступно для чтения одновременно. Рассмотрим команды открытия и закрытия файлов.
- Команда open имя, где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя:
- переменная – открывает массив, названный по имени, в редакторе массивов (Array Editor);
- .mat – открывает файл, сохраняет переменные в структуре в рабочей области;
- .fig – открывает его в редакторе дескрипторонй графики Property Editor;
- .m – открывает m-файл в редакторе-отладчике;
- .mdl – открывает модель в Simulink;
- .р – открывает, если он есть, m-файл с тем же именем;
- .html – открывает HTML документ в браузере помощи.
Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет – то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией which ('имя файла') По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх – расширение файла. Исключение – переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая т-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых ореnххх.
- [FILENAME, PATHNAME] = uigetfile(FILTERSPEC. Title). Открывает диалог с именем Title и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME=0, если файл не существует или если пользователь нажал на Cancel. [FILENAME, PATHNAME] = uigetfile (FILTERSPEC, Title. X. Y) размещает окно диалога в точке X, Y (координаты в пикселях).
[filename, pathname] = uigetfile( '*.m;*.fig;*.mat:*.mdl' , 'All MATLAB Files (*.m, *.fig, *.mat. *.mdl)' ).
- Команда uiload открывает файл в диалоге, управляемом пользователем, с использованием команды load.
Функция ui import запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB.
- ui import (FILENAME) – запускает Мастер Импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель.
- ui import (' -file') – вначале выводит диалог выбора файла.
- ui import ('-pastespecial') – вначале выводит для предварительного просмотра содержимое буфера обмена Windows.
- S = ui import (…) хранит результирующие переменные как поля структуры S.
- Команда uisave – управляемое пользователем сохранение (команда save описана в уроке 2) с Windows диалогом.
- Функция saveas – сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном print.
- Функция saveas (H, 'FILENAME') – сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME.
- Функция saveas (H. 'FILENAME'. 'FORMAT') – выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры функции:
- 'fig' – сохранить рисунок (график) в двоичном fig-файле;
- 'm' или 'mfig' – сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки;
- 'mmat' – сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции.
Команда или функция delete удаляет файл или объект графики.
- delete имя файла удаляет файл текущей папки. Может быть использована *. Предпочтительно использование с записью в форме функции delete('mw файла'), когда имя файла – строка.
- delete(H) удаляет графический объект с дескриптором Н. Если этот объект – окно, то оно предварительно закрывается.
- Функция close(H) закрывает только графические окна. Для закрытия файлов необходимо использовать команду f close.
Для записи файлов на диск служит команда save, используемая в довольно очевидных формах:
Соответственно для считывания файлов с диска служит команда load:
В этих командах имя файла указывается по правилам, принятым в операционных системах класса MS-DOS. Эти команды обычно дублируются кнопками панелей инструментов и браузером файлов.
Приведенные ниже функции относятся к некоторым специализированным файлам:
- М = dlmread(filename, delimiter) – считывает данные из файла filename с ASCII-разделителем, используя разделитель delimiter, в массив М. Используйте '\t', i чтобы определить в качестве разделителя символ табуляции;
- М = dlmread(filename.delimiter,г.с) – считывает данные из файла filename с ASCII-разделителем, используя разделитель delimiter, в массив М, начиная со смещения г (по строкам) и с (по столбцам). Параметры r и с отсчитываются начиная с нуля, так что г=0, с=0 соответствует первому значению в файле;
- М = dlmread(filename, delimiter, r, с, range) – импортирует индексированный или именованный диапазон данных с разделителями в формате ASCII. Для использования диапазона ячеек нужно определить параметр range в виде range = [ВерхняяСтрока. ЛевыйСтолбец. НижняяСтрока, ПравыйСтолбец].
Аргументы функции dlmread следующие:
- delimiter – символ, отделяющий отдельные матричные элементы в электронной таблице формата ASCII;
- (,) – разделитель по умолчанию;
- r, с – ячейка электронной таблицы, из которой берутся матричные элементы, соответствующие элементам в верхнем левом углу таблицы;
- range – вектор, определяющий диапазон ячеек электронной таблицы.
Команда dlmwrite преобразует матрицу MATLAB в файл с ASCII-разделителями, читаемый программами электронных таблиц:
- dlmwrite (filename. A .delimiter) – записывает матрицу А в верхнюю левую ячейку электронной таблицы filename, используя разделитель delimiter для отделения элементов матрицы. Используйте ' U' для создания файла с элементами, разделенными табуляцией. Все элементы со значением 0 опускаются. Например, массив [102] появится в файле в виде ' 1., 2' (если разделителем является запятая):
- dlmwrite(filename,A,delimiter, r,с) – записывает матрицу А в файл filename, начиная с ячейки, определенной r и с, используя разделитель delimiter;
- info=imfinfo(filename.fmt) – возвращает структуру, поля которой содержат информацию об изображении в графическом файле. Аргумент filename – строка, определяющая имя графического файла, fmt – строка, которая определяет формат файла. Файл должен находиться в текущей директории или в директории, указанной в пути MATLAB. Если imflnfo не может найти файл с именем filename, она ищет файл с именем filename.fmt.
В табл. 19.5 показаны возможные значения для аргумента fmt.
Таблица 19.5. Поддерживаемые графические форматы и их обозначения.
Формат Тип файла 'bmp' Windows Bitmap (BMP) 'hdf ' Hierarchical Data Format (HDF) 'jpg ' или 'jpeg' Joint Photographic Experts Group (JPEG) 'pcx' Windows Paintbrush (PCX) 'tif 'или 'tiff ' Tagged Image File Format (TIFF) 'xwd' X Windows Dump (XWD) Если filename – TIFF- или HDF-файл, содержащий более одного изображения, то info представляет собой массив структур с отдельным элементом (т. е. с индивидуальной структурой) для каждого изображения в файле. Например, info(3) будет в таком случае содержать информацию о третьем изображении в файле. Множество полей в info зависит от конкретного файла и его формата. Однако первые девять полей всегда одинаковы. В табл. 19.6 перечислены эти поля и описаны их значения.
Таблица 19.6. Поля информационной структуры и их значения.
Save to Nondefault MAT-File Version
Save to a MAT-file version other than the default version when you want to:
Allow access to the file using earlier versions of MATLAB.
Take advantage of Version 7.3 MAT-file features.
Reduce the time required to load and save some files by storing uncompressed data.
Reduce the size of some files by storing compressed data.
To save to a MAT-file version other than the default version, specify a version as the last input to the save function. For example, to create a Version 6 MAT-file named myfile.mat , type:
3 ответа
М-файлы сценариев и функций. Структура и свойства файлов сценариев.
Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MATLAB служит задание последовательности действий по программе, записанной в виде m-файла. В уроке 5 было показано, что для создания m-файлов может использоваться как встроенный редактор, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m-файл становится частью системы, и его можно вызывать как из командной строки, так и из другого m-файла. Есть два типа m-файлов: файлы-сценарии и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MATLAB редактора/отладчика m-файлов.
Файл-сценарий, именуемый также Script-файлом, является просто записью серии команд без входных и выходных параметров. Он имеет следующую структуру:
Важны следующие свойства файлов-сценариев:
- они не имеют входных и выходных аргументов;
- работают с данными из рабочей области;
- в процессе выполнения не компилируются;
- представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии.
Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выводится при выполнении команд lookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help Имя_файла. Рассмотрим следующий файл-сценарий:
Обратите внимание на то, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и хmах, использованным в теле файла. Это следствие первого свойства файлов-сценариев – они работают с данными из рабочей области. Переменные, используемые в файлах-сценариях, являются глобальными, т. е. они действуют одинаково в командах сессии и внутри программного блока, которым является файл-сценарий. Поэтому заданные в сессии значения переменных используются и в теле файла. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы-сценарии не возвращают значений. Можно сказать, что файл-сценарий – это простейшая программа на языке программирования MATLAB [Файлы-сценарии нельзя компилировать. Перед компилированием их нужно преобразовать в файлы-функции – Примеч. ред.].
Data Compression
Beginning with Version 7, MATLAB compresses data when writing to MAT-files to save storage space. Data compression and decompression slow down all save operations and some load operations. In most cases, the reduction in file size is worth the additional time spent.
In some cases, loading compressed data actually can be faster than loading uncompressed data. For example, consider a block of data in a numeric array saved to both a 10 MB compressed file and a 100 MB uncompressed file. Loading the first 10 MB takes the same amount of time for each file. Loading the remaining 90 MB from the uncompressed file takes nine times as long as loading the first 10 MB. Completing the load of the compressed file requires only the relatively short time to decompress the data.
The benefits of data compression are negligible in the following cases:
The amount of data in each item is small relative to the complexity of its container. For example, simple numeric arrays take less time to compress and uncompress than cell or structure arrays of the same size. Compressing arrays that result in an uncompressed file size of less than 3 MB offers limited benefit, unless you are transferring data over a network.
The data is random, with no repeated patterns or consistent values.
Читайте также: