Matlab serial/rs232 sendet zu langsam

Gast #1379917
(Ich hab das schon im DSP Bereich gepostet und meine da ist es im 
falschen Forum.)

---------------------------------------------
Messwert vom Sensor empfangen:
Sensor ---> µC ---> RS232 ---> Matlab

Sollwert senden:
Matlab ---> RS232 ---> µC ---> Aktor
---------------------------------------------
(alles natürlich in Echtzeit)


Hi, also ich hab es jetzt soweit hinbekommen dass ich senden kann.
Irgnedwie ragiert aber mein Mikrocontroller viel zu langsam auf die
Befehle.
Ich hab gemerkt das Matlab die Daten irgendwie Puffert und dann Stück
für Stück weitergibt. Also der Flashenhals ist (glaube ich zu mindest)
bei Matlab. Breche ich die While-Schleiche ab bewegt sich mein Motor
immer noch.

Hier schreibt einer, das in Matlab der Sender ( fprintf(...) ) Process 
eine sehr kleine Priorität hat und dadurch anscheinend es zum 
Geschwindigkeitseinbruch kommt.
http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/thread/770c29792893e31d/5e8ca900a8b9946b#5e8ca900a8b9946b


Ich hab jetzt ca. 4 Stunden lang gesucht und bin nicht weitegekommen.

Hier mein Skript:
Eine Zahl wird im 10 ms Takt von 1 bis 1000 hoch und wieder
runtergezählt und dabei jeweils einmal rausgesendet.

Würde mich sehr über Hilfe freuen.

1
% Creating serial port object
2
serobjw = serial('/dev/cu.SERIAL1-SPP-1'); 
3

4
%Set connection properties
5
serobjw.Baudrate = 115200;        % Set the baud rate at the specific value
6
set(serobjw, 'Parity', 'none') ;     % Set parity as none
7
set(serobjw, 'Databits', 8) ;        % set the number of data bits
8
set(serobjw, 'StopBits', 1) ;        % set number of stop bits as 1
9
set(serobjw, 'FlowContro', 'none') ; % set FlowContro to none
10

11
set(serobjw, 'OutputBufferSize', 100) ;     
12
      
13

14
fopen(serobjw) ;
15

16

17

18
speed = 100;
19
tempCountUp = 1;
20

21
tempStringPart1 = '['; 
22
tempStringPart2 = ']';
23

24

25

26
while (1)
27
    
28
    cString = sprintf('%s%05.0f%s', tempStringPart1,speed,tempStringPart2);
29
    
30
    if (strcmp(serobjw.TransferStatus,'write') == 0)    
31
        fprintf(serobjw,cString,'async');
32
    end
33
    
34
    if(speed == 1) 
35
        tempCountUp = 1; 
36
    end
37
    
38
    if(speed == 1000)
39
        tempCountUp = 0; 
40
    end
41
    
42
    if(tempCountUp == 1) 
43
        speed = speed + 1; 
44
    end
45
    
46
    if(tempCountUp == 0)
47
        speed = speed - 1; 
48
    end
49

50
    cString
51
  
52
    pause(0.01);
53

54
end
#1428716
Gab es eine Lösung für das zeitkritische Problem?

Beim Einlesen ist mir dieses Pufferverhalten auch aufgefallen. Im Fall 
das keine Daten mehr ankommen, werden irgendwelche bereits erhaltenen 
Datensätze übertragen. Ich konnte mir da nur mit Nummerierung der 
Datenpakete helfen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.