主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

金宝appの 一串

複数のアプリケーションでテキストを渡して操作する場合は 一串を使用します。たとえば、燃料制御システムをモデル化するときは、燃料レベルを列挙型データを使用してモデル化する代わりに、“低”“空”のような字符串を使用できます。金宝app动态仿真模块®の字符串はMATLAB®の 一串と互換性があります。

金宝app仿真软件の字符串は組み込みの信号データ型です。金宝app仿真软件エディターには,“strN”(最大長がN文字の字符串)や“字符串”(最大長がない動的な字符串)のように表示されます。字符串の長さの範囲は1 ~ 32766文字です。

金宝app仿真软件の字符串信号は本質的に離散です。一串信号のサンプル時間が連続である場合、モデルのコンパイル時にエラーが生成されます。

金宝app仿真软件では,弦の変数や式(“a”+“b”など)を数値変数と同じように扱います。字符串変数の値は,文字ベクトルとMATLAB字符串のどちらにすることもできます。一串変数は、ベース ワークスペース、モデル ワークスペース、およびマスク ワークスペースで設定できます。

字符串リテラルは,二重引用符(“你好”)または一重引用符(“你好”) で囲んで指定します。MATLABの 一串と一致させるには、二重引用符を使用します。一串は端子や陈列ブロックに二重引用符で囲んで表示されます。

金宝app模拟の 一串では、ISO/IEC 8859-1文字セットの 256文字がサポートされます。これらの文字は 统一码の最初の 256のコード ポイントです。模拟では、最初の文字char (0)(“空”)はサポートされず、この文字が 一串に含まれているとエラーを返します。

文字を表示できない場合、ブロックは実際の情報を格納し、エスケープ文字を付けてその文字に関連付けられた 8.進数値を出力します。たとえば、将允许在这里の10進数の制御文字は130です。ブロックでは、この制御文字をエスケープされた 8 進数の202年\として表示します。ASCII到字符串ブロックでは、统一码セットの 0000~001Fおよび 007F~009Fの範囲のエスケープされた 8.進数の文字として返します。

このトピックでは、金宝app模拟で 一串を使用する方法について説明します。以下の内容が含まれます。

  • 使用可能な字符串ブロックと字符串変換に固有のブロックの一覧

  • 一串定数を他の 一串ブロックに渡す

  • 字符串内の零文字

  • 最大長がない字符串

  • 状态流®との交互作用

  • 生成コード

  • 制限

このトピックには,弦ブロックの使用方法を示す簡単な例も含まれています。このトピックの例では,ブロック名の表示を有効にします。ブロック名の表示を制御するには,[書式設定]タブで[自動][自動ブロック名の非表示]を選択します。たとえば、一串ブロックを使用して、座標データを表示および抽出したり、一串内でパターンを検出したりできます。

モデルでの字符串の操作については,次の表を参照してください。

アクション ブロック

uint8ベクトルを字符串信号に変換します。

ASCII到字符串

总体安排パラメーターと入力信号に基づいて出弦力信号を構成します。

组成字符串

入力字符串をスキャンし,总体安排パラメーターで指定された形式によって信号に変換します。

扫描字符串

2つの入力字符串を比較します。

字符串比较

複数の入力 一串を連結して 1.つの出力 一串を形成します。

串接

字符串パラメーターで指定された字符串を出力します。

字符串常数

テキスト文字列str中で最初に出現するパターン 一串附属的のインデックスを返します。

字符串查找

入力 一串の文字数を出力します。

字符串长度

一串信号を uint8ベクトルに変換します。

ASCII字符串

字符串信号を双信号に変換します。

串双

字符串信号を单信号に変換します。

字符串单

入力 一串を列挙型信号に変換します。

要枚举的字符串

一串信号から部分文字列を抽出します。

子字符串

入力信号を 一串信号に変換します。

字符串

一串は 模拟の次の金宝appブロックでサポートされます。

ブロック メモ

公交车分配

非バーチャルとバーチャル。

总线生成

非バーチャルとバーチャル。

总线选择器

非バーチャルとバーチャル。

数据存储存储器

- - - - - -

数据存储读取

- - - - - -

数据存储写

- - - - - -

数据类型重复

- - - - - -

陈列

