Datenbausteinregister

pinolino

Level-1
Beiträge
261
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Frage zum Aufschlagen eines Datenbausteins.

Die CPU stellt ja zwei Datenbausteinregister zur Verfügung, wobei die Behandlung der Register durch die CPU absolut gleichwertig ist. Man spricht ja vom DB-Register und vom DI-Register.

Ich war bisher immer der Meinung, dass ein Global-DB über ein DB-Register und entsprechend ein Instanz-DB über ein DI-Register aufgeschlagen werden muss.

Nun habe ich gelesen:

Jeder Datenbaustein kann über eines der beiden Register (auch über beide gleichzeitig) aufgeschlagen werden.

Frage:

Heißt das nun, dass ein Instanz-DB auch über ein DB-Register aufgeschlagen werden kann, oder wie muss ich den Satz verstehen?

Danke für eine Erklärung!

Grüße
pinolino
 
Heißt das nun, dass ein Instanz-DB auch über ein DB-Register aufgeschlagen werden kann, oder wie muss ich den Satz verstehen?

nu, geht, macht sich toll, wenn du indirekt in zwei DBs rumvorwerken willst...
(das beispiel adressiert nicht indirekt, ist nur als bsp. gedacht)

Code:
*
      AUF    DB  5   //DB5 öffnen
      AUF    DI  6   //DB6 öffnen

      L      DBD 4   //DB5.DBD4 laden
      L      DID 8   //DB6.DBD8 laden
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage:

Heißt das nun, dass ein Instanz-DB auch über ein DB-Register aufgeschlagen werden kann, oder wie muss ich den Satz verstehen?
Hi Pinolino,

nehmen wir mal an Du hast einen FB1 mit dem dazu gehörenden DB1.
Dann greifst Du innerhalb des FB auf den DB mit dem Befehl DI zu ( L DIWx )
Du kannst aber auch von außen z.B.: im FC 5 ein Datenwort des DB1 laden.
Ganz normal mit L DB1.DBWx
Ich finde solche Zugriffe nicht so sauber, aber das kann hier ganz schnell in einer Grundsatz Diskussion enden.
 
Danke für eure Beispiele...

@Paule: Ja, habe ich verstanden!

@vierlagig:
In deinem Beispiel wird ja der DB5 über das DB-Register und der DB6 über das DI-Register aufgeschlagen. Ist jetzt der DB6 ein Global- oder ein Instanz-Datenbaustein?
 
Aber ich denke mal, dass man das in der Praxis eher unterlassen sollte, oder?

warum? es muß abgesichert sein (besonders in FBs) und sauber dokumentiert. wenn das gewährleistet ist, dann spricht da IMHO nichts dagegen. unterstützt doch nur die performance... wenn man sich den MC7 code für einen qualifizierten aufruf anschaut, kommts auf "AUF DB x", "AUF DB y", "AUF DB x", "AUF DB y" usw. raus und das verbrät zeit ohne ende... wenn man nur eine operation zwischen zwei DBs durchführen will gehts, aber bei umständlichen und/oder längeren funktionen würde ich immer auf die möglichkeit, beide register benutzen zu können, zurückgreifen.
 
Ok, vierlagig - danke.

Ein Problem habe ich noch mit:

Code:
AUF    DB  5   //DB5 öffnen
AUF    DI  6   //DB6 öffnen
 
L      DBD 4   //DB5.DBD4 laden
L      DID 8   //DB6.DBD8 laden

Müsste es hier nicht heißen:

L DBD 8

Wenn der DB6 ein globaler DB ist, dann kann ich doch in ihm auch nur auf ein DBD und nicht auf ein DID zugreifen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Müsste es hier nicht heißen:

L DBD 8

NÖ, weil du dann das DB5.DBD8 laden würdest

Wenn der DB6 ein globaler DB ist, dann kann ich doch in ihm auch nur auf ein DBD und nicht auf ein DID zugreifen, oder?

das I kennzeichnet lediglich das register, welches benutzt werden soll, nicht die art des bausteines. das ist der steuerung nämlich herzlichst egal.
 
warum? es muß abgesichert sein (besonders in FBs) und sauber dokumentiert.
NOP 0,
Was willst Du dokumentieren?
"Hallo Leute ich greife gerade von außen auf eine Instanz zu bitte den FB xxx nicht im Statischen Bereich ändern sonst geht mein Zugriff ins Nimmerland.
Wenn dann muss das alles durchgängig Symbolisch sein.
... wenn man sich den MC7 code für einen qualifizierten aufruf anschaut,
Klar mache ich das, jedes mal wenn ich einen Baustein fertig habe. ;)
Hör lieber auf mit dem Spruch, sonst kommt wieder einer und will wissen wie das geht, und Du willst es ja nicht rausrücken. Hatten wir das nicht erst letztens mal?
für einen qualifizierten aufruf anschaut,
Was ist ein qualifizierter Aufruf? Adressregister?
Sind alle anderen Aufrufe unqualifiziert?
wenn man sich den MC7 code für einen qualifizierten aufruf anschaut, kommts auf "AUF DB x", "AUF DB y", "AUF DB x", "AUF DB y" usw. raus und das verbrät zeit ohne ende...
Also mittlerweile haben die Steuerung ordentlich was auf der Brust, die können damit schon fertig werden.

