Строки Simulink

Используйте строки в нескольких приложениях, когда это необходимо, чтобы передать и управлять текстом. Например, при моделировании топливной системы управления, вместо того, чтобы использовать перечисленные данные, чтобы смоделировать топливные уровни, можно использовать строки как "LOW" или "EMPTY". Строки Simulink® совместимы со строками MATLAB®.

Строки Simulink являются встроенным типом данных сигнала. Они появляются в Редакторе Simulink как "strN" (например, строка с максимальной продолжительностью символов N) или "строка" для строк без максимальной длины (динамические строки). Длины строки могут лежать в диапазоне от 1 до 32 766 символов.

Строчные сигналы Simulink по сути дискретны. Если ваш строчный сигнал имеет время непрерывной выборки, модель генерирует ошибку во время компиляции.

Simulink обрабатывает строковые переменные и выражения, такие как "a" + "b", тот же способ, которым это обрабатывает числовые переменные. Значение строковой переменной может быть и вектором символов и строкой MATLAB. Строковые переменные могут существовать в основе, модели и рабочих областях маски.

Строковые литералы заданы с двойными кавычками ("Hello") или одинарные кавычки ('Hello'). Чтобы быть сопоставимыми со строками MATLAB, используйте двойные кавычки. Строки появляются на портах и в блоке Display с двойными кавычками.

Строки Simulink поддерживают 256 символов ISO/IEC 8859-1 набор символов. Эти символы являются первыми 256 кодовыми точками Unicode. Simulink не поддерживает первый символьный char(0) ("NULL") и возвращает ошибку, если строка содержит этот символ.

Когда символ не может быть отображен, блок хранит фактическую информацию и выводит символ ESC со связанным восьмеричным значением для символа. Например, управляющий символ десятичного значения для BREAK PERMITTED HERE 130. Блок отображает этот управляющий символ как завершенный восьмеричный \202. Блок ASCII to String возвращает, как оставлено octals символы в области значений набора Unicode 0000 к 001F и 007F-009F.

Эта тема описывает, как использовать строки в Simulink, включая:

  • Список доступной строки блокируется и блокируется конкретный к преобразованиям строк

  • Передача строковых констант в другие блоки строки

  • Нулевые символы в строках

  • Строки без максимальной длины

  • Взаимодействия с Stateflow®

  • Сгенерированный код

  • Ограничения

Эта тема также включает простые примеры, иллюстрирующие, как использовать блоки строки. Примеры в этой теме включают отображение имен блока. Чтобы управлять отображением имен блока, на вкладке Format, выбирают Auto> Hide Automatic Block Names. Например, можно использовать блоки строки, чтобы отобразить и извлечь координатные данные и найти шаблоны в строках.

Чтобы работать со строками в вашей модели, используйте эту таблицу:

ДействиеБлок

Преобразуйте uint8 вектор в строчный сигнал.

ASCII to String

Составьте сигнал выводимой строки на основе параметра Format и входных сигналов.

Compose String

Отсканируйте входную строку и преобразуйте ее в сигналы на формат, заданный параметром Format.

Scan String

Сравните две входных строки.

String Compare

Конкатенация входных строк, чтобы сформировать одну выводимую строку.

String Concatenate

Выведите строку, заданную параметром String.

String Constant

Возвратите индекс первого вхождения строки образца sub в текстовой строке str.

String Find

Выведите количество символов во входной строке.

String Length

Преобразуйте строчный сигнал в uint8 вектор.

String to ASCII

Преобразуйте строчный сигнал в сигнал double.

String to Double

Преобразуйте строчный сигнал в один сигнал.

String to Single

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

String to Enum

Извлеките подстроку из строчного сигнала.

Substring

Преобразуйте входной сигнал в строчный сигнал.

To String

Эти блоки Simulink поддерживают строки.

БлокПримечания

Bus Assignment

Невиртуальный и виртуальный.

Bus Creator

Невиртуальный и виртуальный.

Bus Selector

Невиртуальный и виртуальный.

Data Store Memory

Data Store Read

Data Store Write

Data Type Duplicate

Display

