Step 7 Variablen / Schnittstelle in der Step7 Software

Gexle

Level-2
Beiträge
282
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ist vielleicht ne dumme frage aber ich stell sie trotzdem..!


In der Step7 Software gibt es am oberen Rand sag ich mal Variable/Schnittstellen IN OUT IN/OUT STATISCH usw.

Oftmals im Programm sieht man wenn man auf den jeweiligen Baustein geht das da steht BOOL:IN oder BOOL:statisch

Mir ist nicht ganz klar für das diese gut sind bzw. wann verwendet man diese den??


Danke
 
Hallo
Angenommen du willst einen FB programmieren, den du dann in deinem Programm 20 mal verwenden willst,
dann kommst du praktisch nicht drum rum Schnittstellen Variablen zu benutzen.

Beispiel:
Du brauchst einen FB/FC der dir eine aktuelle Temperatur einliest und prüft ob sie innerhalb einer
zulässigen Obergrenze und Untergrenze liegt.
Wenn du nun 20 mal (von verschiedenen Temperaturfühlern) diese Prüfung durchführen musst,
dann wäre es ja Blödsinn dafür 20 FBs zu schreiben, die alle das Selbe machen,
und falls du was korrigieren musst, das an 20 Stellen zu korrigieren.

Also machst du dir einen einzigen FB /FC legst einen INPUT für deinen Temperatur-Istwert an
legst einen OUTPUT für deinen <Temperatur ist in der Toleranz> an
Machst innerhalb des FB/FC deine Vergleicherei.....
Du kannst den Baustein dann 20 mal aufrufen und "Von Außen füttern" und dir "Außen das Ergebnis abgreifen"

Wichtig ist halt, dass du dann im Baustein nichts "absolut" adressierst.
Beispiel: eine absolut adressierte Zeit T12 würde ja dann 20 mal durchgenudelt werden.
Das muss dann alles oben in die Schnittstelle rein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Paul

Danke dir

Aber diese Variablen kann ich dann nur im jeweiligen FB oder FC verwenden oder und dort kann ich dann damit keine Ahnung 10 Tempfühler damit aufrufen oder??

Wenn das so ist das man die Variablen nur im jeweiligen FB/FC verwenden kann dann würde doch ein Datenbaustein auch Sinn machen oder??

MIT "absolut" adressieren meinst du das mal wie soll ich sagen die notwendigen Variablen allgemein bezeichnet oder??
 
Aber diese Variablen kann ich dann nur im jeweiligen FB oder FC verwenden oder und dort kann ich dann damit keine Ahnung 10 Tempfühler damit aufrufen oder??
Habe da Gefühl da liegt ein grundsätzliches Verständnisproblem vor.

Gehen wir mal von dem Temperaturfühler weg und machen es ganz, ganz einfach.
Du hast einen FC 1 darin steht
Code:
U E1.0
U E1.1
= A10.0
Das wäre jetzt "absolut" Adressiert
Wenn du da ganze nochmal (Mit anderen Ein- Ausgängen) brauchst
musst du einen anderen FC anlegen.


Diese Schaltungslogik brauchst du jetzt 20 mal

Dann deklarierst du oben in deiner Schnittstelle 2 INPUT und 1 OUTPUT
Wenn du den FC dann im OB1 aufrufst siehst du am Aufruf die 2 INPUT und 1 OUTPUT als "Beinchen"
Im FC1 schreibst du dann
Code:
U INPUT_1
U INPUT_2
= OUTPUT_1
Im OB1 rufst den FC 20 mal auf
Beim ersten Aufruf schreibst du an die Beinchen
INPUT_1 ---- E1.0
INPUT_2 ---- E1.1
OUTPUT_1 ---- A10.0

Beim zweiten Aufruf schreibst du an die Beinchen
INPUT_1 ---- E2.0
INPUT_2 ---- E2.1
OUTPUT_1 ---- A20.0

Beim dritten Aufruf schreibst du an die Beinchen
INPUT_1 ---- E3.0
INPUT_2 ---- E3.1
OUTPUT_1 ---- A30.0

