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

Fragen zu Code-Fragment

 

mowad

CARNOT-Moderator


Beiträge: 12
Anmeldedatum: 22.01.16
Wohnort: ---
Version: 2019a
     Beitrag Verfasst am: 07.07.2017, 08:59     Titel: Fragen zu Code-Fragment
  Antworten mit Zitat      
Hallo zusammen,

ich versuche gerade einen C-Code aus einer best. Toolbox (Carnot) zu erweitern.
Rein theoretisch verstehe ich C++, habe aber bisher keine Erfahrung mit speziellen MATLAB-Funktionen.

In diesem bestehenden Code, wird zu Beginn ein "Build Checking" (so nennens die Autoren des Codes) gemacht. Dazu habe ich ein paar Fragen, deshalb hier der Code.

Code:

/*================*
 * Build checking *
 *================*/


/* Function: mdlInitializeSizes ===============================================
 * Abstract:
 *   Setup sizes of the various vectors.
 */
static void mdlInitializeSizes(SimStruct *S)
{
    ssSetNumSFcnParams(S, 0);
    if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S))
    {
        return; /* Parameter mismatch will be reported by Simulink */
    }

    if (!ssSetNumInputPorts(S, 1))
    {
        return;
    }
    ssSetInputPortWidth(S, 0, 7);
    ssSetInputPortDirectFeedThrough(S, 0, 1);
   
    if (!ssSetNumOutputPorts(S,1))
    {
        return;
    }
    ssSetOutputPortWidth(S, 0, 1);

    ssSetNumSampleTimes(S, 1);

    /* specify the sim state compliance to be same as a built-in block */
    ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);

    //     ssSetOptions(S,
    //                  SS_OPTION_WORKS_WITH_CODE_REUSE |
    //                  SS_OPTION_EXCEPTION_FREE_CODE |
    //                  SS_OPTION_USE_TLC_WITH_ACCELERATOR);
    #ifdef EXCEPTION_FREE_CODE
    ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
    #endif
   
    ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);
    ssSetSimStateVisibility(S, 1);
   
    ssSupportsMultipleExecInstances(S, true);
}
 


1.)Verstehe ich das richtig, dass zuerst mal die Anzahl der Eingangsparameter auf 0 gesetzt und dann verglichen wird, ob die Anzahl zur erforderlichen passt?
Scheint mir irgendwie unlogisch.

2.) Wenn dann die Anzahl der Input-Ports nicht auf 1 gesetzt wird, wird abgebrochen?

3.) Kann mir jmd. auf deutsch erklären was ssSetInputPortDirectFeedThrough(S, 0, 1); macht, die Erklärung in der Doku bringt mich nicht weiter (vlt. steh ich auch bloß auf dem Schlauch)

4.) Wieso wird dann die Inputweite wieder auf 1 gesetzt?

5.) Wieso wird das Verhalten der S-Funktion zweimal auf Default gesetzt?

6.) Brauche ich den ganzen Block oder kann der raus?

Code:

/* Function: mdlInitializeSampleTimes =========================================
 * Abstract:
 *    Specifiy that we inherit our sample time from the driving block.
 */
static void mdlInitializeSampleTimes(SimStruct *S)
{
    ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
    ssSetOffsetTime(S, 0, 0.0);
    ssSetModelReferenceSampleTimeDefaultInheritance(S);
}
 


1. Brauche ich den Code-Teil? Ich meine, woher sollte die Sample-Time sonst kommen?

Wäre toll, wenn mir die Fragen jemand beantworten könnte. Danke schonmal.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.07.2017, 12:44     Titel: Re: Fragen zu Code-Fragment
  Antworten mit Zitat      
Hallo mowad,

Um die Fragen beantworten zu können, müsste man zunächstmal die entsprechende Toolbox installiert haben. Man könnte also nach "Matlab Carnot" googeln, hoffen, dass man die gleiche Toolbox und Version findet, wie Du, das Programm installieren und sich dann durch die Dokumentation durcharbeiten. Das ist nicht effizient.

Zitat:
Rein theoretisch verstehe ich C++, habe aber bisher keine Erfahrung mit speziellen MATLAB-Funktionen.

C++ ist nicht Matlab, deshalb hat der Code nichts mit "speziellen Matlab-Funktionen" zu tun.

Was z.B. "ssSetNumSFcnParams(S, 0)" genau macht, sollte in der Dokumentation oder zumindest im Sourcecode der Funktion erklärt sein. Hast Du dort mal nachgeschaut?

Zitat:
3.) Kann mir jmd. auf deutsch erklären was ssSetInputPortDirectFeedThrough(S, 0, 1); macht, die Erklärung in der Doku bringt mich nicht weiter (vlt. steh ich auch bloß auf dem Schlauch)

Dann erkläre doch mal genau, welche Frage die Dokumentation offen lässt. Es ist nicht sinnvoll, sie nochmal auf Deutsch in Gänze nachzuerzählen, wenn Du eine konkrete Frage dazu hast.

Die anderen Fragen wiederum sind sehr konkret. Wenn jemand nicht miot der gleichen Toolbox die gleichen Probleme bearbeitet wie Du, kann man sie kaum beantworten.

Du veröffentlichst hier Source-Code ohne die dazugehörige Copyright Notitz. Der Code der Carnot-Toolbox wurde unter der "GNU Lesser General Public License" veröffentlicht. Hast Du mal nachgeschaut, ob dies das auszugsweise Veröffentlichen des Codes ohne Nennung des Autors erlaubt? Ich frage mal, denn Copyright von Code wird von vielen Nutzern dieses und anderer Foren schlicht ignoriert und kaum einer macht sich Gedanken darüber, welche Auswirkungen es haben kann, wenn man illegale Inhalte in einem Forum postet - für den Postenden und für die Betreiber des Forums.

Ich habe nach "Carnot" gegoogelt, die Toolbox runtergeladen, die Lizenz-Bedingungen durchgelesen, das File gesucht, aus dem Du zitiert hast, die GNU Lesser - Lizenz angeschaut und gesucht, was da zum Zitieren ohne Nennung der Quelle steht. In dieser Zeit konnte ich Dir bei der Lösung Deiner Fragen leider kein Stückchen weiter bringen. Sorry.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mowad
Themenstarter


CARNOT-Moderator


Beiträge: 12
Anmeldedatum: 22.01.16
Wohnort: ---
Version: 2019a
     Beitrag Verfasst am: 10.07.2017, 17:30     Titel:
  Antworten mit Zitat      
Entschuldigung erstmal für die Copyright-Geschichte, der Vollständigkeit halber hier, der Lizenztext, mit dem der Code hier gezeigt werden darf.

Code:
/***********************************************************************
 * This file is part of the CARNOT Blockset.
 * Copyright (c) 1998-2015, Solar-Institute Juelich of the FH Aachen.
 * Additional Copyright for this file see list auf authors.
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the copyright holder nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 ***********************************************************************
 


Alle angesprochenen Funktionen werden ganz kurz in der MATLAB Doku erklärt, daher gehe ich davon aus, dass die nicht aus der Toolbox kommen, sondern von MATLAB. Bis auf den einen angesprochenen Befehl verstehe ich die Befehle grundsätzlich, aber die Kombi ist mir unklar (wie beschrieben).
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.