Симуляция Режима external mode с TCP/IP или Последовательная передача

Настройте и запустите симуляцию режима external mode, которая использует TCP/IP или последовательный (RS-232) канал связи.

  1. Создайте и сконфигурируйте простую модель.

  2. Создайте целевой исполняемый файл.

  3. Запустите целевое приложение.

  4. Настройки параметров.

Пример, который использует цель GRT, не требует внешнего оборудования. Сгенерированные выполнения исполняемого файла:

  • На компьютере разработчика, который размещает Simulink® и Simulink Coder™.

  • Как отдельный процесс от MATLAB® и Simulink.

Создайте и сконфигурируйте модель

В этой части примера вы создаете простую модель, ex_extModeExample. Вы также создаете папку под названием ext_mode_example, чтобы сохранить модель и сгенерированный исполняемый файл.

Создать папку и модель:

  1. Из командной строки MATLAB введите:

    mkdir ext_mode_example
  2. Сделайте ext_mode_example вашей рабочей папкой:

    cd ext_mode_example
  3. Создайте модель в Simulink с блоком Sine Wave для входного сигнала, два блока Усиления параллельно и два блока Осциллографа. Обязательно маркируйте блоки Gain и Scope как показано.

  4. Задайте и присвойте две переменные рабочего пространства MATLAB, A и B:

    A = 2;
    B = 3;
  5. Открытый блок A Gain и установленный его параметр Gain на переменную A.

  6. Открытый блок B Gain и установленный его параметр Gain на переменную B.

    Когда целевое приложение создается и соединяется с Simulink в режиме external mode, можно загрузить новые значения усиления на выполняющееся целевое приложение. Для этого можно присвоить новые значения переменным A и B рабочей области или отредактировать значения в диалоговом окне параметров блоков. Для получения дополнительной информации смотрите Настройки параметров.

  7. Проверьте операцию модели. Откройте блоки Scope и запустите модель. Когда A = 2 и B = 3, вывод появляется как показано.

  8. Сохраните модель как ex_extModeExample.

Создайте целевой исполняемый файл

Настройте модель и параметры генерации кода, требуемые для целевого приложения режима external mode. Затем сгенерируйте код и создайте целевое приложение.

  1. Откройте диалоговое окно Configuration Parameters путем выбора Simulation> Model Configuration Parameters.

  2. Выберите панель Solver:

    1. В поле Type выберите Fixed-step.

    2. В поле Solver выберите discrete (no continuous states).

    3. Нажмите Solver details. В поле Fixed-step size задайте 0.1. (В противном случае, когда вы генерируете код, процесс сборки Simulink Coder производит предупреждение и предоставляет значение.)

    4. Нажмите Apply.

  3. Выберите панель Data Import/Export и снимите флажки Time и Output. В этом примере данные не регистрируются к рабочей области или к MAT-файлу. Нажмите Apply.

  4. Выберите панель Code Generation. По умолчанию цель типичного в реальном времени (GRT) выбрана.

  5. Выберите Code Generation> панель Optimization. Убедитесь, что Default parameter behavior установлен в Tunable. Встроенные параметры не являются частью этого примера. Если вы вносите изменение, нажмите Apply.

  6. Выберите Code Generation> панель Interface. В разделе Data exchange interface выберите External mode. Этот выбор включает генерацию кода поддержки режима external mode и отображает дополнительные параметры конфигурации режима external mode.

  7. В разделе External mode configuration убедитесь, что значение по умолчанию tcpip выбрано для параметра Transport layer.

    Режим external mode поддерживает коммуникацию через TCP/IP, последовательные, и пользовательские транспортные протоколы. Поле MEX-file name задает имя файла MEX, который реализует хост и целевую коммуникацию на стороне хоста. Значением по умолчанию для TCP/IP является ext_comm, файл MEX, которому предоставляют программное обеспечение Simulink Coder. Можно заменить это значение по умолчанию путем предоставления других файлов. Если необходимо поддержать другие транспортные уровни, смотрите, Создают Транспортный уровень для TCP/IP или Последовательной Коммуникации Режима external mode.

    Поле MEX-file arguments позволяет вам задать аргументы, такие как номер порта сервера TCP/IP, быть переданными внешней интерфейсной программе. Эти аргументы характерны для внешнего интерфейса, который вы используете. Для получения информации об установке этих аргументов смотрите Дополнительные аргументы файла MEX для Дополнительных аргументов Транспорта и файла MEX TCP/IP для Последовательного Транспорта.

    Этот пример использует параметры по умолчанию. Оставьте незаполненное поле MEX-file arguments.

    Флажок Static memory allocation управляет, как память выделяется для коммуникационных буферов режима external mode в цели. В данном примере не устанавливайте флажок. Для получения дополнительной информации смотрите Выделение Управляющей памяти для Коммуникационных Буферов в Цели.

  8. Нажмите Apply, чтобы сохранить настройки режима external mode.

  9. Сохраните модель.

  10. Выберите панель Code Generation. Убедитесь, что Generate code only очищен, и затем, в окне модели, нажмите Ctrl+B, чтобы сгенерировать код и создать целевое приложение. Программное обеспечение создает целевой исполняемый файл ex_extModeExample в вашей рабочей папке.

Запустите целевое приложение

Вы теперь запускаетесь, ex_extModeExample предназначаются для исполняемого файла и используют Simulink в качестве интерактивного фронтэнда к целевому приложению запуска. Исполняемый файл находится в вашей рабочей папке. Запустите целевое приложение и установите связь между Simulink и целью.

Примечание

Программа режима external mode как ex_extModeExample является основанным на хосте исполняемым файлом. Его выполнение не связывается к операционной системе реального времени (RTOS) или периодическому прерыванию по таймеру, и это не запускается в режиме реального времени. Программа только запускается максимально быстро, и единицы измерения времени, которые она отсчитывает, являются моделируемыми единицами измерения времени, которые не соответствуют времени в мире вне программы.

Диалоговое окно External Signal & Triggering (получил доступ от Панели управления Режима external mode) отображается список блоков в вашей модели, которые поддерживают сигнал режима external mode контроль и журналирование. В диалоговом окне можно сконфигурировать сигналы, которые просматриваются, как они получены, и как они отображены.

В этом примере вы наблюдаете и используете настройки по умолчанию диалогового окна External Signal & Triggering.

  1. Из меню Code диаграммы модели выберите External Mode Control Panel. Эта панель управления - то, где вы конфигурируете контроль сигнала и архивацию данных. Можно также соединиться с целевым приложением, и запустить и остановить выполнение типового кодекса.

    • После того, как целевое приложение запускается, вы используете верхнюю строку кнопок.

    • Кнопка Signal & Triggering открывает диалоговое окно External Signal & Triggering. Используйте это диалоговое окно, чтобы выбрать сигналы, которые собраны из целевой системы и просмотрены в режиме external mode. Можно также выбрать сигнал, что триггерная загрузка данных, когда определенные условия сигнала соблюдают, и задают условия инициирования.

    • Кнопка Data Archiving открывает диалоговое окно Enable Data Archiving. Используйте архивацию данных, чтобы сохранить наборы данных, сгенерированные целевым приложением для будущего анализа. Этот пример не использует архивацию данных. Смотрите Конфигурируют Архивацию Хоста Данных сигнала Целевого приложения.

  2. Нажмите кнопку Signal & Triggering, чтобы открыть диалоговое окно External Signal & Triggering. Настройка по умолчанию выбирает все сигналы для контроля и устанавливает сигнал, контролирующий начинаться, если хост-приложение и целевое приложение соединяются.

  3. Убедитесь, что опции диалогового окна External Signal & Triggering установлены в эти значения по умолчанию:

    • Флажок Select all устанавливается. Сигналы в списке Signal selection отмечены X в столбце Selected.

    • Под Trigger options:

      • Source: manual

      • Режим: normal

      • Длительность: 1000

      • Delay: 0

      • Arm when connecting to target: выбранный

    Чтобы закрыть диалоговое окно External Signal & Triggering, нажмите OK. Затем закройте Панель управления Режима external mode.

    Для описаний параметров диалогового окна External Signal & Triggering смотрите, Конфигурируют Контроль Хоста Данных сигнала Целевого приложения.

  4. Чтобы запустить целевое приложение, откройте командное окно операционной системы (в системах UNIX®, окне эмулятора терминала). В командной строке используйте cd, чтобы перейти к папке ext_mode_example, в которой вы сгенерировали целевое приложение.

    Введите эту команду:

    ex_extModeExample -tf inf -w

    Примечание

    Также можно запустить целевое приложение из Окна Команды MATLAB, с помощью следующего синтаксиса.

    !ex_extModeExample -tf inf -w &

    Целевое приложение начинает выполнение и вводит состояние ожидания.

    Переключатель -tf заменяет набор времени остановки для модели в Simulink. Значение inf направляет модель, чтобы запуститься неопределенно. Выполнения типового кодекса до целевого приложения получают сообщение остановки от Simulink.

    Переключатель -w дает целевому приложению команду вводить состояние ожидания, пока это не получает сообщение Start Real-Time Code от хоста. Если вы хотите просмотреть данные о выполнении целевого приложения из временного шага 0, или если вы хотите изменить параметры, прежде чем целевое приложение начнет выполнение типового кодекса, этот переключатель требуется.

  5. Откройте блоки Scope в модели. Сигналы не видимы на осциллографах. Когда вы соединяете Simulink с целевым приложением и начинаете образцовое выполнение, сигналы, сгенерированные целевым приложением, становятся видимыми на отображениях осциллографа.

  6. Прежде чем связь между моделью и целевым приложением может начаться, модель должна быть в режиме external mode. Чтобы включить режим external mode, из меню Simulation> Mode, выбирают External.

  7. Вновь откройте Панель управления Режима external mode (найденный в меню Code) и нажмите Connect. Это действие инициирует квитирование между Simulink и целевым приложением. Когда Simulink и цель соединяются, кнопка Start Real-Time Code становится активированной, и метка изменений Кнопки соединения в Disconnect.

  8. Нажмите Start Real-Time Code. Выводы блоков A Gain и B отображены на двух осциллографах в вашей модели.

