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

S-Functions: Eingangswert bei def. Ereignis "einfrieren

 

Monty74
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 08.12.08
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 20.06.2011, 10:25     Titel: S-Functions: Eingangswert bei def. Ereignis "einfrieren
  Antworten mit Zitat      
Hallo,
ich möchte eine S-Funktion schreiebn, bei der ein am Eingang anliegender Istwert bei einem bestimmtem Ereignis "eingefroren" wird.
Irgendwie habe ich gerade einen Programmierhänger und komme nicht weiter. Ich verwende zwei InPorts (Flag und Istwert bzw. Rohsignal) und zwei OutPorts, wobei der erste Ausgang das Rohsignal zu einem bestimmten Ereigis/Zeitpunkt wiederspiegelt.
Verändert sich das Eingangssignal jedoch ständig, soll das Ausgangssignal bei Flag=1 den aktuellen Eingangswert einfrieren. Und zwar so lange, bis das Flag erneut auf 1 gesetzt wird. Das Schalten des Flags erfolgt manuell.

Ich hatte mir überlegt mit Workspaces zu arbeiten, aber irgendwie weiß ich nicht, wie ich das programmieren kann. Hat jemand eine Idee für mich? Anbei ein Codeauszug und im Anhang die S-Funktion und das Modell dazu. Ich arbeite mit Matlab 2010b.
Freu mich über Anregungen... Monty74

Code:
/* Get parameter */
dT = mxGetPr(SAMP_TIME_ARG)[0];  
 
/* Read input signals */
uPtrs = ssGetInputPortRealSignalPtrs(S, 0);
comp_flag = (int_T) *uPtrs[0];

uPtrs = ssGetInputPortRealSignalPtrs(S, 1);
raw_value = *uPtrs[0];    

/* Get values from last step */
comp_flag_last    = IWork[COMP_FLAG_LAST];
offset_value_last = RWork[OFFSET_VALUE_LAST];
time_1            = RWork[TIME_1];

/* Check if offset compensation has to be done */
if (comp_flag == FLAG_COMP_OFF)
{
  time_1 = 0.0;

  offset_value = 0.0;
}
else if ((comp_flag == FLAG_COMP_ONA || comp_flag == FLAG_COMP_ONB)
            && comp_flag_last != FLAG_COMP_ONA || comp_flag_last != FLAG_COMP_ONB)
{
  /* Interne Zeit berechnen */
  time_1 += dT;
  offset_value = raw_value;
}
 
/* Compensate signal value */
signal_value = offset_value;

/* Output signal values */
y = ssGetOutputPortSignal(S, 0);
y[0] = signal_value;

y = ssGetOutputPortSignal(S, 1);
y[0] = time_1;

[/code]

momreg.mdl
 Beschreibung:

Download
 Dateiname:  momreg.mdl
 Dateigröße:  28.14 KB
 Heruntergeladen:  487 mal
momentenkompensation.c
 Beschreibung:

Download
 Dateiname:  momentenkompensation.c
 Dateigröße:  4.57 KB
 Heruntergeladen:  987 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.