シミュレーション中にSimscape Multibodyの​ジョイントブロックの​設定値を変更したい。

お世話になっております。
現在、Simscape Multibodyを使ったモデル化に取り組んでいます。
具体的には、楽器の弦が張力により固有値が変わるように、ばね乗数が一定に定まらず、なんらかの式で表現される様なばね乗数を実装できないかと考えています。
(ジョイントで提議するパラメータをシミュレーション中に変更したい)
Matlab Functionブロックを用いて、ワークスペース変数やモデル変数を変更すればなんとかなるかとも思ったのですが、思ったように計算できていないのが実状です。
他になにか良い方法がありましたらご教示下さい。
よろしくお願いいたします。

 Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 3 Jan 2024

0 votes

「Translational Multibody Interface」「Rotational Multibody Interface」などを使ってみてはいかがでしょうか。以下リンク先の例題にありますように、併進、回転運動ドメインと繋ぐことができ、そちらでばね定数などを可変にすることができます。
可変ばねブロックは、Simscape Drivelineになりますが、以下にあります。

5 Comments

Ryo
Ryo on 3 Jan 2024
ありがとうございます。
並進、回転運動ドメインを使用した場合、ばね乗数をパラメータ化して可変にした場合、シミュレーション実行中にパラメータの値を変更する方法はありますか?
ばね乗数を可変にしようと思った場合、Variable Translational Springを使ってシミュレーション前に設定していた2つの値をスイッチングさせることしかできないのでしょうか...
以下の例題モデルにありますように、「Variable Translational Spring」ブロックはKポートから信号を受け取ることができ、その信号をシミュレーション実行中に変えることで、ばね定数を自由に変えることができます。
Ryo
Ryo on 4 Jan 2024
Edited: Ryo on 4 Jan 2024
ありがとうございます。
私の認識が間違っていました。
確かにKを入力できるようになっているのですね。
追加で申し訳ございません。
なんとかtoolboxを使用しない方法はございませんでしょうか?
他のブロックでも今回と同じようにパラメータを変更したいという場合がままありまして、、、
なんとかSimulinkの機能を使って同じようなコトはできませんでしょうか。
もしあればご教示いただけますと幸いです。
「Simscape」の基本機能として、カスタムブロックを作成することができます。そちらを用いれば、少なくとも「Simscape Driveline」を用いなくてもよくなりますが、いかがでしょうか。
以下の投稿画像にて、その手順が紹介されています。
通常の「Translational Spring」のソースコードをコピーして改変し、ばね定数を可変にしたカスタムブロックを作成することができます。
Ryo
Ryo on 8 Jan 2024
なるほど、カスタムブロックを作成するという方法もあるんですね。
現在、実装したいブロックがカスタムできないものだったのですが、今後他の用途で必要になった場合葉この方法を採用したいと思います。
ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2022b

Asked:

Ryo
on 29 Dec 2023

Commented:

Ryo
on 8 Jan 2024

Community Treasure Hunt

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

Start Hunting!