Inhalt eines DB in Peripherie schreiben

FinalMistery

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,
Gerne würde ich den Inhalt eines globalen-DB in einen gewünschten Adressbereich schreiben. Momentan schreibe ich die im DB befindlichen DWords noch per symbolischer Adressierung einzeln, an die Ausgänge raus.
Doch gibt es einen SFC, der mir durch Angabe der Speicherstelle im DB (Am besten auch über eine Ermittlung der Adresse über die Symbolik) ein Datenfeld mit einer gewünschten Länge, an die Peripherie schreibt?
Würde es gerne in AWL programmieren.
Hier noch ein Beispiel wie ich es momentan mache:

Code:
L "Daten".Befehl1.DW1
T PAD[#temp_Adress]
 
L #temp_Adress
L P#4.0
+D 
T #temp_Adress
 
L "Daten".Befehl1.DW2
T PAD[#temp_Adress]
 
L #temp_Adress
L P#4.0
+D 
T #temp_Adress
 
.
.
.
.
 
Hallo,

Das läßt sich mit "Blockmove" SFC20 erledigen.

Code:
CALL    SFC20        //SFC 20 "BLKMOV" (Variable kopieren) 
      (SRCBLK    := P#M100.0 BYTE 10, 
       RET_VAL    := MW10,    //10 Bytes ab MB 100 werden in die 10 Bytes ab  
        DSTBLK    := P#M200.0 BYTE 10); //MB 200 kopiert.
 
Hallo,

Das läßt sich mit "Blockmove" SFC20 erledigen.

Mit dem Blockmove ist es nötig einen ANY-Pointer anzugeben auf den Adressbereich wo er hinschreiben soll. Doch ist das die Peripherie also kein ANY-Pointer möglich.

Mit FSC15 bekomm ich leider kein funktionierendes Ergebnis hin

Code:
CALL "DPWR_DAT"
[INDENT]LADDR    := W#16#19 // PAB 25.0
RECORD  :="Daten".Befehle // Struktur mit 4 Bytes gefült
RET_VAL :=#RetVal_temp 
[/INDENT]

Er schreibt einfach nichts in den Adressbereich.
Kann mir da jemand weiter helfen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was steht denn bei retval?
wie ist die baugruppe in der hw-config parametriert?

in der hw-config muss das so parametriert sein das ber bereich konsistent ist
 
Mit dem Blockmove ist es nötig einen ANY-Pointer anzugeben auf den Adressbereich wo er hinschreiben soll. Doch ist das die Peripherie also kein ANY-Pointer möglich.

Ja, das stimmt.

so könnte es noch gehen.

Code:
CALL  "BLKMOV"
       SRCBLK :=P#DB1.DBX 0.0 BYTE 4
       RET_VAL:=MW100
       DSTBLK :=P#A 24.0 BYTE 4

ansonsten zum SFC15

HinweisEin Zugriff mit der SFC 15 "DPWR_DAT" ist nur auf drei oder mehr als 4 Byte lange Datenbereiche möglich. Andernfalls wird ein Zugriff mit dem Fehlercode W#16#8090 abgewiesen.
 
Zurück
Oben