Verfasst am: 20.10.2010, 22:04
Titel: In Scicos Scilab-Code verwenden
Hallo liebe Forenmitglieder,
meine Frage ist sicher banal, dennoch habe ich im Netz keine Hilfe gefunden.
Ich möchte in Scicos eine Simulation aufbauen. Dazu möchte ich in Scilab geschriebene Programme oder Funktionen, welche kompexe Berechnungen beinhalten, in einem Block unter Scicos einbinden. Mein erster Verdacht viel auf den scifunc - Block, nur hat der mich nicht wirklich ans Ziel gebracht. (Ich habe nicht verstanden, wie ich meinen Code einbinde.) Habt Ihr einen Tip für mich?
einen eigenen Scicos-Block zu definieren, erfordert ein bisserl Übung.
Schau Dir z.B. mal den Block für die Aufspaltung einer komplexen Zahl in Real- und Imaginärteil an
(SCI/macros/scicos_blocks/MatrixOp/MATZREIM.sci)
Der Quellcode für matzreim.sci ist selbst für diese scheinbar einfache Aufgabe recht umfangreich:
Code:
function[x,y,typ]=MATZREIM(job,arg1,arg2)
//
// Copyright INRIA
x=[];y=[];typ=[];
select job
case 'plot' then
standard_draw(arg1) case 'getinputs' then
[x,y,typ]=standard_inputs(arg1) case 'getoutputs' then
[x,y,typ]=standard_outputs(arg1) case 'getorigin' then
[x,y]=standard_origin(arg1) case 'set' then
x=arg1
model=arg1.model;graphics=arg1.graphics;label=graphics.exprs ifsize(label,'*')==14 then label(9)=[],end //compatiblity
while %t do
[ok,decomptyp,lab]=getvalue('Set MATZREIM block parameters',['decomposition type(1=Complex2Real&Imag 2=Real&Imag2Complex)'],list('vec',1),label) if ~ok then break,end
label=lab
if(decomptyp==1) then
junction_name='matz_reim';
in=[-1-2];
it=2;
out=[-1-2;-1-2];
ot=[11];
elseif(decomptyp==2) then
junction_name='matz_reimc';
in=[-1-2;-1-2];
it=[11];
out=[-1-2];
ot=2;
else message('decomposition typeis not supported');ok=%f;
end
funtyp=4;
if ok then
[model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[]) end if ok then
model.sim=list(junction_name,funtyp);
arg1.model=model
graphics.exprs=label
arg1.graphics=graphics
x=arg1
break end end case 'define' then
model=scicos_model()
junction_name='matz_reim';
funtyp=4;
model.sim=list(junction_name,funtyp)
model.in=-1
model.in2=-2
model.intyp=2
model.out=[-1;-1]
model.out2=[-2;-2]
model.outtyp=[11]
model.evtin=[]
model.evtout=[]
model.state=[]
model.dstate=[]
model.rpar=[]
model.ipar=[]
model.blocktype='c'
model.firing=[]
model.dep_ut=[%t %f]
label=sci2exp(1)
gr_i=['xstringb(orig(1),orig(2),''Re&Im'',sz(1),sz(2),''fill'');']
x=standard_define([32],model,label,gr_i) end
endfunction
Verfasst am: 21.10.2010, 09:27
Titel: Re: In Scicos Scilab-Code verwenden
As Andreas has indicated, you can build your block using Scilab code. You need to take a "SciBLK" block in the "Others" Palette. Then you have to set the parameters of the block such as the name of the function, input/output port sizes, etc.
Hope this helps.
newinscilab
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.10.2010, 11:49
Titel:
Hallo,
Ich danke Euch für die schnelle Hilfe. Ich werde es versuchen.
newinscilab
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.10.2010, 09:57
Titel: In Scicos Scilab-Code verwenden
Hallo,
leider bin ich noch nicht weitergekommen.
Ich habe in Scilab eine funktion geschrieben, der man 6 werte übergeben muss, die dann eine Berechnung durchführt und ein Eergebniss zurückgibt.
Ist es möglich auf einfachem Wege diese Funktion in scicos / Xcos in einen Block einzubauen, der dann 6 eingänge und einen ausgang hat?
Beste Grüße und Dank schon mal im Vorraus
roberto.bucher@supsi.ch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.10.2010, 11:57
Titel:
Erstens, wenn Du simulieren willst, vergisst im Moment Scilab und Xcos und benuetzt bitte Scicoslab (z.B version 4.4b7 auf www.scicoslba.org). Du wirdst sicher viel Zeit und anders sparen...
Fuer die Benuetzung von SciFunc bloecke in einem Block Diagram, kannst Du das beigelegte Beispiel benuetzen, das zwei input von je 3000 signale bekommt und eine vekot multiplication durchfuehrt jede 3 Sek. und das resultat auf einem scope darstellt. Es ist sehr einfach zu testen:
1) Oeffne Scicoslab
2) Laedt die function fuer das SciFunc block mit "getf myfun.sci"
3) Starte das Scicos editor mit "scicos test)
4) Starte die Simulation
roberto.bucher@supsi.ch hat Folgendes geschrieben:
Erstens, wenn Du simulieren willst, vergisst im Moment Scilab und Xcos und benuetzt bitte Scicoslab (z.B version 4.4b7 auf www.scicoslba.org). Du wirdst sicher viel Zeit und anders sparen...
Warum spart Scicoslab gegenüber Xcos Zeit? Gibt es noch andere Meinungen dazu??
[quote="roberto.bucher@supsi.ch"]Erstens, wenn Du simulieren willst, vergisst im Moment Scilab und Xcos und benuetzt bitte Scicoslab (z.B version 4.4b7 auf www.scicoslba.org). Du wirdst sicher viel Zeit und anders sparen...
Fuer die Benuetzung von SciFunc bloecke in einem Block Diagram, kannst Du das beigelegte Beispiel benuetzen, das zwei input von je 3000 signale bekommt und eine vekot multiplication durchfuehrt jede 3 Sek. und das resultat auf einem scope darstellt. Es ist sehr einfach zu testen:
1) Oeffne Scicoslab
2) Laedt die function fuer das SciFunc block mit "getf myfun.sci"
3) Starte das Scicos editor mit "scicos test)
4) Starte die Simulation
Verfasst am: 18.11.2011, 11:07
Titel: Xcos: Suche Zugang zu den Parametern in Blocks
Hallo,
ich wollte dem Roberto eine Frage stellen, aber wahrscheinlich habe ich etwas falsch gemacht, die Frage ist nicht erschienen.
Also: der von Roberto vorgeschlagene Weg über ScicosLab ist vielversprechend und ich möchte es besser lernen. Finde aber zu wenig für mich verständliche Dokumentation. Wie lernt ein Anfänger ScicosLab?
Gruss
Ericson
ich bin auch neu in Scilab 5.3 und wollte die Frage hier noch einmal aufgreifen.
Ich habe ein Scilab Script geschrieben.
Jetzt möchte ich dieses in Xcos einbinden.
Hierzu soll aus dem Scilab Script ein Xcos Block werden (4 Eingänge, 2 Ausgänge)
Wie muss ich nun vorgehen? Also erstes ist wohl aus dem Scilab Script eine Scilab Function zu erstellen?
Es wäre nett, wenn mir jemand weiterhelfen könnte, da ich bis jetzt nichts brauchbares gefunden habe wie hier vorzugehen ist. Ausser diesem Thread hier finde ich im Netz leider nichts.
ich bin auch neu in Scilab 5.3 und wollte die Frage hier noch einmal aufgreifen.
Ich habe ein Scilab Script geschrieben.
Jetzt möchte ich dieses in Xcos einbinden.
Hierzu soll aus dem Scilab Script ein Xcos Block werden (4 Eingänge, 2 Ausgänge)
Wie muss ich nun vorgehen? Also erstes ist wohl aus dem Scilab Script eine Scilab Function zu erstellen?
Es wäre nett, wenn mir jemand weiterhelfen könnte, da ich bis jetzt nichts brauchbares gefunden habe wie hier vorzugehen ist. Ausser diesem Thread hier finde ich im Netz leider nichts.
4. scifunc_block_m einfügen, dazu im im ersten Fenster
- Input port sizes: [1,1;1,1;1,1;1,1]
- Output port sizes: [1,1;1,1]
Im zweiten Fenster
[y1,y2]=bat_testfunktion(u1,u2,u3,u4)
Im fünften Fenster
y1=[]
y2=[]
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.