問題タブ [s-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
251 参照

simulink - S 関数から .txt ファイルを作成する

出力を .txt ファイルに出力できる C mex S 関数があります。mdlStart(SimStruct *S) 内のこのコードは、datafile.txt ファイルを作成し、出力を追加します。

だから今私は、ユーザーから S function mask を介して .txt ファイルのファイル名を動的に取得したいと考えています。だから、S関数内のマスクからファイル名の文字列値を受け取るにはどうすればよいですか。

0 投票する
1 に答える
362 参照

matlab - if/else と異なる信号次元をもつ Simulink

入力がスカラー値か行列かを調べるには、simulink に if/else を実装する必要があります。以下の図を参照してください。

回路図

与えられた:

  • Block(1) - スカラー "1" または行列 "[[0 15];[5 10]]" の入力です。

  • Block(2) - 入力の信号次元を返す必要があります。例: スカラーの場合は 1、行列の場合は >1

要件は次のとおりです。

  • すべてが解釈またはコンパイルされて機能する必要があります (Simulink コーダー)
  • ブロック (4) と (5) の最終出力はスカラーです。
  • 私はCMexSFunctionsについて平均的に理解しています。したがって、問題を解決するために実装する必要がある場合は問題ありません

これまでのところ、次のような問題がありました。

  • 私がやろうとしていることが実現可能であれば、私はまったくしません
  • コンパイル済みモードで動作するように Block(2) を実装する方法がわかりません
  • if/else があっても、simulink は実行前に事前チェックを実行して、すべての信号の次元が正常かどうかを確認します。このチェック中に、例: Block(5) に行列の入力があるというエラーが表示されます。

手がかりはありますか?

0 投票する
1 に答える
191 参照

simulink - simulink cs 関数のデータ型が通常の c データ型と異なる理由

simulink の cs 関数の例では、 int_T と real_T が datatype として使用されています。

それらを double と int に変更すると正常に動作しますが、例で提案されているように int_T と real_T を使用する理由は何ですか?

0 投票する
1 に答える
2182 参照

c - Visual Studio 2013 を使用した Matlab S-Function ビルダー - rtwtypes.h がありません

Simulink S-Function Builder から事前に生成されたコードをコンパイルしようとすると、次のエラーが発生します。

私は matlab と simulink のすべてのインクルード ディレクトリを調べましたが、そのようなヘッダー ファイルはありません。私はMatlab 2014bを使用しています。何が問題なのですか?

ところで。問題なく MEX ファイルをコンパイルできます。

%MATLAB_ROOT%\extern\include フォルダー

ネットワーク上で見つかった「ハッキングされた」ファイルを含めてみました: ヘッダー rtwtypes.h ソース

しかし、期待どおりに機能しません。現在、私のエラーは次のとおりです。

0 投票する
0 に答える
264 参照

c++ - SFunction メモリ違反

ブール値の配列を出力する S 関数を書いています (4 つの位置)

mdlOutputs コールバック内に出力を書き込んでいるときに、アクセス メモリ違反が発生しています。

このエラーは瞬間的なものではありません。つまり、後でクラッシュし、Matlab が致命的なエラーを出すまで、コードは正常に実行されます。デバッグしたので、memcpy 操作にエラーがあると確信しており、このコード行をコメントした後は正常に動作します。また、データ型がスカラーの場合、100% 正常に実行されます。

それで、私はいくつかの質問があります:

  1. memcpy を使用して配列の値を simulink に書き込むにはどうすればよいですか?
  2. simulink の出力メモリは連続メモリ ブロックであると仮定しました。それが正しいか?
  3. それを解決する方法についてのヒントはありますか?

擬似コードは次のとおりです。

0 投票する
0 に答える
918 参照

matlab - Matlab S-Function (VS 2013 でコンパイル) - サイズの取得中にエラーが発生しました (...) プロシージャが見つかりませんでした

シミュレーションを実行しようとすると、S-Function からエラーが発生します。

'test/S-Function' の MEX S-Function 'sfunction' からサイズを取得中にエラーが発生しました。原因: 無効な MEX ファイル ($PATH)\sfunction.mexw64': プロシージャが見つかりませんでした。

私のデバッグ出力:

私は何日も解決策を探していました。

0 投票する
0 に答える
685 参照

c++ - Matlab: S-Function Builder ブロック: ソース ファイルを複数のパスに分散する

ターゲット ハードウェアにビルドするには、S-Function Builder ブロックが
そのソース ファイルと .mex ファイルにアクセスできる必要があります。

ソース ファイルと .mex ファイル
は、Matlab パス上の同じディレクトリにある必要があるようです。

.mex
ファイルとその他のソース ファイル
を複数のディレクトリ
に配置し、ターゲット ハードウェアにビルドすることはできますか?

構成:

  • Minsegハードウェア (実質的に改造された Arduino Mega 2560)
  • OS X (10.11) を搭載したラップトップ
    • XCode 6.xx ( Mathworksがサポートするコンパイラ)
    • Mathworks Matlab/Simulink (r2015b)
      • Mathworks Arduino サポート パッケージ (targetinstallerコマンドを参照)
      • Mathworks Minseg ドライバー ライブラリ(C および C++ コードに基づく S-Function のライブラリ)。
      • どちらのライブラリも Matlab パス上にあります
      • C++ 言語用に構成されたコンパイラ (mexコマンドを参照)
    • 最小限の作業例 ( MWE ):
      • Arduino Mega 6050 で使用するために正しく構成された Simulink モデル
      • スコープに接続されたドライバー ライブラリのMPU-6050 S-Function ブロックが含まれています。

MWE:

Build Model to Target Hardware :
.meximac64 ファイルS-Function ソース コード ファイル
が Matlab パス上の単一のディレクトリ内に配置されている
場合、モデルはターゲット ハードウェアにビルドされ、完全に実行されます。

0 投票する
1 に答える
287 参照

simulink - Mathworks Simulink: S-Function ビルダー

多数の S-Function Builder ブロックを含むライブラリがあります。

.mex ファイルを (たとえば、別のプラットフォームで) 再生成する場合
、標準的な方法は次のようになります。

  • すべての S-Function ビルダー ブロックに移動
  • S-Function Builder ウィザードを開く
  • [ビルド] をクリックします


ライブラリ内のすべての S-Function Builder ブロック (すべてのサブシステムを含む)が再構築されるように、このプロセスを自動化する方法はあり
ますか?

0 投票する
1 に答える
1024 参照

matlab - パラメーターの構造体を Simulink のレベル 1 m-code S-Function に渡す

パラメーターの構造体を MATLAB の S-Function に渡そうとしています。たくさんのパラメーターがあり、次のように渡すのは避けたいです。

% MATLAB S-Function 構文の一般的な形式は次のとおりです。 % [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

すべてのパラメーターを含む単一の構造体を渡すことをお勧めします。モデル ワークスペースに次のようにデータをロードしました。 ここに画像の説明を入力

最初に試しました(Philへの返信で):

関数 [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)

size.NumInputs = 2;

また、

Simulink は次のようになります。

しかし、私はこのエラーが発生します:

ここに画像の説明を入力

Phil、これが S-Function に別の入力ポートを追加しようとした理由です。そこに入れなければならないと思ったのです。

私も試しました:sizes.NumInputs = 1;

そして、私はこのエラーを受け取ります: ここに画像の説明を入力

また、DATA_HMMWV がパラメーターであることは確かですか? このウィンドウの Param とは少し異なります。 ここに画像の説明を入力

新しい:::: 2016 年 1 月 25 日

フィル、問題は私の派生関数ではありません。問題は、構造を関数にまだ渡していないことです。ここに写真があります。データはモデル ワークスペースにあり、それ (DATA_HMMWV) を関数に渡しましたが、13 行目 (デバッグ モード) でシミュレーションを停止すると、DATA_HMMWV は関数ワークスペースにありません。

ここに画像の説明を入力

コードが続く場合 (フラグ = 1 まで)、次のようになります。 ここに画像の説明を入力

コードが引き続き実行されると、次のエラーでクラッシュします。 ここに画像の説明を入力

そのため、関数に渡された入力引数が十分ではありませんでした。また、関数は非常に単純です。

% function sys = mdlDerivatives(t,x,u,DATA_HMMWV)

sys = DATA_HMMWV.g;

% end mdlDerivatives

構造体からパラメーターを取得しようとするだけです。