Discussion:
[matlab/simulink] odczyt z wykresu
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
ARO
2006-11-04 13:55:31 UTC
Permalink
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
PH
2006-11-05 10:13:04 UTC
Permalink
Post by ARO
Witam.
roboczej Matlaba (jako liczba "k" na przyklad) ? Czy moze jestem skazany
tylko na reczny odczyt ?
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.
--
PH
ARO
2006-11-05 16:55:10 UTC
Permalink
Post by PH
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)
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
PH
2006-11-05 20:50:40 UTC
Permalink
Post by ARO
Post by PH
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)
O to wlasnie mi chodzilo. Dzieki za podpowiedz :)
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.
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.
--
PH
Loading...