Hi Leute,
ich möchte ein kontinuierliches Signal abtasten und nachher dann in ein Array legen. Jetzt fehlt mir die Idee wie ich die Abtastung durchführe. Hat jemand eine Idee für mich.
Achja habe das früher mit einem BLINK Baustein realisiert. Möchte das jedoch in ST hinbekommen ohne den Blinker zu verwenden.
Der Eingang sieht wie folgt aus:
VAR_INPUT
x :REAL; (kont. Signal)
time :TIME; (Abtastzeit)
time_r :REAL; (Abtastzeit als REAL-Wert)
END_VAR
Ich danke euch!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Das einfachste ist, wenn du in deiner Taskkonfiguration dein "Abtastprogramm" alle x ms aufrufst.
Du müßtest dazu einen "neuen Task" vom Typ "Zyklisch" erstellen.
Dann kannst du über die Eigenschaften den Intervall so setzen wie du möchtest.
Bitte im Hinterkopf behalten, dass du die Intervallzeit gößer läßt, wie die Zykluszeit deines "Abtastprogramm's".
Gruß Schuero
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Soll später ein Regler werden den ich ungern an die Taskkonfig koppeln möchte.
Kann mir zB jemand sagen wie ich die Systemzeit auslese und dann vll die Differenz von Zeiten bilde?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi. Ich möchte diese Aufgabe hardware-unabhängig lösen. Oscat.lib möchte ich auch erstmal nicht benutzen. Klingt merkwürdig, aber es wird doch wohl diese Aufgabe zu schaffen sein oder?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die Zeit kannst du Hardwareunabhängig mit der Funktion TIME() aufrufen.
Also z.B.
VAR
tStart: TIME;
END_VAR
tStart := TIME();
Falls du noch Flankenerkennung benötigst, dazu gibts die StandardLib mit r_trig und f_trig.
Gruß
Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-11-30
Originally created by: jl
VAR
getStartTime : BOOL := FALSE; (Verriegelung Startzeit zuweisen )
tStart : TIME; (Startzeit )
tAbtastzeit : TIME := t#10s; ( Abtastzeit )
index : INT := 1; ( Index für Array )
xSignal : ARRAY[1..1000] OF REAL; ( Array in dem dasEingangssignal gespeichert wird )
x : REAL ( Eingangssignal )
END_VAR
( Startzeit zuwiesen und verriegel )
IF NOT getStartTime THEN
tStart := TIME();
getStartTime := TRUE;
END_IF
( Wenn Symtemzeit TIME() grösser als Startzeit plus Abtastzeit, dann speichere das Eingangssignal ins Array, erhöhe den Index des Array um 1und setze die Verriegelung getStartZeit zurück, damit die Startzeit neu gesetzt werden kann)
IF TIME() > tStart + tAbtastzeit then
xSignal(Index) := x;
getStartTime := FALSE;
Index := Index + 1;
END_IF
( Wenn der Index des Array den maximal Wert erreicht hat beginne wieder bei 1 )
IF Index > 1000 then
index := 1;
END_IF
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Leute,
ich möchte ein kontinuierliches Signal abtasten und nachher dann in ein Array legen. Jetzt fehlt mir die Idee wie ich die Abtastung durchführe. Hat jemand eine Idee für mich.
Achja habe das früher mit einem BLINK Baustein realisiert. Möchte das jedoch in ST hinbekommen ohne den Blinker zu verwenden.
Der Eingang sieht wie folgt aus:
VAR_INPUT
x :REAL; (kont. Signal)
time :TIME; (Abtastzeit)
time_r :REAL; (Abtastzeit als REAL-Wert)
END_VAR
Ich danke euch!
Moin.
Das einfachste ist, wenn du in deiner Taskkonfiguration dein "Abtastprogramm" alle x ms aufrufst.
Du müßtest dazu einen "neuen Task" vom Typ "Zyklisch" erstellen.
Dann kannst du über die Eigenschaften den Intervall so setzen wie du möchtest.
Bitte im Hinterkopf behalten, dass du die Intervallzeit gößer läßt, wie die Zykluszeit deines "Abtastprogramm's".
Gruß Schuero
Soll später ein Regler werden den ich ungern an die Taskkonfig koppeln möchte.
Kann mir zB jemand sagen wie ich die Systemzeit auslese und dann vll die Differenz von Zeiten bilde?
Hi,
kommt auf das Target/Hardware an welche Funktion Du für die Systemuhrzeit zur Verfügung hast (ob z.B. die SyslibTime.lib unterstützt wird.)
Für Regler und Abtastfunktionen empfehle ich Dir auch die OSCAT.Lib
w www.oscat.de w
Hi. Ich möchte diese Aufgabe hardware-unabhängig lösen. Oscat.lib möchte ich auch erstmal nicht benutzen. Klingt merkwürdig, aber es wird doch wohl diese Aufgabe zu schaffen sein oder?
Servus
Die Zeit kannst du Hardwareunabhängig mit der Funktion TIME() aufrufen.
Also z.B.
VAR
tStart: TIME;
END_VAR
tStart := TIME();
Falls du noch Flankenerkennung benötigst, dazu gibts die StandardLib mit r_trig und f_trig.
Gruß
Erik
Originally created by: jl
VAR
getStartTime : BOOL := FALSE; (Verriegelung Startzeit zuweisen )
tStart : TIME; (Startzeit )
tAbtastzeit : TIME := t#10s; ( Abtastzeit )
index : INT := 1; ( Index für Array )
xSignal : ARRAY[1..1000] OF REAL; ( Array in dem dasEingangssignal gespeichert wird )
x : REAL ( Eingangssignal )
END_VAR
( Startzeit zuwiesen und verriegel )
IF NOT getStartTime THEN
tStart := TIME();
getStartTime := TRUE;
END_IF
( Wenn Symtemzeit TIME() grösser als Startzeit plus Abtastzeit, dann speichere das Eingangssignal ins Array, erhöhe den Index des Array um 1und setze die Verriegelung getStartZeit zurück, damit die Startzeit neu gesetzt werden kann)
IF TIME() > tStart + tAbtastzeit then
xSignal(Index) := x;
getStartTime := FALSE;
Index := Index + 1;
END_IF
( Wenn der Index des Array den maximal Wert erreicht hat beginne wieder bei 1 )
IF Index > 1000 then
index := 1;
END_IF
Das ist echt super. So hab ich mir das vorgestellt.
Gruß Andreas