2014-09-22 5 views
6

OK, ho lottato con questo per un po '. Qual è il modo migliore per ottenere il seguente:Rendi unici i nomi dei segnali provenienti dai collegamenti alle librerie?

enter image description here

dove Reaction Wheel 1-4 sono collegamenti con lo stesso blocco in una libreria. Quando i segnali Speed Counter, Speed Direction e Current vengono aggiunti al bus di uscita finale come mostrato, MATLAB (giustamente) lamenta:

avvertimento: Segnali 9, 10, 11, 12 entrano Bus Creator denominazioni 'myAwesomeModel' sono duplicati 'Attuale'. Questi sono resi unici aggiungendo "(segnale #)" ai segnali all'interno del bus risultante. Si prega di aggiornare le etichette dei segnali in modo che siano tutti unici.

Fino ad ora ho usato una "soluzione" come questo:

enter image description here

cioè, inserire un/blocco di altri-dummy size-1-mux/guadagno di 1 nel mezzo, quindi i segnali possono essere rinominati in qualcosa di unico. Tuttavia, mi piace molto credere che The MathWorks abbia pensato a un modo migliore per farlo ...

Qual è il modo "corretto" per costruire segnali di bus come questo? Mi sento piuttosto come se fossi spinto ad adottare un particolare design/architettura, ma quello che è precisamente, mi sfugge per il momento ...

+0

solo per capire la domanda, siete alla ricerca di un'alternativa per rinominare i segnali? È possibile creare un selettore bus personalizzato, un sottosistema con una maschera, in cui è possibile scegliere il numero di ingressi e assegnare loro i nomi. Come ti sembra? Penso che non ci sia davvero alcun modo per aggirare i dummy, puoi solo renderli più belli ... – thewaywewalk

+0

Un'altra opzione sarebbe il raggruppamento, basta creare bus "RW1", "RW2" ... e assegnare una corrente. Avrebbero quindi il nome 'RW1.Current',' RW2.Current' ... – thewaywewalk

+0

@thewaywewalk: nell'esempio precedente, ogni modello 'RW' restituisce il proprio bus (' Data Output'). Da ciascuno di questi bus seleziono solo 3 segnali (quindi i nomi dei segnali mostrati nei selettori di bus sono effettivamente 'RW1.Current' e simili, come dici tu). Tuttavia, se si desidera raggruppare nuovamente tali segnali in un nuovo bus, MATLAB si lamenta di nomi di segnali identici, sia sull'ingresso del bus (con singoli selettori bus collegati a un creatore del bus, come nella figura), sia sull'uscita del bus (se si collega 'RW1-4' direttamente a un creatore di bus, e si verifica" output come bus "Non vedo alcun modo intorno ad esso senza manichini ... –

risposta

1

Per me è stata una bella sfida ma sembra che l'ho risolto . Matlab R2007a qui. Farò l'esempio con un sottosistema già fatto, con i suoi ingressi, uscite, ...

1- In Proprietà del blocco, aggiungere un tag al blocco. Questo sarà fatto per identificare il blocco e i suoi "fratelli" nel sistema. MY_SUBSYSTEM per questo esempio.

2- Proprietà di blocco. Aggiungere il seguente frammento di CopyFcn callback:

%Find total amount of copies of the block in system 

len = length(find_system(gcs,'Tag','MY_SUBSYSTEM')); 

%Get handle of the block copied/added and name the desired signal accordingly 

v = get_param(gcb,'PortHandles');          
set(v.Outport(_INDEX_OF_PORT_TO_BE_RENAMED_),'SignalNameFromLabel',['BASENAME_HERE' num2str(len)]); 

3- In _INDEX_OF_PORT_TO_BE_RENAMED_ si dovrebbe mettere l'indice segnale di porta (a partire dal 1) che si desidera avere rinominato per ogni copia del blocco. Per un singolo blocco di output questo dovrebbe essere 1. BASENAME_HERE dovrebbe essere il port basename, in questo caso "Current" per te.

4- Aggiungere il blocco alla libreria desiderata ed eliminare l'istanza utilizzata per creare questo esempio. Da lì in poi, quando aggiungi dalla libreria o copi un blocco esistente, l'outport dovrebbe nominare Current1, Current2, Current3 e così via. Si noti che è possibile applicare qualsiasi convenzione o formattazione.

Spero che questo aiuti. Ha funzionato per me, non esitate a chiedere/criticare!

Nota: Ovviamente, come il modello cresce, questo metodo può essere informatizzato esigente come find_system dovrà scorrere l'intero modello, ma si presenta come una buona soluzione per me in impianti di piccole-medie dimensioni.

+0

Grazie :) Mi piace il trucco, ma devi ammettere che questo non può essere quello che pensa il Mathworks è il modo migliore per progettare i tuoi sistemi ... + 1 anche se per sforzo, e il sorriso sul mio viso. –

+0

Beh, è ​​solo un facile trucco per la naming-convention, suppongo che la mia mancanza di profonda esperienza nel referenziamento di grandi modelli e ulteriore tecnologia moderna oltre R2007a mi impedisca di vedere ulteriori insidie ​​... :-) – Manex

1

Collegare un selettore bus ad ogni uscita dati. Seleziona i segnali che desideri e imposta "Output come bus". Quindi collegare tutti i selettori bus a un bus creatore.

simulink model

+0

Come discusso nei commenti, che non funziona: stai ancora inserendo nomi di segnali non univoci in un unico bus. Nella migliore delle ipotesi, rimanderà il problema solo a qualche parte al di fuori di questo sottosistema (che è forse anche peggio). –

+0

Crea un bus strutturato con nomi di segnali come 'rw1.current', i nomi sono unici. – Daniel

+2

OK, lasciatemi riformulare che: hai ragione, funziona, ma solo a questo livello. Tuttavia, quando colleghi questo bus di uscita a un altro selettore bus, seleziona 'rw1.speed' e' rw2.speed' dai segnali e seleziona l'opzione 'Output come bus', la struttura non viene trasferita al nuovo bus, e tu ricevi l'avvertimento Il modello sopra è piccolo, i miei modelli "reali" sono enormi e il numero di segnali giustifica la seconda opzione "Uscita come bus". Pertanto, ho davvero la mia preferenza di avere nomi davvero unici, senza * nessun * rischio di conflitti di denominazione. –

Problemi correlati