Schreiben von Daten in einen Datenbaustein an einer vom Benutzer festgelegten Stelle

DDuesentrieb

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

ich habe folgendes Problem. Ich schreibe im Moment an einem Funktionsbaustein.
Dabei soll in einen Daten Baustein an einer vorgegebenen Stelle Bool-Werte geschrieben werden.
Das festlegen der Stelle realisier ich

AUF DBXY
L #vorgegebene Stelle
T DBXY.DBW0


Nun möchte ich im Programm, an die durch die Benutzereingabe festgelegten Stelle, in den Datenbaustein
schreiben.

U Bedingung X
U Bedingung Y
= DBXY.DBX (die vorgegebene Stelle im Datenbaustein)

Gibt es eine Möglichkeit durch einen Platzhalter an der gewünschten Stelle in den Baustein zu schreiben?
Ich hoffe ich habe mein Problem einigermaßen einleuchtend beschrieben.

Scho mal vielen Dank für die Hilfe°

Informationen:

- Simatic 300
- CPU 317-2-PN/DP
- Step7 V5.4
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielen Dank für die schnelle Hilfe. Wollte fragen ob du nicht eine etwas leichtere Erklärung hättest, da der Thread mein bisher erwobenes Wissen übersteigt.
Sammle im moment erste Erfahrung mit S7 im Rahmen eines Praktikums.

Schon mal vielen Dank!
 
:confused: die Erklärung in dem Thread ist eigentlich gut ... Es gibt aber noch viele andere Threads zu dem Thema - vielleicht einfach mal "indirekte Adressierung" in die Foren-Suche eingeben.
Ansonsten - was verstehst du denn konkret nicht ? Zu speziellen Fragen, am Besten noch an Hand eines eigenen Codes dargestellt, kann man immer leichter etwas erklären. Ein genereller "Rundumschlag", am Besten noch als fertiger Code, wird dir am Ende gar nichts helfen ...

Gruß
Larry
 
Mal ein Paar Worte dazu.
Code:
      AUF   DB   100      LAR1  P#100.0
      U     E      1.0
      U     E      1.1
      =     DBX [AR1,P#0.0]

Im Adressregister wird die Adresse hinterlegt, die bearbeitet werden soll. Im Beispiel das Bit 100.0.
Du kannst natürlich variable Werte ins Adressregister schreiben. Den Aufbau kannst du aus der Online-Hilfe ersehen.

Bei der Zuweisung wird jetzt das Bit 100 im aufgeschlagenen DB beschrieben, da ja im Adressregister der Pointer P#100.0 steht. Was nach dem Komma in der eckigen Klammer angegeben wird, wird einfach zum Adressregister addiert.

Ich denke damit kommst du recht schnell zurecht, hat ja bei den Multiinstanzen auch gut geklappt. ;)
Wenn noch fragen offen sind, immer her damit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Aventinus,

Code:
AUF   DB   100      
LAR1  P#100.0       
U     E      1.0       
U     E      1.1       
=     DBX [AR1,P#0.0]

Der Ausschnitt hat mir sehr geholfen. Solang ich den Ausschnitt genau so implementiere klappt alles super.

Nur würde ich gern bei der Textzeile "LAR1 P#100.0" den Pointer von außen in den Funktionsbaustein übergeben. Also irgendwie in der Form "LAR1 P##test".
Habe dies auch schon probiert und habe einmal für test den Datentyp REAL hinterlegt und beim anderen mal den Datentyp Pointer. Bei beiden Versuchen habe ich einen Systemfehler auf meiner CPU bekommen.

Besteht die Möglichkeit, dass der Wert von außen übergeben wird? Wenn ja was mache ich falsch?

Wie immer vielen Dank für die Hilfe! ;)
 
wie das geht ist in dem link gut beschrieben!

aber noch mal für dich

L 100
sld 3
lar1

das ergibt ergibt den pointer p#100.0

L 2
+ar1

das ergibt in verbindung mit dem obigen den pointer p#100.2
 
Ich glaube du hast mich falsch verstanden.

Ich möchte einen kompletten Datenbaustein ansprechen nicht die einzelnen Bits oder Bytes.

Der Datenbaustein ist sagen wir mal 50 byte groß ARRAY[0..49]

DB200.DBB 1 wert 5
DB200.DBB 2 wert 6
DB200.DBB 3 wert 7

Und jetzt möchte ich den kompletten Datenbaustein auslesen DB200.DBB 567.
Ich weiß nicht wie ich das machen soll.
 
Ich glaube du hast mich falsch verstanden.

Ich möchte einen kompletten Datenbaustein ansprechen nicht die einzelnen Bits oder Bytes.

Der Datenbaustein ist sagen wir mal 50 byte groß ARRAY[0..49]

DB200.DBB 1 wert 5
DB200.DBB 2 wert 6
DB200.DBB 3 wert 7

Und jetzt möchte ich den kompletten Datenbaustein auslesen DB200.DBB 567.
Ich weiß nicht wie ich das machen soll.

ich glaube du hast mich falsch verstanden.
es interessiert mich nicht, was du nicht erklären kannst.
denk nochmal drüber nach und versuch es nochmal!

was bedeutet eigentlich auslesen? da bekomm ich pickel...
entweder man lädt einen bestimmten speicherbereich bit, byte, word, doppelword oder blockweise oder man beschreibt einen bestimmten speicherbereich bit, byte, word, doppelword oder blockweise.
datenbausteine auslesen ... und dazu noch der verweis auf ein bestimmtes byte... ich versteh es nicht!

wenn du das byte laden möchtest benutze den L-Befehl -> damit ist der in diesem byte repräsentierte speicherinhalt im akku1 und kann sowohl bit, byte, word oder doppelwordweise intepretiert werden also BOOL, INT, DINT, WORD, DWORD und sogar REAL darstellen...

man ey, einmal mit profis arbeiten!
 
ich glaube du hast mich falsch verstanden.
es interessiert mich nicht, was du nicht erklären kannst.
denk nochmal drüber nach und versuch es nochmal!

was bedeutet eigentlich auslesen? da bekomm ich pickel...
entweder man lädt einen bestimmten speicherbereich bit, byte, word, doppelword oder blockweise oder man beschreibt einen bestimmten speicherbereich bit, byte, word, doppelword oder blockweise.
datenbausteine auslesen ... und dazu noch der verweis auf ein bestimmtes byte... ich versteh es nicht!

wenn du das byte laden möchtest benutze den L-Befehl -> damit ist der in diesem byte repräsentierte speicherinhalt im akku1 und kann sowohl bit, byte, word oder doppelwordweise intepretiert werden also BOOL, INT, DINT, WORD, DWORD und sogar REAL darstellen...

man ey, einmal mit profis arbeiten!

Einen ganzen DB Auslesen hätte ich freiweg mit "Aus der Steuerung - mittels PG - auslesen" interpretriert. Und dann gibts das Typ-Gewurschtel nur bei der S5. Also ein DB der als komplett mit KC deklariert ist als KH darstellen...

Ja ich weiß - Themaverfehlung :ROFLMAO:
 
Zurück
Oben