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

Funktion soll sich automatisch Eingagsparameter aus WS holen

 

c2daK
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2014, 12:30     Titel: Funktion soll sich automatisch Eingagsparameter aus WS holen
  Antworten mit Zitat      
Hallo Zusammen,

ich habe folgendes Problem:

Ich möchte, dass eine Funktion die ich geschrieben habe:

Code:
function [ Energie_Output ] = AddEnergieData_fkt(akt_Bezug_E_Car, solar_radiation)
%ADDENERGIEDATA_FKT Summary of this function goes here
%   Detailed explanation goes here

Energie_Output = akt_Bezug_E_Car+solar_radiation;


end



sich automatisch die Eingangsparameter (akt_Bezug_E_Car, solar_radiation) aus dem Workspace holt und die Berechnung durchführt.

Wie kann ich das realisieren?

Vielen Dank für Eure Hilfe!

[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2014, 12:36     Titel:
  Antworten mit Zitat      
Hallo,

der Punkt an Funktionen ist genau, dass die Eingabeargumente übergeben werden. Üblicherweise ist das auch kein Problem.
Alternative wären Skripte oder nested functions.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
c2daK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2014, 14:53     Titel: Skript mit Timer ausführen, WIE???
  Antworten mit Zitat      
Hallo,

vielen Dank erstmal! Ich habe das auch gerade herausgefunden, dass Funktionen an sich nicht automatisch auf Variablen im WS zugreifen können. Smile

Ich habe das also nun in einem Skript realisiert, wobei sich nun mein nächstes Problem ergeben hat:

Und zwar möchte ich mit einer Timer Funktion alle 5s genau dieses Skript aufrufen, da sich meine Eingangsvariablen aus der Ursprünglich Funktion im WS kontinuierlich ändern.

Mein Problem ist nun, dass ich es nicht hinbekomme mit dem Timer ein Skript (also eine m-File) auszuführen.

Mit einer Funktion lässt sich der Timer problemlos ausführen aber eben nicht mit einem Skript. Und da ich ein Skript brauche um mit den Variablen im WS zu arbeiten weiß ich gerade nicht weiter...

Vielleicht habt ihr ja eine Idee

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2014, 15:15     Titel:
  Antworten mit Zitat      
Hallo,

bitte ein Code-Beispiel dessen, was du versucht hast, und genau beschreiben, welche Probleme dabei auftreten.

Ändern sich die Variablen denn wirklich laufend? Wenn ja, wie kommt das?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
c2daK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2014, 16:32     Titel:
  Antworten mit Zitat      
Hallo,

danke erstmal für die schnelle Antwort! Also ich versuchs nochmal ein bisschen deutlicher zu machen:

Und zwar habe ich zwei Variablen (akt_solar_radiation und akt_Bezug_E_Car)

die Variable akt_Solar_radiation ist wird in einer Funktion aus einer Excel Tabelle bezogen die zwei Zeilen und 24 Spalten hat (erste Zeile Stundenanzahl am Tag 2. Zeile Werte der Einspeisung in kWh). Mit einem Timer rufe ich alle 5s eine Callbackfktion auf in der ich den aktuellen Wert der Einspeisung (Vergleich mit der Systemzeit des Rechners) aus meiner Tabelle ziehe und in den WS packe (Hier zu sehen:)

%%%%%%%%
% Erstellen eines Timers der alle 5s den aktuellen Wert der Einspeisung der
% PV-Anlage aus der Tabelle ausliest
Timer_PV_Anlage = timer('ExecutionMode','fixedRate','TimerFcn', @(~,~)Energ_Import_PV, 'Period', 5.0);

%Starten des Timers --> später in GUI verknüpfen!!!
start(Timer_PV_Anlage);


%%%%%%%%%%%%

function Energ_Import_PV()

%Einlesen der ExcelTabelle
S=xlsread('solar_radiation-vs-time-kW.xlsx');

% Uhrzeit in Time speichern
time=clock;

%Stunden in hours speichern
hours=time(4);

% aktueller Wert in solar_radiation speichern
solar_radiation=S(2,hours);


assignin('base','akt_solar_radiation',solar_radiation);


end






Mit der anderen Variablen akt_Bezug_E_Car läuft es im Prinzip genauso, nur das ich diese nicht aus einer Excel-Tabelle zyklisch (alle 5s) auslese sondern aus einer online Datenbank die sich ebenfalls kontinuierlich ändert.

--> D.h. jede 5 Sekunden bekomme ändern sich die beiden Werte (Klar die Variable akt_solar_radiation bleibt solange gleich bis die nächste Stunde angefangen hat aber das soll hier jetzt erstmal nichts ändern da die Excel file später noch vergrößert werden kann)


Im nächsten Schritt möchte ich diese beiden Variblen (akt_solar_radiation und akt_Bezug_E_Car) die sich ja im WS befinden ebenfalls mit einer Funktion addieren. Diese Funktion soll ebenfalls von einem Timer alle 5s aufgerufen werden:

%AddData initialisiert zuerst einen Timer der dann alle 5s
%ein Skript aufruft, dass alle EnergieDaten verknüpft (addiert)

%Timer initialisieren
Timer_AddData = timer('ExecutionMode','fixedRate', 'TimerFcn', @AddData_Energy, 'Period', 5.0);

%Timer ausführen
start(Timer_AddData);





function [ Energy_Output ] = AddData_Energy(akt_solar_radiation, akt_Bezug_E_Car)

Energy_Output = Last_Wert+solar_radiation;

end



Da ich mit einer Funktion wie du ja vorhin auch schon meintest nicht auf Variablen im WS zugreifen kann, habe ich also ein statt der Funktion AddData_Energy ein Skript geschrieben mit eben dieser Rechenoperation

Energy_Output = Last_Wert+solar_radiation;


Nun mein Ausgangsproblem:

Ich habe also ein Skript das ich später mit einer GUI verknüpfen will, in der ich alle "Simulationen" Gleichzeitig starten möchte:


%%% Verzeichnisse hinzufügen %%%
%E-Car
path('U:\...\E-Car',path);
%PV-Anlage
path('U:\...\PV-Anlage',path);


%AddData
path('U:\...\AddData',path);




%%% Ausführen aller Funktionen gleichzeitig --> Später Verknüpfern mit %%%GUI
%%% Start Simulation Button

E_Car;
PV_Anlage;
%%% Verzeichnisse hinzufügen %%%
%E-Car
path('U:\Projektgrupppe\E-Car',path);
%PV-Anlage
path('U:\Projektgrupppe\PV-Anlage',path);
%Schaltbare Verbraucher (NI-USB)
path('U:\Projektgrupppe\NI-USB',path);

%AddData
path('U:\Projektgrupppe\AddData',path);




%%% Ausführen aller Funktionen gleichzeitig --> Später Verknüpfern mit GUI
%%% Start Simulation Button

E_Car;
PV_Anlage;
Add_Data_Energy

Meine Frage ist nun wie ich mit einer Timer ein Skript ausführe. Da ich ja meine beiden Variablen in der Add_Data_Funktion (Skript) miteinander addieren möchte

Ich hoffe es ist klar geworden!

Vielen Dank schonmal wenn du das auch nur ganz gelesen hast Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
c2daK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2014, 16:40     Titel:
  Antworten mit Zitat      
Wenn ich bspw. im WS definiere

Code:
akt_solar_radiation = 6;
akt_Bezug_E_Car = 5;
 

und dann das Skript ausführe:

Code:
%AddData initialisiert zuerst einen Timer der dann  alle 5s
%ein Skript aufruft, dass alle EnergieDaten im SmartHome verknüpft (addiert)

%Timer initialisieren
Timer_AddData = timer('ExecutionMode','fixedRate', 'TimerFcn', @AddData_Energy, 'Period', 5.0);

%Timer ausführen
start(Timer_AddData);


%%%AddData_Energy.m%%%
Energy_Output = akt_Bezug_E_Car+akt_solar_radiation;
assignin('base','Energy_Output',Energy_Output);
 


Erscheint folgende Fehlermeldung:

>> AddData
Warning: feval on script names will not work, or may work
differently,
in a future version of MATLAB. To make your code
insensitive to any change
and to suppress this warning message:
- Either change the script to a function.
- Or use eval instead of feval.
The script file in question is AddData_Energy.
> In timer.timercb at 31
In timercb at 14
In timer.start at 40
In AddData at 8
Error while evaluating TimerFcn for timer 'timer-1'

Attempt to execute SCRIPT AddData_Energy as a function:
U:\Projektgrupppe\AddData\AddData_Energy.m

[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2014, 18:54     Titel:
  Antworten mit Zitat      
Hallo,

das ganze ist aber sehr unübersichtlich.
Warum packst du Einlesen der beiden Datensätze und Weiterverarbeitung nicht in eine Timer-Funktion?

Ich würde der Timer-Funktion den Startwert übergeben und mit persistent-Variablen den alten Wert abspeichern, damit er beim nächsten Durchlauf wieder verwendet werden kann.

Bitte verwende die Code-Umgebung und versuche, große Beispiele auf Minimalbeispiele zu reduzieren. Das erleichtert das ganze sehr :)

Grüße,
Harald
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.