Step 5 Konvertierung S5 auf S7

technikerpv

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.
Durch eine Konvertierung von S5 (CPU928) nach S7 wurde der Aufruf des DB0 nach der Konvertierung im Simatic-Manager
durch Temporäre Variablen ersetzt. Ich weiß dass die S5 in den DB0 die Anfangsadressen der Bausteine schreibt.
Wozu ist der Aufruf des DB0 an der Stelle überhaupt notwendig???
Das Problem ist dass durch die Drehung (Anweisung TAK usw.) die eigentliche Funktion aus dem S5 Programm nicht richtig übernommen wurde.
Das PLC-SIM meldet "DB242 nicht geladen" obwohl als #DBOP der DB14 vorgegeben wird. Bis zur Anweisung "SPB M001" ist ja alles gleich.
Dann wird durch die Umwandlung (Anweisung TAK usw.) wohl einiges verdreht.
Hier das Beispiel:
-------------------------------------------------------------------------
//Code S5

AWL
L KH 0000
T MW 224 ;-> Init Schmier OP

LW =DBOP
T MW 250
L KF +0
!=F
SPB =M001
B MW 250
A DB 0 ;-> DB OP oeffnen

LW =DW
T MW 220
B MW 220
L DW 0
T MW 224
M001:
***
-------------------------------------------------------------------------
//Code S7 nach der Konvertierung
//Der Simatic-Manager hat das Öffnen des DB0 weggelassen und hier folgende temporäre Variablen generiert:
//conv_akku1
//conv_akku2
//conv_stw
//conv_index

L W#16#0
T MW 224 // -> Init Schmier OP
//;
L #DBOP
T MW 250
L 0
==I
SPB M001
T #conv_akku1
TAK
L MB 251
T #conv_index
TAK
L #conv_akku1
AUF DB [#conv_index] // -> DB OP oeffnen
//;
L #DW
T MW 220
T #conv_akku1
L STW
T #conv_stw
L MB 221
SLW 4
LAR1
L #conv_stw
T STW
L #conv_akku1
L DBW [AR1,P#0.0]
T MW 224
M001: NOP 0
---------------------------------------------------------------------------
Frage: Würde es wieder funktionieren wenn ich z.B einen DB1000 als "DB0" anlegen würde (DB0 direkt geht ja in der S7-Welt nicht)
und das Netzwerk wieder identisch zum S5-Programm gestalten würde, allerdings mit S7 Anweisungen? Dann würde das ganze ja wieder so aussehen wie auf der S5 ohne dass hin und her drehen
und die Umwandlung des DB0 in temporäre Variablen. So ungefähr:

L W#16#0
T MW 224 // -> Init Schmier OP
//;
L #DBOP
T MW 250
L 0
==I
SPB M001

L MW 250
AUF "DB0" // -> DB OP oeffnen
//;
L #DW
T MW 220

L MW 220
L DBW 0
T MW 224
M001: NOP 0
------------------------------------------------------------------------------
Trotzdem verstehe ich an dieser Stelle den Aufruf des DB0 immer noch nicht und bitte deshalb um etwas Unterstützung
 
Hallo,

es wird nicht der DB 0 geöffnet, sondern der DB mit Nummer "DBOP".

AUF DB [#conv_index] // -> DB OP oeffnen

--> diese Zeile macht genau das.

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der S5-Welt gehören die Befehle

B MW 250
A DB 0 ;-> DB OP oeffnen

zusammen.
Das gilt auch für zb für:

B MW 250
L DW 0

Der lädt in den Akku das DW mit der Nummer, das im MW250 steht.

Indirekte Adressierung ala S5.
 
1:1 Übersetzung
Code:
L   0
T   #OUT_W              //(MW224) Init OUT_W

L   #IN_DBOP
T   #temp_w_DBnr        //(MW250)
L   0
==I
SPB END                 //DB-Nr ist 0!

AUF DB [#temp_w_DBnr]

L   #IN_DW
SLD 4                   //DW-Nr --> P#(2*DW).0
T   #temp_dw_DBW        //(MW220)

L   DBW [#temp_dw_DBW]
T   #OUT_W              //(MW224)

END: SET

besser:
Code:
L   #IN_DBOP
T   #temp_w_DBnr        //(Word)
L   0
==I
SPB END                 //DB-Nr ist 0! Rückgabe AKKU1 = 0

L   #IN_DW
SLD 4                   //DW-Nr --> P#(2*DW).0
T   #temp_dw_DBW        //(DWord)

AUF DB [#temp_w_DBnr]
L   DBW [#temp_dw_DBW]
END: T   #RET_VAL       //(Word)

Harald
 
Zurück
Oben