Как сделать простой триггер в MATLAB при изменении определенной переменной?
Для описание обстановки, нужна следующая архитектура взаимодействия с матлабом:
- Что-то на подобии жавы(пусть будет жава, ибо продукт внутренний) - соединена с матлабом через плагин
- Можно отсылать какую-либо переменную, пусть будет х и потом ее же и возвращать из жавы коллбэком.
В чем проблема? Я могу отсылать постоянно данные в матлаб, изменяя их значение в матлабе мануально (при остановки отправления данных). Что ни в какие ворота не вписывается.
В идеале хотелось бы сделать что-то на подобии триггера на стороне матлабе с таким сценарием(самым простым), если переменная "х" изменила свое значение, то "выполнить" след функцию и запихнуть результат в другую переменную, которая на стороне жавы будет с н-ной переодичностой секунд вызвана из матлаба.
Коротко: Data Stream -> Java - > MATLAB -> Java
Буду рад профи МАТЛАБа, хотелось бы вообще обсудить некоторые нюансы программы, ибо появилась потребность, а в жизни до сегоднешнего дня к ней не прикасался :)
А зачем вам матлаб в таком случае нужен? В нем производятся расчеты? Может удобнее будет их перенести на популярный и открытый ЯП?
Матлаб хорош в своей экосистеме, впрочем вы можете запустить симулинк и внутри него реализовать такую логику. Но это не есть правильное решение.
У нас проэкт связанный с данными из медицины. Их очень много и нужны сильные расчеты. Обычная обработка да - будет идти на жаве. А комплексные формулы итд на стороне матлаба. Но это по сути уже не моя задача. В мои задачи сейчас входило сделать саму коммуникацию между этими двумя программами. Отправить переменную - достать переменную = ок. А вот как на стороне матлаба отсылать ее назад при каких-либо изменениях, вот это уже для меня проблема )
Матлаб конечно сильный, но для сильных расчетов лучше использовать компилируемый язык программирования, например c++, для медицины сойдет и фортран. Если есть возможность отказаться от матлаба, откажитесь лучше сейчас, потом это будет очень дорого.
А так есть два варианта:
1. Современные версии матлаба умеет выполнять функции, написанные на обычных ЯП. - В таком случае вы пишете функцию-прокладку и запускаете ее в матлабовских скриптах.
2. Матлаб умеет генерировать Си-код. И даже сам компилировать. Пишете скрипты, модели, генерируете код, открываете его в обычной IDE и нужным образом допиливаете, потом подключаете в качестве библиотеки или иным образом. Я в студенчестве не заморачивался и компилировал прямо в матлабе, матлабовская программа у меня просто читала excel файлы и туда же все записывала - если частота обмена данными не велика, то такой подход будет самым простым в плане разработки.
ИИи тут важный вопрос. Если ваш софт связан с медициной, то собираетесь ли вы его сертифицировать? Потому что если собираетесь, наверное вам (руководителю проекта) лучше проконсультироваться со спецом, ибо вы внезапно можете обнаружить, что все сделано, а сертифицировать продукт по тем или иным причинам у вас не получается. Также было бы интересно узнать, а что это за расчеты, то есть для чего это все делается? Возможно есть более элегантные решения, которые применимы только к некоторым из задач.
И все таки вам лучше собраться всей командой и понять, чем вызван выбор матлаба, ибо в качестве бэкэнда или сервера он хорош только для испытаний железок и алгоритмов управления этими железками. Если вам о чем нибудь говорят слова симулинк, спидгоат, полунатурные испытания, то эта вся байда как раз к этой области относится.
x67: спасибо за ответ, но тут уж не мое дело, я только неделю назад подключился к этому проекту, которй уже идет 3 года. Такое решение было у больших дядек из вне. 1 из партнеров - это университет и сторона матлаба на их совести. Мое дело только наши продукты фирмы и их взаимосвязь, вот и попалась нужда для адаптера, но дабы все это провернуть надо понять матлаб, а учить его с нуля ну ой как не хочется. Сделать эту пакость для коммуникации и забыть как страшный сон )))
И да - это я делаю на триал версии - дальше нас это уже не касается, лицензии скорее всего уже есть у того универа и фактически мы может поключится через виртуальную машину к ней.
В общем в идеале мне надо где-то найти пример, типа listener'a как в стандартных языках или же trigger, как из баз данных. В матлаб, которая бы следила за изменениями в какой-либо из переменных, и если это действие произойдет, то ..... внутри кода уже сам разберусь ))
Therapyx:
каким образом матлабовский софт работает? Какой объем данных для обработки?
Как быстро нужен ответ? Как часто поступают запросы? Листенера наверное не получится)
насчет обьема данных еще точно не знаю, в прошлом проекте был терабайт где-то за 1 месяц. Сейчас сказали "меньше", на сколько меньше хз :D
а как быстро и часто - это можно уже регулировать. Поступать они будут из Complex event processing'а. Хотя я лично тоже не понимаю, зачем матлаб, когда по сути наш язык по CEP как раз таки специализируется на обработке таких вещей. Но видимо там, что-то серьезное должно расчитываться, раз решили лезть в матлаб.
x67: и да, это ппц как не удобно, когда по мимо нас решают еще что-то 5-7 других партнеров у которых другие задачи, но строятся на задачи других фирм ))) Причем проблема в том, что у нас то никто с матлабом и не работал, поспрашивал у всех - пожали плечами. А шеф мой - "я верю в тебя, ищи" :D
Therapyx: Ну с таким пониманием вам лучше обратиться за помощью и разъяснениями в тот институт или к человеку, который хочет разобраться в этом больше чем вы)
В матлабе может быть все что угодно от скрипта, заканчивая моделью, которая крутится на реальной железке в реальном времени.
x67: что поделать, я все таки как джун, а на таких всегда спихивают самое мерзкое и нудное :D Вот стоит задача для банального примера со сценарием 1) отправляет переменную "х" в матлаб(это я настроил, дописал плагин) 2) Мат лаб увеличивает переменную "х" на 1 (проблема тут) 3) мат лаб отсылает ее назад (тоже хз как, но не критично ибо есть или) ИЛИ наш софт обращается к этой переменной сам (это тоже сделанно).
x67: ах да, еще 1 проблема, что именно в воркспейсе нет. Когда я открываю сессию к матлабу, матлаб запускает консольное окно, которое связанно в др. программой. А так да, к примеру шлю переменну
pufloat(... "Session1", "x", 1954.85)
после чего если набираю в консоле матлаба х - то выдает это число.
Therapyx: нажмите f5, переменная должна появиться в воркспейсе, если к ней есть доступ
Вот тут по моему все понятно расписано. Но если этим будете заниматься вы, то все равно надо понимать, что там запускать и как оно работает.
x67: мм на ф5 вообще ничего не происходит)) Я уж впринципе насмотрелся много чего и начитался, как использовать разные графики итд.
А вот про триггеры все равно ничего не нахожу...
x67: триггер в тех же базах данных понятие такое, что к примеру у тебя есть таблица с данными и ты вешаешь на нее триггер(на апдейт или делит) и если какая-либо из этих комманд проходит на эту таблицы, значит будет выполнен скрипт внутри этого триггера.
так же и тут ищу аналог, что если с переменной "х" что-то происходит, то ... выполнить какие-то прописанные действие, например запустить сохраненную функцию (функцию уж точно есть в матлабе)
Therapyx: я про матлабовские триггеры. Матлаб заточен для научных расчетов и работы с железками. По ссылкам, которые я кидал, триггер имеет именно такую функцию. Собственно там же и написано про выполнение действий при получении данных (fire an event bla bla blah), но сейчас пересмотрев, понимаю, что это скорее всего только для спец.железок и аналогового принятия данных
x67: В общем разузнал я что можно и что нет, сделал функционал на синтексис матлаба из вне. Скажем так, отсылаю функцию с консольной командой матлаба и переменные с данными, матлаб делает - и отсылает их назад ))
А триггеров или листнеов в матлабе нету. Жаль.
x67: я передаю что-то на подобии этого 1(send matrix1, no response), 2(send matrix2, no response), 3(send matrix3 = matrix1 + matrix2, callback) и собственно получаю результат. И в таком ключе можно вызвать любую операцию матлаба(только с ее синтаксисом). В общем так тоже пойдет ))