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

Implementierung von Unterprogrammen HILFE!!!

 

Tahir
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 27.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.02.2012, 10:33     Titel: Implementierung von Unterprogrammen HILFE!!!
  Antworten mit Zitat      
Hallo Leute...

ich brauche dringend eure Hilfe... ich arbeite das erste mal mit Matlab und habe eine Frage...undzwar muss ich in ein Hauptprogramm drei Unterprogramme einfügen.
Es geht hierbei um eine Drucksteuerung, welches das Hauptprogramm ist. Hinzu kam nun eine Sensor der die Höhe überwachen soll. Dazu wurden drei Unterprogramme geschrieben, der den Sensor startet die Messung durchführt und den Sensor wieder abmeldet.

Ein Teil des Hauptprogrammes sieht so aus:

Code:
%Ausgeführt bei Betätigen des SpannungAusgeben-Pushbuttons
function SpannungAusgeben_pushbutton_Callback(hObject, eventdata, handles) %#ok<INUSL,DEFNU>

%Wert aus dem Slider auslesen
sliderValue = get(handles.slider1,'Value');

%Sliderwert in Spannung ausgeben
V = (sliderValue/100);

    if V > 0  && V < 10
        %Ausgabe einer Spannung wird vorsichtshalber beendet
        stop(handles.ao);
        %Spannung wird angepasst, um den Druck "von unten" zu erreichen
        Vangepasst = V-0.4;
        %Spannung wird ausgegeben
        putdata(handles.ao,Vangepasst);
        start(handles.ao);
        %Aktualisieren des Statusfeldes
        set(handles.StatusAntwort_staticText,'String', 'Druck wird aufgebaut')
        %Abwarten, welcher Druck sich einstellt
        pause(5)
        %Einlesen des Drucks am Sensor
        start (handles.ai);
        s = getdata (handles.ai);
        Sensoreingang = mean(s);
        stop (handles.ai);
        %Spannung vom Sensor in Druck umrechnen
        Sensordruck = Sensoreingang*0.049;
        %Aktualisieren des Statusfeldes
        Spannungtext=(['Druck am Sensor (vor Regelung): ',num2str(Sensordruck) , ' bar']);
        set(handles.StatusAntwort_staticText,'String',Spannungtext);
        %Regelschleife um den Druck +- 0.1 bar zu erreichen
        while Sensordruck > V * 0.1 + 0.01  ||  Sensordruck < V * 0.1 - 0.01 && V~=0
        %Anweisungen für den Fall, dass der Druck mehr als 0.01 bar zu
        %klein ist
            while  Sensordruck < V * 0.1 - 0.01 && V~=0
                %Ausgabe einer angepassten Spannung
                stop(handles.ao);
                Vangepasst = Vangepasst+0.02;
                putdata(handles.ao,Vangepasst);
                start(handles.ao);
                %Pause um die Reaktion des Systems abzuwarten
                pause(4);
                %Einlesen des Drucks am Sensor
                start (handles.ai);
                s = getdata (handles.ai);
                Sensoreingang = mean(s);
                stop (handles.ai);
                Sensordruck = Sensoreingang*0.049;
                %Aktualisieren des Textes im Statusfeld
                regeltext=(['Regele, aktueller Druck: ',num2str(Sensordruck), ' bar']);
                set(handles.StatusAntwort_staticText,'String',regeltext);
            end
            %Anweisungen für den Fall, dass der Druck mehr als 0.01 bar zu
            %groß ist
            while Sensordruck > V * 0.1 + 0.01 && V~=0
                %Ausgabe einer angepassten Spannung
                stop(handles.ao);
                Vangepasst = Vangepasst-0.02;
                putdata(handles.ao,Vangepasst);
                start(handles.ao);
                %Pause um die Reaktion des Systems abzuwarten
                pause(4);
                %Einlesen des Drucks am Sensor
                start(handles.ai);
                s = getdata (handles.ai);
                Sensoreingang = mean(s);
                stop (handles.ai);
                Sensordruck = Sensoreingang*0.049;
                %Aktualisieren des Textes im Statusfeld
                regeltext=(['Regele, aktueller Druck: ',num2str(Sensordruck), ' bar']);
                set(handles.StatusAntwort_staticText,'String',regeltext);  
            end
                %Pause um "Überspringen" des Drucks zu vermeiden
                pause(5);
                %Einlesen des Drucks am Sensor
                start (handles.ai);
                s = getdata (handles.ai);
                Sensoreingang = mean(s);
                stop (handles.ai);
                Sensordruck = Sensoreingang*0.049;
                %Aktualisieren des Textes im Statusfeld
                regeltext=(['Regele, aktueller Druck: ',num2str(Sensordruck), ' bar']);
                set(handles.StatusAntwort_staticText,'String',regeltext);
        end    
        pause(5);
        %Einlesen des Drucks am Sensor
        start (handles.ai);
        s = getdata (handles.ai);
        Sensoreingang = mean(s);
        stop (handles.ai);
        Sensordruck = Sensoreingang*0.049;
        %Aktualisieren des Textes im Statusfeld
        endetext=(['Druck am Sensor (nach Regelung): ',num2str(Sensordruck), ' bar']);
        set(handles.StatusAntwort_staticText,'String',endetext);
   
    %Verhalten, falls der gewünschte Druck=0 ist    
    elseif V == 0  
        stop(handles.ao);
        putdata(handles.ao,V);
        start(handles.ao);
        nulltext=(['Druck am Sensor: ',num2str(V), ' bar']);
        set(handles.StatusAntwort_staticText,'String',nulltext);
    end
   
