Werte in DB archivieren bzw schieben

MK_Auto

Level-1
Beiträge
124
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen suche eine einfache Lösung um einen wert in den DB zu schreiben und bei dem nächsten wert immer einen weiterzuschieben also das die Werte praktisch gespeichert werden
MfG
Micha
 
Hallo vielagig

Danke für deine Antwort nur habe ich die Stelle noch nicht gefunden suche halt ne einfache lösung das ein wert gemessen wird in DB eingetregen wird und er dann sage ich mal durchrutscht wenn der nächste kommt brauche 100 Werte
Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
der ringpuffer von dtsclipper ist da genau das richtige.

brauchst nen DB mit hundert fächern
indirekt adressiert und den zeiger beim nächsten wert hochgezählt
beim 101. wert setzt du den zeiger wieder auf null

also: full steam ahead!
 
Der Grund der sache ist

ich muss immer in der lage sein die 100 Werte auszudrucken daher in DB und dann über Panel im Protokol einlesen und drucken
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
*
      U     #xTrigger                   //neuer wert vorhanden
      SPBN  end

      L     #dPointer                   //adresse
      LAR1                              //ins adressregister

      AUF   DB   100                    //DB öffnen
      L     #rValue                     //Wert
      T     DBD [AR1,P#0.0]             //in DB schreiben

      +AR1  P#4.0                       //nächstes Fach auswählen
      TAR1  
      T     #dPointer                   //und wert für die nächste Werwendung speichern

      L     #dPointer                   //hat der  pointer
      L     P#400.0                     //das 101te facherreicht
      >=D   
      SPBN  end
      L     L#0                         //wird er genullt
      T     #dPointer

end:  NOP   0

so sollte es funktionieren
 
Das ist im Grunde kein Problem.

Der " Zeiger " ist einfach nur ein Wert, mit dem ein Datenwort angesprochen wird, beginnend bei 0.

Also

Code:
// Hier Rückstellbedingung
 
SPB NoRe
L 0
T MW 490
NoRe: nop 0

Um dann das " Registerfach " anzusprechen, muss noch der DB geöffnet werden und dann das Datenfach adressiert
Code:
AUF DB100
 
L #SpeicherWert
T dbw [MW 490]
 
L MW490
L 2
+I
T MW490  // Zeiger erhöhen

Das ist so die Basisversion ohne Flanken und die Rückstellung fehlt auch noch.

dtsclipper
 
Danke Vierlagig aber

aber wenn ich es richtig sehe fängt er wieder bei null an zu schreiben
also im ersten fachh wenn 100 voll
der erste wert muss aber immer oben stehen das ist das Problem
MIcha
 
Also, so auf die schnelle:

Am simpelsten ist es mit der guten alten Lade- und Transfertechnik.
Einfach mit der Flanke das neue Daten da sind

Code:
ON #Neuer_Eintrag
O #Eingetragen
SPB NILO
 
L db100.dbw100
T db100.dbw102
 
L db100.dbw98
T db100.dbw100
 
L db100.dbw96
T db100.dbw98
 
...
 
L #Neuer_Wert
T db100.dbw0
 
set
S #Eingetragen
 
NILO: nop 0
 
ON #Neuer_Eintrag
R #Eingetragen

Wobei #Neuer_Eintrag und R #Eingetragen entweder statische Variablen im FB sind ODER aber Merker.

Vierlagig bringt mich um.
 
Zuletzt bearbeitet:
Wenn es eine fertige Funktion gibt kenne ich sie nicht...

Man ann das ganze noch in eine nette kleine Schleife Verpacken...


Code:
ON #Eintragen
O #Eingetragen
SPB NILO
 
L 102   // StartWert
T MW490
 
NEXT: nop 0
 
L MW490 // Dekrementieren
L 2
-I
T MW490
 
L MW490
L 2
+I
T MW 492
 
AUF DB100
L DBW[MW490]
T DBW[MW492]
 
 
L MW490
L 0
>I
SPB NEXT
 
L #Neuer_Wert
T DBW[MW490]
 
SET
S #Eingetragen
 
NILO: nop 0
ON #Eintragen
R #Eingetragen

Könnte klappen.

dtsclipper
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau das macht das Ding doch.

Code:
L MW490 // Dekrementieren
L 2
-I
T MW490 // Altes Datenfach
 
L MW490
L 2
+I
T MW 492  // Neues Datenfach
 
AUF DB100
L DBW[MW490] // Lade aus altem Fach
T DBW[MW492] // Transferiere in das neue
 
Danke aber heute verstehe

ich das wohl icht mehr oder ich habe mich auch falsch ausgedrückt
Also Wert kommt geht sage ich mal ins datenword 0
2 ter Wert kommt erster ins word 2 und der neue ins 0
usw
 
Vierlagig bringt mich um.

die möglichkeit besteht, ja, durchaus! :ROFLMAO:

nehmen wir also nochmal meinen code her und modifizieren ihn ... hab heut abend aber eine leichte rechenschwäche ... könnte also sein, dass die schleife nicht ganz hinhaut...

Code:
*

      U     #xTrigger                   //neuer wert vorhanden
      SPBN  end

      L     #rValue            //da das schieben dauern kann
      T     #rValueTemp            //speichern wir uns den wert erstmal weg

      L     P#392.0
      //T     #dAdressTemp
      LAR1

      AUF   DB   100      
      L     98
next: T     #iLoopCounter

      L     DBD [AR1,P#0.0]             //Wert in das
      T     DBD [AR1,P#4.0]             //nächste Fach schreiben

      //L     #dAdressTemp    
      TAR1  //neu
      SRD   3
      +     -4
      SLD   3
      //T     #dAdressTemp 
      LAR1  //neu
      
      LOOP  next

      L     #rValueTemp
      T     DB100.DBD  0

end:  NOP   0
 
Zuletzt bearbeitet:
Zurück
Oben