Управление Matlab из Total Commander

Я уже давно не мыслю свою работу под Windows без файл-менеджера Total Commander (TC). Поэтому взаимодействие со всеми программами пытаюсь настроить именно через этот файл-менеджер, благо создатель TC Кристиан Гислер (Christian Ghisler) предусмотрел многие возможности для взаимодействия TC со сторонними программами. Эта заметка будет посвящена управлению Matlab с помощью Total Commander.

Конечно, благодаря программистам Matlab сделать то, что мною анонсировано в заголовке статьи, только с помощью Matlab и Total Commander проблематично (если не сказать, что невозможно). Одно небольшое отступление от темы – я вообще довольно охотно готов критиковать программистов Matlab, на сколько логичным, рациональным мне кажется Total Commander, на столько удивительно неуклюжим является с точки зрения удобства использования Matlab. И замечают это не только профессионалы, но и далекие от программирования люди. Matlab спасает только то, что его пользователи – удивительно талантливы. Чего стоит кладезь нужных программ mathworks.com, заметки undocumentedmatlab.com и т.д. Вот благодаря таким умельцам мне удалось осуществить мой замысел.

Итак, точнее заголовок заметки должен звучать так:

Управление Matlab с помощью matlabcontrol из Total Commander

Matlabcontrol – это Java API для управления Matlab. Удобен matlabcontrol тем, что для его использования не нужно знать Java.

Дальше изложение пойдет в форме коротких инструкций и будет рассчитано на людей, не знающих Java (таких же как я), но при этом понимающих, что такое программирование.

Предложенная схема у меня заработала для следующей конфигурации

OS Windows 7 x64
Matlab 7.12.0.635 (R2011a) x64
Total Commander x64 8.0 beta 9
Matlabcontrol 4.0.0

Для других версий OS, Total Commander,Matlab и matlabcontrol см. таблицу здесь

Результат:

Matlab-bar в Total Commander

На панели инструментов Total Commander создан набор инструментов для управление Matlab.

