-> 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 --> 
Schönen Abend, ich freue mich auf Eure Antworten.
Rados
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-


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