Date Редакция Категория sci Теги xcos / simulink / scilab

Xcos — средство визуального моделирования, входящее в свободный пакет для научных расчетов Scilab подобно тому, как Simulink входит в состав проприетарного MATLAB&Simulink. Ранее в Scilab для визуального моделирования использовался Scicos (Scilab Connected Objects Simulator). Xcos является форком Scicos 4.2 и оба средства теперь развиваются самостоятельно.

Принципы работы Xcos и Simulink во многом сходны, но есть и различия. Рассмотрим их.

  • Русский язык меню и части документации. Пока -- в весьма небольшой ее части.
  • Способ соединения блоков: нажать и, не отпуская, вести линию, щелкая в местах поворотов. Для удобства соединения есть сетка. Можно задавать стили соединения. В отличие от Simulink, нельзя создать линию, не подключенную к одному из портов.
  • Выделение блоков по клику -- традиционное, с нажатием Ctrl, а не c Shift как в Simulink.
  • Явное тактирование: даже к блокам регистрации предполагается присоединить таймер (с периодом обновления -- Refresh period), тогда как в симулинке он где-то внутри.
  • Форматирование: Формат/Выровнять блоки -- нет аналогов в симулинке.
  • Нет автоматического именования блоков. В случае блоков, чье назначение очевидно (сложение, произведение, интегрирование), это даже кстати. Но указывать имена портов ввода/вывода суперблоков нужно. Делается это так: контекстное меню/Формат/Правка (Ctrl+F2).
  • Инициализация переменных при помощи контекста: Моделирование/Установить контекст. В контекст вписывается необходимый Scilab-код. Областью видимости контекста является вся симуляция, но задавать код удобно в том блоке, для которого он предназначен. Аналог InitFcn и других Callback-ов.
  • Длительность интегрирования "спрятана" в меню: Моделирование/Установка/Конечное время интегрирования.
  • Выражение не вводится, если в нем содержится неопределенная переменная. Это логично, а сама переменная задается через контекст. Следует, однако, иметь в виду, что в контексте нет проверки синтаксических ошибок при вводе (все же проверьте, нет ли "жалоб" в командном окне Scilab). И если сделать перед переменной комментарий в стиле MATLAB -- '%' (в Scilab комментарий -- ''), то возникшая ошибка "замаскирует" переменную и ее по-прежнему нельзя будет ввести в блок. Короче, если проблема ввода переменных не исчезла, то проверьте возможные ошибки в контексте.
  • Возможности закомментировать часть блоков -- нет. Можно подключать их к остальной системе через переключатель SELF_SWITCH, и, когда нужно, выключать его.
  • Аналога Accelerator mode нет.
  • Профайлера -- нет. Населена роботами :)
  • При оформлении аннотаций (TEXT_f) можно использовать HTML, LaTeX и MathML. Все это прекрасно, но: вставлять теги лучше с помощью графического интерфейса, доступного из меню Формат/Правка (Ctrl+F2). Если редактировать аннотацию по двойному клику (что напрашивается), то Xcos добавит в текст теги HTML по своему разумению (например, разрыв строки <``br``>) или вставит вместо русских букв заменяющие их символы.

Различия в терминологии

  • "диаграмма" (diagram) вместо "модели" (model); "суперблок" (superblock) вместо "подсистемы" (subsystem); "палитра" (palette) вместо "библиотеки" (library).
  • Вместо Fcn -- блок Expression. В нем есть несколько входов.
  • Какую сумму выбрать вместо Sum: BIGSOM_f -- произвольное число входов, с весовыми коэффициентами (последнего очень не хватало в Симулинке) и проще, чем SUMMATION.
  • Вместо Selector -- EXTRACT (для матриц и векторов) и Extractor (для векторов).
  • Блоки произведений (PRODUCT, PROD_f) Xcos не поддерживают произведения векторных сомножителей со скалярными, нужно использовать блок MATMUL и в нем правило 3 -- "Matrix by Scalar". Либо нужно превратить скаляр в вектор (при помощи MUX или блока SCALAR2VECTOR).
  • Есть блок TrigFun (тригонометрические функции), но есть и отдельные COSBLK_f, SINBLK_f, TANBLK_f.
  • Заменой табличных блоков Lookup Table Simulink являются блоки INTERPBLK_f и LOOKUP_F. Но: в них реализована только линейная интерполяция.
  • Логические блоки LOGICAL_OP и RELATIONALOP содержатся в палитре общеупотребительных блоков (Commonly used blocks). Битовые операции -- в палитре "Целое число". В Simulink все подобные блоки находятся в библиотеке "Logic and Bit Operations".
  • Вместо Matrix concatenate в Xcos, как в старом Simulink-е, отдельные блоки горизонтальной (MATCATH) и вертикальной (MATCATV) конкатенации. Лично мне так удобней.

Проблемы и решения

  • При повороте блока не поворачивается надпись внутри него, а также подпись под блоком, добавленная по Ctrl+F2.
  • Поле аннотации не масштабируется автоматически по тексту.
  • После объединения в суперблок внутри него искривляются линии сигналов, соседствующих со входом и выходом из суперблока. Решение: перед созданием суперблока нужно добавить в диаграмму блоки IN/OUT, и лишь затем объединять блоки в суперблок.
  • Названия сигналов "наползают" на линии сигналов. Варианты решения: делать пустую строку в начале поля "Настройки текста" (некрасиво для IN/OUT блоков), шире использовать аннотации, добавляемые двойным кликом левой клавиши мыши.
  • Как скрыть длинную формулу внутри Expression? Длинная формула выходит за пределы блока, а растягивать его не хочется. Вариант: погружать такой Expression внутрь суперблока.
  • Как продвинутся на один шаг симуляции? Команды меню или кнопки, как в Simulink, здесь нет. Можно установить длительность симуляции равной такту часов, управляющих выводом результатов -- тогда получим вывод через один такт.
  • Как убрать фоновый рисунок суперблока? Фоновый рисунок суперблока иногда мешает видимости входных/выходных параметров, Как его убрать я не знаю, но его можно заменить на прозрачный однопиксельный GIF- или PNG-файл во вкладке Цвет заливки меню Правка.

Полезные ссылки



Комментарии

comments powered by Disqus