Отобразите строки с двойными кавычками.

From

From Workspace

Интерполяция данных не поддерживается.

Goto

Ground

Основывайтесь значением является "" (пустая строка).

Inport

Включая корневой уровень.

Manual Variant Sink

Manual Variant Source

Manual Switch

Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическая строка.

MATLAB Function

Merge

Model

Multiport Switch

Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическая строка.

Outport

Включая корневой уровень.

Probe

Signal Editor

Интерполяция данных не поддерживается.

Signal Specification

Subsystem (все изменения)

Switch

Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическим.

Terminate Function

Terminator

Variant Source

Variant Model

Variant Subsystem

Width

Строки Simulink и Stateflow

Чтобы использовать текстовые данные для поведения диаграммы управления и управлять текстом, чтобы создать естественный язык выход в Stateflow, используйте строки в графиках языка действия C. Stateflow обеспечивает операторы, чтобы управлять строками. Для получения дополнительной информации смотрите, Управляют Текстовой информацией при помощи Строк (Stateflow).

Строковые константы

Чтобы задать строковые константы, используйте блок String Constant. Не используйте блок Constant, который не принимает строки. В блоке String Constant введите строку с двойными кавычками, такими как "Hello!" в параметре String. Это совпадает с добавлением числовой константы в параметре Constant value блока Constant.

Строки Simulink и нулевые символы

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

  • В процессе моделирования модель симулирует. Вы не должны делать ничего больше.

  • Во время генерации кода C программное обеспечение добавляет пустой терминатор строки в конец строки. Например, если buffer size строки равняется 10, и действительным значением строки является "AB", третий символ в сгенерированном коде является пустым терминатором строки.

Тип данных String

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

Чтобы создать типы данных String для блоков, которые поддерживают строки, вы можете:

  • Используйте Output data type или параметр Data type на вкладке Signal Attributes блока Simulink.

    • Чтобы создать тип данных String без максимальной продолжительности символов, задайте string. Это действие создает динамическую строку.

    • Создать тип данных String с максимальной продолжительностью символов, таких как 100, войти stringtype(100). Можно также использовать stringtype функция на командной строке MATLAB, чтобы создать тип данных String.

  • Используйте set_param функция с OutDataTypeStr параметр, например:

    set_param(gcb,'OutDataTypeStr','stringtype(100)')

    Эта функция создает объект типа данных String продолжительность имеющая 100 символов. Длины строкового типа могут лежать в диапазоне от 1 до 32 766 символов, включительно.

Например, с помощью блока String Constant, чтобы создать строку с набором параметров Output data type к stringtype(31) создает тип данных String str31. 31 максимальное количество символов, которые может иметь строка.

Строки в объектах шины

Чтобы сконфигурировать элемент объекта шины принять строки с помощью Редактора Шины, в параметре DataType элемента шины, вводят строковый тип. Например, чтобы задать тип данных String, максимальная продолжительность которого символов равняется 10, введите stringtype(10). Параметр Mode обновляется соответственно. Чтобы задать динамический сигнал с переменной длиной, введите string в этом поле. Можно создать смешанное числовое использование и представить объекты шины в виде строки для элементов шины. Для получения дополнительной информации о создании объектов шины и элементов с Редактором Шины, смотрите, Создают и Задают Объекты Simulink.Bus.

Строки и сгенерированный код

Рассмотрите эти примечания для строк, и сгенерировал C и C++ код.

Различия между симуляцией и сгенерированным C Код для динамического типа данных String

