Используйте строки в нескольких приложениях когда это необходимо, чтобы передать и управлять текстом. Например, при моделировании топливной системы управления, вместо того, чтобы использовать перечисленные данные, чтобы смоделировать топливные уровни, можно использовать строки как "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®
Сгенерированный код
Ограничения
Эта тема также включает простые примеры, иллюстрирующие, как использовать блоки строки. Примеры в этой теме включают отображение имен блока с Display>, Hide Automatic Names включил. Например, можно использовать блоки строки, чтобы отобразить и извлечь координатные данные и найти шаблоны в строках.
Чтобы работать со строками в вашей модели, используйте эту таблицу:
Действие | Блок |
---|---|
Преобразуйте uint8 вектор в сигнал строки. | |
Составьте сигнал выводимой строки на основе параметра Format и входных сигналов. | |
Отсканируйте входную строку и преобразуйте ее в сигналы на формат, заданный параметром Format. | |
Сравните две входных строки. | |
Конкатенация входных строк, чтобы сформировать одну выводимую строку. | |
Выведите строку, заданную параметром String. | |
Возвратите индекс первого вхождения строки образца sub в текстовой строке str. | |
Выведите количество символов во входной строке. | |
Преобразуйте сигнал строки в uint8 вектор. | |
Преобразуйте сигнал строки удвоить сигнал. | |
Преобразуйте сигнал строки в один сигнал. | |
Преобразуйте входную строку в перечислимый сигнал. | |
Извлеките подстроку от сигнала строки. | |
Преобразуйте входной сигнал в сигнал строки. |
Эти блоки Simulink поддерживают строки.
Блок | Примечания |
---|---|
Соедините шиной присвоение | Невиртуальный и виртуальный. |
Соедините шиной создателя | Невиртуальный и виртуальный. |
Селектор шины | Невиртуальный и виртуальный. |
Память хранилища данных | — |
Чтение хранилища данных | — |
Запись хранилища данных | — |
Копия типа данных | — |
Отображение | Отобразите строки с двойными кавычками. |
От | — |
Из рабочей области | Интерполяция данных не поддержана. |
Goto | — |
Земля | Основывайтесь значением является |
Inport | Включая корневой уровень. |
Ручной различный приемник | — |
Ручной различный источник | — |
Ручной переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическая строка. |
Слияние | — |
Модель | — |
Многопортовый переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическая строка. |
Выходной порт | Включая корневой уровень. |
Зонд | — |
Редактор сигнала | Интерполяция данных не поддержана. |
Спецификация сигнала | — |
Подсистема (все изменения) | — |
Переключатель | Никакие смешанные числовые и строковые типы. Если существует несколько строк, строка использования блока с самым большим размером или динамическим. |
Оконечная функция | — |
Терминатор | — |
Различный источник | — |
Различная модель | — |
Различная подсистема | — |
Width | — |
Чтобы использовать текстовые данные для поведения диаграммы управления и управлять текстом, чтобы создать естественный язык вывод в Stateflow, используйте строки в графиках языка действия C. Stateflow обеспечивает операторы, чтобы управлять строками. Для получения дополнительной информации смотрите, Управляют Текстовой информацией при помощи Строк (Stateflow).
Чтобы задать строковые константы, используйте блок String Constant. Не используйте блок Constant, который не принимает строки. В блоке String Constant введите строку с двойными кавычками, такими как "Hello!"
в параметре String. Это совпадает с добавлением числовой константы в параметре Constant value блока Constant.
Строки Simulink автоматически имеют дело с завершением строки. Не используйте пустой терминатор строки в конце строки. Если Simulink обнаруживает нулевой символ где-нибудь в строке, он генерирует ошибку. Simulink обрабатывает строки во время симуляции и генерации кода можно следующим образом:
Во время симуляции модель моделирует. Вы не должны делать ничего больше.
Во время генерации кода C программное обеспечение добавляет пустой терминатор строки в конец строки. Например, если buffer size строки равняется 10, и действительным значением строки является "AB"
, третий символ в сгенерированном коде является пустым терминатором строки.
По мере необходимости представьте блоки в виде строки, создают и используют типы данных 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
в это поле. Можно создать смешанное числовое использование и представить объекты шины в виде строки для элементов шины. Для получения дополнительной информации о создании объектов шины и элементов с Редактором Шины, смотрите, Создают Объекты Шины с Редактором Шины.
Во время генерации кода программное обеспечение добавляет пустой терминатор строки в конец строки. Например, если 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 создает строку от нескольких, представляют в виде строки и числовые объединенные входные параметры. Используйте параметр Format, чтобы отформатировать вывод каждого входа, одного оператора формата для каждого входа. Каждый оператор формата запускается со знака процента, %
, сопровождаемого символом преобразования, например, %f
генерирует фиксированную точку вывод. Чтобы добавить строку вывод, можно также добавить дополнительные символы в спецификацию формата, чтобы появиться в выводе.
Добавьте эти блоки в модель:
Шесть констант
Каждый составляет строку
Одна строка сканирования
Семь отображаются
Измените Постоянные значения признака группы на показанных и соедините блоки.
В параметре Format для Составить блоков Строки введите эти спецификации формата:
'%g° %g'' %f" N, %g° %g'' %f" W'
%g
и операторы форматирования %f
преобразовывают числовые входные параметры в значения с плавающей точкой. %g
является более компактной версией %f
.
Символ степени (°), N, W, и '
является дополнительными строками, чтобы отобразиться в выводимой строке.
Блок Compose String комбинирует вывод во входном порядке, форматы каждый вход согласно его оператору формата, добавляет дополнительные строки и выводит строку, отформатированную, как направлено и окружено двойными кавычками ("
).
В параметре Format для блока 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 выберите параметр Output string from 'idx' to end. Установка этого параметра извлекает строку от входа местоположения в 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
, чтобы обнаружить, если топливо является низким, модель использует блоки Перечислимой константы и Оператора отношения.
Вместо этого можно использовать Строковую константу, и Строка Сравнивают блоки путем установки:
Строковая константа
параметр String к 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, чтобы преобразовать строку в соответствующую перечислимую величину. В этой модели строка заголовка "китайский юань" преобразована в NMEASentence. Китайский юань.
Проанализируйте текстовое сообщение с помощью блока 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. Сигнал и Simulink. Блоки параметра не поддерживают строки. | — |
Блок Data Type Conversion | Не используйте блок Data Type Conversion, чтобы преобразовать в или от строк. | Используйте блоки преобразования строк |
Журналирование невиртуальных шин, которые содержат строковые элементы | Если невиртуальная шина содержит строковый элемент, целая виртуальная шина не может регистрироваться. Можно все еще регистрировать элементы нестроки. | |
К блоку Workspace | Использование строк загрузки К Рабочей области. | Регистрируйте выходной порт использования. |
К блоку File | Использование строк загрузки К Файлу. | — |
Осциллограф и Спектр блоки Анализатора, инструмент Logic Analyzer | Осциллограф и Спектр блоки Анализатора и инструмент Logic Analyzer не отображают строки. | Используйте отображение, инспектора данных моделирования или Sequence Viewer в Stateflow. |
S-функции | S-функции не поддерживают тип данных String. | — |
Составьте строку | Отсканируйте строку | Строка выдерживает сравнение | Представьте конкатенацию в виде строки | Строковая константа | Представьте в виде строки находят | Длина строки | Представьте в виде строки к ASCII | Представьте в виде строки к перечислению | Представьте в виде строки, чтобы удвоиться | Представьте в виде строки к одному | Подстрока | Представлять в виде строки | stringtype