主要内容

金宝app字符串

当要传递和操作文本时,在多个应用程序中使用字符串。例如,在建模燃料控制系统时,而不是使用枚举数据来模拟燃料水平,您可以使用像字符串“低”“空”.金宝app动态仿真模块®字符串与MATLAB兼容®字符串。

金宝appSimulink字符串是内置信号数据类型。它们出现在Simulink编辑器中金宝app“str.N(例如,最大长度为N字符)或“string”表示没有最大长度的字符串(动态字符串)。字符串长度范围是1 ~ 32,766。

金宝appSimulink String信号本质上是离散的。如果字符串信号具有连续采样时间,则模型在编译时生成错误。

金宝appSimulink处理字符串变量和表达式,如“a”+“b”,与处理数值变量的方式相同。字符串变量的值可以是字符向量,也可以是MATLAB字符串。字符串变量可以存在于基础、模型和掩码工作空间中。

字符串文字用双引号指定(“你好”或单引号(“你好”).要与MATLAB字符串一致,请使用双引号。串出现在港口和港口展示带双引号的块。

金宝appSimulink字符串支金宝app持256个字符的ISO/IEC 8859-1字符集。这些字符是Unicode的前256个编码点。金宝appSimulink不支持第一个字符金宝appchar (0)("NULL"),如果字符串包含此字符则返回错误。

当字符无法显示时,块存储实际信息,并输出带有该字符关联八进制值的转义字符。例如,的十进制值控制字符将允许在这里是130.块将此控制字符显示为逃逸的八进制字符202..的ASCII字符串块以转义八进制字符的形式返回Unicode集合范围0000到001F和007F-009F。

本主题介绍了如何在Simulink中使用字符串,包括:金宝app

  • 可用的字符串块和特定于字符串转换的块的列表

  • 将字符串常量传递给其他字符串块

  • 字符串中的空字符

  • 没有最大长度的字符串

  • 与Stateflow交互®

  • 生成的代码

  • 限制

本主题还包括说明如何使用字符串块的简单示例。本主题中的示例启用显示块名称。控件上控制块名称的显示格式选项卡上,选择汽车>隐藏自动块名称.例如,您可以使用字符串块来显示和提取坐标数据,并在字符串中查找模式。

要在模型中使用字符串,请使用下面的表格:

行动

将uint8矢量转换为字符串信号。

ASCII字符串

基于此基于的输出字符串信号格式参数和输入信号。

组成字符串

扫描输入字符串并将其转换为根据指定的格式的信号格式参数。

扫描字符串

比较两个输入字符串。

字符串比较

连接输入字符串以形成一个输出字符串。

字符串连接

属性指定的字符串字符串参数。

字符串常量

返回第一次出现模式字符串的索引在文本字符串中str.

字符串中找到

输出输入字符串中的字符数。

字符串长度

将字符串信号转换为uint8矢量。

ASCII字符串

将字符串信号转换为双信号。

绳子到双人

将字符串信号转换为单个信号。

字符串单

将输入字符串转换为枚举信号。

字符串到枚举

从串信号中提取子字符串。

子字符串

将输入信号转换为字符串信号。

字符串

这些Simu金宝applink模块支持字符串。金宝app

笔记

公交划分

Nonvirtual和虚拟。

总线的创造者

Nonvirtual和虚拟。

总线选择器

Nonvirtual和虚拟。

数据存储内存

- - - - - -

数据存储读取

- - - - - -

数据存储写

- - - - - -

数据类型重复

- - - - - -

展示

使用双引号显示字符串。

- - - - - -

从工作空间

不支持数据插值。金宝app

转到

- - - - - -

地面

地面值是""(空字符串)。

轮廓尺寸

包括根水平。

手动变体汇

- - - - - -

手动变异来源

- - - - - -

手动开关

没有混合数字和字符串类型。如果有多个字符串,则块使用具有最大尺寸或动态字符串的字符串。

MATLAB函数

- - - - - -

合并

- - - - - -

模型

- - - - - -

多端口切换

没有混合数字和字符串类型。如果有多个字符串,则块使用具有最大尺寸或动态字符串的字符串。

外港

包括根水平。

探针

- - - - - -

信号编辑器

不支持数据插值。金宝app

信号规范

- - - - - -

子系统(所有变化)

- - - - - -

开关

没有混合数字和字符串类型。如果有多个字符串,则块使用具有最大尺寸或动态的字符串。

终止函数

- - - - - -

《终结者》

- - - - - -

变异来源

- - - - - -

变体模型

- - - - - -

不同的子系统

- - - - - -

宽度

- - - - - -

金宝app字符串和州流程

要使用文本数据来控制图表行为,并在statflow中操作文本来创建自然语言输出,请在C操作语言图表中使用字符串。statflow提供操作符来操作字符串。有关更多信息,请参见通过使用字符串管理文本信息(Stateflow)

字符串常量

要指定字符串常量,请使用字符串常量块。请勿使用常数块,它不接受字符串。在字符串常量块,输入带有双引号的字符串,例如“你好!”字符串参数。这与在中添加一个数字常数相同恒定价值Constant块的参数。

金宝app字符串和空字符

金宝appSimulink字符串自动处理字符串终止。不要在字符串末尾使用空终止器。如果S金宝appimulink在字符串中的任何位置检测到NULL字符,则会生成错误。金宝appSimulink处理仿真和代码生成期间的字符串如下:

  • 在模拟期间,模型模拟。你不需要做任何其他事情。

  • 在C代码生成期间,软件会在字符串的末尾添加一个空结束符。例如,如果字符串缓冲区大小为10,而实际字符串值为“AB”,生成代码中的第三个字符是空结束符。

字符串数据类型

必要时,字符串块创建并使用字符串数据类型,例如,当块输出字符串类型时。您可以在不指定最大字符长度的情况下创建字符串。我们将没有最大字符长度的字符串称为动态字符串。

要为支持字符串的块创建字符串数据类型,可以:金宝app

  • 使用输出数据类型数据类型的参数信号的属性标签的Simuli金宝appnk块。

    • 若要创建没有最大字符长度的字符串数据类型,请指定细绳.此操作创建一个动态字符串。

    • 要创建最大字符长度的字符串数据类型,例如100., 进入stringtype (100).你也可以用thestringtype在matlab命令行上的函数以创建字符串数据类型。

  • 使用set_param用来的功能OutDataTypeStr参数,例如:

    set_param(gcb,'outdatatypestr','stringtype(100)')

    此函数创建一个字符串数据类型对象,最大长度为100个字符。字符串类型长度可以从1到32,766个字符,包容性。

例如,使用字符串常量块创建字符串输出数据类型参数设置为StringType(31)创建字符串数据类型str31..31是字符串的最大字符数。

总线对象中的字符串

要使用总线编辑器将总线对象的元素配置为接受字符串,请在数据类型参数时,输入字符串类型。例如,要指定最大字符长度为10的字符串数据类型,输入stringtype (10).的模式相应的参数更新。要指定长度可变的动态信号,输入细绳在这一领域。您可以为总线元素创建混合使用的数字和字符串总线对象。有关使用总线编辑器创建总线对象和元素的详细信息,请参见创建和指定Simulink。金宝app总线对象

字符串和生成的代码

考虑这些字符串和生成的音符Cc++代码。

模拟和生成的区别C动态字符串数据类型的代码

使用动态字符串数据类型的块的模拟与生成的块不同C以以下方式编写代码:

  • 用信号细绳数据类型在模拟过程中具有动态大小。换句话说,字符串的大小可以在0到32766之间变化。然而,在生成的C代码时,编码器将字符串存储为固定大小char_T数组。因此,字符串的大小受到生成的固定缓冲区大小的限制C代码。该软件截断额外的字符并在末尾插入空结束符(例如,在字符串连接块)。

  • 编码器生成字符串不变量(参数或信号)为C风格的双引号字符串。

  • 字符串数据类型的信号的默认缓冲区大小是256字节(最多包含255个8位ASCII字符)。要更改此缓冲区大小,请使用动态大小字符串的缓冲区大小(字节)(金宝appSimulink编码器)配置参数。

  • 若要覆盖单个字符串信号的模型范围设置,请使用stringtype (N作为信号数据类型。这种数据类型的信号被分配一个缓冲区N+1在生成的字节C代码(N字符加上一个空终止器)。

  • 模拟和生成没有区别c++将字符串存储为std:: string对象具有与模拟相同的动态行为。

c++代码生成字符串库

c++代码生成,std:: string库可用于具有Embedded Coder™许可证的基于ert的目标。有关更多信息,请参见使用标准c++字符串库生成字符串块代码(嵌入式编码器)

字符串数据类型转换

你不能使用数据类型转换块以将字符串数据类型转换为其他数据类型或相反。相反,使用这些字符串转换块。

转换

字符串信号改为uint8矢量信号,同时保留ASCII字符

ASCII字符串

UINT8向量信号到串信号

ASCII字符串

字符串信号到数字信号的双重数据类型

绳子到双人

字符串信号到数字信号的单一数据类型

字符串单

字符串信号到枚举信号数据类型

字符串枚举

输入信号到串信号

字符串

转换字符串到ASCII和回到字符串

  1. 将这些块添加到模型中:

    • 字符串常量

    • ASCII字符串

    • ASCII字符串

    • 展示

  2. 如图所示连接块。

  3. 字符串常量块,输入字符串,例如“你好!”

  4. ASCII字符串块,将最大字符串大小更改为10。

  5. 模拟模型并观察其内容展示块。

    • Display1显示你好!转换为其ASCII等价物。例如,72.ASCII是否等同于H33.ASCII是否等同于

    • Display1用零(空字符)填充剩余的空间到最大字符串长度10。

    • 显示器显示你好!ASCII字符串块将ASCII码重新转换为字符串。

将字符串转换为枚举数据类型

  1. 将这些块添加到模型中:

    • 字符串常量

    • 字符串到枚举

    • 展示

  2. 如图所示连接块。

  3. 字符串常量块,输入字符串,例如“你好!”

  4. 创建一个名为金宝appBasicStrings并将其存储在包含文件名的当前文件夹中基本串,例如:

    < Simulink. classdef Bas金宝appicStrings在tEnumType enumeration Hello(0) Red(1) Blue(2) end end
  5. 字符串到枚举块,输入枚举类为枚举:BasicStrings

  6. 模拟模型并观察其内容展示块。

显示和提取坐标数据

属性显示了如何格式化和输出一组数据作为地理坐标组成字符串扫描字符串块。基于CscanfPrintf.功能,组成字符串扫描字符串块在概念上与sprintfSSCANF.函数,但主要的例外是这些函数使用数组,而块不使用数组。有关字符串块格式字符的更多信息,请参见组成字符串扫描字符串

组成字符串块将多个字符串和数字输入组合起来构造字符串。使用格式参数格式化每个输入的输出,每个输入有一个格式操作符。每个格式操作符都以百分号开始,% gydF4y2Ba,后面跟着转换字符,例如,% f生成固定点输出。要补充字符串输出,还可以将额外的字符添加到输出中出现的格式规范。

  1. 将这些块添加到模型中:

    • 六个常数

    • 组成字符串

    • 扫描字符串

    • 七个展示

  2. 改变常数阻止常数值与显示的那些并连接块。

  3. 格式参数的组成字符串块,输入这些格式规格:

    %g %g " N, %g %g " W " N
    • % g% f格式化操作符将数字输入转换为浮点值。% g是更紧凑的版本% f

    • 度符号(°),n,w和是要在输出字符串中显示的补充字符串。

    组成字符串块按照输入顺序组合输出,根据其格式操作符格式化每个输入,添加额外的字符串,并输出字符串,该字符串按照定向格式并由双引号包围().

  4. 格式参数的扫描字符串块,输入这些格式规格:

    %g %g " N, %g %g " W " N
    • % g% f格式化操作符将数字输入转换为浮点值。% g是更紧凑的版本% f

    • 度符号(°),n,w和是要在输出字符串中显示的补充字符串。

    扫描字符串块读取其输入,根据转换规范指定的格式对其进行转换,并以标量的形式返回结果。块根据其转换规范对每个输出进行格式化。它忽略转换说明符前后的指定文本。

查找字符串中的模式

要查找字符串中的模式,请使用字符串中找到块。

  1. 将这些块添加到模型中:

    • 字符串常量

    • 字符串中找到

    • 展示

  2. 如图所示连接块。

  3. 在第一字符串常量块,输入字符串,例如“喂!再见!”

    把这个块连接到str.输入端口字符串中找到块导致字符串中找到块查找此字符串中的模式。

  4. 在第二个字符串常量块,输入第一个字符串(或模式)以查看第一个字符串常量字符串,如“再见!”

    把这个块连接到块的输入端口表示字符串中找到从中寻找这种模式str.输入。

  5. 模拟模型并观察其内容展示块。对于本例,显示块7,即信件的位置G

提取一个字符串

要从源字符串中提取字符串,请使用子字符串块。这个例子使用了中描述的模型查找字符串中的模式

  1. 添加一个子字符串块到模型。

  2. 子字符串块,选择输出字符串从'idx'到结束参数。设置此参数将字符串从IDX端口处的位置输入到字符串的末尾。

  3. 如图所示连接新块。

  4. 模拟模型并观察其内容展示块。对于本例,显示块“再见!”,这是提取的子字符串开始idx.直到绳子的末端。

获取关键词后的文本

这个例子展示了使用Simulink字符串块的基本字符串操作。金宝app

对于如下所示的模型,模拟它。

观察模型:

  • 创建两个字符串,“开头中间结尾”“中间”,使用字符串常量块。

  • 寻找第一次出现“中间”idx.),并添加第一个字母的位置(11.)到的长度“中间”7).它使用字符串中找到字符串长度块。

  • 摘录“开头中间结尾”从结尾开始的子字符串“中间”Idx +字符串长度= 18),即字符串“结束”.它使用子字符串块。

  • 比较计算值“结束”使用实际的字符串“结束”,返回布尔值“1”.它使用字符串常量字符串比较块。

  • 转换布尔值“1”与它的字符串等价,“真正的”.它使用字符串块。

