DB Adressierung flexibel

BA-Student

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

habe da ein Problem. Ich brauche flexible db_Aufrufe. Ich hab das schon hinbekommen das ich den db flexibel habe und zwar mit
L #int
T mw60
AUf DB [mw60]

habe aber noch das Problem das ich jedes einzelne Bit im DB ansprechen muss also z.B. DB(flexibel).dbx0.0 aber das dbx0.0 muss fest sein.
Und gibt es ne möglichkeit die ganze db-Adresse als Lokale Ausgangsvariable zu definieren?

Danke für eure hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke für die Antwort
aber das habe ich schon durchgelesen und brachte mich nicht weiter.
Da ich erst vor kurzem mit SPS Programmierung begonnen habe und mit awl erst seit gestern vertraut bin.
Brauche ja sowas ähnliches wie
auf db [mw50]
L dbx 0.0
aber das als ausgangsvariable
 
Wenn der Offset innerhalb des DBs immer einheitlich ist, kann direkt ohne weiteres z.B. mittels U DBXx.y zugegriffen werden. Die kombinierte Fassung (U DBz.DBXx.y) ist nicht notwendig und stellt in AWL für die SPS sowieso die beiden Befehle AUF DB z, U DBXx.y dar. Es entfällt allerdings der "symbolische" Zugriff. Eine weitere Alternative wäre es, das Ganze über FB mit Instanz-DBs durchzuführen (wenn es die Aufgabenstellung hergibt).
 
versuch mal bitte in worte zu fassen, was genau du vorhast ... das macht einiges einfacher

[edit]
Code:
L   DBX0.0
macht keinen sinn, man kann nur byte aufwärts laden und transferieren
bitzugriffe passieren über z.b. U, O, S, R, = ...
[/edit]

[edit2]irgendwie sollten wir uns mit herrn hönle besser absprechen :rolleyes:[/edit2]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
danke für die Antwort
aber das habe ich schon durchgelesen und brachte mich nicht weiter.
Da ich erst vor kurzem mit SPS Programmierung begonnen habe und mit awl erst seit gestern vertraut bin.
Brauche ja sowas ähnliches wie
auf db [mw50]
L dbx 0.0
aber das als ausgangsvariable
L DBX 0.0 geht so nicht bei Siemens (wir sind ja nicht bei IEC 1131 ;)). Entweder U DBX 0.0 oder O DBX 0.0.
Was bedeutet Ausgangsvariable? Soll der ein Wert zugewiesen werden? Dann = DBX 0.0, S DBX 0.0, R DBX 0.0, ..
Vielleicht einfach noch ein paar Zeilen zur Aufgabenstellung schreiben dmit es klarer wird.
 
Das Problem ist das das ich die db-adresse als operand in einem anderen fc benötige.
Das heißt ich brauch eine flexible db-adresse wie z.b. db[flexibel].dbx0.0 in einer anderen Funktion da diese dann gesetzt werden muss wenn ein signal ansteht. Und ich brauch 26 Verschiedene db-Adressen db [1-26].dbx0.0. Und je nach voreinstellung muss halt ein anderer db aufgerufen werden.
Also ich stell mir das so vor wenn ich eine 2 wähle wird das bit db2.dbx0.0 gesetzt wenn ich die 14 wähle dann db14.dbx0.0.
 
Zuletzt bearbeitet:
33.gif


die db-nummer ist eingangsparameter im format INT an einem FC? richtig?
in dem FC möchtest du dann das bit 0.0 in diesem DB setzen? sollen es noch mehr bits sein? wieviele?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
soweit richtig
es sind pro db 26 bits da ich 26 motoren habe und die jeweils einer stufe zugeordnet werden was den 26 db´s entspricht
möchte das bit aber nicht in dem fc setzen sondern in einem anderen. deshalb brauch ich auch sowas wie einen ausgangsparameter
 
Zuletzt bearbeitet:
soweit richtig
es sind pro db 26 bits da ich 26 motoren habe und die jeweils einer stufe zugeordnet werden was den 26 db´s entspricht
möchte das bit aber nicht in dem fc setzen sondern in einem anderen. deshalb brauch ich auch sowas wie einen ausgangsparameter

schon mal über nen FB nachgedacht? der kann in ner multiinstanz aufgerufen werden :rolleyes: ... anyway

du meinst nicht zufällig sowas hier?

Code:
*
      L     #db_number                  //IN int
      T     #db_number_1                //TEMP int, weil mit IN
      AUF   DB [#db_number_1]           //AUF DB nicht funktioniert

      L     0                           // Anfangsadresse im DB laden
      SLD   3                           // Pointer erzeugen
      LAR1                              // in das Adressregister 1 laden

      U     #beispielirgendwas
      S     DBX [AR1,P#0.0]             // bit 0.0 im datenbaustein setzen

      U     #beispielwasanderes
      S     DBX [AR1,P#4.2]             // bit 4.2 im datenbaustein setzen
[edit]
das macht aber nur sinn, wenn die anfangsadresse variabel ist
bei gleichbleibender anfangsadresse kannst du es ja auch so machen:

Code:
*
      L     #db_number                  //IN int
      T     #db_number_1                //TEMP int, weil mit IN
      AUF   DB [#db_number_1]           //AUF DB nicht funktioniert
      U     #beispielirgendwas
      S     DBX 0.0             // bit 0.0 im datenbaustein setzen

      U     #beispielwasanderes
      S     DBX 4.2             // bit 4.2 im datenbaustein setzen
[/edit]
 
Zuletzt bearbeitet:
Zurück
Oben