字符串を二重引用符で囲んで表示します。

- - - - - -

从工作空间

データの内挿はサポートされません。

后藤

- - - - - -

グラウンド値は""(空の字符串)です。

输入

ルート レベルを含みます。

手动变型水槽

- - - - - -

手动变异来源

- - - - - -

手动开关

数値型と字符串型の混在は含まれません。一串が複数ある場合、ブロックではサイズが最大の string か動的な string を使用します。

MATLAB函数

- - - - - -

合并

- - - - - -

模型

- - - - - -

多端口开关

数値型と字符串型の混在は含まれません。一串が複数ある場合、ブロックではサイズが最大の string か動的な string を使用します。

外埠

ルート レベルを含みます。

探针

- - - - - -

信号编辑器

データの内挿はサポートされません。

信号规范

- - - - - -

子系统(すべてのバリエーション)

- - - - - -

开关

数値型と字符串型の混在は含まれません。一串が複数ある場合、ブロックではサイズが最大の string か動的な string を使用します。

终止函数

- - - - - -

《终结者》

- - - - - -

变异来源

- - - - - -

变型

- - - - - -

不同的子系统

- - - - - -

宽度

- - - - - -

金宝app一串と状态流

テキストデータを使用してチャートの動作を制御し,テキストを操作してStateflowで自然言語出力を作成するには,字符串をCアクション言語チャートで使用します。Stateflowは,弦を操作する演算子を提供します。詳細については,字符串を使用したテキスト情報の管理(Stateflow)を参照してください。

定字符串数

定字符串数を指定するには,字符串常数ブロックを使用します。常数ブロックは 一串を受け入れないので使用しないでください。字符串常数ブロックで,“你好!”のように,文字列を二重引用符で囲んで[文字列]パラメーターに入力します。これは,常数ブロックの[定数値]パラメーターで数値定数を追加するのと同じです。

金宝appの字符串と零文字

金宝app模拟の 一串については、一串の終端が自動的に処理されます。一串の末尾に 无效的終端子は使用しないでください。模拟では、一串内に 无效的文字が含まれていることを検出するとエラーを生成します。模拟でのシミュレーションとコード生成の実行時、一串は次のように処理されます。

  • シミュレーション時は,モデルのシミュレーションが実行されます。ほかに必要な処理はありません。

  • Cコードの生成時は、ソフトウェアによって 一串の末尾に 无效的終端子が追加されます。たとえば、一串のバッファー サイズが 10で、実際の 一串の値が“AB”であれば,生成コードの3番目の文字が零終端子になります。

字符串データ型

字符串ブロックでは,たとえば字符串型を出力する場合など,必要に応じて字符串データ型を作成して使用します。字符串は最大文字数を指定しなくても作成できます。最大文字数がない字符串のことを動的な字符串と呼びます。

字符串をサポートするブロックでは,次の方法で字符串データ型を作成できます。

  • 金宝app模拟ブロックの[信号属性]タブにある(出力データ型)パラメーターまたは[データ型)パラメーターを使用します。

    • 最大文字数を指定せずに字符串データ型を作成するには,一串を指定します。これにより、動的な文字列が作成されます。

    • 最大文字数を指定して 一串データ型を作成するには、たとえば100であればstringtype (100)のように入力します。一串データ型はMATLABコマンドラインで関数stringtypeを使用して作成することもできます。

  • 関数set_paramを使用してOutDataTypeStrパラメーターを指定します。次に例を示します。

    set_param (gcb, OutDataTypeStr”、“stringtype(100)”)

    この関数では,最大長が100文字の字符串データ型オブジェクトが作成されます。字符串型の長さの範囲は1 ~ 32766文字です。

たとえば,字符串常数ブロックで(出力データ型)パラメーターをstringtype(31)に設定して 一串を作成すると、str31の字符串データ型が作成されます。31日はこの字符串で許容される最大文字数です。

バスオブジェクトの字符串

バス エディターを使用して 一串を受け入れるようバス オブジェクトの要素を構成するには、バス要素の[データ型)パラメーターで、一串型を入力します。たとえば、最大文字数が 10文字の 一串データ型を指定するには、stringtype(10)と入力します。それに合わせて[モード]パラメーターが更新されます。可変長の動的な信号を指定するには、このフィールドに一串を入力します。バス要素に数値と字符串のバスオブジェクトの組み合わせを作成できます。バスエディターでのバスオブジェクトと要素の作成の詳細については,金宝app仿真软件。总线オブジェクトの作成と指定を参照してください。