Симуляция блоков, которые используют динамический тип данных String, отличается от сгенерированного C код этими способами:

  • Сигналы с string тип данных имеет динамические размеры в процессе моделирования. Другими словами, размер строки может варьироваться между 0 и 32766. Однако в сгенерированном C код, кодер хранит строки как фиксированный размер char_T массивы. Поэтому размер строки ограничивается фиксированным buffer size в сгенерированном C код. Программное обеспечение обрезает дополнительные символы и вставляет пустой терминатор строки в конце (например, в выходе блока String Concatenate).

  • Кодер генерирует инварианты строки (параметры или сигналы) как C- разработайте дважды заключенные в кавычки строки.

  • Buffer size по умолчанию для сигнала с типом данных String составляет 256 байтов (содержит самое большее 255 8-битных символов ASCII). Чтобы изменить этот buffer size, используйте Buffer size динамически измеренной строки (байты) (Simulink Coder) параметр конфигурации.

  • Чтобы заменить установку всей модели для отдельного строчного сигнала, используйте stringtype(N) как тип данных сигнала. Сигналы с этим типом данных выделяются буфер N+1 байты в сгенерированном C код (символы N плюс один пустой терминатор строки).

  • Нет никакого различия между симуляцией и не сгенерировало C++ код, когда строки хранятся как std::string объекты, которые имеют то же динамическое поведение как симуляция.

C++ Библиотека строки генерации кода

Для C++ генерация кода, std::string библиотека доступна для основанной на ERT цели с лицензией Embedded Coder™. Для получения дополнительной информации смотрите, Генерируют Код для Блоков Строки при помощи Стандарта Библиотека Строки C++ (Embedded Coder).

Преобразования типа данных String

Вы не можете использовать блок Data Type Conversion, чтобы преобразовать типы данных String в другие типы данных и с другой стороны. Вместо этого используйте эти блоки преобразования строк.

ПреобразовыватьБлок

Строчный сигнал к uint8 векторному сигналу при сохранении символов ASCII

String To ASCII

Вектор Uint8 сигнализирует к строчному сигналу

ASCII to String

Строчный сигнал к числовому сигналу удваивает тип данных

String to Double

Строчный сигнал к числовому одному типу данных сигнала

String to Single

Строчный сигнал к перечислимому типу данных сигнала

String To Enum

Входной сигнал к строчному сигналу

To String

Преобразуйте строку в ASCII и Назад представлять в виде строки

  1. Добавьте эти блоки в модель:

    • String Constant

    • String to ASCII

    • ASCII to String

    • Два блока Display

  2. Соедините блоки как показано.

  3. В блоке String Constant введите строку, такую как "Hello!".

  4. В блоке String to ASCII измените максимальный размер строки в 10.

  5. Симулируйте модель и наблюдайте содержимое блоков Display.

    • Display1 показывает Hello! преобразованный в его эквивалентный ASCII. Например, 72 ASCII, эквивалентный из H и 33 ASCII, эквивалентный из !.

    • Display1 заполнил остающееся пространство к максимальной длине строки 10 с нулями (нулевые символы).

    • Отобразитесь показывает Hello! после того, как блок ASCII to String повторно преобразует код ASCII в строку.

Преобразуйте строку в перечислимый тип данных

  1. Добавьте эти блоки в модель:

    • String Constant

    • String to Enum

    • Display

  2. Соедините блоки как показано.

  3. В блоке String Constant введите строку, такую как "Hello!"

  4. Создайте класс перечисления Simulink под названием BasicStrings и сохраните его в текущей папке с именем файла BasicStrings.m, например:

    classdef BasicStrings < Simulink.IntEnumType
    enumeration
        Hello(0)
        Red(1)
        Blue(2) 
        end
    end 
  5. В блоке String to Enum введите класс перечисления как Enum: BasicStrings.

  6. Симулируйте модель и наблюдайте содержимое блока Display.

Отобразите и извлеките координатные данные

В этом примере показано, как можно отформатировать и вывести набор данных как географические координаты с помощью блоков Scan String и Compose String. На основе scanf C и printf функции, Compose String и блоки Scan String похожи в концепции на sprintf и sscanf функции, за первичным исключением, являющимся, что те функции работают с массивами, которые не делают блоки. Для получения дополнительной информации о блоке строки отформатированные символы смотрите Compose String и Scan String.

