|
|
Fortrandateien in Simulink |
|
christian_2 |
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 11:26
Titel: Fortrandateien in Simulink
|
|
|
|
|
Hallo zusammen,
den ganzen Vormittag probiere ich nun schon, eine einfache Fortrandatei als s-Funktion in Simulink einzubinden.
Die prinzipielle Vorgehensweise ist mir bewusst, mit c-Dateien habe ich keine Probleme.
Was habe ich gemacht?
1. Fortrancompiler einbinden:
So, wie ich das verstehe, scheint das funktioniert zu haben, oder?
2. Quelldatei compilieren
Nachdem hier keine Fehlermeldung erscheint und im aktuellen Verzeichnis eine Datei Fortranquellcode_for.obj erzeugt wird, gehe ich davon aus, dass die Fortrandatei korrekt compiliert wurde.
Die Fortrandatei ist übrigens eine Beispieldatei aus Matlab:
Zitat: |
C
C File: SFUN_TIMESTWO_FOR.F
C
C Abstract:
C A sample Level 1 FORTRAN representation of a
C timestwo S-function.
C
C The basic mex command for this example is:
C
C >> mex sfun_timestwo_for.f simulink.f
C
C Copyright 1990-2002 The MathWorks, Inc.
C
C $Revision: 1.4 $
C
C=====================================================
C Function: SIZES
C
C Abstract:
C Set the size vector.
C
C SIZES returns a vector which determines model
C characteristics. This vector contains the
C sizes of the state vector and other
C parameters. More precisely,
C SIZE(1) number of continuous states
C SIZE(2) number of discrete states
C SIZE(3) number of outputs
C SIZE(4) number of inputs
C SIZE(5) number of discontinuous roots in
C the system
C SIZE(6) set to 1 if the system has direct
C feedthrough of its inputs,
C otherwise 0
C
C=====================================================
C
SUBROUTINE SIZES(SIZE)
C .. Array arguments ..
INTEGER*4 SIZE(*)
C .. Parameters ..
INTEGER*4 NSIZES
PARAMETER (NSIZES=6)
SIZE(1) = 0
SIZE(2) = 0
SIZE(3) = 1
SIZE(4) = 1
SIZE(5) = 0
SIZE(6) = 1
RETURN
END
C
C=====================================================
C
C Function: OUTPUT
C
C Abstract:
C Perform output calculations for continuous
C signals.
C
C=====================================================
C .. Parameters ..
SUBROUTINE OUTPUT(T, X, U, Y)
REAL*8 T
REAL*8 X(*), U(*), Y(*)
Y(1) = U(1) * 2.0
RETURN
END
C
C=====================================================
C
C Stubs for unused functions.
C
C=====================================================
SUBROUTINE INITCOND(X0)
REAL*8 X0(*)
C --- Nothing to do.
RETURN
END
SUBROUTINE DERIVS(T, X, U, DX)
REAL*8 T, X(*), U(*), DX(*)
C --- Nothing to do.
RETURN
END
SUBROUTINE DSTATES(T, X, U, XNEW)
REAL*8 T, X(*), U(*), XNEW(*)
C --- Nothing to do.
RETURN
END
SUBROUTINE DOUTPUT(T, X, U, Y)
REAL*8 T, X(*), U(*), Y(*)
C --- Nothing to do.
RETURN
END
SUBROUTINE TSAMPL(T, X, U, TS, OFFSET)
REAL*8 T,TS,OFFSET,X(*),U(*)
C --- Nothing to do.
RETURN
END
SUBROUTINE SINGUL(T, X, U, SING)
REAL*8 T, X(*), U(*), SING(*)
C --- Nothing to do.
RETURN
END
|
So, wenn ich aber die mex32-Datei erzeugen will, erhalte ich folgende Fehlermeldung:
Ich weiß nicht weiter, weil ich nicht weiß, wo der Fehler liegt. Im Quellcode doch wohl nicht, weil der wurde ja mitgeliefert. Der Compiler wurde ja angeblich auch richtig eingerichtet. Ich hätte ja darauf getippt, dass er beim Linken z.B. eine Headerdatei nicht findet. Aber wenn man sich den Quellcode ansieht, dann gibt es in diesem Beispiel keine Headerdateien. Auch 'MEXFUNCTION' ist in der Quelldatei nicht enthalten.
Deshalb meine Fragen:
1. Was genau bedeutet eigentlich 'Nichtaufgeloestes externes Symbol'? Von welchem Symbol ist hier die Rede? ... man will ja nicht dumm sterben.
2. Was stört Matlab, warum funktioniert die Geschichte nicht?
Vielen Dank schon mal im Voraus für jede Hilfe!
|
|
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 13:31
Titel:
|
|
Das Beispiel konnte kompiliert werden, aber beim Linken tritt ein Fehler auf. Im Beispiel steht
hast du das auch so gemacht?
|
|
|
christian_2 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 13:38
Titel:
|
|
Hallo und Danke für Deine Antwort.
Nein, ich habe es nicht, wie im Beispiel gemacht, weil ich alles 'selbst' machen wollte.
Folgendes habe ich gemacht:
1. Texteditor geöffnet
2. Neue Datei erstellt (Dateiname: Fortranquellcode_for.F)
3. Quelltext aus der Matlab-Beispieldatei über die Zwischenablage eingefügt und Datei gespeichert.
4. In Matlab den Befehl
eingegeben.
Worauf zielt Deine Frage ab?
Viele Grüße
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 13:39
Titel:
|
|
Weil vielleicht die Datei simulink.f das Symbol enthält, welches du benötigst?!
|
|
|
christian_2 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 13:41
Titel:
|
|
... ok, ich probiere es gleich noch einmal aus...
|
|
|
christian_2 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 13:56
Titel:
|
|
also, hat immer noch nicht geklappt.
Was habe ich gemacht?
1. Simulink Library Browser geöfnnet
2. Simulink -> User Defined Functions -> S-Function Examples -> Fortran S-function -> Times two
3. Dieses Modell habe ich in ein anderes Verzeichnis kopiert
4. Quelldatei 'sfun_timestwo_for' habe ich in 'c:\PROGRA~3\Matlab_2006b\simulink\src\' gefunden
5. Quelldatei ebenfalls ins Arbeitsverzeichnis kopiert (also in das Verzeichnis, wo das Modell liegt)
6. in Matlab den Befehl
ausgeführt. Ich erhalte die Fehlermeldung:
Diese Vorgehensweise hat mit c-Dateien immer zum Ziel geführt. Allerdings habe ich da auch den Matlab Compiler verwendet (ich glaube lcc hieß der)
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 14:00
Titel:
|
|
Ja und.... hast du jetzt mein Vorschlag gemacht oder nicht?
|
|
|
christian_2 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2013, 14:13
Titel:
|
|
Hallo,
ich hatte nicht begriffen, worauf Du hinaus wolltest. Insofern ist die Antwort Nein, ich hatte das nicht gemacht.
Ich habe mir zwar nahezu die gesamte Hilfe durchgelesen und im Internet stundenlang gesucht, aber die Kommentare im Quelltext nie genau angesehen.
Ich habe es jetzt einfach so gemacht, wie Du geschrieben hast. Und es hat funktioniert. Dann habe ich mir überlegt, woher Du weißt, dass man diese zwei Dateien angeben muss.
Beim Quelltext bin ich bisher immer gleich runter bis zu den Fortran-Befehlen.
OK, war mir eine Lehre, mir auch zukünftig die Kommentare im Quelltext durchzulesen.
Jedenfalls tausend Dank für Deine Hilfe! Ich hätte wahrscheinlich mehrere Tage gebraucht, den Fehler zu finden!
Viele Grüße
Christian
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|