2016-04-08 20 views
0

Ich verwende Matlab 2014b. Und ich bin mir nicht sicher, ob es ein Problem für ältere Versionen war, aber ich denke, es ist ein neues Problem.Matlab-Simulink 2014 'Laden' Fehler: MATLAB Ausdruck 'Laden' hat nicht die richtige Anzahl von Feldern

Ich möchte meine Hauptfunktion als .m-Datei verwenden, und ich möchte hier Daten festlegen. Ich werde diese Daten in meinem Simulink-Modell - Benutzerdefinierte Funktionen verwenden. Ich nenne 'speichern' in m-Datei, nachdem die Daten als solche zu erstellen:

save ('engineProperties.mat')

Es schafft eine .mat Datei in meinem aktuellen Ordner. Und ich benutze es überall Ich möchte von:

Last (‚engineProperties.mat‘)

es in der Regel gut funktioniert. Aber manchmal bekomme ich folgende Fehlermeldung:

„MATLAB Ausdruck‚Last‘nicht die richtige Anzahl von Feldern haben: voraussichtlich 8; gefunden 9. Block-calculateEngineLoad (# 30) Während der Ausführung: Zustand während der Aktion“

Wie die Fehlermeldung impliziert, passiert es, wenn ich Daten hinzufüge oder entferne. Ich löse es, indem ich neue benannte .mat-Datei erstelle, aber es ist nicht machbar, weil ich viele .mat-Datei erstelle, und manchmal erinnere ich mich nicht an die richtige!

Oder ich löse es durch Erstellen von Dummy-Variablen, um die Größe der Daten wiederzutreffen. Es ist nicht machbar hart.

Das Löschen der .mat-Datei aus dem aktuellen Ordner funktioniert normalerweise nicht. Aber manchmal funktioniert es, zum Beispiel wenn ich meinen Computer neu starte!

Ich denke, es ist ein einfaches Problem, aber fand keinen ähnlichen Fehler im Web. Bitte helfen Sie :)

Antwort

1

Der Code in Ihrem MATLAB-Funktionsblock ist nach C-Code kompiliert, der keine Strukturen variabler Größe unterstützt. Wenn sich Ihre Struktur ändert, müssen Sie sie erneut generieren und kompilieren.

Wenn Sie es nur reparieren möchten, wechseln Sie zu einem interpretierten MATLAB-Funktionsblock. Beachten Sie, dass dies in vielen Fällen zu einer schlechten Leistung führt.

Stattdessen würde ich Ihre Architektur überdenken. Von dem Dateinamen nehme ich an, dass Ihre Datei einige Parameter enthält. Anstatt sie in Ihren Funktionsbaustein zu laden, wäre eine viel bessere Architektur, Blockparameter zu verwenden und sie zu setzen. Dann können Sie einen MATLAB-Funktionsblock weiter verwenden und müssen den Code nicht neu generieren.

+0

Wie ich verstehe, schlagen Sie mir vor, die "interpretierte MATLAB-Funktion" wie in Simulink Library Browser angegeben zu verwenden. Aber meine benutzerdefinierte Funktion ist irgendwie lang, etwa 20 Zeilen. Es ist nicht nur eine mathematische Operation. Können Sie herausfinden, was Sie unter "Blockparameter verwenden" verstehen? Ich denke, Sie sind sehr nah an meiner Lösung – daltooon

+0

Sie können Parameter hinzufügen auf diese Weise http://de.mathworks.com/help/simulink/ug/parameter-arguments-in-matlab-function-block-functions.html – Daniel

+0

werde ich arbeite daran in den nächsten Wochen. Dann werde ich dich wissen lassen, ob es für mich in Ordnung ist.Vielen Dank im Voraus – daltooon

0

Die obige vorgeschlagene Lösung (in http://www.mathworks.com/help/simulink/ug/parameter-arguments-in-matlab-function-block-functions.html angegeben) ist gut genug. Manchmal haben Sie jedoch viele Daten und möchten Ihre Funktion nicht überladen machen. Also hier ist eine andere Lösung:

Basierend auf der Antwort von Daniel, ist Matlab nach C-Code kompiliert. Und obwohl Sie das nicht fühlen, erstellt es einige ".mexw64" -Dateien. Schließen Sie Ihr Matlab und entfernen Sie diese Dateien. Das ist alles