Можем ли мы создать графический интерфейс в C #, который будет запускать код MATLAB с обратной стороны?

2

Я разработал код в MATLAB, и он отлично работает. Я работал в GUI в MATLAB, но для меня это была головная боль. Я думаю, что я могу создать GUI просто и эффективно. Можем ли мы создать графический интерфейс в С#, который также будет запускать весь код MATLAB, который я разработал?

  • 0
    возможный дубликат Run Matlab из C # и дать параметр для Matlab
  • 0
    Если ваш графический интерфейс относительно прост, другой способ - вызвать модальное диалоговое окно .NET в Matlab, и в соответствии с выбором пользователя в диалоговом окне вы можете запустить определенный скрипт Matlab. Этот метод имеет то преимущество, что вам вообще не нужно покидать Matlab.
Теги:
user-interface
matlab-deployment

3 ответа

4

Да, это возможно. Для получения дополнительной информации см.:

Если вам нужен быстрый и грязный способ обернуть код MATLAB с помощью графического интерфейса С# (например, WinForms), одним из вариантов является создание exe из вашего кода MATLAB (.m) - из .NET, вы можете легко запустить этот exe как новый процесс. Обратите внимание: этот подход может быть не лучшим в некоторых ситуациях, так как задержка, вызванная вызовом exe, может быть довольно существенной (как объясняет другой ответ).

Пример: во-первых, напишите код MATLAB как функцию:

function y=SamplePlot(p, d, w, t)
numericValueP=str2num(p);
numericValueD=str2num(d);
numericValueW=str2num(w);
time=str2num(t);

%... do stuff ...
plot(...);

Входные параметры будут переданы в этот код в виде строковых параметров через командную строку, поэтому они преобразуются через str2num. Например. вызов MATLAB

SamplePlot('1', '2', '3', '4')

будет отображаться как

SamplePlot.exe 1 2 3 4

Теперь создайте автономное консольное приложение из файла .m: в консоли MATLAB напишите:

deploytool

Имя: SamplePlot.prj(например). Цель: консольное приложение. Добавьте файл .m. Пакет: добавьте MCR (это MATLAB Compiler Runtime - это то, что потребуется конечному пользователю, если у него нет MATLAB, для локального тестирования вам не нужно добавлять это). Затем используйте:

mbuild -setup

Наконец, щелкните значок "build". Через некоторое время генерируется exe. Теперь вы можете запустить этот exe как процесс из приложения С#, например. нажатие кнопки:

private void button1_Click(object sender, EventArgs e)
{
      string p=TextBox1.Text;
      string d=TextBox2.Text;
      string w=TextBox3.Text;
      string t=TextBox4.Text;
      string params = String.Format("{0} {1} {2} {3}",p,d,w,t);
      System.Diagnostics.Process.Start("SamplePlot.exe", params);
}

Я забыл некоторые мелкие детали, но это один из возможных вариантов.

(Если я правильно помню, сборка также может быть сгенерирована таким образом: вы можете вызвать сборку вместо exe файла).

  • 1
    MATLAB имеет продукт (MATLAB Builder NE), созданный поверх компилятора MATLAB специально для генерации сборок .NET: mathworks.com/products/netbuilder . Нет необходимости связываться с EXE-файлами, вы можете использовать сгенерированную сборку как любую другую библиотеку .NET. Результат, конечно, зависит от MCR
1

Я довольно не знаком с С#, но в итоге мне пришлось использовать .NET-классы из MATLAB.

Итак, вы также можете сделать это наоборот, чем в предыдущих ответах:

Так как MATLAB может создавать/открывать .NET-gui-элементы, такие как диалог, я думаю, вы также сможете открыть свой .NET-GUI из MATLAB, а затем подключить свой MATLAB-код через обратные вызовы. См., Например: http://www.mathworks.de/de/help/matlab/matlab_external/getting-started-with-net.html

В зависимости от того, как часто вы хотите выполнить matlab-код из своего gui и как долго время обработки Matlab обычно, это также позволяет избежать довольно больших накладных расходов, например, представленный с использованием .exe, сгенерированного с помощью компилятора MATLAB. Скажем, вы бы хотели сделать быстрые операции вычисления матрицы, занимая менее секунды с каждым другим нажатием кнопки, чем запуск standalone.exe каждый раз сделает ваш gui довольно бесполезным.

0

Эта ссылка настолько полезна и проста: Вызвать функцию MATLAB из С# Client

Ещё вопросы

Сообщество Overcoder
Наверх
Меню