Step 7 SFC14 - LADDR mit PEW beschalten

ThomasMaulwurf

Level-1
Beiträge
41
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Situation: Ich möchte ein Datenpaket (56 Wörter, Konsistent über gesamte Länge) aus der Peripherie auslesen. Das klappt super mit dem SFC14: Start ist bei PEW256, also Hex #100, geschrieben wird in einen DB mit 56 Wörtern über eine Länge von 112 Bytes via ANY Pointer.

Problem: ich möchte die Adresse nicht mit dem "Alias" W#16#100 beschalten, sondern direkt mit dem PEW256. Der SFC14 lässt dies so erstmal nicht zu -> hat jemand eine Idee, wie man das zurecht basteln könnte?

Oder müsste man einen Transfer mit diesem Hintergedanken komplett selbst aufbauen?


Ziel: Crossreferenzfähigkeit (daher Beschaltung direkt mit dem PEW), kompakter Baustein (daher Idee SFC14)


Ich danke im Vorraus!
Thomas
 
Du könntest Deinem "Wrapper"-Baustein das PEW... an IN als POINTER oder ANY übergeben, im Baustein dann prüfen ob die Bereichskennung B#16#80 ist, die Bereichskennung entfernen (UD DW#16#FFFFFF) und dann durch 8 dividieren (SRD 3). Das Ergebnis über eine Word-Variable (TEMP) an den SFC14 geben.

Das hätte zusätzlich den Vorteil, daß die Verwendung des PEW in den Referenzdaten auftaucht.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Überprüfen der Peripherieadresse kannst Du auch weglassen, der SFC14 prüft sowieso, ob zu dem LADDR-Wert eine passende Eingangsadresse projektiert ist. Du brauchst nur die Adresse aus dem POINTER extrahieren und an den SFC14 übergeben:
Code:
      L     P##IN_PEW                   //Adresse des FC-IN-Parameters IN_PEW (Typ POINTER)
      LAR1
      L     D [AR1,P#2.0]               //Speicherbereich + Adresse aus dem POINTER
      SRD   3                           //Bitadresse 1234.x --> Byteadresse 1234
      T     #temp_LADDR                 //AKKU1-L in Word-Variable

      CALL  "DPRD_DAT"
       LADDR  :=#temp_LADDR
       RET_VAL:=#temp_Int
       RECORD :=#temp_Array

... RET_VAL=0 auswerten und temp_Array auf FC-Ausgang kopieren,
    oder "DPRD_DAT" auf die am FC angegebene Adresse schreiben lassen

Aufruf des Wrapper-FC
Code:
      CALL  "myFC"
       IN_PEW :=PEW256
       RET_VAL:=#temp_Int
       RECORD :="DB1".myRecord

Harald
 
Genau so einfach und genial habe ich mir das vorgestellt. Hab vielen Dank, Harald!

Wenn noch Infos zu meiner Anwendung / endgültigen Durchführung gewünscht werden würd ich noch was dokumentieren.

Ansonsten: Problem gelöst.
 
Zurück
Oben