TwinCat Dauerschleife Sensordaten

Liam_s

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin ganz neu in der SPS Programmierung. Mein Ziel ist es Sensor Daten, welche von einer SPS an Matlab zu Übergebe (ADS Notification/Server).
Um dies zu testen, habe ich Sensordaten aus einer CSV Datei in eine Datenbank in der SPS gespeichert.
Jetzt würde ich gerne die Sensordaten in einer Dauerschleife immer wieder durchlaufen lassen. So dass sie sich immer wiederholen und ich sie Testweise auslesen kann.
Wenn ich das Programm laufen lasse, ende ich in einem Absturz oder es passiert gar nichts.

While-Schleife dient als Start und Ende der Übertragung, möchte es gerne über die Variablen setzten steuern können.
In der For-Schleife möchte ich definieren wie viele Daten der gesamten Daten ausgelesen werden sollen.
Mit dem Timer möchte ich gerne die Zykluszeit beeinflussen können, falls die Verarbeitung der Daten nicht schnell genug ist.
Die Variable welche ich auslesen will ist: data (eindimensionaler Array, Globale-Variable)




Falls jemand noch eine Idee hat, wie die Zeitliche Abstimmung zwischen der SPS und Matlab funktionieren kann, bin ich ganz Ohr. Die Sensordaten sollen am Ende verglichen werden. Dazu bräuchte ich aber einen Startpunkt der eindeutig ist. (Ob der Sensor richtig arbeitet oder nicht).

Code:
WHILE start = TRUE DO

DelayTimer(IN:= NOT DelayTimer.Q, PT := T#0.5S);

FOR zaehler := 1 TO 310 BY 1 DO
   data := DB.DataSensor[zaehler];
 


   IF zaehler = 305 THEN
       zaehler := 1;
   END_IF
   IF stop = TRUE THEN
       EXIT;
   END_IF
END_FOR;
END_WHILE;
 
Du musst dich nochmal mit der grundlegenden Funktionsweise einer SPS beschäftigen. Stichpunkt zyklische Bearbeitung. Durch die while-Schleife endet der Zyklus der SPS nicht und das führt natürlich zu einer Störung der deterministischen Echtzeit. Dein Funktionsbaustein wird bei TwinCAT in der Standardkonfiguration automatisch alle 10 ms aufgerufen und immer wieder von oben bis unten abgearbeitet.

Wenn dir 10 ms zu häufig ist, kannst du bspw. die for-Schleife mittels einer if-Anweisung nur bedingt aufrufen. Das Kriterium wäre dann beispielsweise die Signalflanke deines Taktgenerators.

Den Inhalt der for-Schleife habe ich mir nicht weiter angesehen
 
Danke für euere Antworten. Dem Tipp mit den Grundlagen gehe ich gerade nach.

@roboticBeet das überspringen der For-Schleife, für die Laufzeitänderung ist ein guter Tipp Danke.



Ohne die while-Schleife läuft es fast so wie ich es mir vorstelle.
 
Deine while-Schleife wird bereits von der SPS übernommen. Das hast du ja schon erkannt.
Doe For-Schleife wird in einem Zyklus durchlaufen und durch den Reset von zaehler auf 1 wird sie auch nie verlassen.
Das bedeutet, du bekommst jeden Zyklus 305 Werte aus dem DB.
Wenn du die For-Schleife weglässt und zaehler manuell inkrementierst, hast du jeden Zyklus einen Wert aus der DB.
 
Zurück
Oben