Ein paar Fragen zur S5 Programmierung

matziane

Level-1
Beiträge
120
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

arbeite die meiste Zeit mit S7, wenn man dann mal wieder etwas mit S5 schreiben soll, steht man dann doch recht schnell auf dem Schlauch.

Arbeite mit einer S5-95U an folgendem Programm, erstmal nur so ein kleiner Auszug aus dem ersten Netzwerk.
Grundlegendes sollte eigentlich erkennbar sein.

NAME: FB3
BEZ: XAI EW
BEZ: OS EW
BEZ: FK EW
BEZ: XAO AW

L =XAI
L KF+40
!=F
BEB

L KF+0
T MW 134
T MW 136
T MW 138
T MW 140

L =XAI
T MW 134

L =FK
T MW 136

SPA FB 243
NAME: DIV: 16
Z1: MW 134
Z2: MW 136
OV: M 140.0
FEH: M 140.1
Z3=0: M 140.2
Z4=0: M 140.3
Z3: MW134
Z4: MW 138

nutze hierbei diverse Merkerwörter als Schmiermerker.
anschließend werden diese Schmiermerkerinhalte für Multiplikations und Divisionsoperationen verwendet.

So nun die Fragen.
Würde mir gern diese Schmiermerkergeschichte ersparen um den FB so gut wie möglich für spätere Anwendungen parametriert zu wissen.
Möchte anstatt der Schmiermerker einen eigenen DB nutzen, quasi als Gedächtnis des FB.
Habe dabei vor den aktuell offenen DB zu Beginn dieses FBs in meinem Gedächtnis DB zu sichern und am Ende des Programms für den Rücksprung wieder zu öffnen.
Wie tue ich das am besten?

Als nächstes noch eine Frage, deklariere mir ja zu Beginn für den Aufruf des FBs diverse Ein- Ausgangsparameter, kann ich diese auch direkt an dem später aufgerufenen FB 243 anschalten?
Oder muss ich diese in Schmiermerker zwischespeichern und muss diese dann an den FB 243 anschalten?

Bis hierhin erstmal vielen Dank im voraus.
 
Du kannst auch einen DB als "IN"-Parameter deklarieren!
z.B.:
Code:
NAME: FB3
Bez.:   INDB   E/A/D/B/T/Z: B
usw
 
B =INDB //Aufruf des Gedächtnis-DB
L KF+0
T DW134
T DW136
usw.

An dem FB243 trägst Du statt MW einfach die DW an. Sollte klappen.
Du musst halt für jeden FB3-Aufruf einen separaten DB deklarieren und diesen ggf. so oft kopieren, wie benötigt wird.
Gruß Approx
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe dabei vor den aktuell offenen DB zu Beginn dieses FBs in meinem Gedächtnis DB zu sichern und am Ende des Programms für den Rücksprung wieder zu öffnen.
Wie tue ich das am besten?
Bin mir jetzt nicht mehr ganz sicher, aber das sollte mit den Befehlen LIR und TIR gehen.
Als nächstes noch eine Frage, deklariere mir ja zu Beginn für den Aufruf des FBs diverse Ein- Ausgangsparameter, kann ich diese auch direkt an dem später aufgerufenen FB 243 anschalten?
Oder muss ich diese in Schmiermerker zwischespeichern und muss diese dann an den FB 243 anschalten?
Meines Wissens geht das ohne Schmiermerker nicht.
 
Hi matziane,

SPA FB 243
NAME: DIV: 16
Z1: MW 134
Z2: MW 136
OV: M 140.0
FEH: M 140.1
Z3=0: M 140.2
Z4=0: M 140.3
Z3: MW134
Z4: MW 138

Hier dürfte es bei Verwendung von Daten-Bits Probleme geben, da diese bei S5 anders codieriert werden als "normale" Bits (zB SU anstatt S).
Was die Sie-Standardbausteine benutzen, keine Ahnung.

Noch eine Anmerkung zum DIV-Baustein:
Falls FEH = 1 (z.B. Division durch Null), werden Z3 und Z4 nicht beschrieben (Werte sind falsch).
Also FEH danach auswerten und MWs an Z3/Z4 richten.

...
nutze hierbei diverse Merkerwörter als Schmiermerker.
anschließend werden diese Schmiermerkerinhalte für Multiplikations und Divisionsoperationen verwendet.
Bei S5 gab es eine ungeschriebene Regel:
Die M200.0 bis M255.7 wurden (auch von Siemens-FBs) als Schmiermerker benutzt.
Ich hab das auch immer so gemacht.
Falls diese Merker global benutzt werden, müssen diese vorher in einem DB gerettet und danach wieder zurückgeschrieben werden.

...
Würde mir gern diese Schmiermerkergeschichte ersparen um den FB so gut wie möglich für spätere Anwendungen parametriert zu wissen.
Möchte anstatt der Schmiermerker einen eigenen DB nutzen, quasi als Gedächtnis des FB.
Habe dabei vor den aktuell offenen DB zu Beginn dieses FBs in meinem Gedächtnis DB zu sichern und am Ende des Programms für den Rücksprung wieder zu öffnen.
Wie tue ich das am besten?

Bei S5 bleibt der aufgeschlagene DB im aufgerufenen Baustein gültig.
Wird im aufgerufenen Baustein ein anderer DB aufgeschlagen, ist beim Rücksprung wieder der ursprünglich DB gültig.

Als nächstes noch eine Frage, deklariere mir ja zu Beginn für den Aufruf des FBs diverse Ein- Ausgangsparameter, kann ich diese auch direkt an dem später aufgerufenen FB 243 anschalten?
Oder muss ich diese in Schmiermerker zwischespeichern und muss diese dann an den FB 243 anschalten?

Dürfte die einfachere Methode sein.

Ein DB-Gedächtnis ist schon möglich.
Die entsprechenden Werte halt im FB auf DWs schreiben/lesen.
Der DB kann vor Aufruf des FB oder per Parameter (siehe Approx) aufgerufen werden.
An den Rechen-FBs selbst, würde ich mit den Schmiermerkern arbeiten.

Gruß Roland

PS:
Nochwas, die S5-DBs sind Wort-orientiert.
d.h es gibt DW134, DW135, DW136...
 
Zuletzt bearbeitet:
Zurück
Oben