1

MATLABのdelete_block関数を使用しようとしています。この関数では、simulinkブロックパスを指定するとブロックが削除されます。残念ながら、ブロックの名前にが含まれている場合、エスケープ/のためにブロックを削除することはできません。/たとえば、フルパスが次の場合:

system/subsystem/outputBlock[rad/s]

delete_blockブロックの削除に失敗します(失敗を報告せずに)。delete_block関数によって生成されない警告メッセージで、ブロックのパスが次のように報告されていることに気付きました:( system/subsystem/outputBlock[rad//s]最後に/エスケープされた状態で)。したがって、おそらく何が起こるかというと、を検索する代わりに、を検索するためsystem/subsystem/outputBlock[rad/s]、パスがエスケープされて見つからないということです。これを確認するために、最後のブロックを削除してブロックの名前を手動で変更してみましたが、関数は機能します。パス名に名前が含まれているブロックを削除するにはどうすればよいですか?delete_blocksystem/subsystem/outputBlock[rad//s]/delete_block/

4

1 に答える 1

4

願わくば、私はここで助けることができます。はキャラクター//のエスケープシーケンスです/。名前にが含まれているブロックを削除する場合は//、ツリーを下に移動して完全修飾名を取得し、/各ポイントでエスケープするのが最善だと思います。

% get the name of the block you want to delete, we'll just use gcb() for now
blk = gcb;
nameList = {};
% get the name of this block
currBlk = get_param(blk,'Name')
nameList{end+1} = currBlk;
% get the name of the root block diagram
rootName = bdroot(blk)
while( ~strcmp(get_param(blk,'Parent'),rootName) )
  currBlk = get_param(blk,'Parent');
  nameList{end+1} = get_param(currBlk,'Name');
end
nameList{end+1} = rootName;
% for completeness, here's a naive attempt to reconstruct the path
str='';
for ii=length(nameList):-1:1
  str = [str strrep(nameList{ii},'/','//') '/' ];
end
str(end) = []; % get rid of the last '/'

HTH!

于 2013-02-22T16:11:29.077 に答える