字符串と生成コード

一串および生成されたCコードとc++コードについては,次の注意事項を検討します。

動的な字符串データ型に関するシミュレーションと生成されたCコードの違い

動的な字符串データ型を使用するブロックのシミュレーションは,生成されたCコードと次のように異なります。

  • シミュレーション中の一串データ型をもつ信号のサイズは動的です。言い換えると、一串のサイズは 0 ~ 32766 の間で変化する可能性があります。ただし、生成されたCコードでは,弦は固定サイズのchar_T配列として保存されます。したがって,生成されたCコードでは、一串のサイズは固定バッファー サイズにより制限されます。追加の文字はソフトウェアによって切り詰められ、最後 (たとえば、串接ブロックの出力時) に 无效的終端子が挿入されます。

  • 一串の不変要素 (パラメーターまたは信号) がCスタイルの二重引用符で囲まれた字符串として生成されます。

  • 一串データ型をもつ信号の既定のバッファー サイズは 256バイト (最大 255の 8.ビット ASCII码文字) です。バッファー サイズを変更するには、動的サイズ文字列のバッファーサイズ(バイト)(金宝appSimulink编码器)コンフィギュレーション パラメーターを使用します。

  • 各 一串信号のモデル全体の設定をオーバーライドするには、stringtype(N)を信号のデータ型として使用します。このデータ型をもつ信号には、生成されたCコードのN+1バイトのバッファーが割り当てられます(N文字に1つの零終端子を追加)。

  • シミュレーションと動的動作が同じstd:: stringオブジェクトとして 一串が保存される場合、シミュレーションと生成されたc++コードの間に違いはありません。

c++コードの生成 一串ライブラリ

c++コード生成には、嵌入式编码器™ のライセンスをもつ ERTベースのターゲット用にstd:: stringライブラリが提供されています。詳細については、使用标准C++字符串库生成字符串块的代码(嵌入式编码器)を参照してください。

一串データ型の変換

字符串データ型と他のデータ型の間の変換は,数据类型转换ブロックを使用して実行することはできません。代わりに,次の文字列変換ブロックを使用します。

変換 ブロック

字符串信号をASCII文字を保持してuint8ベクトル信号に

ASCII字符串

uint8ベクトル信号を字符串信号に

ASCII到字符串

字符串信号を数値信号双データ型に

串双

一串信号を数値信号 仅有一个的データ型に

字符串单

一串信号を列挙型信号データ型に

要枚举的字符串

入力信号を 一串信号に

字符串

字符串をASCIIに変換してから字符串に戻す

  1. 次のブロックをモデルに追加します。

    • 字符串常数

    • ASCII字符串

    • ASCII到字符串

    • 2つの陈列ブロック

  2. ブロックを次のように接続します。

  3. 字符串常数ブロックで,弦として“你好!”と入力します。

  4. ASCII字符串ブロックで、一串の最大サイズを 10に変更します。

  5. モデルをシミュレートし,陈列ブロックの内容を確認します。

    • Display1に、対応する ASCII码に変換された你好!の値が表示されます。たとえば,72Hに対応するASCIIの値で,33に対応する ASCII码の値です。

    • Display1で,弦の最大長である10までの残りのスペースが0(零文字)で埋められます。

    • 显示に,ASCII到字符串ブロックでASCIIコードから字符串に再変換された後の你好!が表示されます。

字符串を列挙データ型に変換する

  1. 次のブロックをモデルに追加します。

    • 字符串常数

    • 要枚举的字符串

    • 陈列

  2. ブロックを次のように接続します。

  3. 字符串常数ブロックで,“你好!”などの字符串を入力します。

  4. 次のように,BasicStringsという名前の模金宝app型列挙型クラスを作成し,BasicStrings.mというファイル名で現在のフォルダーに保存します。

    < Simulink. classdef Bas金宝appicStringsIntEnumType枚举Hello(0) Red(1) Blue(2) end结束
  5. 要枚举的字符串ブロックで、列挙型クラスを枚举:基本字符串と入力します。

  6. モデルをシミュレートし,陈列ブロックの内容を確認します。