Вы установили связь между Simulink и целевым приложением запуска. Можно теперь настроить параметры блоков в Simulink и наблюдать эффекты, которые изменения параметра имеют на целевое приложение.

Настройки параметров

Можно изменить фактор усиления любого блока Gain путем присвоения нового значения переменной A или B в рабочем пространстве MATLAB. Когда вы изменяете значения параметров блоков в рабочей области во время симуляции, необходимо явным образом обновить блок-схему с этими изменениями. Когда вы обновляете блок-схему, новые значения загружаются на целевое приложение.

При определенных обстоятельствах можно также настроить выражения, которые вы используете, чтобы задать значения параметров блоков. Чтобы изменить выражение во время симуляции, откройте диалоговое окно блока.

  1. В командной строке присвойте новые значения обеим переменным, например:

    A = 0.5;
    B = 3.5;
  2. Откройте окно модели ex_extModeExample. Из меню Simulation выберите Update Diagram. Как только Simulink обновил параметры блоков, новые значения усиления загружаются на целевое приложение, и осциллографы изменяются из-за изменения усиления.

  3. В диалоговом окне блока Sine Wave, набор Amplitude к 0.5. Нажмите Apply или OK.

    Когда вы нажимаете Apply или OK, симуляция загружает новое значение параметров блоков на целевое приложение. Блок Scope отображает изменение, чтобы отразить новое амплитудное значение.

  4. Чтобы одновременно отключить коммуникацию хоста/цели и выполнение конца целевого приложения, из меню Simulation, выбирают Stop. Также в Панели управления Режима external mode, нажмите Stop Real-Time Code.

Вы не можете изменить шаг расчета блока Sine Wave во время симуляции. Блокируйтесь шаги расчета являются частью структурного определения модели и являются частью сгенерированного кода. Поэтому, если вы хотите изменить шаг расчета блока, необходимо остановить симуляцию режима external mode, сбросить шаг расчета блока и восстановить исполняемый файл.

Приспособляемость параметров блоков во время симуляции режима external mode зависит от способа, которым сгенерированный код представляет параметры блоков.

Например, в Усилении диалоговое окно блока, вы не можете изменить выражение A в параметре Gain во время симуляции. Вместо этого необходимо изменить значение переменной A в базовом рабочем пространстве. Вы не можете изменить выражение, потому что сгенерированный код не выделяет устройство хранения данных в памяти для параметра Gain. Вместо этого код создает поле A в структуре:

/* Parameters (auto storage) */
struct P_ex_extModeExample_T_ {
  real_T A;                            /* Variable: A
                                        */
  real_T B;                            /* Variable: B
                                        */
  real_T SineWave_Amp;                 /* Expression: 1
                                        */
  real_T SineWave_Bias;                /* Expression: 0
                                        */
  real_T SineWave_Freq;                /* Expression: 1
                                        */
  real_T SineWave_Phase;               /* Expression: 0
                                        */
};

Алгоритм сгенерированного кода использует то поле в коде, который представляет блок Gain A. В этом случае глобальная переменная ex_extModeExample_P структуры использует тип P_ex_extModeExample_T_:

ex_extModeExample_B.GainA = ex_extModeExample_P.A * rtb_SineWave;

Когда вы изменяете значение A в базовом рабочем пространстве, симуляция загружает новое значение на поле A в целевом приложении.

Можно изменить выражения в параметрах блоков Синусоиды во время симуляции, потому что сгенерированный код создает поле в глобальной структуре ex_extModeExample_P, чтобы представлять каждый параметр в блоке. Когда вы изменяете выражение в диалоговом окне блока, симуляция сначала выполняет новое выражение. Симуляция затем загружает получившееся числовое значение на соответствующее поле структуры в целевом приложении.

Смотрите создают настраиваемый калибровочный параметр в сгенерированном коде.

Выделение управляющей памяти для коммуникационных буферов в цели

Если вы устанавливаете флажок Code Generation> Interface> Static memory allocation (для GRT и целей ERT), генератор кода производит код для режима external mode, который использует только выделение статического ЗУ (“malloc-свободный” код). Выбор Static memory allocation включает параметр Static memory buffer size. Используйте этот параметр, чтобы задать размер буфера статического ЗУ режима external mode. Значение по умолчанию составляет 1 000 000 байтов. Если вы вводите слишком маленькое значение для своей программы, режим external mode выпускает ошибку из памяти, когда это пытается выделить больше памяти, чем вы позволили. В таких случаях увеличьте значение в поле Static memory buffer size и регенерируйте код.

Чтобы определить сколько памяти, чтобы выделить, включите многословный режим на цели (включением OPTS="-DVERBOSE" на командной строке make). Как это выполняется, режим external mode отображает объем памяти, который это пытается выделить и объем памяти, доступный ему каждый раз, когда это делает попытку выделения. Если выделение перестало работать, можно использовать этот консольный журнал, чтобы настроить размер в поле Static memory buffer size.

Управляйте симуляцией режима external mode через панель инструментов редактора

Эта таблица дает Редактору Simulink функции, которые можно использовать, чтобы управлять симуляцией режима external mode.

Действие режима external modeУправление панелью инструментовУправление менюКнопка панели управления режима external mode
Установите режим симуляции своей модели к режиму external modeОт режима симуляции выпадающий список выберите ExternalSimulation>
Режим
> External
Connect (если режим симуляции модели уже не установлен, устанавливает режим симуляции на режим external mode),
Соедините свою модель с ожиданием или запуском целевого приложенияКнопка Connect to Target Simulation>
Соединитесь с целью
Connect
Начните запускать код в реальном времени в целевом окруженииКнопка RunSimulation> Run (горячая клавиша Ctrl+T)Start Real-Time Code
Разъединитесь ваша модель от целевого окружения (не останавливает под управлением код в реальном времени),Кнопка Disconnect from Target Simulation>
Отключитесь от цели
Disconnect
Остановите выполнение целевого приложения и отключите вашу модель от целевого окруженияКнопка StopSimulation> Stop (горячая клавиша Ctrl+Shift+T)Stop Real-Time Code

Управляйте симуляцией режима external mode через панель управления режима external mode

Панель управления Режима external mode обеспечивает централизованное управление операций режима external mode, включая:

Чтобы открыть диалоговое окно External Mode Control Panel, в окне модели, выбирают Code> External Mode Control Panel.

Соединитесь, запуститесь, и остановка

Панель управления Режима external mode выполняет то же подключение/разъединение, и запустите/остановите функции, искавшие в меню Simulation и панели инструментов Simulink (см. Симуляцию Режима external mode Управления Через редактор Тулбэра).

Нажатие на кнопку Connect соединяет вашу модель с ожиданием или запуском целевого приложения. В то время как вы соединяетесь, кнопка изменяется на кнопку Disconnect. Disconnect отключает вашу модель от целевого окружения, но не останавливает код в реальном времени, запускающийся в целевом окружении.

Connect устанавливает режим симуляции модели на режим external mode.

Нажатие на кнопку Start Real-Time Code управляет, чтобы цель начала запускать код в реальном времени. В то время как код в реальном времени запускается в целевом окружении, изменениях кнопки в кнопке Stop Real-Time Code. Stop Real-Time Code останавливает выполнение целевого приложения и отключает вашу модель от целевого окружения.

Загрузите данные сигнала целевого приложения, чтобы разместить

Панель управления Режима external mode позволяет вам инициировать и отменить загрузки данных на хост. Место назначения для загруженных данных может быть блоком scope, блоком Display, блоком To Workspace, или другим блоком или подсистемой, перечисленной в Блоках и Подсистемах, Совместимых с Режимом external mode.

Кнопки Arm Trigger и Cancel Trigger обеспечивают ручное управление загрузки данных на совместимые блоки или подсистемы, кроме плавания осциллографов. (Для плавания осциллографов используйте раздел Floating scope Панели управления Режима external mode.)

  • Чтобы инициировать загрузку данных на совместимые блоки или подсистемы, нажмите кнопку Arm Trigger. Кнопка изменяется на Cancel Trigger.

  • Чтобы отменить загрузку данных, нажмите кнопку Cancel Trigger. Кнопка возвращается к Arm Trigger.

Можно инициировать загрузки данных вручную или автоматически. Чтобы сконфигурировать сигналы и триггеры для загрузок данных, смотрите, Конфигурируют Контроль Хоста Данных сигнала Целевого приложения.

Подмножество режима external mode совместимые блоки, включая Осциллограф, Осциллограф Времени, и К Рабочей области, позволяет вам регистрировать загруженные данные к диску. Чтобы сконфигурировать архивацию данных, смотрите, Конфигурируют Архивацию Хоста Данных сигнала Целевого приложения.

Раздел Floating scope Панели управления Режима external mode управляет, когда и как долго данные загружаются на Плавающие блоки Осциллографа. Когда используется в режиме external mode, пуская в ход осциллографы:

  • Не появляйтесь в диалоговом окне External Signal & Triggering.

  • Не делайте данных логов к архивации режима external mode.

  • Руководство по получению поддержки, инициировавшее только.