要查看模型中角色的位置,添加一个展示块的输出字符串中找到字符串长度方块并模拟它。

将现有模型更改为使用字符串

除了在新模型中使用字符串外,您还可以更新现有模型以使用字符串。使用字符串可以简化模型,使其更容易理解。

例如,在旧的模型中,您可能使用枚举数据类型在模型中表示或传递文本。的sldemo_fuelsys示例多个区域中枚举常量以使用文本数据。

sldemo_fuelsys / fuel_rate_control / control_logic,状态流图使用枚举数据来指示燃料水平。

sldemo_fuelsys / fuel_rate_control / airflow_calc,以检测燃料是否不足,模型使用枚举常量关系操作符块。

相反,您可以使用字符串常量字符串比较块通过设置:

  • 字符串常量字符串参数到

  • 使用字符串比较阻止检测if来自模型的另一部分。

您可以将字符串与枚举常量结合使用,而不是删除枚举常量的所有实例。这样做允许您增量地迁移模型以使用字符串。在sldemo_fuelsys / fuel_rate_control fuel_calc / feedforward_fuel_rate,多端口切换块接受4个枚举数据输入。

如果fuel_mode端口正在输出字符串,可以将该字符串转换为枚举的数据类型以与输出一起使用常数块在这个模型中。

解析NMEA GPS文本信息

这个例子展示了如何使用Simulink®字符串块解析NMEA GPS格式的文本消息。金宝app

概述

该模型展示了如何使用Simulink®提供的字符串数据类型和块来读取输入文本消息并提取数字和文本数据。金宝app

读取消息头并转换为枚举

金宝appSimulink®将字符串提供给Enum Block以将字符串转换为相应的枚举值。在此模型中,标题字符串“RMB”将转换为Nmeasentence.rmb。

使用扫描字符串块解析文本消息

解析文本消息的一种方法是使用Scan String块。它的工作原理类似于C语言和MATLAB®中的sscanf函数。

解析具有固定字段宽度的文本消息

当每个数据字段具有固定宽度的文本消息时,Simulink®提供块以按索引拆分字符串。金宝app划分字符串后,可以单独处理每个字段。

金宝app字符串的局限性

这些功能目前不支持:金宝app

类别 限制描述 解决方案

字符串数组

不支持字符串数组。金宝app

只使用字符串作为标量。

Unicode字符

金宝appSimulink字符串不支持整个Uni金宝appcode集。

金宝appSimulink字符串支金宝app持256个字符的ISO/IEC 8859-1字符集(基本拉丁语和拉丁语-1补充)。这些字符是Unicode的前256个编码点。

MATLAB系统MATLAB S函数,stateflow matlab图表

使用这些块创建的自定义块不支持字符串。金宝app

- - - - - -

常数初始条件

这些块对字符串不起作用。

使用字符串常量块。

Switch、Multiport Switch、Switch Case和If块的控制输入

的控制输入开关块不接受字符串。

使用这些块的数据输入。

金宝appsimulink.signal.金宝app仿真软件。参数

金宝appsimulink.signal.金宝app仿真软件。参数块不支持字符串。金宝app

- - - - - -

数据类型转换

请勿使用数据类型转换块来转换为字符串或从字符串转换为字符串。

使用字符串转换块

记录包含字符串元素的非虚拟总线

如果非虚拟总线包含字符串元素,则无法记录整个虚拟总线。您仍然可以记录非字符串元素。

到工作空间

负载字符串使用到工作空间

日志使用输出端口。

到文件

负载字符串使用到文件

- - - - - -

范围频谱分析仪块,逻辑分析器应用程序

范围频谱分析仪块和逻辑分析仪应用程序不显示字符串。

使用展示,仿真数据检测器,或者是顺序查看器在Stateflow。

S-functions

S-functions不支持字符串数据金宝app类型。

- - - - - -

另请参阅

|||||||||||||

相关话题