Step 7 AWL Lokaldaten

Bits_And_More

Level-1
Beiträge
83
Reaktionspunkte
13
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich habe aus einem fremden Programm folgenden, sinngemässen Code:

Code:
//Teil 1
U(
O Bedingung1
O Bedingung2
)
SPBNB _001

Call FC xxx

//Teil2
_001: U BIE
= M0.0

//Teil3
U L1.0
U Bedingung3
SPBNB _002
L 1.0
T MD5

_002: NOP 0
U L1.0
UN Bedingung4
SPBNB
L 0.0
T MD5
_003: NOP 0

Zu meinen Fragen:

1. M0.0 wird gesetzt, wenn NOT Bedingung1 AND NOT Bedinung2, korrekt?

2. Ich finde im Programm keine Anweisung, welche L 1.0 beschreibt, wird dieses Bit irgendwie sonst beschrieben?
 
Das Programm sieht aus als wäre es ursprünglich in FUP oder KOP geschrieben.
Liegt es bei Dir bereits in AWL vor oder hast Du selber die Ansicht in AWL umgeschaltet? Suche nach dem Umschalten zu AWL nochmal nach einer Zuweisung an L1.0

Oder gibt es Zuweisungen an LB1 oder LW0, LW1, LD0, LD1?
Sind in TEMP Variablen deklariert, welche die Adresse L1.0 einschließen?

Eventuell war die Anweisung "= M0.0" ursprünglich ein "= L1.0" und irgendjemand hat (unsachgemäß) die Zuweisung geändert.

Was ist das für ein "FC xxx"? Theoretisch könnte dieser FC das L1.0 beschreiben, das wäre aber höchst unsauber.

Wenn das Programm in einem OB steht, dann werden die ersten paar L-Bytes vom Betriebssystem beschrieben.
In FB oder FC ist der L-Speicher unbestimmt/zufällig (S7-300/400). (Bei S7-1500 könnte es sein, daß er irgendwie initialisiert wird.)


In welchem Baustein hast Du den Code gefunden? Was für eine SPS/CPU ist das?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eventuell war die Anweisung "= M0.0" ursprünglich ein "= L1.0" und irgendjemand hat (unsachgemäß) die Zuweisung geändert.
Wenn Sie M0.0 touch durch L1.0 (wenn der noch frei ist in lokaldaten) bekomt mann in FUP so etwas wie in Beilage ( Bedingung ersetz durch M200.x)
Lokal daten .JPG
 
Das Programm sieht aus als wäre es ursprünglich in FUP oder KOP geschrieben.
Liegt es bei Dir bereits in AWL vor oder hast Du selber die Ansicht in AWL umgeschaltet? Suche nach dem Umschalten zu AWL nochmal nach einer Zuweisung an L1.0

Das nehme ich auch an, ursprünglich war der FC wohl in KOP programmiert und dann erweitert / verbastelt worden. Egal ob FUP / KOP oder AWL, L1.0 tritt nur so wie von mir beschrieben auf.

Oder gibt es Zuweisungen an LB1 oder LW0, LW1, LD0, LD1?
Sind in TEMP Variablen deklariert, welche die Adresse L1.0 einschließen?

Es gibt andere Variabeln, die schliessen aber L1.0 nicht mit ein.

Eventuell war die Anweisung "= M0.0" ursprünglich ein "= L1.0" und irgendjemand hat (unsachgemäß) die Zuweisung geändert.

Unwarscheinlich, das M0.0 habe ich im Post nur der verwendet, damit es übersichtlicher ist. Im Programm wird ein Bit aus einem DB abgefragt.

Was ist das für ein "FC xxx"? Theoretisch könnte dieser FC das L1.0 beschreiben, das wäre aber höchst unsauber.
Das ist ein PID Regler, allerdings mit Zugriffsschutz. Die SW ist nicht von uns, soll aufgrund diverser, z.T. gravierender Mängel rückdokumentiert und neu geschrieben werden. Daher wäre dies denkbar, aber halte ich eher für unwarscheinlich und derzeit nicht überprüfbar.

Wenn das Programm in einem OB steht, dann werden die ersten paar L-Bytes vom Betriebssystem beschrieben.
In FB oder FC ist der L-Speicher unbestimmt/zufällig (S7-300/400). (Bei S7-1500 könnte es sein, daß er irgendwie initialisiert wird.)


In welchem Baustein hast Du den Code gefunden? Was für eine SPS/CPU ist das?

Der Code ist in einem FC, welcher über einen weiteren FC aufgerufen wird. Es handelt sich um eine 417-4 H CPU.



Da die ganze SW neu geschrieben wird, wäre es durchaus auch denkbar, dass es sich einfach nur um einen Fehler handelt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falsch.
M0.0 wird gesetzt wenn Bedingung1 oder Bedingung2 erfüllt ist und der FC xxx das BIE-Bit auf 1 setzt oder es nicht verändert.

Setze den Cursor in die Zeile mit dem SPBNB und drücke F1.

Harald

Danke für die Info, also wird die Zuweisung im Teil 2 nur durchgeführt, wenn der aufgerufene FC ohne Fehler ausgeführt wurde.
Würde dementsprechend beim ersten Sprung nicht auch ein SPBN genügen? Das BIE ist bei der Abfrage ja davon abhängig, ob der FC richtig ausgeführt wurde oder nicht (ENO "Ausgang" im FUP).
Wenn ja, wird das SBBNB wohl aus der Übersetzung von FUP nach AWL her stammen.
 
Hallo Zusammen

Das Sache hat sich geklärt. Es handelt sich dabei um einen Programmierfehler in der alten Software. Allerdings wird das von mir beschriebene Netzwerk im gleichen Zyklus zu einem späteren Zeitpunkt nochmals abgearbeitet, dieses mal allerdings korrekt. Es stellte sich zusätzlich heraus, dass die Zuweisungen nach MD5 überflüssig sind, da diese nur geschrieben und nie gelesen werden (da wäre ein WOM Bereich im Speicher der SPS praktisch gewesen :ROFLMAO: )
 
also wird die Zuweisung im Teil 2 nur durchgeführt, wenn der aufgerufene FC ohne Fehler ausgeführt wurde.
Es wird immer eine Zuweisung an M0.0 ausgeführt.
Wird der FC nicht aufgerufen, dann wird 0 an M0.0 zugewiesen. Wird der FC aufgerufen, dann wird 1 an M0.0 zugewiesen, es sei denn im FC wird das BIE auf 0 rückgesetzt, dann wird 0 an M0.0 zugewiesen.

Würde dementsprechend beim ersten Sprung nicht auch ein SPBN genügen? Das BIE ist bei der Abfrage ja davon abhängig, ob der FC richtig ausgeführt wurde oder nicht (ENO "Ausgang" im FUP).
Das ist nicht das selbe. Weil ja BIE an M0.0 zugewiesen wird. Ist die Aufrufbedingung für den FC nicht erfüllt, dann wird bei SPBNB zunächst das VKE=0 an BIE zugewiesen, dann der Sprung zu _001 ausgeführt und dort das BIE (also 0) an M0.0 zugewiesen. Bei einfachem SPBN wäre M0.0 davon abhängig, welchen Zustand das BIE von vorherigen Anweisungen hat.

Harald
 
Zurück
Oben