Раздел Floating scope содержит следующие параметры:

  • Опция Enable data uploading, которая функционирует как кнопку Arm Trigger для плавания осциллографов. Когда цель отключается, средства управления опцией, вооружить ли триггер при соединении плавающих осциллографов. Когда цель соединяется, действия опции как кнопка-переключатель, чтобы вооружить или отменить триггер.

    • Чтобы инициировать загрузку данных на плавание осциллографов, выберите Enable data uploading.

    • Чтобы отменить загрузку данных на плавание осциллографов, очистите Enable data uploading.

  • Поле редактирования Duration, которое задает количество шагов тарифной ставки, для которых режим external mode регистрирует плавающие данные об осциллографах после триггерного события. По умолчанию это установлено в auto, который заставляет набор значений длительности в диалоговом окне External Signal & Triggering использоваться. Значение длительности по умолчанию является 1 000 шагов базовой ставки.

Загрузите параметры на целевое приложение

Опция Batch download на Панели управления Режима external mode включает или отключает пакетные изменения параметра.

По умолчанию пакетная загрузка отключена. Если пакетная загрузка отключена, когда вы нажимаете OK или Apply, изменения, внесенные непосредственно в параметры блоков путем редактирования диалоговых окон параметров блоков, отправляются в цель. Когда вы выполняете Update Diagram, изменения в переменных рабочего пространства MATLAB отправляются.

Если вы выбираете Batch download, кнопка Download включена. Пока вы не нажимаете Download, изменения, внесенные в параметры блоков, хранятся локально. Когда вы нажимаете Download, изменения отправляются в одной передаче.

Когда изменения параметра ждут пакетной загрузки, Панель управления Режима external mode отображает сообщение Parameter changes pending... справа от кнопки Download. Это сообщение остается видимым, пока механизм Simulink не получает уведомление, что новые параметры были установлены в векторе параметра целевой системы.

Следующие данные показывают Панель управления Режима external mode с активированной опцией Batch download и ожидание изменений параметра.

Сконфигурируйте контроль хоста данных сигнала целевого приложения

Роль триггера в загрузке данных сигнала

В режиме external mode, загружая данные сигнала целевого приложения на хост зависит от триггера. Триггер является набором условий, которые нужно соблюдать для загрузки данных, чтобы начаться. Триггер может быть вооружен или не вооружен.

  • Когда триггер вооружен, проверки программного обеспечения на триггерные условия, которые позволяют загрузке данных начинаться.

  • Если триггер не вооружен, программное обеспечение не проверяет на триггерные условия, и загрузка данных не может начаться.

  • Триггер может быть вооружен автоматически, когда хост соединяется с целью, или вручную, путем нажатия кнопки Arm Trigger на Панели управления Режима external mode.

Когда триггер вооружен, и триггерные условия соблюдают, триггерные огни и загрузка данных начинается.

Когда данные были собраны на заданное время, триггерное событие завершается и остановки загрузки данных. Триггер может затем перевооружиться или остаться невооруженным, пока вы не нажимаете кнопку Arm Trigger.

Чтобы выбрать сигналы целевого приложения загрузить и сконфигурировать, как загрузки инициированы, смотрите, Конфигурируют Загрузку Данных сигнала.

Сконфигурируйте загрузку данных сигнала

Нажатие кнопки Signal & Triggering Панели управления Режима external mode открывает диалоговое окно External Signal & Triggering.

Диалоговое окно External Signal & Triggering отображается список блоков и подсистем в вашей модели, которые поддерживают загрузку сигнала режима external mode. Для получения информации о котором типы блоков являются совместимым режимом external mode, видят Блоки и Подсистемы, Совместимые с Режимом external mode.

В диалоговом окне External Signal & Triggering можно выбрать сигналы, которые собраны из целевой системы и просмотрены в режиме external mode. Можно также выбрать триггерный сигнал, который инициировал загрузку данных на основе удовлетворения определенным условиям сигнала, и задайте условия инициирования.

Триггерные опции по умолчанию

Предыдущие данные показывают настройки по умолчанию диалогового окна External Signal & Triggering. Операция по умолчанию диалогового окна External Signal & Triggering упрощает контроль целевого приложения. Если вы используете настройки по умолчанию, вы не должны предварительно конфигурировать сигналы и триггеры. Вы запускаете целевое приложение и соединяете механизм Simulink с ним. Режим external mode совместимые блоки выбраны и триггер, вооружен. Загрузка сигнала начинается непосредственно после связи с целевым приложением.

Настройка по умолчанию триггерных опций:

  • Select all: на

  • Source: руководство

  • Режим: нормальный

  • Длительность: 1000

  • Delay: 0

  • Arm when connecting to target: на

Выберите Signals to Upload

Режим external mode совместимые блоки в вашей модели появляется в списке Signal selection диалогового окна External Signal & Triggering. Вы используете этот список, чтобы выбрать сигналы, что вы хотите просмотреть. В столбце Selected X появляется для каждого выбранного блока.

Флажок Select all выбирает все сигналы. По умолчанию Select all выбран.

Если Select all очищен, можно выбрать или очистить отдельные сигналы с помощью опций off и on. Чтобы выбрать сигнал, кликните по его записи списка и выберите опцию on. Чтобы очистить сигнал, кликните по его записи списка и выберите опцию off.

Кнопка Clear all очищает все сигналы.

Сконфигурируйте триггерные опции

Как описано в Роли Триггера в Загрузке Данных сигнала, загрузка данных сигнала зависит от триггера. Триггер задает условия, которые нужно соблюдать для загрузки, чтобы начаться. Кроме того, триггер должен быть вооружен для загрузки данных, чтобы начаться. Когда триггер вооружен, и триггерные условия соблюдают, триггерные огни и загрузка начинается. Когда данные были собраны на заданное время, триггерное событие завершается и остановки загрузки данных.

Чтобы управлять, когда и как данные сигнала собраны (загруженные) из целевой системы, сконфигурируйте следующий Trigger options в диалоговом окне External Signal & Triggering.

  • Source: manual или signal. Средства управления, инициировали ли кнопка или сигнал загрузку данных.

    Выбор manual направляет режим external mode, чтобы использовать кнопку Arm Trigger на Панели управления Режима external mode как триггер, чтобы начать загружать данные. Когда вы нажимаете Arm Trigger, загрузка данных начинается.

    Выбор signal направляет режим external mode, чтобы использовать триггерный сигнал в качестве триггера, чтобы начать загружать данные. Когда триггерный сигнал удовлетворяет триггерные условия (то есть, сигнал пересекает пороговый уровень в заданном направлении), триггерное событие имеет место. (Задайте триггерные условия в разделе Trigger signal.), Если триггер вооружен, мониторы режима external mode для вхождения триггерного события. Когда триггерное событие имеет место, загрузка данных начинается.

  • Режим: normal или one-shot. Средства управления, перевооружается ли триггер после триггерного события, завершаются.

    В режиме normal режим external mode автоматически перевооружает триггер после каждого триггерного события. Следующая загрузка данных начинается, когда триггер стреляет.

    В режиме one-shot режим external mode собирает только один буфер данных каждый раз, когда вы вооружаете триггер.

    Для получения дополнительной информации об установке Mode смотрите, Конфигурируют Архивацию Хоста Данных сигнала Целевого приложения.

  • Длительность: Задает количество шагов базовой ставки, для которых режим external mode загружает данные после триггерного события (значение по умолчанию 1000). Например, если Duration установлен в 1 000, и основной (самый быстрый) уровень модели является одной секундой:

    • Для сигнала, выбранного в базовой ставке, одна секунда (1,0 Гц), режим external mode собирает 1 000 непрерывных выборок во время триггерного события.

    • Для сигнала, выбранного в две секунды (0,5 Гц), режим external mode собирает 500 выборок во время триггерного события.

  • Delay: Задает задержку, которая будет применена к сбору данных. Задержка представляет количество времени, которое протекает между триггерным событием и запуском сбора данных. Задержка выражается на шагах базовой ставки. Это может быть положительно или отрицательно (значение по умолчанию 0). Отрицательная задержка соответствует предварительному инициированию. Когда задержка отрицательна, данные со времени, предшествующего триггерному событию, собраны и загружены.

  • Arm when connecting to target: Выбранный или очищенный. Инициировали ли кнопка или сигнал загрузку данных (как задано Source), триггер должен быть вооружен, чтобы позволить загрузке данных начинаться.

    Если вы выбираете эту опцию, соединяя с целевыми руками триггер.

    • Если триггер, Source является manual, загрузка данных, сразу начинается.

    • Если триггер, Source является signal, контроль триггерного сигнала, сразу начинается. Загрузка данных начинается, когда триггерный сигнал удовлетворяет триггерные условия (как задано в разделе Trigger signal).

    Если вы очищаете Arm when connecting to target, вручную вооружаете триггер путем нажатия кнопки Arm Trigger на Панели управления Режима external mode.

При симуляции в режиме external mode каждый уровень в модели создает буфер на цели. Каждая запись в буфере является достаточно большой, чтобы содержать все данные, требуемые каждого сигнала в том уровне для одного временного шага (время плюс данные плюс индексы режима external mode, идентифицирующие сигнал). Количество записей в кольцевом буфере определяется триггерным параметром Duration режима external mode (ExtModeTrigDuration). Память, выделенная на цели для буферизации сигналов, пропорциональна Duration и количеству загрузки сигналов. Duration также обеспечивает индикацию относительно количества шагов базовой ставки с данными логов после триггерного события в режиме external mode.

