Simscape MultibodyにおいてS-Function Builder内でswitch case文は使えますか?

2 ビュー (過去 30 日間)
minato tohjima
minato tohjima 2019 年 9 月 13 日
コメント済み: Toshinobu Shintai 2019 年 10 月 5 日
void test1_Outputs_wrapper(const real_T *count,
const real_T *height,
const real_T *angle,
real_T *bit)
{
switch(case_number){
case 0:
if(*count<0.5){
*bit=0;
}else{
case_number=1;
}
break;
case 1:
if(0.5<=*count){
*bit=1024;
}else{
case_number=0;
}
break;
case 2:
if(1<*height){
*bit=-1023;
}else{
*bit=0;
}
break;
現在,Simuscape MultibodyでS-Function Builderを用いてアクチュエータに命令を出したいのですが「*count」という時間を入力しているものの上記のプログラム内で反映されません.CLOCKでの入力ではダメなのでしょうか?
質問用.jpg
  4 件のコメント
minato tohjima
minato tohjima 2019 年 10 月 4 日
色々と試してみたのですが,どうもswitch case文自体が機能していないみたいです.上記のように書いてもcase0の最初の文しか処理が行われず,caseが移動しません.
S-Function Builderで作成した「.wrapper」ファイルに通常のC言語で書く場合に必要なヘッダーファイルなどはありますか?
Toshinobu Shintai
Toshinobu Shintai 2019 年 10 月 5 日
添付ファイルにS-Function Builderでsiwtch caseを使った例を作成しました。バージョンはR2019bです。私の環境では問題なく機能しています。
ちなみに私は一番最初にminato_tohjima様が貼り付けたCコードを読み込んではいませんので、そのコードが意図した通りに記述されているか、については私は知りません。C言語のコンパイラの不具合の可能性もあるので、その場合はMATLAB側では対処できません。
もしC言語の文法に関する質問に発展するようであれば、C言語のコミュニティで質問してください(MATLAB Answersではしないように)。
また、S-Function Builderのさらなる使い方についての質問に発展するようであれば、まずは他のAnswersを確認し、その質問が存在していないようであれば、新規に質問を作成してください。

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeSimscape Multibody についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!