Forum: Mikrocontroller und Digitale Elektronik Bilder mit Achsenskalierung in Scilab generieren, was mache ich falsch?


von Matze (Gast)


Lesenswert?

Hallo,

Schon seit ein paar Stunden versuche ich Bilder mit festgelegter 
Achsenskalierung der X-Achse in Scilab zu generieren.

Dabei arbeitet mein programm an sich korrekt, bis die Datei mit dem 
Namen:
"C1Trend_100005_0" geladen wird.
Ab dieser Datei hängt die Grafikausgabe und Scilab stürzt ab.

Wenn im Folgenden Programm die 2 Zeilen:
            a=gca();
            a.data_bounds=[0.00,-zaehl;400,zaehl];
nicht vorhanden sind, funktioniert es, aber so bekomm ich die Achsen 
eben nicht skaliert...
1
anf='C'
2
kanal=1
3
dateiname='trend_'
4
zaehler=100000
5
mitte='_'
6
ende=0
7
FS=400
8
i=1
9
ds=1
10
//fft_points=length(FFTdat)
11
//bis 1048576 in 400mS
12
a=0
13
b=FS/1048577
14
c=FS-b
15
f=(a:b:c);
16
set(gda(),"font_size",4);// Setzt 
17
zaehl=0.01
18
nam='0_01'
19
labe=strcat(['AP015_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
20
21
    while zaehler<100084
22
        clf()
23
        disp('Neuer Durchgang')
24
        while i<7       //Erzeuge je eine FFT der ersten 4 Zeitabschnite
25
            test=strcat([anf,string(kanal),dateiname,string(zaehler),mitte,string(ende)])
26
            disp(test)
27
            dat=csvRead(test)
28
            subplot(3,2,i)
29
            plot(f,dat)
30
31
            title(labe,"font_size",4)
32
            xlabel("t/ms","font_size",4)
33
            ylabel("Amplitude/V","font_size",4)
34
            xgrid(100)
35
            a=gca();
36
            a.data_bounds=[0.00,-zaehl;400,zaehl];
37
            if kanal==1
38
                kanal=2
39
                labe=strcat(['CWT-03_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
40
            elseif kanal==2
41
                kanal=1
42
                zaehler=zaehler+1
43
                labe=strcat(['AP015_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
44
            end
45
            i=i+1
46
        end
47
        i=1
48
        disp('Bild machen1')
49
        bild=strcat(["DS",string(ds),mitte,string(ende),mitte,nam])
50
        disp('Bild machen2')
51
        xs2png (0, [bild]);  //SUPER!
52
        disp('Bild machen3')
53
        ds=ds+1
54
        disp('Bild gemacht')
55
    end

Wäre echt unheimlich toll wenn jemand da eine Idee hat :)
Ich kann einfach nicht verstehen, warum es gerade da auf einmal hängt...

von Matze (Gast)


Lesenswert?

Habe es grade mit einem anderen PC versucht, also daran scheint es nicht 
zu liegen.

von Matze (Gast)


Lesenswert?

Um die vorgegebene Achsenskalierung als minimale auszuwählen, so dass 
alle Abbildungen welche kleinere Werte enthalten mit dieser Skalierung 
generiert werden. Aber bei Abbildungen mit größerem Wertebereich auf 
Autoskalierung umgeschalten wird vertauscht man die Reihenfolge der 
Befehle.

Nachteil ist dass die Abbildung untern Rechts keine Skalierung der 
X-Achse bekommt...
1
    while zaehler<100084
2
        clf()
3
        disp('Neuer Durchgang')
4
        while i<7       //Erzeuge je eine FFT der ersten 4 Zeitabschnite
5
            test=strcat([anf,string(kanal),dateiname,string(zaehler),mitte,string(ende)])
6
            disp(test)
7
            dat=csvRead(test)
8
            subplot(3,2,i)
9
            
10
            
11
            title(labe,"font_size",4)
12
            xlabel("t/ms","font_size",4)
13
            ylabel("Amplitude/V","font_size",4)
14
            xgrid(100)
15
            lines(0)
16
            a=gca();
17
            //a.view="2d";
18
            a.data_bounds=[0.00,-zaehl;400,zaehl];
19
            plot(f,dat)
20
            if kanal==1
21
                kanal=2
22
                labe=strcat(['CWT-03_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
23
            elseif kanal==2
24
                kanal=1
25
                zaehler=zaehler+1
26
                labe=strcat(['AP015_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
27
            end
28
            i=i+1
29
        end
30
        i=1
31
        disp('Bild machen1')
32
        bild=strcat(["DS",string(ds),mitte,string(ende),mitte,nam])
33
        disp('Bild machen2')
34
        xs2png (0, [bild]);  //SUPER!
35
        disp('Bild machen3')
36
        ds=ds+1
37
        disp('Bild gemacht')
38
    end

von Matze (Gast)


Lesenswert?

Hier nun die Lösung. Es kommt entscheident darauf an, in welcher 
Reihenfolge man Beschriftet und skaliert.

--> Leider scheint nirgends genau dokumentiert zu sein, in welcher 
Reihenfolge man skalieren muss, damit Scilab nicht hängt...

Eine Funktionierende Varianten ist diese:
1
    while zaehler<100084
2
        clf()
3
        disp('Neuer Durchgang')
4
        while i<7       //Erzeuge je eine FFT der ersten 4 Zeitabschnite
5
            test=strcat([anf,string(kanal),dateiname,string(zaehler),mitte,string(ende)])
6
            disp(test)
7
            dat=csvRead(test)
8
            subplot(3,2,i)
9
            
10
            
11
            title(labe,"font_size",4)
12
            xlabel("t/ms","font_size",4)
13
            ylabel("Amplitude/V","font_size",4)
14
            xgrid(100)
15
            lines(0)
16
            a=gca();
17
            //a.view="2d";
18
            a.data_bounds=[0.00,-zaehl;400,zaehl];
19
            plot(f,dat)
20
            xlabel("t/ms","font_size",4)
21
            if kanal==1
22
                kanal=2
23
                labe=strcat(['CWT-03_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
24
            elseif kanal==2
25
                kanal=1
26
                zaehler=zaehler+1
27
                labe=strcat(['AP015_C',string(kanal),dateiname,string(zaehler),mitte,string(ende)])
28
            end
29
            i=i+1
30
        end
31
        i=1
32
        disp('Bild machen1')
33
        bild=strcat(["DS",string(ds),mitte,string(ende),mitte,nam])
34
        disp('Bild machen2')
35
        xs2png (0, [bild]);  //SUPER!
36
        disp('Bild machen3')
37
        ds=ds+1
38
        disp('Bild gemacht')
39
    end

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.