Значение Duration задает количество непрерывных точек данных, которые будут собраны в каждом буфере данных. Необходимо войти, значение Duration, равное количеству непрерывной выборки, указывает, что необходимо собраться вместо того, чтобы полагаться на серию буферов, чтобы быть непрерывными. Если вы вводите значение меньше, чем общее количество точек выборки, можно потерять точки выборки в течение времени, проведенного, передав значения от буфера данных до рабочего пространства MATLAB. Программное обеспечение Simulink поддерживает непрерывность точки только в одном буфере. Между буферами, из-за времени трансфера, могут быть не использованы некоторые выборки.

Значение Duration может влиять на значение Limit data points to last Осциллографа и К блокам Рабочей области. Количество точек выборки, что блоки сохраняют в рабочее пространство MATLAB, является меньшими из этих двух значений. Чтобы определить номер точек выборки, что блоки сохраняют, очистите Limit data points to last. Затем используйте Duration, чтобы задать количество сохраненных точек выборки.

Выберите Trigger Signal

Можно определять один сигнал как триггерный сигнал. Чтобы выбрать триггерный сигнал, из меню Source в разделе Trigger options, выбирают signal. Это действие включает параметры в разделе Trigger signal. Затем выберите сигнал в списке Signal selection и нажмите кнопку Trigger Signal.

Когда вы выбираете сигнал быть триггером, T появляется в столбце Trigger списка Signal selection. В следующей фигуре сигнал Scope A является триггером. Scope B также выбран для просмотра, как обозначено X в столбце Selected.

После выбора триггерного сигнала можно использовать раздел Trigger signal, чтобы задать триггерные условия и установить триггерный сигнал параметры Element и Port.

Установите триггерные условия

Используйте раздел Trigger signal диалогового окна External Signal & Triggering, чтобы установить триггерные условия и атрибуты. параметры Trigger signal включены только, когда триггерный параметр Source устанавливается на signal в разделе Trigger options.

По умолчанию любой элемент первого входного порта заданного триггерного блока может заставить триггер стрелять (то есть, Порт 1, любой элемент). Можно изменить это поведение путем корректировки Port и значений Element в разделе Trigger signal. Поле Port принимает номер или ключевое слово last. Поле Element принимает номер или ключевые слова any или last.

В разделе Trigger signal вы также задаете условия, при которых триггерное событие имеет место.

  • Direction: rising, falling или either. Направление, в котором должен перемещаться сигнал, когда это пересекает пороговое значение. Значением по умолчанию является rising.

  • Level: значение, указывающее на порог сигнал, должно пересечься в обозначенном направлении, чтобы запустить триггер. По умолчанию уровень 0.

  • Hold-off: Применяется только к режиму normal. Выраженный на шагах базовой ставки, Hold-off является временем между завершением одного триггерного события и перевооружением триггера.

Измените опции сигнала и инициирования, в то время как соединено

После того, как вы сконфигурируете загрузку данных сигнала и соедините Simulink с рабочим целевым исполняемым файлом, можно изменить сигнал и опции инициирования, не отключаясь от цели.

Если триггер вооружен (например, если триггерная опция, Arm when connecting to the target выбран, который является значением по умолчанию), диалоговое окно External Signal & Triggering не может быть изменено. Изменить опции инициирования и сигнал:

  1. Откройте панель управления режима external mode.

  2. Нажмите Cancel Trigger. Инициирование и отображение загруженных остановок данных.

  3. Откройте диалоговое окно External Signal & Triggering и измените сигнал и инициируйте опции как требуется. Например, в разделе Signal selection, можно включить или отключить осциллограф, и в разделе Trigger options, изменить триггер Mode, например, от normal до one-shot.

  4. Нажмите Arm Trigger. Инициирование и отображение загруженных резюме данных, с модификациями.

Сконфигурируйте архивацию хоста данных сигнала целевого приложения

В режиме external mode можно использовать Осциллограф Simulink и Для блоков Рабочей области, чтобы заархивировать данные к диску.

Чтобы понять, как функции архивации работают, рассмотрите обработку данных, когда архивация не включена. Существует два случая, режим с одним выстрелом и режим normal mode.

  • В режиме с одним выстрелом, после того, как триггерное событие имеет место, каждый выбранный блок пишет свои данные в рабочую область, как это было бы в конце симуляции. Если другой - выстрел инициирован, существующие данные о рабочей области перезаписываются.

  • В режиме normal mode режим external mode автоматически перевооружает триггер после каждого триггерного события. Следовательно, можно думать о режиме normal mode как о серии одного выстрела. Каждый - выстрел в этом ряду, за исключением последнего, упоминается как промежуточный результат. Поскольку триггер может стрелять в любое время, пишущий, что промежуточные результаты к рабочей области могут привести к непредсказуемой перезаписи переменных рабочей области. Поэтому поведение по умолчанию является к только для записи результатами итогового одного выстрела к рабочей области. Промежуточные результаты отбрасываются. Если вы знаете, что достаточно времени существует между триггерами для контроля промежуточных результатов, можно заменить поведение по умолчанию путем выбора опции Write intermediate results to workspace. Эта опция не защищает данные о рабочей области из того, чтобы быть перезаписанным последующими триггерами.

Если вы используете блок Simulink Scope, чтобы заархивировать данные к диску, открыть диалоговое окно параметров Осциллографа и выбрать опцию Log data to workspace. Опция требуется по этим причинам:

  • Данные сначала передаются от буфера данных осциллографа до рабочего пространства MATLAB, прежде чем быть записанным в MAT-файл.

  • Variable name, вводимый в диалоговое окно параметров Осциллографа, совпадает с тем в рабочем пространстве MATLAB и MAT-файле. Включение данных быть сохраненным позволяет переменной, названной с параметром Variable name быть сохраненной в MAT-файл.

Примечание

Если вы не выбираете опцию блока Scope Log data to workspace, MAT-файлы для регистрации данных создаются, но они пусты.

Поддержки диалогового окна Enable Data Archiving:

  • Примечания папки

  • Записи в деле

  • Автоматизированная архивация данных

На Панели управления Режима external mode нажмите кнопку Data Archiving, чтобы открыть диалоговое окно Enable Data Archiving. Если ваша модель соединяется с целевым окружением, отключите его, в то время как вы конфигурируете архивацию данных. Чтобы включить другие средства управления в диалоговом окне, выберите Enable archiving.

Эти операции поддерживаются диалоговым окном Enable Data Archiving.

Примечания папки

Чтобы добавить аннотации для набора связанных файлов данных в папке, в диалоговом окне Enable Data Archiving, нажимают Edit Directory Note. Редактор MATLAB открывается. Поместите комментарии, что вы хотите сохраненный в файл в заданной папке в этом окне. По умолчанию комментарии сохранены в папку, в последний раз записанную в архивацией данных.

Записи в деле

Чтобы добавить аннотации для отдельного файла данных, в диалоговом окне Enable Data Archiving, нажимают Edit File Note. Окно средства поиска файла открывается, который по умолчанию установлен в последний файл, в который вы записали. Выбор MAT-file открывает окно редактирования. В этом окне добавьте или отредактируйте комментарии, что вы хотите сохраненный с вашим отдельным MAT-файлом.

Автоматизированная архивация данных

Чтобы сконфигурировать автоматическую запись журналирования результатов к диску, опционально включая промежуточные результаты, используют опцию Enable archiving и средства управления, которые это включает. Диалоговое окно обеспечивает следующие связанные средства управления:

  • Directory: Задает папку, в которой данные сохранены. Если вы выбираете Increment directory when trigger armed, режим external mode добавляет суффикс.

  • File: Задает имя файла, в котором данные сохранены. Если вы выбираете Increment file after one-shot, режим external mode добавляет суффикс.

  • Increment directory when trigger armed: Каждый раз, когда вы нажимаете кнопку Arm Trigger, режим external mode, использует различную папку для записи файлов журнала. Папки называют инкрементно, например, dirname1, dirname2, и так далее.

  • Increment file after one-shot: Новые буферы данных сохранены в инкрементных файлах: filename1, filename2, и так далее. Постепенное увеличение файла происходит автоматически в режиме normal mode.

  • Append file suffix to variable names: Каждый раз, когда имена файлов шага режима external mode, каждый файл содержит переменные с идентичными именами. Выбор Append file suffix to variable name приводит к каждому файлу, содержащему уникальные имена переменных. Например, режим external mode сохраняет переменную под названием xdata в инкрементных файлах (file_1, file_2, и так далее) как xdata_1, xdata_2, и так далее. Этот подход поддержки, загружающие MAT-файлы в рабочую область и сравнивающие переменные в подсказке команды MATLAB. Без уникальных имен каждый экземпляр xdata перезаписал бы предыдущий в рабочем пространстве MATLAB.

  • Write intermediate results to workspace: Если вы хотите, чтобы программное обеспечение Simulink Coder записало промежуточные результаты в рабочую область, выберите эту опцию.

Блоки и подсистемы, совместимые с режимом external mode

Совместимые блоки

В режиме external mode можно использовать следующие типы блоков, чтобы получить и просмотреть сигналы, загруженные из целевого приложения:

  • Плавание блоков Scope и Scope

  • Спектр Анализатор и Осциллограф Времени блокируется от продукта DSP System Toolbox™

  • Отобразите блоки

  • К блокам Рабочей области

  • Написанные пользователем Блоки s-function

    Метод режима external mode встроен в API S-функции. Этот метод позволяет написанным пользователем блокам поддерживать режим external mode. Смотрите matlabroot/simulink/include/simstruc.h.

  • Блоки Графика XY

