Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Page 1 of 2 12 LastLast
Results 1 to 10 of 16

Thread: Peripheriebereiche nach Lokaldatenbereich und umgekehrt

  1. #1
    Join Date
    19.01.2009
    Location
    Klagenfurt (Ö)
    Posts
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Beitrag


    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:

    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
    Reply With Quote Reply With Quote Peripheriebereiche nach Lokaldatenbereich und umgekehrt  

  2. #2
    Join Date
    17.10.2007
    Location
    35043 Marburg
    Posts
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Default

    Guten Morgen,

    bei dir bieten sich doch die SFC14 & SFC 15 wunderbar an. Schau mal in der Baustein Bibliothek von Siemens.
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  3. #3
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,402
    Danke
    422
    Erhielt 2,536 Danke für 2,108 Beiträge

    Default

    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

  4. #4
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    und wenn du AR2 benutzt, dass sichern und zurückschreiben nicht vergessen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    esse's Avatar
    esse is offline Neuer Benutzer
    Themenstarter
    Join Date
    19.01.2009
    Location
    Klagenfurt (Ö)
    Posts
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Beitrag

    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

  6. #6
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Code:
    *
          L     PEW [AR1,P#0.0]
          T     DBW [AR2,P#0.0]             //für globaldatenbereich
          T     W [AR2,P#0.0]               //für lokaldatenbereich
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    esse's Avatar
    esse is offline Neuer Benutzer
    Themenstarter
    Join Date
    19.01.2009
    Location
    Klagenfurt (Ö)
    Posts
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

  8. #8
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    was ist #iIndex?
    wo ist die schleife?
    warum lädst du ins adressregister, wenn du es sowieso wieder überschreibst?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #9
    esse's Avatar
    esse is offline Neuer Benutzer
    Themenstarter
    Join Date
    19.01.2009
    Location
    Klagenfurt (Ö)
    Posts
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

  10. #10
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Similar Threads

  1. Studio5000 Einganngsbits in DINT umwandeln und umgekehrt
    By huggy in forum Sonstige Steuerungen
    Replies: 11
    Last Post: 27.09.2017, 20:08
  2. Replies: 4
    Last Post: 16.07.2013, 21:08
  3. 2xUSINT in UINT und umgekehrt
    By merlin in forum CODESYS und IEC61131
    Replies: 9
    Last Post: 16.12.2011, 09:12
  4. Real-Format von S5 nach S7 und umgekehrt
    By clausi in forum Simatic
    Replies: 3
    Last Post: 20.08.2009, 09:20
  5. Replies: 18
    Last Post: 12.08.2009, 15:59

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •