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

fread zu langsam

 

Facemann

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2011, 15:50     Titel: fread zu langsam
  Antworten mit Zitat      
Habe die Aufgabe einen Roboter per Matlap anzusteuern. Dieser hat Endschalter die genutzt werden sollen. Ich schicke über fwrite 2 Bytes worauf hin eines zurückgesendet wird, welches die Stellung der Endschalter beinhaltet. Dieses lese ich mit fread doch das dauert viel zu lange, gibt es eine Alternative zu fread bzw kann man es drastisch beschleunigen?

Außerdem bekomme ich einen Vektor vom Roboter mit unterschiedlicher Länge zurück (je nach dem wann die erste 1 im Vektor ist). Ich benötige zur Verarbeitung einen Vektor der immer 8 Stellen beinhaltet, also wie kann ich den Vektor auffüllen?


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.10.2011, 16:11     Titel: Re: fread zu langsam
  Antworten mit Zitat      
Hallo Facemann,

Das Lesen per FREAD benötigt in Matlab (mit "b" hinten) nur sehr wenig Zeit. Wenn Du eine große Verzögerung bemerkst, liegt das höchst wahrscheinlich an etwas anderem. Bitte poste den relevanten Code, da wir ansonsten nur raten können, woran es liegt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Facemann

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 09:32     Titel:
  Antworten mit Zitat      
Also ich habe den fischertechnik am port 4.
s=serial('com4')
set(s, 'Baudrate', 38400); % Baudrate auf 38400
fopen(s) %Port öffnen
fwrite(s,[193,bin2dec('00000001')],'uint8') % sende ihm 2 bytes 1.->Aufruf 2.-> Zustände der Eingänge, ein byte wird zurückgesendet den ich mit:
fread(s) %auslese (dauert ewig)

zurück bekomme ich zb. 10101 welches aber generell 8 Zahlen im vektor haben soll (zwecks späteren aufruf) also 00010101.

Das ausgelesene Byte beinhaltet die Züstände der 4 Endlagenschalter und der Zählschalter.

Natürlich möchte ich später dass wenn er an einen Endschalter fährt dass er NICHT weiter in diese Richtung fährt doch bis jetzt würde er das tun.

Es gibt wohl auch die möglichkeit mit der BytesAvailebleFcn zu arbeiten doch da steig ich überhaupt nicht durch bis jetzt.

Ich lade auch mal die gui datei hoch. Damit ihr sehen könnt wie mein code in der gui aussieht.

gui1.m
 Beschreibung:
das ist die gui datei an der ich arbeite

Download
 Dateiname:  gui1.m
 Dateigröße:  7.68 KB
 Heruntergeladen:  529 mal
 
Facemann

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2011, 08:59     Titel:
  Antworten mit Zitat      
Kann mir denn niemand helfen?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2011, 09:31     Titel:
  Antworten mit Zitat      
Hallo Facemann,

Das Fehlen eine Antwort weist darauf hin, das die Frage noch nicht verständlich ist. Z.B. ist "dauert ewig" nicht verständlich: Bei 38'400 Baud sind 0.1 Sekunden bereits ziemlich lang, "ewig" kann aber auch "ein paar Minuten" bedeuten, oder Jahre.
Kann es sein, dass der Controller noch auf ein Abschluß-Byte wartet und erst beim Time-out antwortet?

Zitat:
zurück bekomme ich zb. 10101 welches aber generell 8 Zahlen im vektor haben soll (zwecks späteren aufruf) also 00010101.

Das ist unklar. Du bekommst natürlich Bytes zurück, und die haben immer 8 bits. Man kann die zwar per DEC2BIN in binäre Strings umwandeln, wobei die führenden Nullen nicht dargestellt werden (ausser natürlich mit z.B. DEC2BIN(21, 8)). Binäre Strings sind aber für die Verarbeitung nicht praktisch. Was also "8 Zahlen im Vektor" genau bedeutet, wird nicht klar.

Zitat:
Natürlich möchte ich später dass wenn er an einen Endschalter fährt dass er NICHT weiter in diese Richtung fährt doch bis jetzt würde er das tun.

Trägt das noch zur Klärung des aktuellen Problems bei? Wenn nicht, verwirrt es die Leser unnötig.

Zitat:
Es gibt wohl auch die möglichkeit mit der BytesAvailebleFcn zu arbeiten doch da steig ich überhaupt nicht durch bis jetzt.

Dann kannst Du die entsprechenden Absätze in der Dokumentation durchlesen und eine konkrete Frage stellen.

Zitat:
Ich lade auch mal die gui datei hoch. Damit ihr sehen könnt wie mein code in der gui aussieht.

Das GUI eines Programms, das noch nicht funktioniert, erhöht nur die Verwirrung der Leser. Die Chancen auf eine hilfreiche Antwort sind am größten, wenn man sich auf ein Problem konzentriert und alle unnötigen Details wegläßt.

Gruß, Jan
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.