Можно определять определенные подсистемы как Подсистемы Просмотра Сигнала и использовать их, чтобы получить и просмотреть сигналы, загруженные из целевого приложения. Смотрите Сигнал Просмотреть Подсистемы для получения дополнительной информации.

Вы выбираете режим external mode совместимые блоки и подсистемы, и вооружаете триггер, при помощи диалогового окна External Signal & Triggering. По умолчанию такие блоки в модели выбраны, и ручной триггер собирается быть вооруженным, когда соединено с целевым приложением.

Подсистемы просмотра сигнала

Подсистема Просмотра Сигнала является атомарной подсистемой, которая инкапсулирует обработку и просмотр сигналов, полученных от целевой системы. Сигнал, Просматривающий Подсистему, запускается только на хосте и не генерирует код в целевой системе. Сигнал, Просматривающий Подсистемы, запущенные в нормальном, акселераторе, быстром акселераторе и внешних режимах симуляции.

Примечание

Подсистемы Просмотра сигнала неактивны, если помещено в SIL или компоненте PIL, таковы как топ-модель в режиме SIL или PIL, блок Model в режиме SIL или PIL или блок SIL или PIL. Однако SIL или компонент PIL могут питать Сигнал, Просматривающий Подсистему, запускающуюся в поддерживаемом режиме.

Подсистемы Просмотра сигнала полезны в ситуациях, где вы хотите обработать или обусловить сигналы прежде, чем просмотреть или регистрировать их, но вы не хотите выполнять эти задачи в целевой системе. При помощи Подсистемы Просмотра Сигнала можно сгенерировать меньший и более эффективный код по целевой системе.

Как другой режим external mode совместимые блоки, Подсистемы Просмотра Сигнала отображены в диалоговом окне External Signal & Triggering.

Объявить, что подсистема Подсистема Просмотра Сигнала:

  1. В диалоговом окне Block Parameters выберите опцию Treat as atomic unit.

    Для получения дополнительной информации об атомарных подсистемах смотрите Генерацию Управления Функций для Подсистем.

  2. Чтобы включить свойство SimViewingDevice, используйте команду set_param:

    set_param('blockname', 'SimViewingDevice','on')

    'blockname' является именем подсистемы.

  3. Убедитесь, что подсистема удовлетворяет следующие требования:

    • Это должен быть чистый блок Sink. Таким образом, это не должно содержать блоки Выходного порта или блоки Хранилища данных. Это может содержать блоки Goto, только если соответствие От блоков содержится в контурах подсистемы.

    • Это не должно иметь непрерывных состояний.

Следующая модель, sink_examp, содержит атомарную подсистему, theSink.

Подсистема theSink применяет усиление и смещение к его входному сигналу и отображает ее на блоке Scope.

Если theSink объявляется как Сигнал a Просмотр Подсистемы, сгенерированное целевое приложение включает только код для блока Sine Wave. Если theSink выбран и вооружен в диалоговом окне External Signal & Triggering, целевое приложение загружает синусоидальный сигнал на theSink во время симуляции. Можно затем изменить параметры блоков в theSink и наблюдать загруженный сигнал.

Если бы theSink не был объявлен как Подсистема Просмотра Сигнала, ее Усиление, Постоянное, и блоки Суммы, запустилось бы как код подсистемы по целевой системе. Синусоидальный сигнал был бы загружен на механизм Simulink, будучи обработанным этими блоками и просмотрен на sink_examp/theSink/Scope2. Обработка требований на целевую систему была бы увеличена дополнительной обработкой сигналов, и загрузкой изменений в параметрах блоков от хоста.

Поддерживаемые блоки для архивации данных

В режиме external mode можно использовать следующие типы блоков, чтобы заархивировать данные к диску:

  • Определите объем блоков

  • К блокам Рабочей области

Вы конфигурируете архивацию данных при помощи диалогового окна Enable Data Archiving, как описано в Конфигурируют Архивацию Хоста Данных сигнала Целевого приложения.

Механизм режима external mode для загрузки настраиваемых параметров

В зависимости от установки опции Default parameter behavior, когда целевое приложение сгенерировано, существуют различия в способе, которым обработаны обновления параметра. Загрузите Механизм, описывает операцию связи режима external mode с набором Default parameter behavior к Tunable. Встроенный и Настраиваемые параметры описывает операцию режима external mode с набором Default parameter behavior к Inlined.

Загрузите механизм

В режиме external mode механизм Simulink не моделирует систему, представленную блок-схемой. По умолчанию, когда режим external mode включен, механизм Simulink загружает параметры на целевую систему. После начальной загрузки механизм остается в режиме ожидания, пока вы не изменяете параметры в блок-схеме или пока механизм не получает данные из цели.

Когда вы изменяете параметр в блок-схеме, механизм Simulink вызывает внешний интерфейсный файл MEX, передавая новые значения параметров (наряду с другой информацией) в качестве аргументов. Внешний интерфейсный файл MEX содержит код, который реализует одну сторону межпроцессного взаимодействия (IPC) канал. Этот канал соединяет процесс Simulink (где файл MEX выполняется) к процессу, который выполняет внешнюю программу. Файл MEX передает новые значения параметров при помощи этого канала к внешней программе.

Другая сторона канала связи реализована в рамках внешней программы. Эта сторона пишет новые значения параметров в структуру параметра цели (model_P).

Сторона Simulink инициирует операцию загрузки параметра путем отправки сообщения, содержащего информацию о параметре к внешней программе. В терминологии клиент-серверного вычисления сторона Simulink является клиентом, и внешняя программа является сервером. Эти два процесса могут быть удаленными, или они могут быть локальными. Где клиент-сервер является удаленным, протокол, такой как TCP/IP используется, чтобы передать данные. Где клиент-сервер локален, последовательная связь или общая память могут использоваться, чтобы передать данные.

Следующие данные показывают это отношение. Механизм Simulink вызывает внешний интерфейсный файл MEX каждый раз, когда вы изменяете параметры в блок-схеме. Файл MEX затем загружает параметры на внешнюю программу при помощи канала связи.

Архитектура режима external mode

Встроенный и настраиваемые параметры

По умолчанию параметры (кроме перечисленных в TCP/IP и Последовательных Ограничениях Режима external mode) в программе режима external mode являются настраиваемыми; то есть, можно изменить их при помощи механизма загрузки, описанного в этом разделе.

Если вы устанавливаете Default parameter behavior на Inlined (на панели Optimization диалогового окна Configuration Parameters), генератор кода Simulink Coder встраивает численные значения параметров модели (константы), вместо символьных названий параметра, в сгенерированном коде. Встраивание параметров генерирует меньший и более эффективный код. Однако встроенные параметры, потому что они эффективно становятся константами, не являются настраиваемыми.

Программное обеспечение Simulink Coder позволяет вам повысить полную эффективность путем встраивания большинства параметров, одновременно сохраняя гибкость времени выполнения, настраивающегося для выбранных параметров, которые важны для приложения. Когда вы встраиваете параметры, можно использовать объекты Simulink.Parameter удалить отдельные параметры из встраивания и объявить, что они являются настраиваемыми. Кроме того, можно использовать эти объекты управлять, как параметры представлены в сгенерированном коде.

Для получения дополнительной информации о настраиваемых параметрах смотрите, Создают Настраиваемый Калибровочный Параметр в Сгенерированном коде.

Автоматическая Загрузка Параметра на Связи Хоста/Цели.  Каждый раз механизм Simulink соединяется с целевым приложением, которое было сгенерировано с набором Default parameter behavior к Inlined, целевое приложение загружает текущее значение своих настраиваемых параметров к хосту. Эти значения присвоены соответствующим переменным рабочего пространства MATLAB. Эта процедура синхронизирует хост и цель относительно значений параметров.

Переменные рабочей области, требуемые моделью, должны быть инициализированы во время связи хоста/цели. В противном случае загрузка не может продолжить, и ошибка заканчивается. Если связь установлена, эти переменные обновляются, чтобы отразить текущие значения параметров в целевой системе.

Автоматическая загрузка параметра происходит, только если целевое приложение было сгенерировано с набором Default parameter behavior к Inlined. Загрузите Механизм, описывает операцию связи режима external mode с набором Default parameter behavior к Tunable.

Выберите Communication Protocol for Client and Server

Введение

Продукт Simulink Coder предоставляет код, чтобы реализовать обоих сторона клиент-сервера коммуникации режима external mode с помощью или TCP/IP или последовательных протоколов. Можно использовать основанную на сокете реализацию режима external mode, обеспеченную продуктом Simulink Coder сгенерированным кодом, при условии, что целевая система поддерживает TCP/IP. В противном случае используйте или настройте последовательную предоставленную возможность транспортного уровня.

Низкоуровневый транспортный уровень обрабатывает физическую передачу сообщений. И механизм Simulink и типовой кодекс независимы от этого слоя. И транспортный уровень и код, непосредственно взаимодействующий через интерфейс к транспортному уровню, изолируются в отдельных модулях, что формат, передача, и получают пакеты данных и сообщения.

Используя Реализацию TCP/IP

Можно использовать клиент-серверную реализацию TCP/IP-based режима external mode с программами в реальном времени на UNIX Open Group или системах PC. Для справки в настройке транспортных уровней режима external mode смотрите, Создают Транспортный уровень для TCP/IP или Последовательной Коммуникации Режима external mode.

Использовать режим external mode Simulink по TCP/IP:

  • Убедитесь, что внешний интерфейсный файл MEX для транспорта TCP/IP вашей цели задан.

    Цели, обеспеченные MathWorks®, задают имя внешнего интерфейсного файла MEX в matlabroot/toolbox/simulink/simulink/extmode_transports.m. Имя интерфейса появляется как недоступный для редактирования текст в разделе External mode configuration панели Interface диалогового окна Configuration Parameters. Значением по умолчанию TCP/IP является ext_comm.

    Чтобы задать TCP/IP транспортируют для пользовательской цели, необходимо добавить запись следующей формы к файлу sl_customization.m на пути MATLAB:

    function sl_customization(cm)
      cm.ExtModeTransports.add('stf.tlc', 'transport', 'mexfile', 'Level1');
    %end function
    • stf.tlc является именем системного конечного файла, для которого вы указываете транспорт (например, 'mytarget.tlc')

    • transport является транспортным именем, чтобы отобразиться в меню Transport layer на панели Interface диалогового окна Configuration Parameters (например, 'tcpip')

    • mexfile является именем связанного внешнего интерфейсного файла MEX транспорта (например, 'ext_comm')

    Можно задать несколько целей и/или транспортов с дополнительными строками cm.ExtModeTransports.add, например:

    function sl_customization(cm)
      cm.ExtModeTransports.add('mytarget.tlc', 'tcpip', 'ext_comm', 'Level1');
      cm.ExtModeTransports.add('mytarget.tlc', 'serial', ...
                               'ext_serial_win32_comm', 'Level1');
    %end function
  • Убедитесь, что make-файл шаблона сконфигурирован, чтобы соединить исходные файлы для серверного кода TCP/IP и что это задает флаги компилятора при создании сгенерированного кода.

  • Создайте внешнюю программу.

  • Запустите внешнюю программу.

  • Установите модель Simulink на режим external mode и подключение к цели.

Следующие данные показывают структуру реализации TCP/IP-based.

Реализация Клиента/сервера TCP/IP-Based для Режима external mode

Дополнительные аргументы файла MEX для Транспорта TCP/IP.  В диалоговом окне External Target Interface можно задать дополнительные аргументы, которые передаются файлу MEX интерфейса режима external mode для связи с выполнением целей.

  • Целевое сетевое имя: сетевое имя компьютера, запускающего внешнюю программу. По умолчанию это - компьютер, на котором продукт Simulink запускает, например, 'myComputer'. Можно также использовать IP-адрес, например, '148.27.151.12'.

  • Уровень многословия: управляет уровнем детализации информации, отображенной во время передачи данных. Значение является или 0 или 1 и имеет следующее значение:

    0 — Никакая информация
    1
    — Подробная информация

  • Номер порта сервера TCP/IP: значением по умолчанию является 17725. Можно изменить номер порта на значение между 256 и 65535, чтобы избежать конфликта порта.

Аргументы позиционны и должны быть заданы в следующем порядке:

<TargetNetworkName> <VerbosityLevel> <ServerPortNumber>

Например, если вы хотите задать уровень многословия (второй аргумент), затем необходимо также задать целевое сетевое имя (первый аргумент). Аргументы могут быть разграничены пробелом или запятыми. Например:

'148.27.151.12' 1 30000

Можно задать параметры командной строки к внешней программе, когда вы запускаете ее. Смотрите Выполнение Внешняя Программа.

Используя последовательную реализацию

Управление коммуникацией хоста/цели на последовательном канале подобно управлению коммуникацией хоста/цели на канале TCP/IP.

Чтобы использовать режим external mode Simulink по последовательному каналу, вы должны:

  • Убедитесь, что внешний интерфейсный файл MEX для последовательного транспорта вашей цели задан.

    Цели, обеспеченные MathWorks, задают имя внешнего интерфейсного файла MEX в matlabroot/toolbox/simulink/simulink/extmode_transports.m. Имя интерфейса появляется как недоступный для редактирования текст в разделе External mode configuration панели Interface диалогового окна Configuration Parameters. Последовательным значением по умолчанию является serial.

    Чтобы задать последовательный транспорт для пользовательской цели, необходимо добавить запись следующей формы к файлу sl_customization.m на пути MATLAB:

    function sl_customization(cm)
      cm.ExtModeTransports.add('stf.tlc', 'transport', 'mexfile', 'Level1');
    %end function
    • stf.tlc является именем системного конечного файла, для которого вы указываете транспорт (например, 'mytarget.tlc')

    • transport является транспортным именем, чтобы отобразиться в меню Transport layer на панели Interface диалогового окна Configuration Parameters (например, 'serial')

    • mexfile является именем связанного внешнего интерфейсного файла MEX транспорта (например, 'ext_serial_win32_comm')

    Можно задать несколько целей и/или транспортов с дополнительными строками cm.ExtModeTransports.add, например:

    function sl_customization(cm)
      cm.ExtModeTransports.add('mytarget.tlc', 'tcpip', 'ext_comm', 'Level1');
      cm.ExtModeTransports.add('mytarget.tlc', 'serial', ...
                               'ext_serial_win32_comm', 'Level1');
    %end function
  • Убедитесь, что make-файл шаблона сконфигурирован, чтобы соединить исходные файлы для последовательного серверного кода и что это задает флаги компилятора при создании сгенерированного кода.

  • Создайте внешнюю программу.

  • Запустите внешнюю программу.

  • Установите модель Simulink на режим external mode и подключение к цели.

Дополнительные аргументы файла MEX для Последовательного Транспорта.  В поле MEX-file arguments панели Interface диалогового окна Configuration Parameters можно задать аргументы, которые передаются файлу MEX интерфейса режима external mode для связи с выполняющимися целями. Для последовательного транспорта дополнительные аргументы к ext_serial_win32_comm следующие:

  • Уровень многословия: Этот аргумент управляет уровнем детализации информации, отображенной во время передачи данных. Значение этого аргумента:

    • 0 (никакая информация), или

    • 1 (подробная информация)

  • ID последовательного порта: порт ID хоста, заданного как целое число или вектор символов. Например, задайте порт ID USB к последовательному конвертеру as'/dev/ttyusb0'.Simulink целочисленный порт IDs префиксов Кодера с \\.\COM на Windows® и /dev/ttyS на Unix.

    Когда вы запускаете целевое приложение с помощью последовательной связи, необходимо задать порт ID, чтобы использовать, чтобы соединить его с хостом. Сделайте это включением параметра командной строки -port. Например:

    mytarget.exe -port 2 -w
  • BaudRate: Задайте целочисленное значение. Значением по умолчанию является 57600.

Аргументы опций файла MEX позиционны и должны быть заданы в следующем порядке:

<VerbosityLevel> <SerialPortID> <BaudRate>

Например, если вы хотите задать ID последовательного порта (второй аргумент), затем необходимо также задать уровень многословия (первый аргумент). Аргументы могут быть разграничены пробелом или запятыми. Например:

1 '/dev/ttyusb0' 57600

Когда вы запускаете внешнюю программу, можно задать параметры командной строки.

Запустите внешнюю программу

Прежде чем можно будет использовать продукт Simulink в режиме external mode, внешняя программа должна запускаться.

Если целевое приложение выполняется на той же машине как хост, и коммуникация через петлевой последовательный кабель, порт ID цели должен отличаться от того из хоста (как задано в поле редактирования MEX-file arguments).

Чтобы запустить внешнюю программу, вы вводите команду формы:

model -opt1 ... -optN

model является именем внешней программы, и -opt1 ... -optN опции. (См. Параметры командной строки для Внешней Программы.) В примерах в этом разделе именем внешней программы является ext_example.

Выполнение Внешней Программы в Windows Environment.  В среде Windows можно запустить внешние программы любым из следующих способов:

  • Откройте окно Command Prompt. В командной строке введите имя целевого исполняемого файла, сопровождаемого возможными вариантами, такими как:

    ext_example -tf inf -w
  • Также можно запустить целевой исполняемый файл из Окна Команды MATLAB. Команде должен предшествовать восклицательный знак (!) и сопровождать амперсанд (&), как в следующем примере:

    !ext_example -tf inf -w &

    Амперсанд (&) заставляет операционную систему порождать другой процесс, чтобы запустить целевой исполняемый файл. Если вы не включаете амперсанд, программа все еще запускается, но вы не можете ввести команды в подсказке команды MATLAB или вручную отключить исполняемый файл.

Выполнение Внешней Программы в Среде UNIX.  В среде UNIX можно запустить внешние программы любым из следующих способов:

  • Откройте окно Xterm. В командной строке введите имя целевого исполняемого файла, сопровождаемого возможными вариантами, такими как:

    ./ext_example -tf inf -w
  • Также можно запустить целевой исполняемый файл из Окна Команды MATLAB. Необходимо запустить его в фоновом режиме так, чтобы можно было все еще получить доступ к окружению Simulink. Команде должен предшествовать восклицательный знак (!), точечная наклонная черта (./указание на текущий каталог), и сопровождать амперсанд (&), как в следующем примере:

    !./ext_example -tf inf -w &

    Амперсанд (&) заставляет операционную систему порождать другой процесс, чтобы запустить целевой исполняемый файл.

Параметры командной строки для Внешней Программы.  Целевые исполняемые файлы режима external mode, сгенерированные генератором кода Simulink Coder, поддерживают следующие параметры командной строки:

  • -tf n

    Опция -tf заменяет набор времени остановки в модели Simulink. Аргумент n задает номер секунд, которые запустит программа. Значение inf направляет модель, чтобы запуститься неопределенно. В этом случае выполнения типового кодекса до целевого приложения получают сообщение остановки от механизма Simulink.

    Следующий пример устанавливает время остановки на 10 секунд.

    ext_example -tf 10

