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).
Замены блоков Simulink
- Вместо
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