WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Level2 m S-Function --> TLC mit set_param

 

Jazzer
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 28.03.10
Wohnort: HH
Version: 2009b 32bit
     Beitrag Verfasst am: 10.05.2010, 11:46     Titel: Level2 m S-Function --> TLC mit set_param
  Antworten mit Zitat      
Moin zusammen,

Bastel jetzt schon eine Woche an dem Problem rum, komme aber nicht weiter.

Was ich vor habe:
Ich möchte verschiedene Scenarios als s-functions ablaufen lassen.
In den S-functions stehen nur Zeitabhängige set_param(bla...).
So kann ich dann z.B. nach 10 Sekunden die Amplitude eines Sinus auf 10 erhöhen, dann bei 12 Sekunden den Sinus ganz raus nehmen und dann wieder bei 50 Sekunden mit einer anderen Frequenz und Amplitude einschalten. Das funktioniert auch ganz Prima, solange ich das alles auf meinem Laptop mache.

Mein Problem:
Das ganze möchte ich aber auch auf einem XPC Target laufen lassen und dann benötige ich für jede s-function.m auch eine tlc-Datei.

Ich bekomme es einfach nicht hin einen bestimmten Parameter anzusprechen und diesen dann zu verändern.

Um mein Problem ein bisschen besser zu verdeutlichen habe ich mal ein Beispiel erstellt und hochgeladen.

Hier noch der Code:
S-Function:
Code:

function Test_1_sfcn(block)
  setup(block);


function setup(block)
 
  %% Register number of input and output ports
  block.NumInputPorts  = 1;
  block.NumOutputPorts = 1;


  %% Setup functional port properties to dynamically
  %% inherited.
  block.SetPreCompInpPortInfoToDynamic;
  block.SetPreCompOutPortInfoToDynamic;
 
  block.InputPort(1).Dimensions        = 1;
  block.InputPort(1).DirectFeedthrough = true;
 
  block.OutputPort(1).Dimensions       = 1;
 
  %% Set block sample time to variable sample time
  block.SampleTimes = [-1 0];
 
  %% Register methods
  block.RegBlockMethod('PostPropagationSetup',    @DoPostPropSetup);
  block.RegBlockMethod('InitializeConditions',    @InitConditions);
  block.RegBlockMethod('Outputs',                 @Output);  
  block.RegBlockMethod('Update',                  @Update);  
 
%endfunction

function DoPostPropSetup(block)

  %% Setup Dwork
  block.NumDworks = 1;
  block.Dwork(1).Name = 'X';
  block.Dwork(1).Dimensions      = 1;
  block.Dwork(1).DatatypeID      = 0;
  block.Dwork(1).Complexity      = 'Real';
  block.Dwork(1).UsedAsDiscState = true;
 
%endfunction

function InitConditions(block)

  %% Initialize Dwork
  block.Dwork(1).Data = 0;
 
%endfunction

function Output(block)
 
 
  t = block.Dwork(1).Data;      % Eingang ist clock ist t
  block.OutputPort(1).Data = t; % Gebe Zeit am Ausgang aus
 
  path = gcs;
  path_bla = [path,'/bla'];
 
  if t==10
    set_param(path_bla,'Value','9999');
  end
 
  if t==50
     set_param(path_bla,'Value','1111');
  end
 

function Update(block)

block.Dwork(1).Data = block.InputPort(1).Data(1);
 
%endfunction



 

Die zugehörige TLC Datei...
Code:

%implements Test_1_sfcn "C"
 
 %function Outputs(block, system) Output
   %assign rollVars = ["U", "Y"]
   %roll idx = RollRegions, lcv = RollThreshold, block, "Roller", rollVars
    %<LibBlockOutputSignal(0, "", lcv, idx)> = \
    %<LibBlockInputSignal (0, "", lcv, idx)>; %% Ausgang = Eingang
   %endroll
 %endfunction

%% hier fehlt jetzt noch die Parameterzuweisung bei x=10 und x=50 Sekunden

%% [EOF]
 


Ich weis wie ich in der TLC-Datei an den Eingang ran komme. Ich würde aber in der S-Function statt t=Eingang; lieber
Code:

t=block.CurrentTime;
 

benutzen. Dann kann ich mir den unnötigen Eingang sparen und die Funktion ist was schneller. Mein Problem ist dann aber wieder, diese Ändeung in der TLC Datei umzusetzen.

Ich hab mir schon von mathworks das 461 Seiten dicke PDF über den Target Language Compiler runter geladen. Wenn es dann aber zum
Code:
LibBlockParameter(param, ucv, lcv, sigIdx)
kommt, steht da nicht mehr drin als in der MAtlab Hilfe.

Stehe hier wirklichvöllig auf dem Schlauch und bin Euch für jeden noch so kleinen Tip dankbar.

Jazzer

PS: Wenn das alles nicht funktionieren sollte wie ich mir das vorstelle. Gibt es noch andere Möglichkeiten, solche "Ablaufscripte" zu bauen?
Ich meine, dass ich doch bestimmt nicht der Einzige bin der verschiedene Scenarien testen will. Da muss es doch irgendeine einfachere Lösung geben als der Mist mit den S-Functions und TLC Dateien...

Test_1_sfcn.tlc.m
 Beschreibung:
nicht fertige tlc Datei... muss in Test_1_sfcn.tlc umbenannt werden!

Download
 Dateiname:  Test_1_sfcn.tlc.m
 Dateigröße:  420 Bytes
 Heruntergeladen:  658 mal
Test_1_sfcn.m
 Beschreibung:

Download
 Dateiname:  Test_1_sfcn.m
 Dateigröße:  1.68 KB
 Heruntergeladen:  678 mal
Test_1.mdl
 Beschreibung:
Simulink Datei

Download
 Dateiname:  Test_1.mdl
 Dateigröße:  21.24 KB
 Heruntergeladen:  567 mal
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.