Verfasst am: 29.02.2012, 10:33
Titel: Implementierung von Unterprogrammen HILFE!!!
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.1bar 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.01bar 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.01bar 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);
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.
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');
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.
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.