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

Ausgabe in Datei mit s-function via fprintf

 

Mr.Gnarf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2012, 18:04     Titel: Ausgabe in Datei mit s-function via fprintf
  Antworten mit Zitat      
Hallo,

ich probiere seit einiger Zeit eine recht simple Datei ausgabe in eine S-Function einzubauen. Das ganze wollte ich einfach via "fprintf..." machen, allerdings erstellt er mir weder das file noch gibt er mir irgendwas aus.

Hier mal der Programmcode, vielleicht könnt ihr mir da ja weiter helfen!

Code:
static void mdlOutputs(SimStruct *S, int_T tid)
{
    #ifndef MATLAB_MEX_FILE      
    int a=1;
    FILE *txt;
    txt = fopen("ISR_Log.txt","w");
    if (txt == NULL)
    {
        ssPrintf("Konnte Datei nicht öffnen!");
    }
    fprintf(txt,"Hallo, test, test! %d",a);
   
    fclose(txt);
   #endif
}

MfG


Mr.Gnarf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2012, 18:31     Titel:
  Antworten mit Zitat      
Da fällt mir gerade noch etwas ein, ich habe mir in meiner s function eine eigene function erstellt die ich mit prototypen etc. angelegt habe. Diese rufe ich in mdlOutputs auf. Ist es richtig das ich in eigenes angelegten functionen keine komandos wie
Code:
ssSetPWorkValue(S,0,name);
etc. nutzen kann?!

Das ganze erschwert mir die arbeit schon ziemlich.
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2012, 20:35     Titel:
  Antworten mit Zitat      
Zu deinem Problem mit fprint:
https://www.mathworks.com/support/s.....t=ML&solution=1-192X8

Zu deinem Problem mit ssSetPWorkValue:
Sollte grundsätzlich möglich sein. Bitte Code+Fehlerbeschreibung posten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Gnarf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2012, 11:00     Titel:
  Antworten mit Zitat      
Hey,

danke erstmal aber es geht ja um ein fprintf, d.h. eine Ausgabe in eine .txt Datei. Aber es sieht dann ja wohl leider so aus als würde das in einer S-Function nicht funktionieren, was ich mir eigentlich nicht vorstellen kann...

Zu dem Problem mit den ss... befehlen in einer selbst erstellten funktion innerhalb der S-Function. Es geht darum das ich über einen automatisch ausgelösten interrupt in eine vorher bestimmte Interrupt Service Routine springe, d.h. in eine vordefinierte funktion die z.b.
Code:

void ISR()
{
            UInt32  ErrorCode = 0;
            Int32   IdTaskGuilty =0;
            char    TaskName[NAME_LENGTH_MAX +8] = {'\0'};
            FILE    *txt;
   
         
            txt = fopen("ISR_Log.txt","w");
            if (txt == NULL)
            {
                msg_info_printf(0,0,"Konnte Datei nicht öffnen!");
            }
           
            //get the TaskId and TaskName from the expired task
            ErrorCode = task_expired_get(&IdTaskGuilty,TaskName);
           
            ssSetPWorkValue(S,1,TaskName);
                       
            fprintf(txt,"Task was not triggered! TaskID: %d , TaskName %s ! /n",IdTaskGuilty,TaskName);
           
            //read old value from the NVRam
           
                     
            fclose(txt);
 


Die funktion
Code:
rufe ich aber nie selber auf, sondern der funktions name wird an den interrupt übergeben und dieser springt automatisch darein so bald er auslöst. So innerhalb dieser funktion
Code:
void ISR()
die in der S-Function selbst erstellt wurde möchte ich mir nun ein log-file schreiben mit hilfe der fprintf funktionen und mir die Variabel
Code:
in das PWorkValue schreiben. Allerdings erstellt mir Matlab weder das Log-File, noch kennt er innerhalb dieser funktion den Befehl
Code:
ssSetPWorkValue(S,0,TaskName)



Die Fehlermeldung dazu ist:
Code:
(E) C0020; "..\watchdog.c", line 162 pos 13; identifier "S" is undefined
              ssSetPWorkValue(S,1,TaskName);
              ^


was ja darauf hindeutet das er den Header "simstruc.h" nicht hat oder kennt in der selbst geschriebenen funktion... Die Fehlermeldung kommt übrigens bei fast allen ss... Befehlen.

Danke schonmal im voraus.

MfG
 
Mr.Gnarf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 11:37     Titel:
  Antworten mit Zitat      
Hey,

wollte das Thema nochmal nach oben bringen! Hat keiner einen Lösungsvorschlag für das Problem?

MfG
Gnarf
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 13:18     Titel:
  Antworten mit Zitat      
S (SimStruct) wird an die Funktion nicht übergeben und ist daher unbekannt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Gnarf

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 14:04     Titel:
  Antworten mit Zitat      
Hey,

danke für deine Antwort!

Habe nun S an die Funktion übergeben und er spuckt keine Fehlermeldung mehr aus bei ssSetPWorkValue... Smile Danke!

Allerdings schreibt er mir immer noch kein Log File, egal wo ich meinen code aufrufe. Sei es in der
Code:
static void mdlOutputs(SimStruct *S, int_T tid)
Funktion oder in meiner selbst geschriebenen.

Das Programm gibt mir "leider" auch keine Fehlermeldung aus oder sonstigens, habe mir mittlerweile auch mit
Code:

eine fehlerüberprüfung eingebaut, allerdings ist dieser Wert auch immer 0 d.h. es gibt keinen Fehler mit diesem Stream. Ich bin ziemlich ratlos und weiß mittlerweile nicht mehr wirklich weiter. Hier nochmal der komplette Code:
Code:
log = fopen("ISR_Log.txt","w+");
            if (log == NULL)
            {
                msg_info_printf(0,0,"Konnte Datei nicht öffnen!");
            }
            fprintf(log," TaskID: %d , TaskName %s ! /n",IdTaskGuilty,TaskName);
            e=ferror(log);
           ssPrintf("TXT: %d FERROR: %d",log,e);
fclose(log);
 


MfG
Gnarf
 
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 - 2025 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.