Строки 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 к блоку String возвращает, как оставлено octals символы в области значений набора Unicode 0000 к 001F и 007F-009F.

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

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

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

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

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

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

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

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

Эта тема также включает простые примеры, иллюстрирующие, как использовать блоки строки. Примеры в этой теме включают отображение имен блока с Отображением>, Скрываются, Автоматические Имена включили. Например, можно использовать блоки строки, чтобы отобразить и извлечь координатные данные и найти шаблоны в строках.

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

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

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

ASCII, чтобы представить в виде строки

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

Составьте строку

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

Отсканируйте строку

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

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

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

Представьте конкатенацию в виде строки

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

Строковая константа

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

Представьте в виде строки находят

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

Длина строки

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

Представьте в виде строки к ASCII

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

Представьте в виде строки, чтобы удвоиться

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

Представьте в виде строки к единственному

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

Представьте в виде строки к перечислению

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

Подстрока

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

Представлять в виде строки

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

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

Соедините шиной присвоение

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

Соедините шиной создателя

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

Селектор шины

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

Память хранилища данных

Чтение хранилища данных

Запись хранилища данных

Копия типа данных

Отображение

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

От

Из рабочей области

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

Goto

Земля

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

Inport

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

Ручной различный приемник

Ручной различный источник

Ручной переключатель

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

Слияние

Модель

Образцовые варианты

Многопортовый переключатель

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

Выходной порт

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

Зонд

Редактор сигнала

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

Спецификация сигнала

Подсистема (все изменения)

Переключатель

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

Оконечная функция

Терминатор

Различный источник

Различная подсистема

Width

Simulink Strings и Stateflow

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

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

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

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

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

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

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

Тип данных String

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

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

  • Используйте тип Выходных данных или параметр Типа данных на вкладке 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, чтобы создать строку с набором параметра типа Выходных данных к stringtype(31) создает тип данных String str31. 31 максимальное количество символов, которые может иметь строка.

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

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

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

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

  • Строки представлены как фиксированный размер массивы char_T.

  • Представьте инварианты в виде строки (параметры, или сигналы) сгенерированы как C-стиль дважды заключенные в кавычки строки.

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

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

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

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

Представьте в виде строки к ASCII

Вектор Uint8 сигнализирует, чтобы представить сигнал в виде строки

ASCII, чтобы представить в виде строки

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

Представьте в виде строки, чтобы удвоиться

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

Представьте в виде строки к единственному

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

Представьте в виде строки к перечислению

Входной сигнал, чтобы представить сигнал в виде строки

Представлять в виде строки

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

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

    • Строковая константа

    • Представьте в виде строки к ASCII

    • ASCII, чтобы представить в виде строки

    • Два блока Отображения

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

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

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

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

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

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

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

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

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

    • Строковая константа

    • Представьте в виде строки к перечислению

    • Отображение

  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.

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

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

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

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

    • Шесть констант

    • Каждый составляет строку

    • Одна строка сканирования

    • Семь отображаются

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

  3. В параметре Формата для Составить блоков Строки введите эти спецификации формата:

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

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

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

  4. В параметре Формата для блока Scan String введите эти спецификации формата:

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

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

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

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

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

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

    • Две строковых константы

    • Представьте в виде строки находят

    • Одно отображение

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

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

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

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

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

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

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

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

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

  2. В блоке Substring выберите Выводимую строку из 'idx', чтобы закончить параметр. Установка этого параметра извлекает строку от входного параметра местоположения в idx порте в конец строки.

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

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

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

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

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

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

  • Создает две строки, "beginning middle end" и "middle", с помощью блоков Строковой константы.

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

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

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

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

Чтобы видеть местоположения символов всюду по модели, добавьте один блок Display, каждый к выводу Строки Находит и блоки Длины строки и моделирует его.

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

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

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

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

В sldemo_fuelsys/fuel_rate_control/airflow_calc, чтобы обнаружить, если топливо является низким, модель использует блоки Перечислимой константы и Оператора отношения.

Вместо этого можно использовать Строковую константу, и Строка Сравнивают блоки путем установки:

  • Строковый параметр Строковой константы к LOW.

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

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

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

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

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

Обзор

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

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

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

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

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

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

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

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

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

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

StringArray

Массивы строк не поддержаны.

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

Символы Unicode

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

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

Быстрый акселератор и режимы external mode

Быстрый акселератор и моделирование режима external mode не поддерживают строки Simulink.

Используйте другой режим, такой как режим Accelerator.

Функция MATLAB, Система MATLAB, S-функция MATLAB, Stateflow график MATLAB

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

Постоянное, начальное условие

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

Блок Use String Constant.

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

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

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

Simulink. Сигнал, Simulink. Параметр

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

Блок Data Type Conversion

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

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

Журналирование невиртуальных шин, которые содержат строковые элементы

Если невиртуальная шина содержит строковый элемент, целая виртуальная шина не может регистрироваться. Можно все еще регистрировать элементы нестроки.

 

К блоку Workspace

Использование строк загрузки К Рабочей области.

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

К блоку File

Использование строк загрузки К Файлу.

Осциллограф и Спектр блоки Анализатора, инструмент Logic Analyzer

Осциллограф и Спектр блоки Анализатора и инструмент Logic Analyzer не отображают строки.

Используйте отображение, моделирование Data Inspector или средство просмотра последовательности в Stateflow.

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

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

Похожие темы

Была ли эта тема полезной?