Инструкция: управление Matlab из Total Commander

  1. Скачиваем и устанавливаем Java Platform Standard Edition Development Kit (JDK) — набор инструментов разработчика программа на Java (этот набор включает также JRE (Java Runtime Environment) – среду для выполнения Java программ)
  2. Скачиваем matlabcontrolmatlabcontrol (нам нужен файл matlabcontrol-4.0.0.jar )
  3. Выбираем папку, в которой будут храниться все наши инструменты для управления Matlab (у меня для этих целей служит папка c:Program FilesMATLABR2011aworkBest_scripts_programs, в которой хранятся созданные талантливыми пользователями Matlab скрипты необходимые мне для работы в Matlab).
  4. Копируем в эту папку файл matlabcontrol-4.0.0.jar.

  5. Добавляем эту папку c:Program FilesMATLABR2011aworkBest_scripts_programs в список путей Matlab (через меню Matlab File->Set Path, либо командой addpath(‘c:Program FilesMATLABR2011a workBest_scripts_programs’ в консоли Matlab)
  6. В Total Commander создаем новую панель с инструментами под общим названием Matlab. Можно скачать уже готовую панель здесь
  7. Первая команда в панели не относится к Matlab, нужна для компиляции кода Java. Вот код этой кнопки (код можно скопировать и вставить в панель инструментов Total Commander правый клик мышью на панели инструментов-вставить):

    Код кнопки Compile java для Total Commander

    Эта кнопка открывает консоль cmd (%ComSpec% /k), с помощью консоли запускает компилятор javac.exe для файла под курсором (%P%N) в окне TC, компилятору сообщается, что нужно подключить класс matlabcontrol-4.0.0.jar, а ключ –g нужен для того, чтобы генерировалась отладочная информация (на всякий случай).

    Начинаем заполнять панель инструментов Matlab в Total Commander новыми инструментами.

    Команда ClearVars — удаляет все переменные рабочей области (workspace) в текущей сессии Matlab.

  8. В папке c:Program FilesMATLABR2011aworkBest_scripts_programs создаем текстовый файл ClearVars.java со следующим содержимым:
  9. Код ClearVars.java

    Единственной моей строчкой в этом коде является строка proxy.eval(«clearvars»), которая и вызвает команду Matlab clearvars для стирания всех переменных Matlab, все остальное – JAVA API для Matlab. Что это такое и как работает выходит за рамки данной заметки.

    Для пользователя важно только, что в строке 4 public class ClearVars последнее слово должно совпадать с названием файла. А в строке с proxy.eval можно выполнять любые команды Matlab (а с помощью proxy.feval и свои функции).

    Выделяем файл ClearVars.java в TC и нажимаем на кнопку Compile java. В папке c:Program FilesMATLABR2011aworkBest_scripts_programs должен появиться файл ClearVars.class. Для этого файла создаем в TC кнопку ClearVars:

    Код кнопки ClearVars

    Как видно, эта кнопка запускает java.exe со следущими параметрами: нашей функцией ClearVars и с указанием класса matlabcontrol-4.0.0.jar (чтобы не прописывать полные пути к файлам можно поставить, как это и было сделано, путь запуска для кнопки c:Program FilesMATLABR2011aworkBest_scripts_programs

    По такому же алгоритму создаются и все остальные команды-кнопки (ClearCommandPromt, ShowGcf)

  10. Более сложные примеры кнопок.

Код кнопки для загрузки выделенных файлов в Matlab

Код LoadDataFile.java

Total Commander передает в программу LoadDataFile следующие аргументы:

%P%S — полные пути выделенных файлов т.е. путь к файлу+название файла (если выделенных файлов нет, то передаются «координаты» файла под курсором)

%S — только название файла (этот аргумент нужен для того, чтобы не обрабатывать через Java полный путь к файлу, выделяя из него имя файла, а просто использовать данный параметр как имя новой переменной (удаляя из имени точку и название расширения — т.е. последние 4 символа)В самой программе LoadDataFile.java для обработки параметров появляется цикл, в котором выполняется команда Matlab var_name=load(‘File’), где var_name получается из переданного параметра %S путем удаления лишнего — точки и расширения, а File — просто пусть к файлу из переданного параметра %P%S

Похожа на LoadDataFile команда ImportData. ImportData я использую для того, чтобы загружать файлы специального содержания:

====Пример файла=========

#Simple test

#Just ignore this comments please!

a, m; b, cm; c, MW/m^3; d

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

=========================

При выполнении importdata_mod в Matlab загружаются вектора с именами а, b, с, d со значениями a=первый столбец числовых данных, b=второй столбец и т.д. Комментарии и размерности просто игнорируются (подробнее см. файл importdata_mod_demo.m и описание самой функции importdata_mod — все внутри архива MATLAB_TC.zip или отдельным архивом importdata_mod.zip

ImportData выполняет в Matlab функцию importdata_mod для заданного файла.

Код кнопки TC для ImportData

Код ImportData.java

Команда importdata_mod должна быть в списке путей Matlab, чтобы в таком виде код java смог выполниться.

Так же будет полезной команда быстро построить график поверхности заданной в текстовом файле (код здесь приводить не буду (там все тоже + команда surf или mesh, можно скачать готовые программы — ссылка в конце статьи)

Недостатки

Существенный недостаток текущей реализации управления Matlab из-под TC это то, что стоит только во время выполнения кода произойти какой-либо ошибке в Matlab из-за кнопки TC — придется создавать новую сессию для Matlab.

Заключение

В принципе, можно заставить Matlab выполнить любые команды из-под интерфейса Total Commander, причем если в параметрах кнопки для Total Commander поставить знак вопроса первым параметром, то при вызове кнопки можно самому указать любые команды для Matlab (нужно только, чтобы программа на Java могла корректно обработать эти команды). Я же в этой статье привел те команды, которыми сам регулярно пользуюсь для тестов, быстрого построения графиков и т.д. Надеюсь, что эти примеры пригодятся и моим читателям. Если найдутся те, кто готов поделиться своими идеями по поводу этой темы — жду ваши комментарии.

Все в одном архиве MATLAB_TC.zip и importdata_mod.zip

При подготовке статьи использовались следующие материалы:

Оцените статью
В коробке инженера
Добавить комментарий

Нажимая на кнопку "Добавить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности

Введите буквы на русском языке : *

Reload Image