Verfasst am: 16.12.2015, 23:01
Titel: Externes Programm über Simulink aufrufen
Hallo,
und zwar hab ich eine Frage.
Mein Anliegen:
Ich bin gerade dabei ein Temp.-Modell für einen Motor aufzubauen.
Dabei müsste dieses Modell eigentlich mit einem Externen Programm kommunizieren damit ich eine wiederholende Berechnung erstellen kann, da das ganze Zeit abhängig ist.
Dabei habe ich zwei Ansätze bzw. Fragen zu meinen Ansätzen:
1. Ist es möglich in Simulink ein externes Programm zu öffnen (invoke) diesem Werte zu übergeben und Werte wieder zu bekommen um mit diesen geholten Werten weiter rechnen zu können?
2.Falls 1. nicht funktioniert würde ich anstatt das externe Programm in Simulink zu öffnen in Matlab öffnen (das funktioniert aufjedenfall) dort die Werte zu übergeben und dann neue Werte zu holen diese an Simulink zu übergeben Simulink berechnet neue Werte übergibt Sie an Matlab usw. bis ich das irgendwann stoppe bzw. die Zeit um ist.
Sorry falls ich das ganze etwas umständlich geschriebe habe.
Trotzdem danke im Voraus.
Ich bin der Meinung das, dass andere Programm ziemlich eingeschränkt ist und mit S-Functions will ich eigentlich ungern die Sache lösen.
Ich habe mal den Support dieser Software kontaktiert und nur eine sehr primitive Lösungsvorschlag erhalten, der für mich eigentlich nicht ausreicht.
Wie schaffe ich es denn folgenden Verlauf zu realisieren:
Via Matlab die externe Software ansprechen und Ergebnisse in Mat-Files abspeichern --> diese Mat-Files in Simulink einspeisen --> Simulink laufen lassen --> Ergebnisse von Simulink über die M-File wieder in die externe Software --> und alles von vorne beginnen bis eine gewisse Grenze erreicht ist.
Das alles soll im Prinzip in Echtzeit geschehen. Mein Problem ist dabei dieses zurück zu Matlab und wieder Einspeisen aus Simulink und wieder zurück. Ich weiß nicht ob ich mir das ganze zu kompliziert vorstelle.
Die simpelste Methode die ich kenne ist das SYSTEM Kommando. Alles was dahinter kommt wird als DOS Kommando interpretiert und damit kann man also EXEs starten und die Rückgabewerte abfangen und weiterverwerten. Aber das mit dem "Echtzeit" wir für diesen Ansatz schwer, es sei denn dieses andere Programm startet sehr schnell.
Das andere Programm heisst "SPEED" (http://www.speed-emachine-design.com/) und ist von der Firma cd-adapco/maccon und dient zur entwicklung von elektrischen Maschinen.
Ein einfacher Code um dieses Programm zu öffnen Werte zu übergeben und Werte wieder zu holen.
piXXXXpath = what; % set current directory to working directory
piXXXXpath = piXXXXpath.path; % define location of PC-BDC object file
piXXXXpath = [piXXXXpath, '\'];
if updatepiXXXX(wbdc, piXXXXpath, 'wbdc32params') < 0 invoke(wbdc,'quit'); % close PC-BDC activeX server disp('Error reading/creating parameter information file. Calculation stopped') return;
else
wbdc32params; % load PC-IMD object file
des = invoke(wbdc, 'CreateNewDesign'); % allocate design
res = invoke(des, 'LoadFromFile', bdcpath); % load sample file if res ~= 0 invoke(wbdc,'quit'); % close PC-BDC activeX server disp('Error opening file. Calculation stopped') return;
end invoke(des,'SetVariable', piDRIVE, 'sine'); % set default calculation mode invoke(des,'SetVariable', piSW_CTL,'ISP_HB'); % set current control strategy (ISP_HB/SVModX) invoke(des,'SetVariable', piDQ0,'false'); % set dq0 (true/false) (Fuer den Sammler bitte auf "false" stellen) invoke(des,'SetVariable', piCALCVERSION,'cv11'); % CalcCersion cv4-cv11 (cv11 newest) invoke(des,'SetVariable', piRAC,0.0125); % Additional connector resistance in each line invoke(des,'SetVariable', piR_S, 0.025); % DC link resistance between capacitor and converter terminals invoke(des,'SetVariable', piFIXFCHOP, 'ISCHOP12');
invoke(des,'SetVariable', piCHOPTYPE, 'Hard');
end
invoke(des, 'SetVariable', piVS, Vdc); % set dc-link voltage invoke(des, 'setVariable', piRPM, Ndem); % set speed demand invoke(des, 'setVariable', piISP, Idem); % set current demand invoke(des, 'setVariable', piGAMMA, Adv); % set advance angle
res = invoke(des, 'DoStaticSimulation'); % do steady-state analysis
Wie gesagt mir würde es auch vollkommen reichen wenn ich den obigen Code starten lasse eine Berechnung in SPEED starte, die Werte aus SPEED zu holen (bis hierhin ist es mit dem obigen Code schon realisiert) an Simulink zu übergeben, Simulink startet seine Berechnung gibt die Werte wieder zurück an diese M-File und alles beginnt von vorne. Das Prinzip klingt eigentlich ziemlich einfach aber anscheinend ist die Umsetzung ziemlich komplex.
Ich denke es führt trotz allem wieder zu meiner Eingangsfrage, nämlich "was kann SPEED" um Co-Simulation zu unterstützen. Ich habe den Hersteller gebeten hier Informationen hinzuzufügen.
ich kann dir wenn du willst eine Email mit einer PDF ("Automation witth SPEED Motor Design Software") senden, welches das Scripten mittels Matlab/Simulink und co. beschreibt. Ich selber habe da leider nichts brauchbares für mich finden können. Zumindest nicht im Bezug auf dieses Thema.
Ich will das ungern ins Forum hochladen da ich nicht weiß wie die Firma dazu steht wenn man ohne Erlaubnis Ihre Dokumente veröffentlicht.
LG
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
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.