Используйте строки в нескольких приложениях когда это необходимо, чтобы передать и управлять текстом. Например, при моделировании топливной системы управления, вместо того, чтобы использовать перечисленные данные, чтобы смоделировать топливные уровни, можно использовать строки как "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 вектор в сигнал строки. | |
Составьте сигнал выводимой строки на основе параметра Формата и входных сигналов. | |
Отсканируйте входную строку и преобразуйте ее в сигналы на формат, заданный параметром Формата. | |
Сравните две входных строки. | |
Конкатенация входных строк, чтобы сформировать одну выводимую строку. | |
Выведите строку, заданную Строковым параметром. | |
Возвратите индекс первого возникновения строки образца sub в текстовой строке str. | |
Выведите количество символов во входной строке. | |
Преобразуйте сигнал строки в uint8 вектор. | |
Преобразуйте сигнал строки удвоить сигнал. | |
Преобразуйте сигнал строки в единственный сигнал. | |
Преобразуйте входную строку в перечислимый сигнал. | |
Извлеките подстроку от сигнала строки. | |
Преобразуйте входной сигнал в сигнал строки. |
Эти блоки Simulink поддерживают строки.
Блок | Примечания |
---|---|
Соедините шиной присвоение | Невиртуальный и виртуальный. |
Соедините шиной создателя | Невиртуальный и виртуальный. |
Селектор шины | Невиртуальный и виртуальный. |
Память хранилища данных | — |
Чтение хранилища данных | — |
Запись хранилища данных | — |
Копия типа данных | — |
Отображение | Отобразите строки с двойными кавычками. |
От | — |
Из рабочей области | Интерполяция данных не поддержана. |
Goto | — |
Земля | Основывайтесь значением является |
Inport | Включая корневой уровень. |
Ручной различный приемник | — |
Ручной различный источник | — |
Ручной переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, блочная строка использования с самым большим размером или динамическая строка. |
Слияние | — |
Модель | — |
Образцовые варианты | — |
Многопортовый переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, блочная строка использования с самым большим размером или динамическая строка. |
Выходной порт | Включая корневой уровень. |
Зонд | — |
Редактор сигнала | Интерполяция данных не поддержана. |
Спецификация сигнала | — |
Подсистема (все изменения) | — |
Переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, блочная строка использования с самым большим размером или динамическим. |
Оконечная функция | — |
Терминатор | — |
Различный источник | — |
Различная подсистема | — |
Width | — |
Чтобы использовать текстовые данные, чтобы управлять поведением графика и управлять текстом, чтобы создать естественный язык вывод в Stateflow, используйте строки в графиках языка действия C. Stateflow обеспечивает операторы, чтобы управлять строками. Для получения дополнительной информации смотрите, Управляют Текстовой информацией при помощи Строк (Stateflow).
Чтобы задать строковые константы, используйте блок String Constant. Не используйте блок Constant, который не принимает строки. В блоке String Constant введите строку с двойными кавычками, такими как "Hello!"
в Строковом параметре. Это совпадает с добавлением числовой константы в параметре Постоянного значения блока Constant.
Строки Simulink автоматически имеют дело с завершением строки. Не используйте пустой терминатор строки в конце строки. Если Simulink обнаруживает нулевой символ где-нибудь в строке, он генерирует ошибку. Simulink обрабатывает строки во время моделирования и генерации кода можно следующим образом:
Во время моделирования модель моделирует. Вы не должны делать ничего больше.
Во время генерации кода C программное обеспечение добавляет пустой терминатор строки в конец строки. Например, если buffer size строки равняется 10, и действительным значением строки является "AB"
, третий символ в сгенерированном коде является пустым терминатором строки.
По мере необходимости представьте блоки в виде строки, создают и используют типы данных 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-стиль дважды заключенные в кавычки строки.
Вы не можете использовать блок Data Type Conversion, чтобы преобразовать типы данных String в другие типы данных и с другой стороны. Вместо этого используйте эти блоки преобразования строк.
Преобразовывать | Блок |
---|---|
Сигнал строки к uint8 векторному сигналу при сохранении символов ASCII | |
Вектор Uint8 сигнализирует, чтобы представить сигнал в виде строки | |
Сигнал строки к числовому сигналу удваивает тип данных | |
Сигнал строки к числовому единственному типу данных сигнала | |
Сигнал строки к перечислимому типу данных сигнала | |
Входной сигнал, чтобы представить сигнал в виде строки |
Добавьте эти блоки к модели:
Строковая константа
Представьте в виде строки к ASCII
ASCII, чтобы представить в виде строки
Два блока Отображения
Соедините блоки как показано.
В блоке String Constant введите строку, такую как "Hello!"
.
В блоке String to ASCII измените максимальный размер строки на 10.
Моделируйте модель и наблюдайте содержимое блоков Отображения.
Display1 показывает Hello!
, преобразованный в его эквивалентный ASCII. Например, 72
является ASCII, эквивалентным из H
, и 33
является ASCII, эквивалентным из !
.
Display1 заполнил, остающееся пространство к максимальной длине строки 10 с обнуляет (нулевые символы).
Отобразитесь показывает Hello!
после того, как ASCII к блоку String повторно преобразовывает код ASCII в строку.
Добавьте эти блоки к модели:
Строковая константа
Представьте в виде строки к перечислению
Отображение
Соедините блоки как показано.
В блоке String Constant введите строку, такую как "Hello!"
Создайте класс перечисления Simulink под названием BasicStrings
и сохраните его в текущей папке с именем файла BasicStrings.m
, например:
classdef BasicStrings < Simulink.IntEnumType enumeration Hello(0) Red(1) Blue(2) end end
В блоке String to Enum введите класс перечисления как Enum: BasicStrings
.
Моделируйте модель и наблюдайте содержимое блока Display.
Этот пример показывает, как можно отформатировать и вывести набор данных как географические координаты с помощью Составить блоков Строки Строки и Сканирования. На основе scanf
C и функций printf
, Составить блоки Строки Строки и Сканирования подобны в концепции sprintf
и функциям sscanf
за первичным исключением, являющимся, что те функции работают с массивами, которые не делают блоки. Для получения дополнительной информации о блоке строки отформатированные символы смотрите, Составляют Строку Строки и Сканирования.
Блок Compose String создает строку от нескольких, представляют в виде строки и числовые объединенные входные параметры. Используйте параметр Формата, чтобы отформатировать вывод каждого входного параметра, одного оператора формата для каждого входного параметра. Каждый оператор формата запускается со знака процента, %
, сопровождаемого символом преобразования, например, %f
генерирует фиксированную точку вывод. Чтобы добавить строку вывод, можно также добавить дополнительные символы к спецификации формата, чтобы появиться в выводе.
Добавьте эти блоки к модели:
Шесть констант
Каждый составляет строку
Одна строка сканирования
Семь отображаются
Измените Постоянные значения признака группы на показанных и соедините блоки.
В параметре Формата для Составить блоков Строки введите эти спецификации формата:
'%g° %g'' %f" N, %g° %g'' %f" W'
%g
и операторы форматирования %f
преобразовывают числовые входные параметры в значения с плавающей точкой. %g
является более компактной версией %f
.
Символ градуса (°), N, W, и '
является дополнительными строками, чтобы отобразиться в выводимой строке.
Блок Compose String комбинирует вывод во входном порядке, форматы каждый входной параметр согласно его оператору формата, добавляет дополнительные строки и выводит строку, отформатированную, как направлено и окружено двойными кавычками ("
).
В параметре Формата для блока Scan String введите эти спецификации формата:
'%g° %g'' %f" N, %g° %g'' %f" W'
%g
и операторы форматирования %f
преобразовывают числовые входные параметры в значения с плавающей точкой. %g
является более компактной версией %f
.
Символ градуса (°), N, W, и '
является дополнительными строками, чтобы отобразиться в выводимой строке.
Блок Scan String читает свой входной параметр, преобразовывает его согласно формату, заданному спецификацией преобразования, и возвращает результаты как скаляры. Блочные форматы каждый вывод согласно его спецификации преобразования. Это сразу игнорирует заданный текст прежде или после спецификатора преобразования.
Чтобы найти шаблон в строке, используйте блок String Find.
Добавьте эти блоки к модели:
Две строковых константы
Представьте в виде строки находят
Одно отображение
Соедините блоки как показано.
В первом блоке String Constant введите строку, такую как "Hello!Goodbye!"
.
Соединение этого блока к str входному порту блока String Find заставляет блок String Find, ищут шаблон в этой строке.
Во втором блоке String Constant введите строку (или шаблон), чтобы искать в первой строке Строковой константы, такой как "Goodbye!"
.
Соединение этого блока к sub входному порту средних по блокам, которые Находит Строка, ищет этот шаблон от входного параметра str.
Моделируйте модель и наблюдайте содержимое блока Display. Для этого примера блок отображает 7
, который является местоположением буквы G
.
Чтобы извлечь строку от исходной строки, используйте блок Substring. Этот пример использует модель, описанную в Шаблонах Находки в Строках.
Добавьте блок Substring к модели.
В блоке Substring выберите Выводимую строку из 'idx', чтобы закончить параметр. Установка этого параметра извлекает строку от входного параметра местоположения в idx порте в конец строки.
Соедините новый блок как показано.
Моделируйте модель и наблюдайте содержимое блока 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 с помощью блоков строки Simulink®.
Обзор
Эта модель показывает, как использовать тип данных String и блоки, обеспеченные Simulink®, чтобы считать входные текстовые сообщения и извлечь числовой и текстовые данные.
Считайте заголовок сообщения и преобразуйте в перечисление
Simulink® обеспечивает блок String To Enum, чтобы преобразовать строку в соответствующую перечислимую величину. В этой модели строка заголовка "RMB" преобразована в NMEASentence. RMB.
Проанализируйте текстовое сообщение с помощью блока Scan String
Один способ проанализировать текстовое сообщение состоит в том, чтобы использовать блок Scan String. Это работает как функция sscanf в C и MATLAB®.
Проанализируйте текстовое сообщение с фиксированной шириной поля
Когда текстовое сообщение зафиксировало ширину для каждого поля данных, 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. |
Составьте строку | Отсканируйте строку | Строка выдерживает сравнение | Представьте конкатенацию в виде строки | Строковая константа | Представьте в виде строки находят | Длина строки | Представьте в виде строки к ASCII | Представьте в виде строки к перечислению | Представьте в виде строки, чтобы удвоиться | Представьте в виде строки к единственному | Подстрока | Представлять в виде строки | stringtype