Das ist das was ich in meinem Post #5 mit dem Punkt a) meinte.
Der SCL-Compiler erzeugt manchmal kein AWL sondern MC7-Code. Dieser kann vom AWL-Editor nur dargestellt, aber nicht bearbeitet werden.
Damit du das im AWL-Editor bearbeiten kannst, musst du aus dem MC7-Code das AWL-Makro wiederherstellen. Das ist möglich, dazu muss man aber z.B. bei deinem Code wissen die ein ANY-Pointer aufgebaut ist, und wie die Parameterübergabe an Funktionen ist.
Beispiel:
Code:
A7d5: L DW#16#10020058;
T LD 68;
L DINO;
T LW 72;
TAR2 ;
+ L#1696;
T LD 74;
L DW#16#10020058;
T LD 78;
L DINO;
T LW 82;
TAR2 ;
+ L#240;
T LD 84;
TAR2 LD 88;
UC "BLKMOV" {
P#L 68.0,
P#L 2.0,
P#L 78.0};
Die Parameterreihenfolge des BLKMOV-Aufrufs ist genauso wie du ihn in AWL sehen würdest
Code:
CALL "BLKMOV"
SRCBLK :=
RET_VAL:=
DSTBLK :=
D.h. dem Parameter SRCBLK wird ein Zeiger auf L68.0 übergeben, RET_VAL auf L2.0 und DSTBLK auf L78.0.
Das "L" steht für Lokaldaten, also Temp-Variablen.
Datentyp des Parameters SRCBLK ist ANY, dieser ist 10 Byte groß.
Da eine S7 maximal 32 Bit = 4 Bytes in einem Rutsch verarbeiten kann, baut der Compiler die Daten aus Einzelwerten zusammen und übergibt der Funktion die Startadresse.
Das Zusammenbauen des ANY-Pointers macht dieser Teil:
Code:
L DW#16#10020058;
T LD 68;
L DINO;
T LW 72;
TAR2 ;
+ L#1696;
T LD 74;
Und jetzt kommst du ins Spiel, und machst dich in der Step7-Hilfe schlau wie ein ANY-Pointer aufgebaut ist, und wohin dieser zeigt den der SCL-Compiler dir zusammenbaut.
Wenn du das weißt und das Wissen mit der Variablendeklaration deiner AWL-Quelle kombinierst, weißt du wie die originale Parameterbeschaltung in AWL oder auch SCL aussieht.
Dann löscht du den MC7-Code und erstetzt es durch ein adäquates AWL-Makro, was du dann durch den AWL-Übersetzer schicken kannst.