[matlab/simulink] odczyt z wykresu

Nov 04, 2006 Last reply: 19 years ago 3 Replies

Witam.



Mam uklad zamodelowany w Simulinku. W czasie symulacji tworzony jest wykres - efekt dzia³ania obiektu scope. Na osi Y mam obserwowan± wielko¶æ, na osi X - czas. Chce odczytac z wykresu wielkosc obserwowana w chwili t (np. t=0,95s). Czy da sie jakos zautomatyzowac proces odczytu? U mnie wyglada to tak, ze powiekszam wykres odpowiednio, aby na osi X pokazal sie czas 0,95 i wtedy "po palcu" odczytuje konkretna wartosc z wykresu, przyporz±dkowan± czasowi t. Jest to sposob bardzo niewygodny i czasochlonny, kiedy w gre wchodzi kilkadziesi±t symulacji i w ka¿dej trzeba odczytaæ conajmniej dwie warto¶ci dla ró¿nych czasów. Czy jest jakas metoda, zeby warto¶æ przyporz±dkowana dla konkretnego czasu t z wykresu, pokazywa³a siê w jakim¶ okienku, albo w przestrzeni roboczej Matlaba (jako liczba "k" na przyklad) ? Czy moze jestem skazany tylko na reczny odczyt ?



pozdro


ARO napisał(a):

No coś Ty, w MATLABIE?!

W matlabie 7.1 masz już odpowiedni 'przycisk' do wskazywania wartości na wykresie. Jak nie masz 7.1 to we właściwościach Scopa, ustaw by Ci zapisywał wartości do przestrzeni roboczej (CZAS i DANA poniżej) Wtedy piszesz skrypcik mniej więcej taki:

t=0.95; for i=1:length(DANA); {

if CZAS(i)=>t ; # "=>" bo niekoniecznie krok symulacji ustawi Cię # w t=0.95s. { print(DANA(i)); K=DANA(i) break;

} }

powinno działać, niesprawdzałem. Nie jestem pewien czy break przerwie pętle for. Estetyczniej byłoby skorzystać z jakiegoś repeat until, ale składni nie pamiętam.

U¿ytkownik "PH" snipped-for-privacy@wp.pl napisa³ :

O to wlasnie mi chodzilo. Dzieki za podpowiedz :)

Dla potomnych dodam:

Wystarczylo w "parameters" mojego scope'a kliknac w "save data to workspace" i pokombinowac z formatem danych - udalo mi sie odczytac dane dopiero z "array". Byc moze nie umiem poslugiwac sie pozostalymi dwoma (structure i structuwe with time) formatami danych. Odczyt przeprowadzilem na podstawie Twojego skryptu. Jednak w moim przypadku (matlab 6.5, r13) wyglada on tak:

t=0.95; for cnt=1:length(pos) %pos - tu wrzucam dane ze scopa if pos(cnt,1)>=t %kolumna 1 zawiera czas k=pos(cnt,2); %kolumna 2 zawiera wartosc obserwowanego sygna³u break end end

pozdro!

ARO napisał(a):

Jeśli masz daną miałbyś w strukturze "cnt" to zapewne array z czasem byś uzyskał przez wpisanie: cnt.time natomiast do array'a z danymi odwołanie brzmiałoby to oidp: cns.data.values

gdy w command window wpiszesz poprostu "cnt" - to wyświetli Ci sie zestaw możliwych odwołań do "podstruktur". no i dalej cnt.cośtam, zadziała podobnie.

Wszystko to po to, byś mógł dane zapisywać do mat.a a nie korzystać z RAM'u kompa.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required