座標データの表示と抽出

この例では,组成字符串ブロックと扫描字符串ブロックを使用して,一連のデータを地理座標として書式設定して出力する方法を示します。组成字符串ブロックと扫描字符串ブロックは、Cの関数のscanfprintfに基づいており,概念的には関数sprintfと関数sscanfに似ています。主な違いは,それらの関数では配列を操作するのに対し,これらのブロックでは配列を操作しないことです。字符串ブロックの書式設定済み文字の詳細については,组成字符串および扫描字符串を参照してください。

组成字符串ブロックは,複数の串入力と数値入力の組み合わせから字符串を構成します。[形式]パラメーターを使用して、入力ごとの出力を書式設定します。入力ごとに書式演算子が 1.つ対応します。各書式演算子はパーセント記号% gydF4y2Baで始まり,その後に変換文字が続きます。たとえば% fは固定小数点出力を生成します。一串出力の補足として、出力に表示する追加の文字を書式仕様に加えることもできます。

  1. 次のブロックをモデルに追加します。

    • 6つの常数

    • 1.つの组成字符串

    • 1.つの扫描字符串

    • 7つの陈列

  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つの字符串常数

    • 字符串查找

    • 1.つの陈列

  2. ブロックを次のように接続します。

  3. 1.つ目の字符串常数ブロックで,“喂!再见!”などの字符串を入力します。

    このブロックを字符串查找ブロックのstr入力端子に接続すると,この字符串内から字符串查找ブロックでパターンが検索されます。

  4. 2.つ目の字符串常数ブロックで,“再见!”など,最初の字符串常数の字符串内から検索する字符串(またはパターン)を入力します。

    このブロックを字符串查找ブロックの附属的入力端子に接続すると,このパターンがstrの入力から検索されます。

  5. モデルをシミュレートし,陈列ブロックの内容を確認します。この例では,ブロックに文字Gの位置である7が表示されます。

一串の抽出

ソース字符串から字符串を抽出するには,子字符串ブロックを使用します。この例では,字符串内のパターンの検出で説明したモデルを使用します。

  1. 子字符串ブロックをモデルに追加します。

  2. 子字符串ブロックで,['idx'から末尾までの 一串を出力]パラメーターを選択します。このパラメーターを設定すると,idx端子の入力の位置から字符串の末尾までの字符串が抽出されます。

  3. 新しいブロックを次のように接続します。

  4. モデルをシミュレートし,陈列ブロックの内容を確認します。この例では,idxから字符串の末尾までを抽出した部分文字列である“再见!”が表示されます。

キーワードの後に続くテキストの取得

この例では,金宝app仿真软件の字符串ブロックを使用した基本的な字符串の操作を示します。

次のようなモデルをシミュレートします。

このモデルについて以下を確認します。

  • 字符串常数ブロックを使用して、“开头中间结尾”“中间”という2つの字符串を作成します。

  • 最初に出現する“中间”を探し(idx)、最初の文字の位置 (11) を“中间”の長さに加えます (7)。これには字符串查找ブロックと字符串长度ブロックを使用します。

  • “开头中间结尾”から、“中间”の末尾以降の部分文字列 (Idx +字符串长度= 18)である字符串“结束”を抽出します。これには子字符串ブロックを使用します。

  • “结束”の計算された値を実際の字符串“结束”と比較します。この戻り値はブール値"1"になります。これには字符串常数ブロックと字符串比较ブロックを使用します。

  • ブール値"1"のを対応する字符串“对”に変換します。これには字符串ブロックを使用します。

モデル全体で文字の位置を表示するには,字符串查找ブロックと字符串长度ブロックの出力のそれぞれに陈列ブロックを 1.つずつ追加して、シミュレーションを実行します。

一串を使用するための既存モデルの変更

新しいモデルで字符串を使用するのに加え,既存のモデルを更新して字符串を使用できます。字符串を使用すると,モデルが簡素化されて,理解しやすくなります。

たとえば,古いモデルでは,列挙データ型を使用して,モデルでテキストを表したり,渡したりする場合がありました。sldemo_fuelsysの例では,複数の領域に定数を列挙してテキストデータと操作しました。

