2014-09-22 9 views
6

OK, od pewnego czasu walczę z tym. Jaki jest najlepszy sposób, aby wykonać następujące czynności:Czy nazwy sygnałów pochodzące z linków biblioteki są unikalne?

enter image description here

gdzie Reaction Wheel 1-4 znajdują się odnośniki do tego samego bloku w bibliotece. Gdy sygnały Speed Counter, Speed Direction i Current dodaje się końcowy sygnał wyjściowy autobusu, jak pokazano MATLAB (prawnie) podnosi:

ostrzeżenie: Sygnały 9, 10, 11, 12 wchodzące magistrali Twórca nazwy „myAwesomeModel” powiela 'Obecny'. Są one tworzone jako unikalne przez dołączenie "(signal #)" do sygnałów w wynikowej magistrali. Proszę zaktualizuj etykiety sygnałów tak, aby wszystkie były unikalne.

Do tej pory używam "rozwiązanie" tak:

enter image description here

czyli umieszczenia rozmiar MUX-1/gain-of-1/inne-atrapę blok w środku, więc sygnały mogą zostać przemianowane na coś wyjątkowego. Jednak naprawdę lubię wierzyć, że The MathWorks pomyślał o lepszym sposobie wykonania tego ...

Jaki jest "właściwy" sposób konstruowania sygnałów magistrali w ten sposób? Czuję się tak, jakbym był zmuszony do przyjęcia konkretnego projektu/architektury, ale to, co jest dokładnie, wymyka mi się w tej chwili ...

+0

prostu zrozumieć pytanie, szukasz alternatywy do zmiany nazwy sygnałów? Można utworzyć niestandardowy selektor szyny, podsystem z maską, w którym można wybrać liczbę wejść i nadać im nazwy. Jak to brzmi? Myślę, że naprawdę nie ma mowy o dummys, możesz po prostu sprawić, by wyglądały ładniej ... – thewaywewalk

+0

Inną opcją byłoby przegrupowanie, po prostu stwórz autobusy "RW1", "RW2" ... i przypisz prąd. Miałyby wtedy nazwę 'RW1.Current',' RW2.Current' ... – thewaywewalk

+0

@thewaywewalk: w powyższym przykładzie każdy model "RW" wyprowadza własną magistralę ('Data Output'). Z każdego z tych autobusów wybieram tylko 3 sygnały (tak, że nazwy sygnałów wyświetlane w selektorach magistrali rzeczywiście są "RW1.Current" i podobne, jak mówisz). Jednakże, jeśli chcesz zgrupować takie sygnały ponownie w nowej magistrali, MATLAB narzeka na identyczne nazwy sygnałów, albo na wejściu magistrali (z indywidualnymi przełącznikami magistrali podłączonymi do kreatora magistrali, jak na rysunku), albo na wyjściu magistrali (jeśli podłączysz 'RW1-4' bezpośrednio do kreatora magistrali, i zaznaczysz" output as bus "Nie widzę żadnego sposobu obejścia go bez manekinów ... –

Odpowiedz

1

To było dla mnie wyzwanie, ale wygląda na to, że to załatwiłem . Matlab R2007a tutaj. Zrobię przykład z już wykonanym podsystemem, z jego wejściami, wyjściami, ...

1- W oknie Właściwości bloku dodaj znacznik do bloku. Zostanie to zrobione, aby zidentyfikować blok i jego "rodzeństwo" w systemie. MY_SUBSYSTEM dla tego przykładu.

2 Właściwości bloku ponownie. Dodaj poniższy fragment w CopyFcn zwrotnego:

%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- W _INDEX_OF_PORT_TO_BE_RENAMED_ należy umieścić wskaźnik sygnału Port (zaczynając od 1), który chcesz mieć przemianowany na każdej kopii bloku. Dla pojedynczego bloku wyjścia powinno to być 1. BASENAME_HERE powinno być portem nazwy bazowej, w tym przypadku "Current" dla ciebie.

4- Dodaj blok do wybranej biblioteki i usuń instancję użytą do utworzenia tego przykładu. Od tej chwili, w miarę dodawania z biblioteki lub kopiowania istniejącego bloku, port wyjściowy powinien mieć nazwę Current1, Current2, Current3 i tak dalej. Zauważ, że możesz zastosować dowolną konwencję lub formatowanie.

Mam nadzieję, że to pomoże. To zadziałało dla mnie, nie wahaj się zapytać/krytykować!

Uwaga: Oczywiście, jako model rośnie, metoda ta może być komputer wymagający jak będzie find_system trzeba pętli przez cały model, jednak wygląda na to dobrym obejście dla mnie w małych i średnich systemach wielkości.

+0

Dzięki :) Lubię dobry hack, ale musisz przyznać, że to nie może być to, co Mathworks uważa za najlepszy sposób zaprojektowania systemów ... + 1 za wysiłek i uśmiech na mojej twarzy. –

+0

Cóż, to po prostu łatwa w nazewnictwie konwencja, myślę, że mój brak głębokiego doświadczenia z odniesieniami do dużych modeli i dalsza nowoczesna technika wykraczająca poza R2007a uniemożliwia mi widzenie dalszych pułapek ... :-) – Manex

1

Podłącz selektor magistrali do każdego wyjścia danych. Wybierz żądane sygnały i ustaw "Output as bus". Następnie podłącz wszystkie selektory magistrali do kreatora magistrali.

simulink model

+0

Jak wspomniano w komentarzach, że nie działa: nadal umieszczasz nieunikalne nazwy sygnałów w jednym autobusie. W najlepszym przypadku odłoży problem tylko gdzieś poza tym podsystemem (co jest prawdopodobnie jeszcze gorsze). –

+0

Tworzy zorganizowaną magistralę z nazwami sygnałów jak 'rw1.current', nazwy są unikalne. – Daniel

+2

OK, pozwól mi przeformułować: masz rację, to działa, ale tylko na tym poziomie. Jednak po podłączeniu tej magistrali wyjściowej do innego selektora magistrali, wybierz "rw1.speed" i "rw2.speed" z sygnałów i wybierz opcję 'Output as bus', struktura nie zostanie przeniesiona do nowej magistrali, a ty otrzymasz ostrzeżenie. Powyższy model jest mały, moje "prawdziwe" modele są ogromne, a liczba sygnałów naprawdę usprawiedliwia drugą opcję "Wyjście jako autobus". Dlatego tak naprawdę wolę mieć naprawdę unikalne nazwy, bez * żadnego * ryzyka nazywania konfliktów. –

Powiązane problemy