Beckhoff TC2 Array füllen und auslesen

ToLe@CS

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen allerseits,

ich hätte mal eine Frage.
Ich habe mit einer Beckhoffklemme EL3403 eine kleine Steuerung zur Phasenüberwachung realisiert.
Das Ganze habe ich mit TwinCAT2 in ST erstellt und mit einer Visualisierung versehen in der man schön die aktuelle Spannung pro Phase beobachten kann.
Ich würde jetzt noch gerne immer ein paar ältere Werte aufgelistet haben.
Das müsste doch eigentlich mit einem Array gehen, das ich mir damit z.b. die letzten 2000 Werte pro Phase speichere, oder?
Hätte da evtl jemand eine Idee und könnte mir evtl sagen wie ich das in ST umsetzen kann?
Gerne würde ich diese Werte dann auch in einer Tabelle in der Visualisierung anzeigen lassen.
Wäre nett wenn mir da jemand helfen könnte.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Zuerst musst du besimmen wie oft du einen eintrag machst - z.B. jede sekunde, oder anderes ereignis?
Ich würd den Wert immer auf die erste Stelle im array schreiben ..... Phase_L1[1] := AktuelleSpannung;
Bevor du das machst musst du aber alle Einträge nach 'unten' verschieben, damit du nichts überschreibst. Am besten mit einer Schleife beginnend mit dem letzen Eintrag ->
Phase_L1 := Phase_L1[i-1];
 
Zuletzt bearbeitet:
Ok Danke schon mal, aber wie setze ich das um das er nach einer sekunde den Wert in Phase_L1[2] und nach einer weiteren sekunde in [3] schreibt.
Er schreibt mir gerade immer die aktuelle Spannung in [1]
 
Ich würde den aktuellen wert nicht direkt in [2], [3] usw. schreiben, denn irgendwann ist das array voll und du weist nicht wann welcher wert geschrieben wurde. Wenn du immer in [1] schreibst, und die gespeicherten werte weiterschiebst, hast du immer die letzten 2000 werte im array, wobei wert 2000 der älteste ist.

Erstell mit R_TRIG eine Flanke wenn sich die Sekunde ändert
Dann:

if Flanke:=true then
FOR i:= 2000 TO 2 BY -1 DO // von 2000 abwärts bis 2
Phase_L1 := Phase_L1[i-1]; // von Phase[2000] = Phase[1999] usw. bis Phase[2] = Phase[1]
END_FOR // Alle werte wurden um einen eintrag weitergeschoben

Phase_L1[1] := AktuelleSpannung;
END_IF



Sollte so ungefähr funktionieren. wennst willst kannst auch ein 2 dimensionales Array machen und den Messzeitpunkt bei jeder Messung mitspeichern
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hmm nee ein 1-dimensionales reicht mir, danke^^
den Baustein R_TRIG habe ich gefunden, wie kann ich ihm sagen das er für CLK die Sekunde und für Q dann die Flanke nehmen soll?
 
du könntest die systemzeit auswerten, besser aber du machst es mittels timer, weil flexibler


TON_Messung : TON; (Einschaltverzögerung)
Messintervall : TIME; (Zeit einstellbar)
---

TON_Messung(IN:= NOT Flanke , PT:= Messintervall);
Flanke := TON_Messung.Q;
 
Zurück
Oben