Когда только для целого числа цели ERT создаются и выполняются в режиме external mode, параметр времени остановки (-tf) интерпретирован к установленному сроку как количество меток деления базовой ставки, а не номер секунд, чтобы выполниться.

  • -w

    Дает целевому приложению команду вводить состояние ожидания, пока оно не получает сообщение от хоста. На данном этапе цель запускается, но не выполняет типовой код. Сообщение запуска отправляется, когда вы выбираете Start Real-Time Code из меню Simulation или нажимаете кнопку Start Real-Time Code в Панели управления Режима external mode.

    Используйте опцию -w, если вы хотите просмотреть данные о выполнении целевого приложения из временного шага 0, или если вы хотите изменить параметры, прежде чем целевое приложение начнет выполнение типового кодекса.

  • -port n

    Задает номер порта TCP/IP или ID последовательного порта, n, для целевого приложения. Номер порта целевого приложения должен совпадать с номером порта хоста к транспорту TCP/IP. Номер порта зависит от типа транспорта.

    • Для транспорта TCP/IP: Номер порта является целым числом между 256 и 65535 со значением по умолчанию, являющимся 17725.

    • Для последовательного транспорта: ID Порта является целым числом или вектором символов. Например, задайте порт ID USB к последовательному конвертеру как '/dev/ttyusb0'

  • -baud r

    Заданный как целое число, эта опция только доступна для последовательного транспорта.

Реализуйте слой протокола режима external mode

Если вы хотите реализовать свой собственный транспортный уровень для коммуникации режима external mode, необходимо изменить определенные модули кода, обеспеченные продуктом Simulink Coder, и создать новый внешний интерфейсный файл MEX. Смотрите Создают Транспортный уровень для TCP/IP или Последовательной Коммуникации Режима external mode.

Используйте режим external mode программно

Можно запустить симуляции режима external mode из командной строки MATLAB или программно в скриптах. Используйте get_param и команды set_param, чтобы получить и установить значения параметров командной строки симуляции модели, такие как SimulationMode и SimulationCommand и параметры командной строки режима external mode, такие как ExtModeCommand и ExtModeTrigType.

Следующие команды симуляции модели принимают, что модель Simulink открыта и что вы загрузили целевое приложение, с которым модель соединит режим external mode использования.

  1. Измените модель Simulink на режим external mode:

    set_param(gcs,'SimulationMode','external')
  2. Соедините открытую модель с загруженным целевым приложением:

    set_param(gcs,'SimulationCommand','connect')
  3. Начните запускать целевое приложение:

    set_param(gcs,'SimulationCommand','start')
  4. Остановка, запускающая целевое приложение:

    set_param(gcs,'SimulationCommand','stop')
  5. Отключите целевое приложение от модели:

    set_param(gcs,'SimulationCommand','disconnect')

Чтобы настроить параметр рабочей области, измените его значение в командной строке. Если параметр рабочей области является объектом Simulink.Parameter, присвойте новое значение свойству Value.

myVariable = 5.23;
myParamObj.Value = 5.23;

Чтобы загрузить параметр рабочей области в режиме external mode, вы обновляете диаграмму модели. Следующая команда симуляции модели инициирует образцовое обновление:

set_param(gcs,'SimulationCommand','update')

Чтобы инициировать или отменить загрузку данных на осциллографы, используйте значения ExtModeCommand armFloating и cancelFloating, или armWired и cancelWired. Например, чтобы инициировать и затем отменить загрузку данных на соединенный проводом (неплавание) осциллографы:

set_param(gcs,'ExtModeCommand','armWired')
set_param(gcs,'ExtModeCommand','cancelWired')

В следующей таблице перечислены параметры командной строки режима external mode, которые можно использовать в командах set_param и get_param. Таблица предоставляет краткие описания, допустимые значения (жирный шрифт подсвечивает значения по умолчанию), и отображение с эквивалентами диалогового окна External Mode. Для параметров режима external mode, которые эквивалентны опциям панели Interface в диалоговом окне Configuration Parameters, смотрите Образцовые Параметры конфигурации: Интерфейс Генерации кода.

Параметры командной строки режима external mode

Параметр и значенияЭквивалентное диалоговое окноОписание
ExtModeAddSuffixToVar
off, on
Включите Архивацию Данных: флажок Append file suffix to variable namesИнкрементные имена переменных для каждого постепенно увеличенного имени файла.
ExtModeArchiveDirName
character vector
Включите Архивацию Данных: текстовое поле DirectoryСохраните данные в заданной папке.
ExtModeArchiveFileName
character vector
Включите Архивацию Данных: текстовое поле FileСохраните данные в заданном файле.
ExtModeArchiveMode
символьный вектор- off, auto, manual
Включите Архивацию Данных: флажок Enable archiving

Активируйте автоматизированные опции архивации данных.

Чтобы задать manual, запустите set_param(gcs, 'ExtModeArchiveMode', 'manual').

Обратите внимание на то, что, если вы задаете auto, ExtModeAutoIncOneShot установлен в on.

ExtModeArmWhenConnect
off, on
Внешняя Signal & Triggering: флажок Arm when connecting to targetВооружите триггер, как только программное обеспечение Simulink Coder соединяется с целью.
ExtModeAutoIncOneShot
off, on
Включите Архивацию Данных: флажок Increment file after one-shotСохраните новые буферы данных в инкрементных файлах.
ExtModeAutoUpdateStatusClock ( только платформы Windows Microsoft®)
off, on
Не доступныйПостоянно загрузите и отобразите целевое время в строке состояния окна модели.
ExtModeBatchMode
off, on
Панель управления Режима external mode: флажок Batch downloadВключите или отключите загрузку параметров в пакетном режиме.
ExtModeChangesPending
off, on
Не доступныйТо, когда ExtModeBatchMode включен, указывает, остаются ли параметры в очереди параметров, которые будут загружены на цель.
ExtModeCommand
символьный вектор- armFloating, armWired, cancelFloating, cancelWired
  • armFloating и cancelFloating эквивалентны выбору и снятию флажка External Mode Control Panel Floating scope> Enable data uploading

  • armWired и cancelWired эквивалентны кнопкам External Mode Control Panel Arm Trigger и Cancel Trigger

Дайте команду режима external mode к целевому приложению.
ExtModeConnected
off, on
Панель управления Режима external mode: кнопка Connect/DisconnectУкажите на состояние связи с целевым приложением.
ExtModeEnableFloating
off, on
Панель управления Режима external mode: флажок Enable data uploadingВключите или отключите вооружение и отмену триггеров, когда связь будет установлена с плаванием осциллографов.
ExtModeIncDirWhenArm
off, on
Включите Архивацию Данных: флажок Increment directory when trigger armedЗапишите файлы журнала в инкрементные папки каждый раз, когда триггер вооружен.
ExtModeLogAll
off, on
Внешняя Signal & Triggering: флажок Select allЗагрузите доступные сигналы от цели до хоста.
ExtModeParamChangesPending
off, on
Не доступныйТо, когда программное обеспечение Simulink Coder соединяется с целью, и ExtModeBatchMode включен, указывает, остаются ли параметры в очереди параметров, которые будут загружены на цель. Более эффективный, чем ExtModeChangesPending, потому что это проверяет на связь с целью.
ExtModeSkipDownloadWhenConnect
off, on
Не доступныйСоединитесь с целевым приложением, не загружая параметры.
ExtModeTrigDelay
integer (0)
Внешняя Signal & Triggering: текстовое поле DelayЗадайте количество времени (выраженный на шагах базовой ставки), который протекает между триггерным вхождением и запуском сбора данных.
ExtModeTrigDirection
символьный вектор- rising, falling, either
Внешняя Signal & Triggering: меню DirectionЗадайте направление, в котором должен перемещаться сигнал, когда это пересекает пороговое значение.
ExtModeTrigDuration
integer (1000)
Внешняя Signal & Triggering: текстовое поле DurationЗадайте количество шагов базовой ставки, для которых режим external mode к данным логов после триггерного события.
ExtModeTrigDurationFloating
символьный вектор- integer (auto)
Панель управления Режима external mode: текстовое поле DurationЗадайте длительность для плавания осциллографов. Если auto задан, значение ExtModeTrigDuration используется.
ExtModeTrigElement
символьный вектор- integer, any, last
Внешняя Signal & Triggering: текстовое поле ElementУкажите элементы входного порта заданного триггерного блока, который может заставить триггер стрелять.
ExtModeTrigHoldOff
integer (0)
Внешняя Signal & Triggering: текстовое поле Hold-offЗадайте шаги базовой ставки между тем, когда триггерное событие останавливается, и триггер перевооружен.
ExtModeTrigLevel
integer (0)
Внешняя Signal & Triggering: текстовое поле LevelЗадайте пороговое значение, которое триггерный сигнал должен пересечь, чтобы запустить триггер.
ExtModeTrigMode
символьный вектор- normal, oneshot
Внешняя Signal & Triggering: меню ModeЗадайте, должен ли триггер перевооружиться автоматически после каждого триггерного события или должен ли только один буфер данных быть собран каждый раз, когда триггер вооружен.
ExtModeTrigPort
символьный вектор- integer (1), last
Внешняя Signal & Triggering: текстовое поле PortЗадайте входной порт заданного триггерного блока, для которого элементы могут заставить триггер стрелять.
ExtModeTrigType
символьный вектор- manual, signal
Внешняя Signal & Triggering: меню SourceЗадайте, начать ли регистрировать данные, когда триггер вооружен или когда заданный триггерный сигнал удовлетворяет триггерные условия.
ExtModeUploadStatus
символьный вектор- inactive, armed, uploading
Не доступныйВозвратите состояние механизма загрузки режима external mode — неактивный, вооруженный, или загрузка.
ExtModeWriteAllDataToWs
off, on
Включите Архивацию Данных: флажок Write intermediate results to workspaceЗапишите промежуточные результаты в рабочую область.

Анимационные диаграммы Stateflow в режиме external mode

Если у вас есть Stateflow®, можно анимировать график в режиме external mode. В режиме external mode можно анимировать состояния в графике, и просмотреть сигналы тестовой точки в плавающем осциллографе или предупредить о средстве просмотра.

Анимационные состояния во время симуляции в режиме external mode

Анимировать состояния в графике в режиме external mode:

  1. Загрузите график, который вы хотите анимировать к целевой машине.

  2. Откройте диалоговое окно Model Configuration Parameters.

  3. В левой Избранной панели выберите Code Generation > Interface.

  4. В разделе Data exchange interface выберите External mode и нажмите OK.

  5. В Редакторе Simulink выберите Code> External Mode Control Panel.

  6. В диалоговом окне External Mode Control Panel нажмите Signal & Triggering.

  7. В диалоговом окне External Signal & Triggering, установленном эти параметры.

    \in:Выбор:
    Панель выбора сигналаСтройте диаграмму вы хотите анимировать
    Инициируйте панельФлажок Arm when connecting to target
    Инициируйте панельnormal из выпадающего меню в поле Mode
  8. Создайте модель, чтобы сгенерировать исполняемый файл.

  9. Запустите цель в фоновом режиме. В посдказке MATLAB введите:

    !model_name.exe -w &

    Например, если именем вашей модели является my_control_sys, введите эту команду:

    !my_control_sys.exe -w &

    -w позволяет целевому коду ожидать связи модели Simulink.

  10. В Редакторе моделей выберите Simulation> Mode> External, и затем выберите Simulation> Connect to Target.

  11. Запустите симуляцию. График подсвечивает состояния, как они выполняются.

Просмотрите данные о тестовой точке в плавании осциллографов и средств просмотра сигнала

Когда вы моделируете график в режиме external mode, можно определять данные о графике локального осциллографа быть тестовыми точками и просматривать данные о тестовой точке в плавании осциллографов и средств просмотра сигнала.

Просмотреть данные о тестовой точке во время симуляции в режиме external mode:

  1. Откройте Model Explorer, и для каждых данных вы хотите просмотреть, выполнить эти шаги:

    1. В средней панели Contents выберите или локальные данные состояния интереса.

    2. В правильной панели Dialog выберите вкладку Logging и установите флажок Test point.

  2. От плавающего осциллографа или средства просмотра сигнала, кликните по кнопке выбора сигнала:

    Селекторное диалоговое окно Сигнала открывается.

  3. В Селекторной панели Model hierarchy Сигнала выберите график.

  4. В меню Signal Selector List contents выберите Testpointed/Logged signals only и затем выберите сигналы, которые вы хотите просмотреть.

  5. Моделируйте модель в режиме external mode, как описано в Анимационных состояниях Во время Симуляции в Режиме external mode.

    Осциллограф или средство просмотра отображают значения сигналов тестовой точки, когда симуляция запускается.

Для получения дополнительной информации смотрите Поведение Осциллографов и Средств просмотра с Быстрым Режимом Accelerator (Simulink).

TCP/IP и Последовательные Ограничения Режима external mode

ФункцияДетали
Изменение параметров

В целом вы не можете изменить параметр при выполнении так результаты в изменении в структуре модели. Например, вы не можете измениться

  • Количество состояний, входных параметров или выходных параметров блока

  • Шаг расчета или количество шагов расчета

  • Алгоритм интегрирования для непрерывных систем

  • Имя модели или блока

  • Параметры к блоку Fcn

Если вы вносите эти изменения в блок-схему, то необходимо восстановить программу с недавно сгенерированным кодом.

Можно изменить параметры в передаточной функции и блоки представления пространства состояний в особенных методах:

  • Параметры (числитель и полиномы знаменателя) для Передачи, Fcn (непрерывный и дискретный) и Дискретные блоки Фильтра может быть изменен (как долго, когда количество состояний не изменяется).

  • Нулевые записи в Пространстве состояний и Нулевом полюсе (и непрерывный и дискретный) блоки в заданных пользователями или вычисленных параметрах (то есть, A, B, C, и матрицы D, полученные нулевым полюсным к преобразованию пространства состояний), не могут быть изменены, если внешняя симуляция запускается.

  • В блоке State-Space, если вы задаете матрицы в управляемой канонической реализации, затем позволены все изменения в A, B, C, D матрицы, которые сохраняют эту реализацию и размерности матриц.

Если Диаграмма Simulink не совпадает с внешней программой, Simulink производит ошибку при утверждении, что контрольные суммы не соответствуют. Контрольные суммы учитывают топ-моделей, но не модели, на которые ссылаются. Используйте обновленную блок-схему, чтобы восстановить целевое приложение.

Загрузка данных

Загрузка значений данных для фиксированных точек или перечислимых типов к параметрам рабочей области не поддержана.

Загрузка сигналов переменного размера

Загрузка сигналов переменного размера не поддержана для этих целей:

  • Simulink Real-Time™

  • Instruments™ C2000™ Техаса

Отображение значения сигналов в симуляции

Графический дисплей значений сигналов в моделях (описанный в Отображающихся Значениях сигналов в Диаграммах модели (Simulink)) не поддержан. Например, вы не можете использовать выборы пункта меню Data Display in Simulation Show Value Labels When Hovering, Toggle Value Labels When Clicked и Show Value Label of Selected Port.

Настраиваемые параметры структуры

Загрузка или загрузка настраиваемых параметров структуры не поддержаны.

Чистый целочисленный код

Чистый целочисленный код поддерживается.

Если вы не задаете -tf finalTime в команде выполнения, целевое приложение запускает сгенерированный типовой кодекс неопределенно, игнорируя StopTime.

Если вы задаете -tf finalTime в команде выполнения:

  • Значение finalTime представляет такты системных часов базовой ставки, не секунды.

  • Максимальным значением для finalTime, в метках деления, является MAX_int32_T.

  • Когда 16-битное или 32-битное переполнение счетчика метки деления, время симуляции в Осциллографе блокирует возвраты к нулю.

Архивация данных

Для архивации данных к диску поддерживается Осциллограф и К блокам Рабочей области. Однако другие осциллографы не поддержаны для архивации данных. Например, вы не можете использовать Плавающие блоки Осциллографа или менеджера по Сигналу и Осциллографу, которому средство просмотра возражает, чтобы заархивировать данные.

Осциллографы в моделях, на которые ссылаются,

В иерархии модели, если топ-модель моделирует в режиме external mode и модели, на которую ссылаются, моделирует в нормальном или режиме Accelerator, осциллографы в модели, на которую ссылаются, не отображены.

Однако, если топ-модель изменяется, чтобы моделировать в режиме normal mode, поведение осциллографов в моделях, на которые ссылаются, отличается между нормальным и режимом Accelerator. Осциллографы в симуляции модели, на которую ссылаются, в режиме normal mode отображены, в то время как осциллографы в симуляции модели, на которую ссылаются, в режиме Accelerator не отображены.

Время начала симуляции

Ненулевая симуляция запускается, времена не поддержаны. В диалоговом окне Configuration Parameters, панели Solver, наборе Start time отпуска к значению по умолчанию 0.0.

Ограниченные по объему файлом данные

Ограниченные по объему файлом данные не поддержаны, например, элементы данных, к которым вы применяете встроенный пользовательский класс памяти, FileScope. Ограниченные по объему файлом данные не внешне доступны.

Сигналы с пользовательскими классами памяти

Загрузка сигналов с пользовательскими классами памяти (CSC) не поддержана.

Использование операторов printf

Чтобы показать сообщения об ошибке целевого приложения и информационные сообщения на отображении целевого компьютера, можно использовать вызовы printf. Для некоторого целевого компьютера использование операторов printf может увеличить размер двоичного файла режима external mode. Чтобы отключить вызовы printf, задайте макроопределение препроцессора EXTMODE_DISABLEPRINTF для вашего компилятора целевого приложения.

Параметры командной строки

Можно использовать параметры командной строки для запуска целевых приложений. Эти ограничения применяются:

  • Парсинг параметров командной строки требует функции sscanf, которая увеличивает размер программы для некоторого целевого компьютера.

  • Некоторые целевые приложения не принимают параметры командной строки.

Если ваш целевой компьютер не поддерживает парсинг параметров командной строки, задайте макроопределение препроцессора EXTMODE_DISABLE_ARGS_PROCESSING=1 для вашего компилятора целевого приложения.

Чтобы заменить опцию -w, можно использовать эту команду, чтобы указать, что целевое приложение входит и остается в состоянии ожидания, пока это не получает сообщение Подключения от Simulink:

set_param(modelName, 'OnTargetWaitForStart', 'on');
Процесс сборки предоставляет необходимую возможность (-DON_TARGET_WAIT_FOR_START=1) к компилятору.

Главная строкой генерация кода

Код, сгенерированный с главным строкой форматом, не поддержан.

Похожие темы