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

Clock block reagiert nicht

 

guguli
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 07:48     Titel: Clock block reagiert nicht
  Antworten mit Zitat      
Hallo zusammen,

Ich hab in der Simulink ein matlab fcn Block wodrin ich ein 3D array erstellt habe, dann habe ich clock block als Input genommen und dieser in while schleife benutzt. das ist mein Code
[code]
function Tool_move = move( Y_Timer,X_Timer,Z_Timer)
x=5; y = 5; z = 5;
luft_value= 0;
knochen_Value = 1;
fleich_value = 2;
X_welt=10;
Y_welt=10;
Z_welt=10;
welt = zeros(X_welt,Y_welt,Z_welt);

x_knochen = 5;
y_knochen = 5;
z_knochen = 5;
welt(x_knochen,y_knochen,z_knochen)=knochen_Value;
%das fleich um den Knochen
for x_fleich = x_knochen - 1 : x_knochen + 1
for y_fleich = y_knochen - 1 :y_knochen + 1
for z_fleich = z_knochen - 1 :z_knochen + 1
if ((x_fleich == x_knochen && y_fleich==y_knochen && z_fleich == z_knochen)||(x_fleich == x_knochen +1 && y_fleich==y_knochen && z_fleich == z_knochen))
welt(x_fleich, y_fleich, z_fleich) = knochen_Value;
else welt(x_fleich, y_fleich, z_fleich) = fleich_value;
end
end
end
end
% Tool Starting Position
Xtsp= 1;
Ytsp = 1;
Ztsp = 1;
welt(Xtsp,Ytsp,Ztsp);
% tool current Position
X_current=Xtsp;
Y_current=Ytsp;
Z_current=Ztsp;
welt (X_current, Y_current, Z_current);

Vx = 0.036; %speed cm/s
Vy = 0.036;
Vz = 0.036;
X_runTime = (x - Xtsp)/ Vx; % Xtsp first position
Y_runTime = (y - Ytsp)/ Vy;
Z_runTime = (z - Ztsp)/ Vz;
while(Y_Timer <= Y_runTime)
Y_current = Y_current+1;
if(welt(X_current, Y_current, Z_current) == luft_value)
end
if(welt (X_current, Y_current, Z_current) == fleich_value)
%errordlg('Break offY','File Error');
break
end
if(welt (X_current, Y_current, Z_current) == knochen_Value)
%errordlg('BoneY','File Error');
break
end

end
while(Z_Timer <= Z_runTime)
Z_current = Z_current+1;
if(welt (X_current, Y_current, Z_current) == luft_value)
end
if(welt (X_current, Y_current, Z_current) == fleich_value)
%errordlg('Break offZ','File Error');
break
end
if(welt (X_current, Y_current, Z_current) == knochen_Value)
%errordlg('BoneZ','File Error');
break
end

end
while(X_Timer <= X_runTime)
X_current = X_current+1;
if(welt (X_current, Y_current, Z_current) == luft_value)
end
if(welt (X_current, Y_current, Z_current) == fleich_value)
% errordlg('Break off X','File Error');
break
end
if(welt (X_current, Y_current, Z_current) == knochen_Value)
%errordlg('BoneX','File Error');
break
end
end
welt(X_current, Y_current, Z_current) = 3;
Tool_move = welt;
end

[code]

und mein Modell ist:

und als Errorkriege ich das:
[code]Attempted to access 11 element of data welt. The valid index range is 1 to 10
Please note that the simulation will be aborted immediately after you continue from this breakpoint to avoid segmentation violations.
debug>>[/code]

kannmir einer sagen woran das liegen kann???

test.mdl
 Beschreibung:

Download
 Dateiname:  test.mdl
 Dateigröße:  37.15 KB
 Heruntergeladen:  355 mal
Private Nachricht senden Benutzer-Profile anzeigen


knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 08:57     Titel:
  Antworten mit Zitat      
Ist doch eindeutig. In Zeile 9 hast du Welt als 10x10x10 definiert und beim Breakpoint in Zeile 44 ist Y_current = 11. Also aus deinen Grenzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 12:12     Titel:
  Antworten mit Zitat      
ja und das verstehe ich nicht.
Also ich möchte eigentlich nur 4 durchgänge in der while schleife haben. also
y - Ytsp wobei y ziel und Ytsp startposition ist. Dann dachte ich diesen weg kann ich in Y_runtime zurücklegen.
Deswegen hab ich Clock eingebunden. Aber die while durchläufe sind mehr als ich will. Wie kann ich mein Clock so verändern dass es dann passt???
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 12:46     Titel:
  Antworten mit Zitat      
Also deine while Schleife läuft mindestens 111 mal. Das ist nämlich der konstante Wert von Y_runTime. Das steht schon zu Beginn fest und ist nicht abhängig von deiner Clock.

Deine Schleifen sind glaub ich falsch bzw. nicht so wie du es willst. Deine Schleife bekommt ein einziges mal die Zeit t = 0. Danach läuft deine Schleife unendlich weiter, weil du wartest bis deine Zeit bei 111 ist, was aber nie sein wird, da für den nächsten Zeitschritt (neue Zeit größer Null) die Schleife beendet werden muss. Hättest du die Dimension für Welt nicht gesetzt würde deine Schleife unendlich laufen (bzw bis zum timeout). Sind die Schleifen überhaupt nötig?
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 12:52     Titel:
  Antworten mit Zitat      
Ich wusste nicht wie ich das ohne schleifen machen könnte.
Also ich hab das ohne den runtime gelöst, aber ich will dass meine Simulation in der zeit und mit der Geschwindigkeit soviele schritte macht.
Oder weisste einen Besseren weg???

THX
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 13:33     Titel:
  Antworten mit Zitat      
Noch eine Frage, ich hab ja eine 3D Array, wieso kriege ich denn immer 4D double raus wenn ich das laufen lasse????
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.