Поиск постоянного значения во всех блоках Simulink

У меня есть большая модель Simulink с множеством пользовательских функций MATLAB. И я пошел неверным путем — во многих блоках использовал какие-то локальные данные. Например - плотность воды. Я просто использовал 1000 в формулах или некоторых локальных переменных, например: wat_den = 1000; во множестве различных функций (MATLAB function блоков). И вот у меня возникла проблема — я попытался смоделировать свою модель для другой жидкости (значит, другой плотности). Теперь я понимаю, что я должен использовать все эти переменные по-другому - я создаю таблицу всех констант и направляю их напрямую в функции.

И мой вопрос - можно ли во всех функциях найти переменное или числовое значение? потому что Ctrl+F не может найти внутри каких-либо пользовательских функций (он может найти только имена сигналов, имена портов и т. д.), и я вынужден открывать каждый блок и проверять его содержимое.


person Mikhail_Sam    schedule 27.11.2015    source источник
comment
у вас есть файл mdl или slx?   -  person thewaywewalk    schedule 27.11.2015
comment
Вы можете сохранить свою модель как файл .mdl и использовать свой любимый текстовый редактор для поиска значения; mdl вполне разборчивы. (файлы .slx являются двоичными)   -  person Tom    schedule 27.11.2015
comment
Я согласен с Томом, именно это я и хотел предложить. Но я бы не рекомендовал конвертировать файл slx в файл mdl для такой модели ошибки. Я не мог сказать, какая информация теряется.   -  person thewaywewalk    schedule 27.11.2015
comment
Вы можете переместить содержимое всех блоков MATLAB Function в отдельные файлы .m в форме функций и вызывать только эти функции из этих блоков. Таким образом, вы можете искать во всех этих текстовых файлах. Я обычно делаю это, потому что это также помогает, когда вы используете программное обеспечение для контроля версий. Вы можете легко сравнить эти функции вместо файлов моделей.   -  person Mohsen Nosratinia    schedule 27.11.2015
comment
@ Том, да! оно работает! Я вижу все блоки, все их параметры. Но мне не повезло: мне нужно найти все значения 2700 и найти все времена TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] :)   -  person Mikhail_Sam    schedule 27.11.2015
comment
@thewaywewalk Я создаю копию проекта в формате .mdl. И просто найти в нем блоки, которые используют мои значения и изменить их просто в .slx   -  person Mikhail_Sam    schedule 27.11.2015
comment
@MohsenNosratinia, скажите мне, пожалуйста, с типом подключения для использования вашего файла .m? Я пытался использовать его в ModelExplorer/Callbacks, но тогда мне нужно перезапустить модель, если я ее изменю. Я также пробовал S-функции, но они работают намного дольше, чем блок Matlab Function в simulink!   -  person Mikhail_Sam    schedule 27.11.2015
comment
См. ответ mathworks.com/matlabcentral/answers/, который дает вам программный способ доступа к коду в блоке MATLAB Function. Вы можете получить код, а затем выполнить программный поиск своего шаблона.   -  person Navan    schedule 30.11.2015


Ответы (1)


вы можете легко сделать это, нажав CTRL + SHIFT + F

Это откроет графический интерфейс, и вы можете написать в поле: * Найти файлы, содержащие текст: * имя вашей переменной.

Это приведет к поиску всех экземпляров этой переменной в вашей текущей папке (вы даже можете изменить место поиска).

Примечание. Вы можете изменить расширение файла, который хотите найти.

Надеюсь, это поможет. Я использую Matlab r2015b

person desmond13    schedule 20.06.2016
comment
Это реально работает! Но еще одна проблема: все найденные значения в формате .slx. Поэтому я не вижу, где именно он находится внутри проекта .slx. Можно посмотреть где? (блок/подсистема Simulink). Я могу щелкнуть правой кнопкой мыши по найденным значениям и нажать «Открыть», но он просто открывает проект simulink. - person Mikhail_Sam; 20.09.2016
comment
Привет, я еще не нашел решения для этого. Я вернусь сюда, если найду. Что я заметил, так это то, что когда в результатах появляется модель simulink SIMULINKMODEL.slx, вы должны искать искомую строку во встроенной функции вашей модели SIMULINKMODEL.slx. Пожалуйста, поддержите мой ответ или примите его, если вы нашли его полезным. - person desmond13; 20.09.2016
comment
Да, я вижу это. Но .slx является двоичным, поэтому номер строки бесполезен... - person Mikhail_Sam; 20.09.2016
comment
Нет, я имел в виду: вы ищете строку thisIsMyString с помощью ctrl+shift+F. Затем вы получаете вхождение в SIMULINKMODEL.slx . Это означает, что если вы открываете SIMULINKMODEL.slx, там должна быть встроенная функция с 'thisIsMyString' внутри. Надеюсь, это поможет вам. - person desmond13; 20.09.2016
comment
Да-да, я понял. Вопрос заключался в том, можно ли найти блок (или систему/подсистему) в simulink, который содержит эту переменную myString? Но спасибо за отклик! - person Mikhail_Sam; 20.09.2016