Pointer indirekt

smilie108

Level-2
Beiträge
38
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Mal eine dumme Frage möchte gerne einen db aufruf wie folgt generieren

habe einen fc in dem ich datensicherung betreibe der global mit einem AUF DB [pointer] einen db öffnet. nun wollte ich eine automatische sicherung der wqerte in einen sammelbaustein realisieren um nicht alle outs händisch zu übertragen. dabei wollte ich eigentlich wie folgt vorgehen
Am Anfang mache ich mit AUF den dbd der wertesicherung auf
Dann erfolgt einen berechnung und im dbw 320 stehet ein wert den ich dann ausgebe.
der sollte nun in einen anderen db als sammelwert reingeschrieben werden

L DBW 320
T DB [#weiter2].DBw [#weiter1]

Derzeit habe ich es so


L #gerechnet_dbd_ex1
L 32
+D
T #weitergetaktet

L #weitergetaktet //#lade_speicher
SRW 3
L 0
+I
SLW 3
T #weiter1

AUF DB [#db_ad]
L DBW 316
AUF DB [#db_ex_1]
T DBW [#weiter1]

Aber globale db aufrufe brauchen bekantlich viel zeit ;( deshalb wolte ich direkt adresieren .

Weis jemand ob das geht ?
 
mhm

mhm naja ich habe das aus einem anderen teil das mal einer bei uns gemacht hat da ich zuerst versucht habe den int direkt zu nehmen was nicht ging dann habe ich es in ein word geschoben das brachte dann aber die flaschen zahlen bis ich auf diese "Gebilde" gestoßen bin mit der erklärung das man dies so wandeln müsste um das richtige im word stehen zu haben. naja und daher das kopiert.

nun wollte statt zweimal hintereinander einen AUF zu benutzen das direkt schreiben ( habe das ganze in dem fc 8x ) und da summieren sich dann die db öffnungszeiten zusammen wollte eben die cpu entlasten.
also statt

AUF db [#db1]
L dbw 316 // wobe das datenwort in diesem db fix ist aber es sind halt in summe 8 verschiedene
AUF db [#db2]
t dbw [d#bw2]

so lösen

/ Programm anfang

AUF [#db1]
// kommen verschieden berechnungen und verküpfungen
und dann wollte ich nur noch

L DBW 316
T db [#db2].DBW[#dbw2]

machen um die 8 dbw´s in einen sammelbaustein zu kopieren.
Nur die 2. Variante funktioniert nicht da step7 meckert und mault wegen indr.Adressierung eines Words. Deshalb war meine frage ob das nur der falsche "Syntax" ist oder ob das garnicht geht da natürlich 8 AUF befehle ihre zeit brauchen würde ich so die AUF befehle auf einen Reduzieren

Hoffe das macht mein problem ein bischen verständlicher
 
Von der Philosphie her ist es wohl richtig, sich Gedanken um die Zykluszeit zu machen. In der Praxis genügt aber normalerweise auch die Performance von "kleinen" CPUs, ohne dass die Zykluszeit deutlich über 20ms liegt. Und das dürfte für den größten Teil der Anwendungen genügen.

Evtl. solltest Du also nicht zu viel Energie in solche Überlegungen stecken.
 
sorry

nun es handelt sich dabei um eine relativ kleine 315 1af03

vor meinen auswertungen zykluszeit ca 20ms nach ca 8 fc aufrufen ca 100ms
da muss ich mir doch gedanken machen ooder ?

diesen baustein habe ich mal geschrieben gehabt weil ich mehrere funktionen in einem brauchte. desweiteren macht dieser baustein eine tageswertspeicherung wobei ich einen 2monatigen ringspeicher drinnen habe.

Das Bedeutet es gibt den fc aufruf und für die messtelle dann einen eigenen db in dme die daten berechnet und gesichert werden. um das ganze aber übersichtlicher zu gestallten wollte ich einene SammelDB verwenden in dem ich gewisse summen und werte eintrage. wobei ich dem fc dann nur mitteile wie der sammeldb heißt und wo sein eintragungs dbw anfängt.

nur so wie ich das loösen wollte habe ich gemerkt das es mir einfach dadurch das die db´s relativ groß sind die zykluszeit bei kleineren steuerungen in die höhe treibt habe das auch auf einer 319er laufen da merkt man fast nix da ging die zeit bei ca 12 messtelln um 1 ms in die höhe von 1 auf 2

dehalb wollte ich die zugriffe anders machen um das ganze schlanker zu gestallten
 
nochmal sorry Blockmove

Aber bitte kannst du mir sagen was du mit di meinst

zur algemeinen erklärung bin kein Programmer im profi sinne
Habe alles was ich weis und kann mir selbst beigebracht bin eigentlich betriebselektriker und programme halt an unseren s7 seit ca 8 jahren wobei ich sicher manches komliziert und für profis unverständlich mache aber naja
ES Funktioniert ;)
 
AUF DB[xy]
AUF DI[km]

ermöglicht dir zwei datenbausteine gleichzeitig geöffnet zu haben, so dass du z.B. von DBxy.DBW4 direkt nach DBkm.DIW8 kopieren kannst ... und natürlich kannste auch noch weiter indirekt adressieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das ist der basisbaustein wo ich das integrieren will

das ist der basisbaustein wo ich die meisten outs direkt in einen db integrieren will indem ich 3 in´s hinzufüge ob automatisch gespeichert wird und welcher db und ab welchem dbw
 

Anhänge

  • fc74.txt
    31,5 KB · Aufrufe: 8
mhm

das funktioniert zwar hatte aber nicht den gewünschten erfolg ich glaub ich muss den baustein mal überarbeiten und in ein wenig kleiner machen mal sehen wie das geht habe mir sogut wie keine zeit eingespart waren nur 5 ms die es jetzt schneller geht mhm
 
@ vierlagig

sorry nochmal dumme frage ;) was ist spl
das mit dem sfc1 hatte ich auch im gedanken muss mir da noch was einfallen lassen weis nur noch nicht was :)
 
sorry nochmal dumme frage ;) was ist spl

Step7-hilfe schrieb:
SPL <Sprungmarke> (Springe über Sprungleiste) ermöglicht das Programmieren von Fallunterscheidungen. Die Zielsprungleiste, die maximal 255 Einträge enthält, beginnt unmittelbar nach der Operation SPL und endet vor der Sprungmarke, die der Operand SPL angibt. Jedes Sprungziel besteht aus einer Operation SPA. Die Anzahl der Sprungziele (0 bis 255) wird dem AKKU1-L-L entnommen.

das mit dem sfc1 hatte ich auch im gedanken muss mir da noch was einfallen lassen weis nur noch nicht was :)

einmal zu beginn des zyklusses auslesen und die zeit einfach an der schnittstelle übergeben...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nochmal

@ vierlagig

kann man einen 3. db auch aufrufen dann kann ich die uhr auslagern und vom fc auf den db zugreifen in dem ich für alle global das reinschreibe.

Hatte das zuerst mit dem sekundentaktgeber gemacht aber der ist zu ungenau da fehlen mir am tag ein paar viele sekunden.(
 
Zurück
Oben