Messwerte Erfassen
-
- Null-Leiter
- Beiträge: 21
- Registriert: Donnerstag 29. Juni 2017, 07:05
- Wohnort: Bremen
Messwerte Erfassen
Hallo,
ich will gerne mit einer VIPA M13 folgenden Ablauf programmieren, hänge aber gerade fest,...Evtl kann mir hier jemand helfen =)
Google hat mir auch nicht sonderlich geholfen, hab unzählige Beitrage gelesen, aber es war nirgends das richtige bei.
Wenn das Signal "clk" kommt, soll ein Messwert "InValue" erfasst werden und in den Anfang des DB's geschrieben werden, wenn nun erneut das Signal kommt, wird der zweite wert um einen verschoben und der neue Wert kommt auf Platz eins usw,...
Das ganze bis 100 Werte voll sind.
Momentan schreibt er überall das gleiche rein,..
Mein Programm:
VAR_INPUT
clk : BOOL ;
reset : BOOL ;
InValue : REAL ;
END_VAR
VAR
statClkEdge : BOOL ;
statResEdge : BOOL ;
statValue : REAL ;
statValues : ARRAY [1 .. 100 ] OF REAL ;
END_VAR
VAR_TEMP
tempInt : INT ;
tempIndex : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
U #clk
FP #statClkEdge
SPBN end1
L #InValue
T #statValue
CALL "BLKMOV"
SRCBLK := P#DIX 8.0 REAL 100
RET_VAL := #tempInt
DSTBLK := P#DIX 12.0 REAL 100
end1: NOP 0
U #reset
FP #statResEdge
SPBN end2
LAR1 P##statValues
L 100
loop: T #tempIndex
L 0.000000E+000
T D [AR1,P#0.0]
+AR1 P#4.0
L #tempIndex
LOOP loop
end2: NOP 0
Vielen Dank!
Gruß Rouven
ich will gerne mit einer VIPA M13 folgenden Ablauf programmieren, hänge aber gerade fest,...Evtl kann mir hier jemand helfen =)
Google hat mir auch nicht sonderlich geholfen, hab unzählige Beitrage gelesen, aber es war nirgends das richtige bei.
Wenn das Signal "clk" kommt, soll ein Messwert "InValue" erfasst werden und in den Anfang des DB's geschrieben werden, wenn nun erneut das Signal kommt, wird der zweite wert um einen verschoben und der neue Wert kommt auf Platz eins usw,...
Das ganze bis 100 Werte voll sind.
Momentan schreibt er überall das gleiche rein,..
Mein Programm:
VAR_INPUT
clk : BOOL ;
reset : BOOL ;
InValue : REAL ;
END_VAR
VAR
statClkEdge : BOOL ;
statResEdge : BOOL ;
statValue : REAL ;
statValues : ARRAY [1 .. 100 ] OF REAL ;
END_VAR
VAR_TEMP
tempInt : INT ;
tempIndex : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
U #clk
FP #statClkEdge
SPBN end1
L #InValue
T #statValue
CALL "BLKMOV"
SRCBLK := P#DIX 8.0 REAL 100
RET_VAL := #tempInt
DSTBLK := P#DIX 12.0 REAL 100
end1: NOP 0
U #reset
FP #statResEdge
SPBN end2
LAR1 P##statValues
L 100
loop: T #tempIndex
L 0.000000E+000
T D [AR1,P#0.0]
+AR1 P#4.0
L #tempIndex
LOOP loop
end2: NOP 0
Vielen Dank!
Gruß Rouven
-
- Null-Leiter
- Beiträge: 505
- Registriert: Donnerstag 16. August 2007, 01:03
Re: Messwerte Erfassen
Hi,
leider kann ich nur bedingt nachvollziehen welcher Code oben geschrieben ist. Da aber bisher noch niemand etwas zu diesem Thema geschrieben hat, versuche ich einfach einmal mein Glück und schreibe einmal was mir einfällt. Vielleicht findet sich dann so der "Fehler".
Ich habe unten einige Kommentare hinterlassen. Dies ist zumindest schon Mal ein Anfang. Schreib dir doch selbst die Kommentare hinter jede Zeile. Ich würde auf Anhieb sagen, das hier sehr viele Dinge nicht passen. Um mehr zu sagen bräuchte man mehr Infos.
VAR_INPUT -> Deklaration der Eingangsvariablen?!
clk : BOOL ;
reset : BOOL ;
InValue : REAL ;
END_VAR
VAR -> Deklaration der übrigen Variablen innerhalb des Skriptes?!
statClkEdge : BOOL ;
statResEdge : BOOL ;
statValue : REAL ;
statValues : ARRAY [1 .. 100 ] OF REAL ;
END_VAR
VAR_TEMP
tempInt : INT ;
tempIndex : INT ;
END_VAR
BEGIN -> ist dies hier an der richtigen Stelle?
NETWORK -> fehlen hier nicht ein paar Klammern? Syntax?
TITLE = -> richtige Stelle?
U #clk -> wenn der Eingang da ist,
FP #statClkEdge -> und eine positive Flanke kommt, wo wechselt diese?????
SPBN end1 -> springe nach End1, also macht er hier nichts weiter, sofern beide Bedingungen erfüllt sind. Hier müsste ich Wissen was der statCLKEdge ist und macht.
Sollte die obrige Bedingung nicht erfüllt sein, dann lade die Eingangsvariable und transferiere sie in eine statische.
L #InValue
T #statValue
Rufe einen Blockmove auf .......
CALL "BLKMOV"
SRCBLK := P#DIX 8.0 REAL 100
RET_VAL := #tempInt
DSTBLK := P#DIX 12.0 REAL 100
end1: NOP 0
U #reset
FP #statResEdge
SPBN end2
LAR1 P##statValues
L 100
loop: T #tempIndex
L 0.000000E+000
T D [AR1,P#0.0]
+AR1 P#4.0
L #tempIndex
LOOP loop
end2: NOP 0
leider kann ich nur bedingt nachvollziehen welcher Code oben geschrieben ist. Da aber bisher noch niemand etwas zu diesem Thema geschrieben hat, versuche ich einfach einmal mein Glück und schreibe einmal was mir einfällt. Vielleicht findet sich dann so der "Fehler".
Ich habe unten einige Kommentare hinterlassen. Dies ist zumindest schon Mal ein Anfang. Schreib dir doch selbst die Kommentare hinter jede Zeile. Ich würde auf Anhieb sagen, das hier sehr viele Dinge nicht passen. Um mehr zu sagen bräuchte man mehr Infos.
VAR_INPUT -> Deklaration der Eingangsvariablen?!
clk : BOOL ;
reset : BOOL ;
InValue : REAL ;
END_VAR
VAR -> Deklaration der übrigen Variablen innerhalb des Skriptes?!
statClkEdge : BOOL ;
statResEdge : BOOL ;
statValue : REAL ;
statValues : ARRAY [1 .. 100 ] OF REAL ;
END_VAR
VAR_TEMP
tempInt : INT ;
tempIndex : INT ;
END_VAR
BEGIN -> ist dies hier an der richtigen Stelle?
NETWORK -> fehlen hier nicht ein paar Klammern? Syntax?
TITLE = -> richtige Stelle?
U #clk -> wenn der Eingang da ist,
FP #statClkEdge -> und eine positive Flanke kommt, wo wechselt diese?????
SPBN end1 -> springe nach End1, also macht er hier nichts weiter, sofern beide Bedingungen erfüllt sind. Hier müsste ich Wissen was der statCLKEdge ist und macht.
Sollte die obrige Bedingung nicht erfüllt sein, dann lade die Eingangsvariable und transferiere sie in eine statische.
L #InValue
T #statValue
Rufe einen Blockmove auf .......
CALL "BLKMOV"
SRCBLK := P#DIX 8.0 REAL 100
RET_VAL := #tempInt
DSTBLK := P#DIX 12.0 REAL 100
end1: NOP 0
U #reset
FP #statResEdge
SPBN end2
LAR1 P##statValues
L 100
loop: T #tempIndex
L 0.000000E+000
T D [AR1,P#0.0]
+AR1 P#4.0
L #tempIndex
LOOP loop
end2: NOP 0
-
- Null-Leiter
- Beiträge: 505
- Registriert: Donnerstag 16. August 2007, 01:03
Re: Messwerte Erfassen
OK, der Beitrag ist von 2017
-
- Null-Leiter
- Beiträge: 21
- Registriert: Donnerstag 29. Juni 2017, 07:05
- Wohnort: Bremen
Re: Messwerte Erfassen
Vielen Dank für die Hilfe.
Habe damals das Problem noch gelöst.
Weiß nur jetzt nicht mehr genau wie
Schönes Wochenende!
Habe damals das Problem noch gelöst.
Weiß nur jetzt nicht mehr genau wie
Schönes Wochenende!
-
- Null-Leiter
- Beiträge: 7
- Registriert: Samstag 21. September 2019, 20:24
- Elt-Onkel
- Null-Leiter
- Beiträge: 7769
- Registriert: Donnerstag 25. März 2004, 01:08
- Kontaktdaten:
Re: Messwerte Erfassen
Hallo,
Das ist keine zwei Jahre her !
Ein so kurzes Gedächnis ?
Wir haben in zwei Monaten 40 jähriges Abiturtreffen,
und ich kenne die Leute (Schüler) heute noch.
...
Na, na.
Das ist keine zwei Jahre her !
Ein so kurzes Gedächnis ?
Wir haben in zwei Monaten 40 jähriges Abiturtreffen,
und ich kenne die Leute (Schüler) heute noch.
...
- talabot
- Null-Leiter
- Beiträge: 8
- Registriert: Donnerstag 26. September 2019, 17:22
Re: Messwerte Erfassen
Du könntest Viertelstunden-Mittelwerte bilden, diese abspeichern in DB's und dann übertragen. Ich mache das ganze nur von SPS zu einem PC. Der PC liest den DB und schreibt nach abholen der Daten einen Merker, so das die SPS weiß, das sie wieder bei DW0 anfangen kann. Das ganze ist bei mir eher so ein Low-Cost-Sinaut Also mit Ethernet-CPs, aber auch schon mit Modems an der CP340/341.