Datenbausteine variabel ansteuern

Spendel

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle miteinaner.

Ich hab folgendes vor. Innerhalb eines Step 7 Programmes soll volgende Funktionalität aufgebaut werden. Durch einen Profibus Teilnehmer werden Datne übermittelt und dieser soll die Möglichkeit haben, zu entscheiden in welchen Datenbaustein er sie speichern möchte.

Das an einem Beispiel. Über die Addresse EB 5 erhallte ich einen Wert zwischen 0..255. Über die Addresse EB 6 ebenso.

Wenn nun z.B. folgende Konstelation auftaucht
Adresse Aktueller Wert
EB 5 (5)
EB 6 (122)
will ich den Wert 122 der in EB 6 steht in den Datenbaustein DB 5 schreiben. Ich habe Probiert die Ardesse EB 6 in einen Merker (z.B. MW 10) zu transferieren und dann den entsprechenden Baustein mit z.B. DB [MW 10] aufzurufen. Allerdings funktioniert das nicht.

Kann ich diese Funktionalität erreichen und wie.

LG Lukas
 
Code:
L EB5
T Tempvar1_Word

AUF DB[Tempvar1_Word]
L EB6
T DBB ???  //??? = dein Byte im DB wo du das ganze speichern möchtest

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst nicht einfach irgendwas irgendwo hin schreiben. Der DB muß existieren und der entsprechende Bereich deklariert sein. Leg die zwei DBs an (z.B. 3 und 4)und deklariere als DBB 0 ein Byte.


in MW 10 schreibst du die Nr deines ausgewählten DBs (3 oder 4)

L 3
T MW10
(willst du DB4, lädst du 4 (prog dir ne Auswahl))

Dann kannst du mit

AUF DB[MW10]

deinen gewünschten DB aufrufen, und mit

L EB 5
T DBB 0

deinen Wert dort ablegen
 
der weg ist richtig und das geht auch
Code:
      L     EB     5
      T     MW    10
      AUF   DB [MW    10]
      L     EB     6
      T     DBW    0

EDIT: man war ich langsam ;)
 
Code:
*
      L     EB     5
      T     #dbNumber

      CALL  "TEST_DB"                       //SFC24
       DB_NUMBER :=#dbNumber
       RET_VAL   :=#RetVal
       DB_LENGTH :=#dbLength
       WRITE_PROT:=#dbWriteProtect


      UN    #dbWriteProtect
      U(    
      L     #dbLength
      L     0
      >I    
      )     
      U(    
      L     #RetVal
      L     0
      ==I   
      )     
      SPBN  not
      AUF   DB [#dbNumber]
      L     EB     6
      T     DBB    0
not:  NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke allerseits,

Sowie MSB bzw. Dr. M das schrieb hatte ich es auch. Ich hab es nochmal getippt und jetzt läuft es. Warum es heut früh nicht ging weiß ich net. Das ich die Bausteine zu Deklarieren habe, war mir schon klar. Der Teufel ist ein Eichörnchen.

Über die Lösung von vierlagig muß ich noch nachdenken.

Danke euch allen.
 
[FONT=&quot]A
Über die Lösung von vierlagig muß ich noch nachdenken.

Was gibt‘s da zu nachdenken?

Hier ist das Stichwort "Defensive Programmierung"!
Es kann Dich später echt Zeit kosten wenn dein Projekt umfangreicher wird und Du weist nicht warum dein DB nicht alle Daten geschrieben werden, bzw. diese nicht an die richtige stelle. So könntest Du zu mindest die Länge des DB ermitteln und mit einem " hartcodiert " Wert vergleichen!
Es gibt sicher auch ein pfiffige Methode auch Strukturen aus einem DB auszulesen, damit man nicht irgend wann einen Variable im DB hinzufügt oder löscht und sich wundert warum passt das jetzt alles nicht mehr!

Also ist der Weg SEHR GUT![/FONT]
 
Zurück
Oben