Somit sparst du dir die ganze Verknüpfung die innerhalb vom Baustein stattfindet,
jedes mal neu zu programmieren.
Ist bei dem minimalen Code von dem Beispiel natürlich etwas an den Haaren hergezogen
aber es kann ja auch sein, dass da etwas aufwendiges abläuft
 
Zuletzt bearbeitet:
Danke Paul

Ich habs gerade mal getestet und ich denke ich habs verstanden...ich spare mir einfach programmierarbeit..


Mir ist nur nicht klar wenn ich diese Variablen anlege usw. im FC1 dann kann ich diese auch nur in diesem Baustein also Fc1 verwenden oder....wäre für mich logisch...

Wenn ich dann nen FC2 hätte müsste ich die Variablen je nach bedarf wieder neu anlegen nicht??

Des weiteren wann sollte man in/out verwenden oder eben temp. oder statisch ich weis nur nicht genau wann man sowas anwendet oder verwenden sollte weist...

Die variable statisch kann ja wie einen Merker sehn oder...

Dankeschön
 

Anhänge

  • TEST_SPS.jpg
    TEST_SPS.jpg
    38,7 KB · Aufrufe: 23
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
die temporäären variable innerhalb des parametrierten fc3 sind nur dort gültig.
die globalen variablen die du an den fc3 dranschreibst sind im gesamten programm gültig.
würdest du an den fc3 temporäre variablen schreiben wären diese nur in dem baustein gültig. in deinem fall im ob1
 
Ich habs gerade mal getestet und ich denke ich habs verstanden...
Fein

Mir ist nur nicht klar wenn ich diese Variablen anlege usw. im FC1 dann kann ich diese auch nur in diesem Baustein also Fc1 verwenden oder....wäre für mich logisch...
Klar, die Variablen sind für den FC1 gedacht, deshalb legst du sie ja auch im FC1 an und nicht im FC30


Wenn ich dann nen FC2 hätte müsste ich die Variablen je nach bedarf wieder neu anlegen nicht??
Mal angenommen der FC steuert ein Magnetventil und der FC2 überwacht eine Temperatur.
Dann ist es doch klar dass der FC2 andere Schnittstellenparameter braucht als der FC1.
Folglich musst du sie neu anlegen, logisch.


Des weiteren wann sollte man in/out verwenden oder eben temp. oder statisch ich weis nur nicht genau wann man sowas anwendet oder verwenden sollte weist...
Ziemlich unten rechts auf deiner Tastatur gibt es Punkt und Komma. Deren Verwendung erleichtert es dem Leser dich zu verstehen.

IN -- Geht in den FC rein und wird dort nur gelesen, kann also nicht innerhalb vom FC beschrieben werden.
OUT -- Geht aus dem FC raus
INOUT -- Kann innerhalb vom FC sowohl gelesen als auch beschrieben werden
Beispiel:
Code:
L   INOUT  Zählerstand    //[B]Lese [/B]Zählerstand
L  1                                          //Addiere +1            
+  D 
T   INOUT  Zählerstand             //[B]Schreibe [/B]neuen Zählerstand
//INOUT kann man also lesen [B]und [/B]schreiben
TEMP -- sind die so genannten Lokaldaten
Diese Lokaldaten werden vom "Betriebssystem" beschrieben und sind nur "lokal" in dem FC verfügbar in dem sie auch deklariert wurden.
Sie können z. Bsp. auch nicht in einer Beobachtungstabelle angesehen werden.
GANZ WICHTIG:
Sie bleiben nicht bis zum nächsten Zyklus gültig.
Beispiel:

Code:
RICHTIG:
Bausteinfang:
L    Wert 1
L   Wert 2
+D
T   TEMP_Zwischenergebnis
// ab hier kannst du in diesem Baustein
// mit dem Zwischenergebnis arbeiten weil was definiertes reingeschrieben wurde

FALSCH:
Bausteinfang:
L  TEMP_Zwischenergebnis  //hier steht irgendein zufälliger Wert drin der z. Bsp. vom vorherigen Baustein stammt
......                                  // TEMP_Zwischenergebnis muss erst beschrieben werden bevor es verwendet werden kann
......
......



Die variable statisch kann ja wie einen Merker sehn oder...
Statische Variablen gibt es nur bei FBs nicht bei FCs
Grund:
Zu jedem FB gehört zwingend ein Instanz-DB
In diesen Instanz-DB werden die STAT Variablen hinterlegt und sind deshalb auch
noch im nächsten Zyklus gültig, im Gegensatz zu den oben erwähnten TEMP Variablen


