Simulink中怎麼批量修改模塊參數名稱?

在做比較複雜的系統建模時,某一個參數可能會被用很多功能模塊使用。突然有一天,大家覺得這個參數的名稱不太合適,需要換一個名字。如果一個模塊一個模塊改,會浪費很多時間,而且也容易漏掉。如果這個工作交給代碼來解決,就會事半功倍。


今天,談一談如何批量修改模塊參數名稱?


假如有下面這樣一個模型,名稱叫Subsystem。

Simulink中怎麼批量修改模塊參數名稱?

其子系統內部結構內部如下圖。

Simulink中怎麼批量修改模塊參數名稱?

這裡我們重點關注模塊參數部分,其他的可以忽略,總共有4個Constant、4個Gain模塊。兩個Constant模塊的參數名稱叫ConstPara1,另外兩個Constant模塊的參數名稱叫ConstPara2。兩個Gain模塊的參數名稱叫GainPara1,另外兩個Gain模塊的參數名稱叫GainPara2。


任務一


如果有一天,你的同事評審模型時,發現參數ConstPara1名稱有歧義,建議改為NewConstPara1。那麼就需要批量修改該參數名稱。


這裡的工作任務可以分為兩步:

1)把參數名為ConstPara1的Constant模塊找到;

2)將新的參數名稱NewConstPara1賦給上面的模塊。


這個任務的代碼如下:

<code>constant=find_system('newModel/Subsystem','BlockType','Constant','Value','ConstPara1');
for i=1:length(constant);
set_param(constant{i},'Value','NewConstPara1');
end/<code>


這裡主要用到find_system、set_param函數。前者是用於尋找待替換參數名的模塊,後者用於設置新的參數名。set_param函數之前的文章已介紹過。

find_system(sys, 'c1', cv1, 'c2', cv2,...'p1', v1, 'p2', v2,...),sys定義尋找範圍,c1/cv1等成對出現,定義搜尋模塊的屬性為c1,屬性值為cv1。


運行上面代碼後,模型變為下圖。

Simulink中怎麼批量修改模塊參數名稱?

兩個模塊的參數名稱從ConstPara1成功變為NewConstPara1(圖中紅框),且其他模塊參數名稱保持不變(圖中藍框),實現了我們的任務。


任務二


又過了幾天,你的同事繼續評審模型時,發現參數GainPara1名稱需要修改,建議改為NewGainPara1。


這裡的工作任務仍然可以分為兩步:

1)把參數名為GainPara1的Gain模塊找到;

2)將新的參數名稱NewGainPara1賦給上面找到的模塊。


這個任務的代碼如下:

<code>gain=find_system('newModel/Subsystem','BlockType','Gain','Gain','GainPara1');
for i=1:length(gain);
set_param(gain{i},'Gain','NewGainPara1');
end/<code>


運行上面代碼後,模型變為下圖。

Simulink中怎麼批量修改模塊參數名稱?

兩個模塊的參數名稱從GainPara1成功變為New GainPara1(圖中紅框),且其他模塊參數名稱保持不變(圖中藍框),也實現了我們的任務。


做完兩個任務之後,發現Simulink模塊的參數名稱很奇怪,有的叫Value,有的叫Gain,還有的叫Initial condition,等等。所以,當我們知道需要修改哪些類型模塊的參數名稱時,可以直接選用對應的參數名稱來使用find_system來尋找;當我們不知道有哪個模塊用了待修改的參數時,我們可能就需要所有模塊類型都使用find_system找一遍。


以上,以Constant、Gain模塊參數名稱修改為例,簡要介紹了批量修改參數名稱的方法。每一次批量修改其他的模塊參數名稱時,都需要手動修改代碼,交互方式不太友好,下一篇我們嘗試用GUI界面來完成批量修改的任務。


分享到:


相關文章: