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

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

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

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

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

Также можно создать данные о строке количество имеющее символов. Чтобы задать символ строки с buffer size символов n, установите его поле Type на stringtype(n). Текст строки может быть короче, чем буфер, но если это превышает buffer size, затем текст в строке является усеченным. Например, если символ, output в предыдущем графике задан как stringtype(10), то его значение в On состояния является усеченным к "All system". В зависимости от параметра конфигурации String truncation checking можно остановить симуляцию и диагностировать усечение данных о строке.

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

Примечание

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

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

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

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

dest = src

Присвоения представляют в виде строки src к dest.

Присвоения представляют данные в виде строки к s1 и s2:

s1 = 'hello';
s2 = "good bye";

strcpy(dest,src)

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

Присвоения представляют данные в виде строки к s3 и s4:

strcpy(s3,'howdy');
strcpy(s4,"so long");

strcat

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

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

Конкатенации строк, чтобы сформировать "Stateflow":

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

substr

dest = substr(str,i,n)

Возвращает подстроку длины n, запускающийся в i-th символ строки 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.

Возвращает значение истины:

"abc" == "abc";

s1 != s2

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

Возвращает значение истины:

"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™, можно использовать данные о строке для симуляции и генерации кода.

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

| | | | | | | |

Похожие темы