В этом примере показано, как построить диаграмму Stateflow ®, которая на основе числовых входных данных объединяет строковые данные в текст вывода на естественном языке. Выходной текст можно просмотреть в инспекторе данных моделирования и в рабочей области MATLAB ®. Дополнительные сведения о строковых данных см. в разделе Управление текстовой информацией с помощью строк.

Во время моделирования блоки синусоидальной волны обеспечивают положение точки, движущейся по замкнутому пути по координатам широты и долготы. Диаграмма проверяет эти координаты и назначает строки q1 и q2 согласно информации в этой таблице.
| Широта | Долгота | q1 | q2 |
|---|---|---|---|
| положительный | положительный | "North" | "east" |
| положительный | отрицательный | "North" | "west" |
| отрицательный | положительный | "South" | "east" |
| отрицательный | отрицательный | "South" | "west" |
Затем, утверждение
sout = strcat("Location in ",q1,q2," Quadrant");
Чтобы создать модель Simulink ® с пустой диаграммой, использующей язык действий C, в командной строке MATLAB введите
sfnew -CВ пустой диаграмме разместите переход по умолчанию. Появится соединение. Укажите точку и перетащите курсор от кромки соединения, чтобы добавить другие переходы и соединения.
Дважды щелкните каждый переход. В текстовом запросе введите соответствующее условие или инструкцию действия.
Чтобы разрешить неопределенные данные, на панели Символы (Symbols) щелкните значок Разрешить неопределенные символы (Resolve undefined symbols).
Редактор Stateflow назначает соответствующую область для каждого символа на диаграмме.
| Символ | Объем |
|---|---|
latitude | Входные данные |
longitude | Входные данные |
q1 | Локальные данные |
q2 | Локальные данные |
sout | Выходные данные |
Определить q1 в виде строковых данных в поле «Тип» инспектора свойств выберите string. Повторить эту спецификацию для q2 и sout.
Кроме того, чтобы создать строковые данные с максимальным количеством символов, укажите каждую строку как stringtype(n) с использованием подходящего размера буфера n во избежание усечения его содержимого. Например, в этой таблице перечислены подходящие размеры буфера для строковых данных на диаграмме.
| Символ | Количество символов | Строковый тип данных |
|---|---|---|
q1 | 5 | stringtype(5) |
q2 | 5 | stringtype(5) |
sout | 30 | stringtype(30) |
В модели Simulink добавьте два блока синусоидальной волны и блок отображения. Подключите блоки к входному и выходному портам диаграммы.

Установите параметры блока синусоидальной волны, как указано в этой таблице.
| Блок | Амплитуда | Уклон | Частота | Фаза |
|---|---|---|---|---|
| Широта | 50 | 0 | 1 | 0 |
| Долгота | 50 | 0 | 1 | pi/2 |
Маркировать сигналы в модели как latitude, longitude, и sout. Щелкните правой кнопкой мыши по каждому сигналу и выберите Log Selected Signals.
При моделировании модели значок «Инспектор расчетных данных
» подсвечивается, указывая на наличие новых расчетных данных. Чтобы открыть инспектор данных моделирования, щелкните значок.
В инспекторе данных моделирования установите флажки для latitude, longitude, и sout сигналы так, чтобы они отображались на одном наборе осей. latitude и longitude сигналы появляются в виде синусоидальных кривых. sout сигнал показан как график перехода. Значение строки отображается внутри полосы, а пересекающиеся линии отмечают изменения значения.

Для доступа к записанным данным в рабочей области MATLAB вызовите объект регистрации сигналов. logsout. Поток состояний экспортирует строковые данные sout как скаляр строки MATLAB. Например, в командной строке введите:
losgout = out.logsout; Tbl = table(logsout.get('latitude').Values.Data, ... logsout.get('longitude').Values.Data, ... logsout.get('sout').Values.Data); Tbl.Properties.VariableNames = ... {'Latitude','Longitude','QuadrantInfo'}; Tbl([4:8:30],:)
ans =
4×3 table
Latitude Longitude QuadrantInfo
________ _________ ________________________________
28.232 41.267 "Location in Northeast Quadrant"
40.425 -29.425 "Location in Northwest Quadrant"
-30.593 -39.548 "Location in Southwest Quadrant"
-38.638 31.735 "Location in Southeast Quadrant"
strcat | table | get (Симулинк)