sldemo_fuelsys / fuel_rate_control / control_logicでは,Stateflowチャートは列挙型データを使用して燃料レベルを示します。

sldemo_fuelsys / fuel_rate_control / airflow_calcでは,燃料が少ないかどうか検出するには,モデルで枚举常量ブロックと关系操作符ブロックを使用します。

ただし、次を設定して、字符串常数ブロックおよび字符串比较ブロックを使用できます。

  • 字符串常数[文字列]パラメーターをに設定する。

  • 字符串比较ブロックを使用して、がモデルの別の部分からのものかどうかを検出する。

列挙型の定数のすべてのインスタンスを削除するのではなく,列挙型の定数と一緒に字符串を使用できます。この方法では,弦を使用するようモデルを徐々に移行できます。sldemo_fuelsys / fuel_rate_control fuel_calc / feedforward_fuel_rateでは,多端口开关ブロックは 4.つの列挙型データ入力を受け入れます。

(fuel_mode)端子が 一串を出力している場合、その 一串を列挙データ型に変換して、このモデル内の常数ブロックから出力を使用できます。

NMEA全球定位系统テキスト メッセージの解析

この例では,金宝app仿真软件®字符串ブロックを使用してn mea GPS形式のテキストメッセージを解析する方法を説明します。

概要

このモデルは,金宝app仿真软件®で提供される字符串データ型とブロックを使用して入力テキストメッセージを読み取り,数値およびテキストデータを抽出する方法を示しています。

メッセージ ヘッダーの読み取りと列挙型への変換

金宝appSimulink®には、一串を対応する列挙値に変換する 要枚举的字符串ブロックが用意されています。このモデルでは、ヘッダー文字列 “人民币”が 人民币に変換されます。

扫描字符串ブロックを使用したテキスト メッセージの解析

テキストメッセージを解析する1つの方法は,扫描字符串ブロックを使用することです。このブロックはCおよびMATLAB®の関数sscanfと同様に動作します。

固定フィールド幅のテキスト メッセージの解析

テキストメッセージに各データフィールドの固定幅がある場合,仿真金宝app软件®はインデックス別の字符串を分割するブロックを提供します。字符串が分割された後,各フィールドを個別に処理できます。

金宝appの字符串の制限

以下の機能は現在サポートされていません。

カテゴリ 制限の説明 回避方法

字符串配列

字符串配列はサポートされません。

字符串はスカラーとしてのみ使用します。

Unicode文字

金宝app仿真软件の字符串では,Unicodeセット全体はサポートされません。

金宝app仿真软件の字符串では,ISO / IEC 8859 - 1文字セットの256文字(基本拉丁とLatin - 1补充)がサポートされます。これらの文字はUnicodeの最初の256のコードポイントです。

MATLAB系统matlabs函数, Stateflow MATLABチャート

これらのブロックで作成したカスタムブロックでは,字符串はサポートされません。

- - - - - -

常数初始条件

これらのブロックは 一串では機能しません。

字符串常数ブロックを使用します。

开关ブロック,多端口切换ブロック,切换实例ブロック,如果ブロックの制御入力

开关ブロックの制御入力は字符串を受け入れません。

これらのブロックのデータ入力を使用します。

金宝app模拟信号金宝app仿真软件。参数

金宝app模拟信号ブロックと金宝app仿真软件。参数ブロックでは、一串はサポートされません。

- - - - - -

数据类型转换ブロック

字符串への変換弦かやらの変換に数据类型转换ブロックは使用しないでください。

文字列変換ブロックを使用します。

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

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

到工作空间ブロック

到工作空间を使用して字符串を読み込みます。

出力端子を使用してログ記録を行います。

归档ブロック

归档を使用して字符串を読み込みます。

- - - - - -

范围ブロック、频谱分析仪ブロック,ロジックアナライザーアプリ

范围ブロック、频谱分析仪ブロック,およびロジックアナライザーアプリでは,字符串は表示されません。

陈列模拟数据检查器,または顺序查看器をStateflowで使用します。

系统函数

字符串函数ではデータ型はサポートされません。

- - - - - -

参考

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

関連するトピック