Die variable statisch kann ja wie einen Merker sehn oder...
Kann wie ein Merker sein, kann aber jedes gültige Datenformat haben
 
Danke Paul...

Ich könnte mir mit den Variablen sozusagen auch eine Multiinstanz damit erstellen zbs. mit dem Namen Scalierung_Temperatur oder sehe ich das richtig??

Wo dann steht...

IN___Tempfühler
IN___Tempertaur_HI
IN___Temperatur_LOW
OUT___Tempertaur_Alarm

Somit hätte ich unter Multiinstanz dann den jeweilgen Baustein den ich im jeweiligen FB oder FC mehrmals verwenden kann???

Danke
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ich denke du meinst schon das Richtige, drückst es nur etwas missverständlich aus.

Also:
Du erstellst einen FB1 für die Temperatur.
Diesen FB1 willst du jetzt 20 mal verwenden.
Also rufst du ihn 20 mal auf.
Für jeden Aufruf braucht der FB1 einen eigenen Instanz DB.
Somit hast du also 20 DBs verbraten.

Die Alternative:
Du nimmst einen leeren FB50.
Der FB50 hat ja auch einen eigenen Instanz DB, (weil er ja schließlich ein FB ist)
In dem FB50 rufst du dann zum ersten mal den FB1 auf.
Jetzt wirst du gefragt wie der Instanz DB des FB1 behandelt werden soll (Multi- oder Einzelinstanz).
Wenn du jetzt sagst <Multí-Instanz> dann nistet sich die FB1-Instanz im STAT Bereich des FB50 ein.
Wenn du nun den FB1 im FB50 20 mal aufrufst dann hast du 20 mal im STAT Bereich die Instanz des FB1 stehen.
Vorteil:
Du verbrätst nur einen einzigen DB, das kann bei großen Projekten schon sinnvoll sein.
 
Hallo Paul

OK dann hat das sozusagen mit ner Multiinstanz nichts zutun oder???
Was verstehst du denn unter Multiinstanz oder was meinst du mit Multiinstanz?
Kann es sein dass du das mit einem UDT (User Definierter Datentyp) verwechselst?

Ein FB kann Multinstanzfähig sein.
Musst du beim erstellen des FB festlegen: Multinstanzfähig JA/NEIN
Wenn er Multinstanzfähig ist dann kann sich sein eigener Instanz DB in den STAT Bereich eines anderen FB "einnisten"
Mach dir mal einen Instanz DB von irgend einem beliebigen FB auf.
Dann siehst du dass in dem DB genau das drinsteht, was oben in der Schnittstellendeklaration steht.
Vorausgesetzt natürlich der DB ist aktuell, das STEP7 classic aktualisiert die IDBs nämlich NICHT automatisch, so wie das TIA
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich meine das da siehe Bild...

Vielleicht sind das alles etwas dumme fragen ich versuche mich einfach nur etwas damit befassen...
 

Anhänge

  • multi.JPG
    multi.JPG
    18,5 KB · Aufrufe: 8
wie du ja mittlerweise weißt benötigt jeder fb einen instanz-db.
das könnten also recht viele werden wenn man genügend fb's (im bild fb1) aufruft.
in einem multiinstanz-fb (im bild fb10) kannst du deinen fb (hier fb1) mehrfach aufrufen.
hier kannst du jedem fb seinen eigenen idb geben oder du legst im stat-bereich einen datentyp an. im bild fb1. das können auch verschiedene sein.
diesen fb10 rufst du nun irgendwo auf. hier ob1.
in dem idb des fb10 (hier db10) werden nun alle instanzdaten abgelegt die im fb10 als stat vom typ fb1 deklariert wurden.
ich denke auf dem bild kann man das gut erkennen.
es werden also nicht für jeden fb-aufruf je ein idb erzeugt sondern ein gemeinsamer.
ist zwar mit clasic gemacht (weil tia hab ich zu hause nicht zur hand) ist aber in tia nur optisch etwas anders.
 

