DB Werte auffaddieren

geduldiger

Level-1
Beiträge
285
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
hallööchen,

hab folgendes problem,

angenommen ich habe 2 DB's in den jeweils ein Wert steht. wird ein merker gesetzt soll der eine um den anderen wert erhöht werden und beim nächsten mal immer der vorher erhöhte wert wieder erhöht werden. der sich immer erhöhende wert soll dann in einen anderen db geschrieben werden

also zb
HTML:
erste addition    50(wert im erstenDB)+1(wert im zweitenDB) = 51
zweite addition  51+1(wert im zweitenDB) = 52
...
...
...

bis jetzt hab ich was geschrieben was allerdings immer wieder die gleichen werte addiert
guckst du hier
HTML:
U M 65.0
L DB1.DBD 1
L DB2.DBD 1
+R
T DB3.DBD 1

hab die ganze zeit überlegt aber ich komm net drauf wie ich den erhöhten wert immer wieder bei der nächsten addition aufrufen und erhöhen kann, is bestimmt leicht für die Pro's, wär nett wenn mir jemand ne hilfestellung geben könnte

mfg
 
Hi.

Also wenn ich das richtig verstehe hast du z.B. im DB1 den Wert 4 und im DB2 den Wert 6. Und wenn dein Merker gesetzt wird sollen beide addiert und in den DB3 geschrieben werden.

beim nächsten mal immer der vorher erhöhte wert wieder erhöht werden.
Um welchen Wert? Der im DB 1; 2; oder 3

der sich immer erhöhende wert soll dann in einen anderen db geschrieben werden
Vielleicht kann man die DB-Adresse wie einen Pointer dynamisch gestalten.
Habe es aber selbst noch nicht gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
meinst du etwa so
Code:
U M65.0
L DB1.DBD0   //hier steht Anfangs die 50
L DB2.DBD0   //hier steht die 1
+R
T DB1.DBD0
 
U M65.1       //Reset auf 50
L 50.0
t DB1.DBD0
 
also ich meinte das eigentlich so

HTML:
wert im DB1 = 50  der bleibt auch immer so
wert im DB2 = 1  (kann aber jeden wert annehmen also nicht nur die 1) 
   
jetzt soll immer wenn derselbe merker gesetzt wird der wert im DB1 um den wert im DB2 erhöht werden und beim nächsten mal dann der erhöhte wert wieder um den wert im DB2 erhöht werden
nacher will ich einen wert in einem DB abspeichern der sich dann wie folt verändert (für das beispiel mit 50 und 1)
 
50, 51, 52, 53, 54, 55......................
 
Wenn du es präziser beschreiben kannst, dann kann ich dir auch sicher helfen.
Nochmal die Frage, die unbeantwortet blieb.
Wird irgendwann resetet und wieder bei 50 angefangen zu zählen?
 
achso, nein es wird nicht resetet, aber irgendwann steht halt statt der 50 ein anderer wert im db (kommt von ner Visu) drin und dann wird der mit der 1 auffaddiert, auch die 1(kommt auch von der Visu) ändert sich irgendwann

es is immer das gleiche 50; 51; 52; 53........ ( bei 50 und 1)

oder 74; 74,3; 74,6; 74,9; 75,2;..... ( bei 70 und 0,3)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also,
ich muss zugeben, dass ich auch noch nicht richtig verstanden habe, was du machen willst.
Trotzdem mein Vorschlag :
Code:
DB1.DBD0 // Anfangswert von der Visu
DB1.DBD4 // Inkrement von der Visu
 
DB1.DBD8 // hochgezählte Werte
DB1.DBD12 // Gesamt
 
U -Impuls
UN -Flankenmerker
spbn nCnt
 
L DB1.DBD 8   // Hochzählen
L DB1.DBD 4
+R
T DB1.DBD 8
 
nCnt: 
U -Impuls
= -Flankenmerker
 
L DB1.DBD 8   // Hochzähl-Wert
L DB1.DBD 0   // Anfangswert
+R
T DB1.DBD 12  // Gesamt

Vielleicht ist es das ja ...
 
Dann benutze doch das Ändern als Zählerreset
Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
BEGIN
NETWORK
TITLE =Überprüfen ob sich Wert 1 aus der Visu geändert hat
      L     DB1.DBD    0; 
      L     DB1.DBD    4; 
      ==R   ; 
      SPB   _001; 