Natürlich können die Daten über Pointer und UDT, sprich ganze Strukturen an andere Bausteine übergeben werden. Aber das hat ja nichts mit der Frage zu tun.
 
das I kennzeichnet lediglich das register, welches benutzt werden soll, nicht die art des bausteines. das ist der steuerung nämlich herzlichst egal.

Also muss mit anderen Worten ein Operand im DB immer über das Register angesprochen werden, über das der DB auch aufgeschlagen wird?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt hab ich aber heftig schmunzeln müssen: unsaubere Programmierung wird dadurch sauber, dass man sauber dokumentiert?

ich bitte um Entschuldigung, aber das ist mir jetzt diesen hier:
*ROFL* *ROFL* *ROFL*
wert ... :rolleyes:

Aber da der werte Kolle heute schon an anderer Stelle ähnlich schrieb, gehe ich mal davon aus, dass er das nicht ganz ernst meinte.

gut - ich weiss nicht, was das für Anlagen sind - mit tausenden IO, mit was weiss ich Verwaltungsanbindung, mit ... ?

Meine kleinen Furzmaschinchen bring ich mit z.T. sauber gekapselten FB zum laufen. Global-DB gibts nicht, FC auch nicht und wenn mal etwas sein muss, was nach Querzugriff (oder besser gesagt: gemeinsamen Zugriff) verlangt, dann halt nicht in der Nachbarinstanz gewildert, sondern eine Spur unvorteilhaft als Globalvariable in dem Merkerbereich verschoben. Na, ja, ich geb zu: mir ist der Platz im Merkerbereich bislang noch nicht ausgegangen. Weiss halt nicht: liegt es an meiner Art zu programmieren? Oder sind meine Problemstellungen so klein?
 
NOP 0,
Was willst Du dokumentieren?
"Hallo Leute ich greife gerade von außen auf eine Instanz zu bitte den FB xxx nicht im Statischen Bereich ändern sonst geht mein Zugriff ins Nimmerland.
Wenn dann muss das alles durchgängig Symbolisch sein.

du hast es nicht verstanden! es wird ausschließlich auf global-DBs zu gegriffen! das DI bezeichnet, wie ich erwähnte nicht die art des bausteines sondern kennzeichnet einzig, dass zu verwendende register.
eine dokumentation könnte in etwa so aus sehen:

//im folgenden wird mit hilfe der beiden adressregister
//auf zwei global-DBs zugegriffen


Was ist ein qualifizierter Aufruf? Adressregister?
Sind alle anderen Aufrufe unqualifiziert?

ein qualifizierter aufruf: L DB3.DBD68
ein "un"qualifizierter: L DBD68

Also mittlerweile haben die Steuerung ordentlich was auf der Brust, die können damit schon fertig werden.

a) nicht alle steuerungen
b) hat es für mich auch was mit komfort zu tun


Natürlich können die Daten über Pointer und UDT, sprich ganze Strukturen an andere Bausteine übergeben werden. Aber das hat ja nichts mit der Frage zu tun.

das habe ich auch mit keinen wort angedeutet! aber wenn es dich interessiert, dann findest du hier einen schönen und effektiven einsatz von UC und UDT in FBs (aus: http://www.sps-forum.de/showthread.php?t=9425 )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das DI bezeichnet, wie ich erwähnte nicht die art des bausteines sondern kennzeichnet einzig, dass zu verwendende register.

Würde dann diesbezüglich meine folgende Aussage stimmen - oder liege ich wieder mal daneben?

Ein Operand im DB muss immer über das Register angesprochen werden, über das der DB auch aufgeschlagen wird?

Danke
pinolino
 
Ok, vielen Dank vierlagig!

Grüße
pinolino

PS: Mir ist es unbegreiflich wie manche hier auf jede Frage, und sei sie noch so kompliziert, eine professionelle Antwort parat haben - und das bei dem doch sehr umfangreichen Gebiet, was die SPS-Programmierung so alles hergibt... :confused:

Wahnsinn, wieviele Jahre muss man das denn betreiben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
du hast es nicht verstanden!
Ich muss es nicht verstehen, da ich es schon wusste.
Natürlich ist es ein Globaler DB darum kann ich ja auch von außen direkt mit L DB auf ihn zugreifen.
Wie ich in meinem ersten Posting geschrieben habe, lies mal Deine Signatur.
Ich schrieb ja nur dass das nicht sauber ist.
ein qualifizierter aufruf: L DB3.DBD68
ein "un"qualifizierter: L DBD68
Wenigstens sind wir da einer Meinung.

b) hat es für mich auch was mit komfort zu tun
Komfort ist:
Änderung > Bausteinkonsistenzprüfung > geänderte Bausteine übertragen > Fertig
 
Ich muss es nicht verstehen, da ich es schon wusste.
Natürlich ist es ein Globaler DB darum kann ich ja auch von außen direkt mit L DB auf ihn zugreifen.
Wie ich in meinem ersten Posting geschrieben habe, lies mal Deine Signatur.
Ich schrieb ja nur dass das nicht sauber ist.
Wenigstens sind wir da einer Meinung.

Komfort ist:
Änderung > Bausteinkonsistenzprüfung > geänderte Bausteine übertragen > Fertig

allgäu! ich kann es mir nur noch so erklären - das macht euch alle bißchen wuschi wuschi und plemm plemm im schädel....
 
Zurück
Oben