Anhänge

  • Zwischenablage04.jpg
    Zwischenablage04.jpg
    220,1 KB · Aufrufe: 18
Ich probier das mal aus..

Hab gerade eine FB1 erstellt mit Temperaturmessung aber IDB hast mir keinen erstellt...???

Zeigt mir nur OB1 und FB1 an
 
Zuviel Werbung?
-> Hier kostenlos registrieren
der idb wird erst erzeugt wenn du den fb irgendwo aufrufst. nicht bei erstellen des fb.
ist ja eigentlich auch logisch. woher soll der fb wissen wie oft er aufgerufen wird und welchen idb du für ihn nutzen möchtest
 
Ok jetzt habe ich einen FB1 erstellt und einen FB10 siehe Foto...

Die roten ??? wie muss ich vorgehen das ich diese beschriften kann Sympoltabelle..???:confused:
 

Anhänge

  • multi.JPG
    multi.JPG
    182,4 KB · Aufrufe: 15
Zuletzt bearbeitet:
Erstes WOW !!!
Jetzt weiß ich was du meinst mit "Multinstanzen erstellen"
Diese Icon <Multiinstanzen> im Projektbaum habe ich noch nie bewusst zur Kenntnis genommen-
Scheint wohl so zu sein wie Volker schreibt
Da kannst du einen DB erstellen der deine ganzen Einzelinstanzen beherberg,
wenn du einen FB z. B. 20 mal im OB1 aufrufst.
Was genaues weiß ich darüber auch nicht, habe ich noch nie gebraucht.


Die roten Fragezeichen kriegst du weg wenn du dahin schreibst DB1 (Beispiel, muss halt ein DB sein den es noch nicht gibt)
Dann fragt dich die Kiste "Der DB blabla existiert nicht nicht, soll er generiert werden" oder so ähnlich.
Dann sagst du "JA" und schwups ist dein JDB vorhanden.
Das ist aber dann ein Einzelinstanz nicht Multiinstanz


Und nun Multiinstanz
Zweites WOW !!!
Wahnsinn wie schnell man aus Classic rauskommt wenn man eine zeitlang nur TIA macht.
Ich denke bei Classic war das so
STAT Bereich >Name "Temperaturfühler_1" > Datentyp "FB1"

Dann unten in Codebereich
Nicht Call FB1 sondern Call Temperaturfühler_1

Aber aufpassen nach jeder Änderung im STAT Bereich muss der IDB neu generiert werden
und auch expliziet übertragen werden Classic macht das, im Gegensatz zu TIA nicht automatisch !
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn du ihn als einzelinstanz aufrufen möchtest (also jeder fb-aufruf bekommt seinen eigenen db) dann gib dort z.b. db1 ein
wilsst du das der fb in der multiinstanz aufgerufen wird dann ziehe den fb von der linken (aus den multiinstanzen) (da dort kein + sichtbar ist hasst du das noch nicht angelegt) seite in deinen baustein (dafür müsstest du natürlich im stat-bereich den fb deklarieren) (siehe dazu meinen screeshot)
 
der aufruf bei tia einer instanz ist etwas anders.
FUP
bei clissic zieht man den baustein aus der bausteinliste (unterordner multiinstanzen) in den fb.
bei tia ruft man den baustein auf und wählt als idb den im stat-bereich deklarierten stat vom typ FBx
 
Diese Icon <Multiinstanzen> im Projektbaum habe ich noch nie bewusst zur Kenntnis genommen-
Scheint wohl so zu sein wie Volker schreibt
Da kannst du einen DB erstellen der deine ganzen Einzelinstanzen beherberg,
wenn du einen FB z. B. 20 mal im OB1 aufrufst.
Was genaues weiß ich darüber auch nicht, habe ich noch nie gebraucht.
OK, da hab ich jetzt wohl etwas zu oberflächlich geschaut und gelesen
Bei mir ist dieser "Befehls-Auswahlkasten" immer rechts
links ist der Projektbaum, aber den gibt es ja beim Classic, in der Form, gar nicht im Bausteineditor.
Ich sag ja: Wahnsinn wie schnell man aus einer Sache "rauskommt" wenn man sie eine Zeitlang nicht benutzt.

Das mit dem DB für den OB1 ist natürlich Quatsch
 
Zurück
Oben