Блок Compose String создает строку от нескольких, представляют в виде строки и числовые объединенные входные параметры. Используйте параметр Format, чтобы отформатировать выход каждого входа, одного оператора формата для каждого входа. Каждый оператор формата запускается со знака процента, %, сопровождаемый символом преобразования, например, %f генерирует фиксированную точку выход. Чтобы добавить строку выход, можно также добавить дополнительные символы в спецификацию формата, чтобы появиться в выходе.

  1. Добавьте эти блоки в модель:

    • Шесть Constant

    • Один Compose String

    • Один Scan String

    • Семь Display

  2. Измените значения признака группы Constant в показанных и соедините блоки.

  3. В параметре Format для блоков Compose String введите эти технические требования формата:

    '%g° %g'' %f" N, %g° %g'' %f" W'
    • %g и %f форматирующие операторы преобразуют числовые входные параметры в значения с плавающей точкой. %g более компактная версия %f.

    • Символ степени (°), N, W, и ' дополнительные строки должны отобразиться в выводимой строке.

    Блок Compose String комбинирует выход во входном порядке, форматы каждый вход согласно его оператору формата, добавляет дополнительные строки и выводит строку, отформатированную, как направлено и окружено двойными кавычками (").

  4. В параметре Format для блока Scan String введите эти технические требования формата:

    '%g° %g'' %f" N, %g° %g'' %f" W'
    • %g и %f форматирующие операторы преобразуют числовые входные параметры в значения с плавающей точкой. %g более компактная версия %f.

    • Символ степени (°), N, W, и ' дополнительные строки должны отобразиться в выводимой строке.

    Блок Scan String читает свой вход, преобразует его согласно формату, заданному спецификацией преобразования, и возвращает результаты как скаляры. Форматы блока каждый выход согласно его спецификации преобразования. Это сразу игнорирует заданный текст прежде или после спецификатора преобразования.

Найдите шаблоны в строках

Чтобы найти шаблон в строке, используйте блок String Find.

  1. Добавьте эти блоки в модель:

    • Два String Constant

    • String Find

    • Один Display

  2. Соедините блоки как показано.

  3. В первом блоке String Constant введите строку, такую как "Hello!Goodbye!".

    Соединение этого блока к входному порту str блока String Find заставляет блок String Find искать шаблон в этой строке.

  4. Во втором блоке String Constant введите строку (или шаблон), чтобы искать в первой строке String Constant, такой как "Goodbye!".

    Соединение этого блока к входному порту sub средних по блокам, что String Find ищет этот шаблон от входа str.

  5. Симулируйте модель и наблюдайте содержимое блока Display. В данном примере блок отображает 7, который является местоположением буквы G.

Извлеките строку

Чтобы извлечь строку из исходной строки, используйте блок Substring. Этот пример использует модель, описанную в Шаблонах Находки в Строках.

  1. Добавьте блок Substring в модель.

  2. В блоке Substring выберите параметр Output string from 'idx' to end. Установка этого параметра извлекает строку из входа местоположения в idx порте в конец строки.

  3. Соедините новый блок как показано.

  4. Симулируйте модель и наблюдайте содержимое блока Display. В данном примере блок отображает "Goodbye!", который является подстрокой, извлеченной, запуская idx в конец строки.

Получите текст после ключевого слова

Этот пример показывает основную обработку строк с помощью блоков строки Simulink.

Для модели, которая похожа на следующее, симулируйте его.

Заметьте что модель:

  • Создает две строки, "beginning middle end" и "middle", использование блоков String Constant.

  • Ищет первое вхождение "middle" (idx) и добавляет местоположение первой буквы (11) к длине "middle"(7 ). Это использует блоки String Length и String Find.

  • Извлечения из "beginning middle end" подстрока, которая начинает с конца "middle" (idx+string length = 18), который является строкой "end". Это использует блок Substring.

  • Сравнивает расчетное значение "end" с фактической строкой "end" , который возвращает булево значение "1". Это использует блоки String Compare и String Constant.

  • Преобразует булево значение "1" к его эквивалентной строке, "true". Это использует блок To String.

Чтобы видеть местоположения символов в модели, добавьте один блок Display каждый в выход String Find и блоков String Length и симулируйте его.

Измените существующие модели, чтобы использовать строки

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

Например, в более старых моделях, вы, возможно, использовали перечисленные типы данных, чтобы представлять или передать текст в вашей модели. sldemo_fuelsys перечислимые константы в качестве примера в нескольких областях, чтобы работать с текстовыми данными.

В sldemo_fuelsys/fuel_rate_control/control_logic, диаграмма Stateflow использует перечисленные данные, чтобы указать на топливные уровни.

В sldemo_fuelsys/fuel_rate_control/airflow_calc, чтобы обнаружить, если топливо является низким, модель использует блоки Relational Operator и Enumerated Constant .

Вместо этого можно использовать String Constant и блоки String Compare путем установки:

  • Параметр String String Constant к LOW.

  • Используя блок String Compare, чтобы обнаружить, если LOW прибывает из другой части модели.

Вместо того, чтобы удалить все экземпляры перечислимых констант, можно использовать строки в сочетании с перечислимыми константами. Выполнение так позволяет вам инкрементно перемещать свою модель, чтобы использовать строки. В sldemo_fuelsys/fuel_rate_control/fuel_calc/feedforward_fuel_rate, блок Multiport Switch принимает четыре перечислимых ввода данных.

Если порт fuel_mode выводит строку, можно преобразовать ту строку в перечислимый тип данных, чтобы работать с выходом от блоков Constant в этой модели.

Проанализируйте текстовое сообщение GPS NMEA

В этом примере показано, как проанализировать текстовые сообщения в формате GPS NMEA с помощью блоков строки Simulink®.

Обзор

Эта модель показывает, как использовать тип данных String и блоки, обеспеченные Simulink®, чтобы считать входные текстовые сообщения и извлечь числовой и текстовые данные.

Считайте заголовок сообщения и преобразуйте в перечисление

Simulink® обеспечивает блок String To Enum, чтобы преобразовать строку в соответствующую перечислимую величину. В этой модели строка заголовка "китайский юань" преобразована в NMEASentence.RMB.

Проанализируйте текстовое сообщение с помощью блока Scan String

Один способ проанализировать текстовое сообщение состоит в том, чтобы использовать блок Scan String. Это работает как функция sscanf в C и MATLAB®.

Проанализируйте текстовое сообщение с фиксированной шириной поля

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

Ограничения строки Simulink

Эти возможности в настоящее время не поддержаны:

КатегорияОписание ограниченияРабота вокруг

Массив строк

Строковые массивы не поддерживаются.

Используйте строки только в качестве скаляров.

Символы Unicode

Строки Simulink не поддерживают целый набор Unicode.

Строки Simulink поддерживают 256 символов ISO/IEC 8859-1 набор символов (Основное латинское и латинское 1 дополнение). Эти символы являются первыми 256 кодовыми точками Unicode.

MATLAB System, MATLAB S-Function, Stateflow график MATLAB

Пользовательские блоки, созданные с этими блоками, не поддерживают строки.

Constant, Initial Condition

Эти блоки не работают со строками.

Блок Use String Constant.

Управляйте входом Переключателя, Многопортового Переключателя, Случая Переключателя, и Если блоки

Вход управления блока Switch не принимает строки.

Используйте вводы данных этих блоков.

Simulink.Signal, Simulink.Parameter

Simulink.Signal и блоки Simulink.Parameter не поддерживают строки.

Блок Data Type Conversion

Не используйте блок Data Type Conversion, чтобы преобразовать в или от строк.

Используйте блоки преобразования строк

Logging of nonvirtual buses that contain string elements

If a nonvirtual bus contains a string element, the entire virtual bus cannot be logged. You can still log the nonstring elements.

 

Блок To Workspace

Строки загрузки с помощью To Workspace.

Регистрируйте выходной порт использования.

Блок To File

Строки загрузки с помощью To File.

Scope и блоки Spectrum Analyzer, приложение Logic Analyzer

Scope и блоки Spectrum Analyzer и приложение Logic Analyzer не отображают строки.

Используйте Display, Simulation Data Inspector или Sequence Viewer в Stateflow.

S-функции

S-функции не поддерживают тип данных String.

Simulink Real-Time™

Приложения, созданные Simulink Real-Time с помощью C++ в качестве ошибок выходного языка.

Используйте C в качестве выходного языка.

Смотрите также

| | | | | | | | | | | | |

Похожие темы