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

For schleife

 

Hans P.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2013, 17:18     Titel: For schleife
  Antworten mit Zitat      
Hallo, ich habe eine Frage und zwar steuere ich Über eine serielle Schnittstelle ein Gerät an. Dabei sende ich einen Befehl aus und erhalte eine Antwort zurück. Nun will ich aber diesen Befehls öfters hintereinander senden (z.b:5 mal)[/code] also in einer for schleife aber dies gelingt mir nicht so richtig, ich habe es folgendermassen probiert aber es klappt nicht.
Code:

fopen(s);
disp('Serialobjekt geöffnet')

% Scan ablesen
for i=1:5
fprintf(s, '%R1Q,20146:')
daten(1,i)=fscanf(s(i))
end
fclose(s)
delete(s)
clear s
 


Kann mir da vielleicht jemand helfen vieelen Dank


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.02.2013, 21:38     Titel: Re: For schleife
  Antworten mit Zitat      
Hallo Hans P.,

Was genau bedeutet "es klappt nicht"? Bei einer Diskussion im Forum ist es immer hilfreich, wenn man weiß, was denn genau nicht läuft wie gewünscht. Eine Kopie der Fehlermedlung, falls es eine gibt, ist auch sinnvoll.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans P.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 17:50     Titel:
  Antworten mit Zitat      
Hallo, heute stand mir das Instrument wieder zur Verfügung und die Fehlermeldung die erscheint ist folgende:
Subscripted assignment dimension mismatch.
und zwar an der Stelle
Code:
daten(1,i)=fscanf(s)

Es geht darum das der Befehl fprintf fünf mal gesendet werden soll, dies habe ich aber nicht herausfinden können. Das Problem ist das ich den fprintf und fscanf nicht in die Vorschleife packen kann, damit der Befehl öffters gesendet wird.

Ich hoffe es kann mir jemand weiterhelfen

MFG Hans P.[/code]
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 19.03.2013, 20:46     Titel:
  Antworten mit Zitat      
imho passt daten(1,i) nicht. Was steckt da drin?
Mach mal ein size(daten)
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans P.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2013, 11:13     Titel:
  Antworten mit Zitat      
Hey ich schreib dir mal den ganzen Code:
Code:
s = serial('COM4');
set(s,'Baudrate',9600,'Parity','none','Databits',8,'Terminator','CR/LF','StopBits',1);

fopen(s);
disp('Serialobjekt geöffnet')
for i=1:3
fprintf(s,'%R1Q,29035:');
daten(i,1)=fscanf(s);
end
 


Also wenn ich ohne For Schleife daten=fscanf(s) ausgeben lasse erhalte ich für Daten: 898f919291814a12f ...(512 Hezadezimalzahlen). Und das Problem ist das in der For Schleife fscanf(s) nicht berechnet wird, dort wird sich auf die Schnittstelle s bezogen, welches die Schnittstellenparameter sind und somit passen die Dimensionen nicht.[/code]
 
Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 13:40     Titel:
  Antworten mit Zitat      
Du hast hier drei Code-Beispiele gepostet und es ändern sich immer die Indizierungen (mal s(i) mal s, mal daten(i,1) mal daten(1,i)). Das ist sehr verwirrend.
Das Problem liegt aber vermutlich nicht an der For-Schleife, sondern in der Zuweisung an daten(i,1) oder daten(1,i). Brauchst du dort unbedingt die zweite Dimension, oder würde daten(i) reichen?
Ich habe gerade mal getestet:
Code:
daten(1)='test'

erzeugt bei mir den gleichen Fehler
Es geht nur mit:
Code:
daten{1}='test'

daten muss einfach ein Cell-Array sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans P.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 18:40     Titel:
  Antworten mit Zitat      
Hey danke für deine Antwort, ja das ganze ist schon ein wenig verwirrend mit den indizes aber wir haben bereits vieles ausprobiert und bis jetzt hat es noch bei keinem geklappt. Leider steht uns das Gerät erst nächste Woche wieder zur Verfügung. Deine antwort klingt logisch das Problem ist nur, ob es auch mit dem Befehl fsanf funktioniert. Wir werden es dann mal so probieren :

Code:

for i=1:3
 fprintf(s,'%R1Q,20141:');
 daten{i}=fscanf(s);
end
 
[/code]
 
Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 19:22     Titel:
  Antworten mit Zitat      
Ich habe gerade kein Matlab zur Hand. Aber was hat fscanf für einen Rückgabewert? String? Dann sollte es funktionieren. Deine andere Methode funktioniert ja mit normalen Strings nicht.
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.