Peripheriebereiche nach Lokaldatenbereich und umgekehrt

esse

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen!

Auf der Suche nach Hilfe bin ich auf diese wirklich tolle Forum gestoßen und bin guter Dinge dass mir hier jemand wirklich helfen kann.

So nun zu meinem Problem::confused:

Ich übergebe einem FB eine Startadresse (INT-Wert) und die Anzahl konfigurierter WORDs (15WORD IN/ 15WORD OUT) von einem DP Slave.

Ich möchte nun die PEW in einer Schleife einlesen und in eine Stat Variable (UDT) umkopieren.

Am Ende des FBs möchte soll das ganze in umgekehrter Reihenfolge passieren - einen Teil des UDTs auf die PAWs kopieren.

Das mit der Schleife war kein Problem und auch zu Testzwecken das umkopieren von WORDs innerhalb eines globalen DBs hab ich noch geschafft. Jedoch hab ich echt keine Idee wie ich das mit den PEWs, PAWs und den Lokaldaten anstellen soll.

Wie muss ich das mit dem/den Adressregistern handeln.

PS: Mit BLKMOV funktioniert das glaube ich nicht weil man da ja nicht auf das Peripherieabbild zugreifen kann - oder ? Hab's mal versucht hat nicht geklappt.

Code Schnippsel aus dem Test mit den WORDs in einem DB:

....
L #Index
SLD 3
LAR1
L DBW [AR1,P#0.0] // PEW [AR1,P#0.0] // sollte klappen???
T DBW [AR1,P#60.0] // aber ab hier weiß ich nicht weiter
L #Index
L 2
+I
...

Weiß jemand Rat???

gruss esse
 
Guten Morgen,

bei dir bieten sich doch die SFC14 & SFC 15 wunderbar an. Schau mal in der Baustein Bibliothek von Siemens.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
also erstmal ist der SCF14 / 15 dafür da Mittel der Wahl - wie schon von Simatiker geschrieben ...

Wenn du aber gerne mit deiner Routine weiter machen willst, dann solltest du natürlich den Perepheriebereich laden und in den Lokalbereich schreiben. Entsprechend mußt du dir (noch) einen Pointer auf deinen Lokalbereich bauen.

Gruß
LL
 
Hallo

Erstmal danke für eure raschen Antworten. Ich würde gerne an meiner Routine festhalten. Das Problem liegt genau darin dass ich nicht weiß wie ich das angehen soll den Peripheriebereich in den Lokaldatenbereich zu kopieren und dann den Pointer zusammen bauen.

Könnt ihr mir nochmal unter die Arme greifen?

Gruß
esse
 
Hi,
hab's zum laufen gebracht - hab aber keine Ahnung ob das so ordnungsgemäß gemacht ist. Könntet ihr da nochmal drüberschauen, wäre echt nett. Ach noch etwas, muss ich auf noch etwas achten wenn ich den Code in einem Multiinstanz FB einsetze. Der FB wird bei jedem Zyklus bearbeitet und voraussichtlich ca. 15mal aufgerufen. Oder gibt es vielleicht sonstige Bedenken?

Code:

anf: NOP 0 // Schleifenanfang
L #iStart
L #iIndex
+I
SLD 3 // Pointer erzeugen
LAR1 // in das Adressregister laden
T #Adr_Quell

L #iIndex
SLD 3
L P##DPBUS // Adresse vom UDT
+D
LAR1
T #Adr_Ziel

L #Adr_Quell
LAR2

// Daten umkopieren
L PEW [AR2,P#0.0]
T W [AR1,P#0.0]

// Adressregister wieder herstellen
L #Rett_AR1
LAR1
L #Rett_AR2
LAR2

// Zählvariable manipulieren
....

Gruß
esse
 
was ist #iIndex?
wo ist die schleife?
warum lädst du ins adressregister, wenn du es sowieso wieder überschreibst?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, ok

... hab den unnötigen source entdeck und ihn entfernt.

"iIndex" (INT) ist meine Zählvariable für die Schleife - die wird vor der Schleife mit "0" vorbelegt.

Noch mal auf meine Frage zum Aufruf als Multi-FB zurück zu kommen - gibt's da irgend welche Bedenken?

hier noch der Rest der Schleife:

Code:
....
// Zählvariable manipulieren
L #iIndex // Zählvariable INT
L 2
+D
T #iIndex

U(
L #iWord_Anz // Anzahl der zu kopierenden WORDs
L 2
*I
L #iIndex
>I
)
SPB anf // Schleife beenden


SG
esse
 
mann, mann, mann

also das kapier ich jetzt voll nicht - heißt dass das mein Code nicht MI-tauglich ist?

Gruß
esse
 
Frage!

wenn ich so:

Code:
 L     P##DPBUS  // Variable (UDT) im statischen Datenbereich des FBs

auf meinen UDT zugreife, ist da der Versatz dann nicht schon Berücksichtigt?

Gruß
esse
 
Also ich täte ja einen Datenbereich nehmen für die Peripheriedaten.
Den kann man schön strukturieren, kann man den temp-Bereich auch, aber man kann sich die Daten nicht online anschauen, wenn man's mal braucht. Und das ist immer dann der Fall, wenn man keine Zeit hat.
 
Hallo nochmal

hoffe das ich das mit der MI-Fähigkeit hingekriegt habe.

Ich möchte mich nochmal für die tolle Unterstützung bei allen bedanken.

LG
esse
 
Zurück
Oben