exponenta event banner

Управление текстовой информацией с помощью строк

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

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

В Stateflow строка - это фрагмент текста, окруженный кавычками ("..." или '...'). Например, эта диаграмма принимает строковые данные в качестве входных. На основе этих входных данных диаграмма выводит соответствующую строку.

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

Кроме того, можно создать строковые данные с максимальным количеством символов. Задание символа строки с размером буфера n символы, установите в поле Type значение stringtype(n). Текст строки может быть короче буфера, но если он превышает размер буфера, то текст в строке усекается. Например, если символ output в предыдущей диаграмме указан как stringtype(10), то его значение в состоянии On усечено до "All system". В зависимости от параметра конфигурации Проверка усечения строки можно остановить моделирование и диагностировать усечение данных строки.

Проверка усечения строкОписание
errorМоделирование прекращается с ошибкой.
warningСтрока усечена. Моделирование продолжается с предупреждением.
noneСтрока усечена. Моделирование продолжается без ошибок или предупреждений.

Примечание

В отличие от C или C++, Stateflow интерпретирует escape-последовательности как литеральные символы. Например, строка "\n" содержит два символа, обратную косую черту и n, а не символ новой строки.

Вычисление со строками

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

ОператорСинтаксисОписаниеПример
strcpy

strcpy(dest,src)

Альтернативный способ выполнения dest = src.

Назначить строковые данные s1, s2, и s3.

strcpy(s1,'So long');
strcpy(s2,"Farewell");
strcpy(s3,s2);

dest = src

Присваивает строку src кому dest.

Назначить строковые данные s4, s5, и s6.

s4 = 'Auf Wiedersehen';
s5 = "Adieu";
s6 = s4;
strcat

dest = strcat(s1,...,sN)

Конкатенация строк s1,...,sN.

Конкатенация строк для формирования "Stateflow".

s1 = "State";
s2 = "flow";
dest = strcat(s1,s2);

substr

dest = substr(str,i,n)

Возвращает подстроку длины n начиная с i-й символ строки str. Использовать индексирование на основе нуля.

Извлечь подстроку "Stateflow" от более длинной струны.

str = "Stateflow, rule the waves!";
dest = substr(str,0,9);

tostring

dest = tostring(X)

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

Преобразование числового значения в строку "1.2345".

dest = tostring(1.2345);

Преобразовать логическое значение в строку "true".

dest = tostring(1==1);

Преобразовать перечисленное значение в строку "RED".

dest = tostring(RED);

strcmp

tf = strcmp(s1,s2)

Сравнение строк s1 и s2. Прибыль 0 если две строки идентичны. В противном случае возвращает ненулевое целое число.

  • Знак выходного значения зависит от лексикографического порядка входных строк s1 и s2.

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

Строки считаются идентичными, если они имеют одинаковый размер и содержимое.

Этот оператор согласуется с функцией библиотеки C strcmp или функция C++ string.compare, в зависимости от компилятора, выбранного для создания кода. Оператор ведет себя иначе, чем функция strcmp в MATLAB ®.

Возвращает значение, равное 0 (строки равны).

tf = strcmp("abc","abc");

Возвращает ненулевое значение (строки не равны).

tf = strcmp("abc","abcd");

s1 == s2

Альтернативный способ выполнения strcmp(s1,s2) == 0.

Возвращает значение, равное true.

"abc" == "abc";

s1 != s2

Альтернативный способ выполнения strcmp(s1,s2) != 0.

Возвращает значение, равное true.

"abc" != "abcd";

tf = strcmp(s1,s2,n)

Прибыль 0 если первый n символы в s1 и s2 идентичны.

Возвращает значение, равное 0 (подстроки равны).

tf = strcmp("abc","abcd",3);

strlen

L = strlen(str)

Возвращает число символов в строке str.

Возвращает значение, равное 9.

L = strlen("Stateflow");

str2double

X = str2double(str)

Преобразует текст в строку str к значению двойной точности.

str содержит текст, представляющий число. Текст, представляющий число, может содержать:

  • Цифры

  • Десятичная точка

  • Продвижение + или - знак

  • Один e перед мощностью 10 масштабного коэффициента

Если str2double не может преобразовать текст в число, то он возвращает NaN значение.

Возвращает значение, равное -12.345.

X = str2double("-12.345");

Возвращает значение, равное 123400.

X = str2double("1.234e5");

str2ascii

A = str2ascii(str,n)

Возвращает массив типа uint8 содержащий значения ASCII для первого n символы в str, где n является положительным целым числом. Использование переменных или выражений для n не поддерживается.

Вернуть uint8 множество {72,101,108,108,111}.

A = str2ascii("Hello",5);

ascii2str

dest = ascii2str(A)

Преобразование значений ASCII в массиве A типа uint8 в строку.

Возвращаемая строка "Hi!".

A[0] = 72;
A[1] = 105;
A[2] = 33;
dest = ascii2str(A);

Где использовать строки

Используйте строковые данные на следующих уровнях иерархии Stateflow:

  • Диаграмма

  • Поддиаграмма

  • Государство

Использовать строковые данные в качестве аргументов для:

  • Действия состояния

  • Условия и переходные действия

  • Графические функции

  • Функции Simulink ®

  • Функции таблицы истинности, использующие C в качестве языка действий

Если установлен Simulink Coder™, можно использовать строковые данные для моделирования и создания кода.

См. также

| | | | | | | |

Связанные темы