Step 7 Umsetzung Programmcode von S5 nach S7 -> Bitte um Unterstützung

Rados

Level-2
Beiträge
36
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

ich bin beauftragt, Programmcode von S5 nach S7 umzustellen. Der Siemens-Konverter für diese Zwecke leistet da schon gute Arbeit, jedoch gibt es noch viele Baustellen, wo man per Hand eingreifen und umprogrammieren muss. Leider kenne ich mich mit S5 überhaupt nicht aus und bin eher S7-Anfänger, da SPS-Kurs absolviert und kaum Praxiserfahrung. Ich wäre Euch sehr verbunden, wenn Ihr Euch meinen Umsetzungsvorschlag mal ansehen würdet, vielleicht gibt es dort Fehler oder es ist zu umständlich geschrieben und wäre zu optimieren. Ich bedanke mich schonmal vorweg ganz herzlich.

S5 Code in einer Funktion FC xx

A DB 131
L KH FFFF
B MW 94
T DW 0
L KF +1
T DW 0

Ich denke, es geht hier um indirekte Adressierung. Der Hex-Wert FFFF soll in das DB131.DBW... geschrieben werden, dessen Wert im Merkerwort 94 hinterlegt ist. Ich denke, ich muss hier registerindirekt adressieren und da Bereichszeiger 32 Bit lang sind, wird es für meine Begriffe nicht ganz so einfach. Meine Idee (jeder Schritt auskommentiert) ist folgende:

S7 - Äquivalent in der Funktion FC xx

AUF DB 131

// MW 94 und MW96 retten (falls in folgenden FCs, etc. noch exakt mit den darin enthaltenen Werten weitergenutzt)
L MW 94
T #temp_MW94
L MW 96
T #temp_MW96
// -Ende-

// MW96 => 0
L 0
T MW 96
// -Ende-

// 32Bit Pointer erzeugen und sicherstellen, dass Bitadresse 0
L MD 94
SLW 3
// -Ende-

// Pointer wird in das Adressregister LAR1 geschrieben
// Inhalt vom MW94 wird in das niederwertige Wort geschrieben
LAR1
TAD
TAW
// -Ende-

//Laden Hexzahl FFFF in den Akku 1 und transferieren in das
//DB-Wort, dessen Zahl der Inhalt vom ursprünglichen MW94 ist.
L W#16#FFFF
T DBW [AR1,P#0.0]
// -Ende-

//Laden von Integer 1 und transferieren in das DBW 0 des DB131.
L 1
T DBW 0
// -Ende-

:) Für Euch Profis bestimmt ganz einfach umzusetzen, Ihr dürft jetzt bitte über mich programmtechnisch herfallen, ich bin für jede Kritik und Empfehlung --> :D

Schönen Abend, ich freue mich auf Eure Antworten.

Rados
 
Hallo,
du hast es im Grunde schon richtig erkannt. Nur ein paar Sachen sind in deiner Umsetzung nicht korrekt.
So sähe der Code aus meiner Sicht aus :
Code:
AUF DB131

 L MW94
SLD 3  // Bit-Pointer erzeugen - ab hier ist es dann auch ein Doppelwort
LAR1   // jetzt ist es ein Pointer

L w#16#FFFF
T DBW [AR1,p#0.0]
... der Rest war ja sonst schon korrekt.

Du mußt allerdings berücksichtigen / überprüfen ob die Adress-Berechnungen insgesamt noch stimmen. Bei S5 waren die DB's immer aus Worten aufgebaut und du hast darin auch die Worte angesprochen / adressiert. Bei S7 sind die DB's aus Bytes aufgebaut und du adressierst auch die Bytes. Es könnte also sein, dass du den Inhalt deines MW94 ggf. noch mit 2 multiplizieren mußt damit es stimmt (oder ein SLD4 statt dem SLD3 einbauen). Das mußt du auf alle Fälle gegenchecken ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

suuuuper!! Hab es ausprobiert -> funktioniert perfekt!

Ganz großes Dankeschöööööööön :)

Beste Grüße,
Rados

PS: Die Umwandlung der Adressen hatte ich berücksichtigt. Es waren insgesamt einige Hundert :) ... und immer schön auf die Bits geschaut, da gibt’s ja Unterschiede beim Umadressieren von S5 xxx.0-xxx.7 und xxx.8-xxx.15 nach S7. Unangenehme Fleißarbeit, wobei Excel gute Hilfe leistet.
 
Zuletzt bearbeitet:
Zurück
Oben