//Visuwert hat sich geändert
      L     DB1.DBD    0; 
      T     DB1.DBD    4; 
      T     DB3.DBD    0; 
_001: NOP   0; //Sprungziel bei keine Änderung aus der Visu
NETWORK
TITLE =Überprüfen ob sich Wert 2 aus der Visu geändert hat
 
      L     DB2.DBD    0; 
      L     DB2.DBD    4; 
      ==R   ; 
      SPB   _002; 
//Visuwert hat sich geändert
      L     DB2.DBD    0; 
      T     DB2.DBD    4; 
      L     DB1.DBD    0; 
      T     DB3.DBD    0; 
_002: NOP   0; //Sprungziel bei keine Änderung aus der Visu
NETWORK
TITLE =Addition bei Ereignis M65.0 (muss als Flanke vorliegen)
      U     M     65.0; 
      SPBN  _003; 
//Addition durchführen
      L     DB3.DBD    0; 
      L     DB2.DBD    0; 
      +R    ; 
      T     DB3.DBD    0; 
_003: NOP   0; //Sprungziel wenn M65.0=0
END_FUNCTION
 
okay, ich erklär mal bissl den hintergrund, dann bekomm ich bestimmt gleich eine auf den deckel weil man das wahrscheinlich ganz anders löst, ich bin aber diplomant und damit unerfahrener Querdenkerstudent, also nicht hauen;)

ich muss einen software regler mit sollwerten bedienen.
ich habe angaben in welcher zeit der regler auf eine bestimmte temperatur hochregeln soll.
die einzelnen temperaturen in der zeit(also die rampe) errechne ich über ein script, dadurch bekomme ich z.B. die Temperatur um die jede minute erhöht werden soll
dieses delta t will ich dann auf die anfangstemperatur auffaddieren bis der nächste temperaturschritt eingegeben wird
das delta t errechnet sich also immer neu und wird an das programm übergeben welches mir dann den neuen wert gibt und an den regler db übergibt

alle sind verwirrt keiner weiß bescheid, oki hoffe das war jetzt net zu wirr erklärt, aber es is auch net sehr einfafch weil es 6 regler, ca 120 verschidene schritte und ein programm mit 500 seiten quellcode sind
 
ja genau, aber die sollwertrampe kann sich ändern je nachdem was der bediener eingibt, also gibt er zum beispiel ein dass sich innerhalb von 6 stunden die temperatur von 50 auf 60 grad erhöhen soll, dass kann er nach belieben eingeben, werden die stützpunkte demnach berechnet, die stützpunkte kann ich schon über mein script berechnen.und es kommt noch dazu dass ein programm abläuft nach den 6 stunden ändert sich der wert dann zum beispiel von 50 auf 60 und von 60 auf 70 und die zeit kann wieder variieren
 
er nimmt die Gesamtdifferenz der Temperaturunterschiede und teilt sie durch die gesamtzeit des intervalls, dann bekommt er den wert um den er jede minute erhöhen soll

also beispielsweise anfangstemp 50 endtemp 60 in 6 stunden

--> 60°C - 50C° = 10K

--> 10K / (6*60min)= 0,02 grad pro min erhöhen

so hab ich mein VB script geschrieben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also es gibt nur 2 Stützpunkte: Anfang und Ende

Naja: da gibts eine Menge fertiger Teile dafür.
PCS7-Libary RAMP_P FB52 zB.

auch selber programmieren sollte kein Problem sein...
 
ich bekomm zwar jetzt den wert, um den jede minute erhöht werden muss, kann aber den wert nicht erhöhen, weil ich net weiß wie, wobei ich wieder am anfang steh, hab doch versucht den wert im step7 programm immer auffzuaddieren also z.B. auf die 50 C° immer 1 ° pro min, bin doof oder?
 
das is en komplexes programm und alle werte verändern sich von allen seiten aus, ich möchte doch nur nen wert in der CPU errechnen, hab doch schon alles andere, ein wert soll immer auf nen anderen wert auffaddiert werden, gibts da keine lösung für??? steh ich aufm schlauch??
 
Zurück
Oben