TIA Werte in einem DB speichern

C

chipchap

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

seit einiger Zeit probiere ich nun aus wie ich bei einer Flanke 10 Werte in einem DB speichern kann.
Ich habe einen DB ein ARRAY von 1..10 des Datentyp DINT angelegt. Nun möchte ich, das bei jeder Flanke ein Füllstand weggespeichert wird.
Leider werden mir bei dieser Flanke immer alle 10 index Werte überschrieben. Wie programmiert man das, das nur ein Wert geschrieben und der index in dem DB immer von selber weiter hochzählt?
Das Ganze hatte ich schon mit einer FOR Schleife probiert.

Kann mir da jemand helfen?
 
For-Schleife ist hier nicht unbedingt angebracht, die läuft von 1-10 einmal durch und beschreibt deine Speicherstellen.

Du brauchst noch (am Besten auch in dem DB) eine weitere INT/DINT, die sich den aktuellen Index des Array merkt.

dann mal so aus dem Hut:

Code:
If MyFlanke Then 

   //wenn MyIndex außerhalb des erlaubten Wertebereichs (1..10), dann auf 1 setzen
   //so kann man auch beim letzen Wert einfach auf 11 hochaddieren, damit wird dann hier
   //wieder bei 1 begonnen
   //außerdem stellt man sicher, dass das Array niemals mit falschem Index aufgerufen wird

   IF (MyIndex < 1) OR (MyIndex > 10) then

      MyIndex := 1;

   End_If;

   "MyDB".MyArray[MyIndex] := MyStoreValue;
   MyIndex := MyIndex + 1;

End_IF;

Achtung, MyFlanke muß auch unbedingt eine Flanke sein, sonst wird das nichts!
 
Zuletzt bearbeitet:
Ich denke mal das ist keine Flanke die du da benutzt.

Code:
If MyFlanke AND not MyFlanke1 Then 

   //wenn MyIndex außerhalb des erlaubten Wertebereichs (1..10), dann auf 1 setzen
   //so kann man auch beim letzen Wert einfach auf 11 hochaddieren, damit wird dann hier
   //wieder bei 1 begonnen
   //außerdem stellt man sicher, dass das Array niemals mit falschem Index aufgerufen wird

   IF (MyIndex < 1) OR (MyIndex > 10) then

      MyIndex := 1;

   End_If;

   "MyDB".MyArray[MyIndex] := MyStoreValue;
   MyIndex := MyIndex + 1;
   MyFlanke1 := MyFlanke;
End_IF;

Wann imer du MyFlanke auf TRUE setzt, wird der Index eins hochgezählt. Dann muss MyFlanke zwingend FALSE werden, bevor der nächste Schritt hochgezählt wird.
 
Wann imer du MyFlanke auf TRUE setzt, wird der Index eins hochgezählt. Dann muss MyFlanke zwingend FALSE werden, bevor der nächste Schritt hochgezählt wird.
Und MyIndex muss zwingend seinen Inhalt bis zur nächsten positiven Flanke behalten.
Und warum soll "MyFlanke1 := MyFlanke;" nie dann durchlaufen werden, wenn MyFlanke FALSE ist?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke mal das ist keine Flanke die du da benutzt.
Ralles MyFlanke ist nur das Ergebnis der Flankenbildung, welche selbst er nicht mit dargestellt hat.
Wie z.B.:
Code:
MyFlanke     := MyTrigger AND NOT MyTriggerOld;
MyTriggerOld := MyTrigger;

IF MyFlanke THEN
...
Weil diese Flankendetektion auf verschiedenen Wegen erfolgen kann, hat er nur darauf hingewiesen, dass MyFlanke unbedingt auch wirklich eine Flanke sein muss.
;)
 
Ralles MyFlanke ist nur das Ergebnis der Flankenbildung, welche selbst er nicht mit dargestellt hat.
Wie z.B.:
Code:
MyFlanke     := MyTrigger AND NOT MyTriggerOld;
MyTriggerOld := MyTrigger;

IF MyFlanke THEN
...
Weil diese Flankendetektion auf verschiedenen Wegen erfolgen kann, hat er nur darauf hingewiesen, dass MyFlanke unbedingt auch wirklich eine Flanke sein muss.
;)

Genau, chipchap schrieb ja schließlich, dass er bereits eine Flanke hat, mit der er jeweils speichern will.
Und ich hab extra noch einmal unter den Code darauf hingewiesen.
 
Weil diese Flankendetektion auf verschiedenen Wegen erfolgen kann, hat er nur darauf hingewiesen, dass MyFlanke unbedingt auch wirklich eine Flanke sein muss.
Ja, alle Wege führen nach Rom, aber manche leiten auch im letzten Moment ganz knapp drumherum.
Code:
If MyFlanke AND not MyFlanke1 Then 
   //wenn MyIndex außerhalb des erlaubten Wertebereichs (1..10), dann auf 1 setzen
   //so kann man auch beim letzen Wert einfach auf 11 hochaddieren, damit wird dann hier
   //wieder bei 1 begonnen
   //außerdem stellt man sicher, dass das Array niemals mit falschem Index aufgerufen wird
   IF (MyIndex < 1) OR (MyIndex > 10) then
      MyIndex := 1;
   End_If;
   "MyDB".MyArray[MyIndex] := MyStoreValue;
   MyIndex := MyIndex + 1;
[COLOR=#0000cd][B]    // nicht hier, sondern nach dem End_If den FlankenMerker MyFlanke1 bilden! Hier wechselt er nie nach FALSE!
[/B][/COLOR]End_IF;
[COLOR=#0000cd][B]MyFlanke1 := MyFlanke;[/B][/COLOR]

Gruss, Heinileini

Wie programmiert man das, das nur ein Wert geschrieben und der index in dem DB immer von selber weiter hochzählt?
Wahrscheinlich steckt in diesem Satz die Denkblockade des TE.
Er fragt sich/uns, wie man den Index dazu bringt "von selber" hochzuzählen.
Von selber gar nicht, man muss das Hochzählen schon explizit programmieren, wenn der "Automatismus" der For-Schleife entfällt.

Das Thema Flanke war auch für mich eigentlich kein Thema - ich hatte hier nur eingehakt, weil Zombie die ImpulsBildung gezeigt hat, wie sie gerade nicht funktionieren kann.
 
Zuletzt bearbeitet:
Zurück
Oben