%[Handles] Struktur aktualisieren
guidata(hObject, handles);


hier müsste ich nun wenn der Button gedrückt wird, den Sensor mit Hilfe dieses Codes Starten:

Code:
function sonicsensor = start_ultrasound()
    %% Initialize Serial Port Object
    sonicsensor = serial('COM7');
    fopen(sonicsensor);
   
    %% Set Instrument in Remote Mode
    fprintf(sonicsensor,'SYSTEM:REMOTE');
    fread(sonicsensor, 512)

    %% Start transfer
    fprintf(sonicsensor,'s');


und während der Versuch läuft die Messung mit diesem Skript einen Wert parallel messen:

Code:
function height = ultrasound(sonicsensor,average)

    for i = 1:average
        %% Request height
        response  = textscan(fscanf(sonicsensor),'%s','delimiter',';');
        h(i)      = evalin('base',response{1}{2});
    end
   
    height = mean(h);


Ich habe versucht die Unterprogramme so wie sie sind einzufügen aber es klappt nicht kann mir jemand ein Rat geben...ich wäre sehr dankbar...ich hoffe ich konnte mein Problem so einigermaßen schildern.

end_ultrasound.m
 Beschreibung:

Download
 Dateiname:  end_ultrasound.m
 Dateigröße:  234 Bytes
 Heruntergeladen:  265 mal
ultrasound.m
 Beschreibung:

Download
 Dateiname:  ultrasound.m
 Dateigröße:  268 Bytes
 Heruntergeladen:  264 mal
start_ultrasound.m
 Beschreibung:

Download
 Dateiname:  start_ultrasound.m
 Dateigröße:  311 Bytes
 Heruntergeladen:  280 mal
BiaxialerVersuch.m
 Beschreibung:

Download
 Dateiname:  BiaxialerVersuch.m
 Dateigröße:  88.68 KB
 Heruntergeladen:  275 mal
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: 01.03.2012, 01:22     Titel: Re: Implementierung von Unterprogrammen HILFE!!!
  Antworten mit Zitat      
Hallo Tahir,

Bitte erkläre noch, was "es klappt nicht" bedeutet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tahir
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 27.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2012, 11:54     Titel:
  Antworten mit Zitat      
Hi Jan,

sorry für die Unklarheit, aber ich selbst blicke da noch nicht so ganz durch. Es ist so das eigentliche Programm ist eine Drucksteuerung. Es werden bestimmtes Parameter über einen Slider bestimmt und das Programm stellt dementsprechend den Druck ein.
Meine Aufgabe ist es die Höhe zu überwachen mittels diesen Unterprogrammen.

start_ultrasound:
Code:
%Starten der Initialisierung des Ultraschallsensors
sonicsensor = serial('COM7');
fopen(sonicsensor);

% Set Instrument in Remote Mode
fprintf(sonicsensor,'SYSTEM:REMOTE');

pause(5);
% Start transfer
fprintf(sonicsensor,'s');


und mit ultrasound soll die höhe gemessen werden:
Code:
function height = ultrasound
   
    sonicsensor = evalin('base', 'sonicsensor');
   
    %Arbeitsspeicher bereinigen
    if sonicsensor.BytesAvailable > 0
        dummy = fread(sonicsensor, sonicsensor.BytesAvailable);
    end
   
    % Höhe anfordern
    pause(0.5)
    response = textscan(fscanf(sonicsensor),'%s','delimiter',';');
    height = response{1}{2};


Wenn ich ultrasound in das Command Window eingebe bekomme ich auch eine Höhe raus. Ich weiss nur nicht wie ich beide parallel laufen lasse. Also der Druck geregelt wird und gleichzeitig ich eine Höhe im Command Window ausgegeben bekomme.
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 - 2025 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.