Step 7 Inout-Variable

kuti

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

habe eine kurze Frage: Wofür braucht man die Inout-Variable? Der Drurchgangsparameter kann gelesen und geschrieben werden. Könnt ihr mir vielleicht ein paar Bsp geben, wofür ihr diesen benutzt?

Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn z.B. ein Baustein eine Zählvariable ändern will, dann muß er den aktuellen Wert der Variable lesen und den geänderten Wert in die selbe Variable zurückschreiben.
- IN-Variablen kann man lesen, aber nichts zurückschreiben
- OUT-Variablen kann man schreiben, aber nicht lesen was vorher drin steht
- INOUT-Variablen kann man den aktuellen Wert lesen und schreiben

Harald
 
in einem DB stehen Sollwerte, welche von der Visu verändert werden. Jetzt willst Du in einem FB diese Werte abfragen und bei ungültigen Eingaben den Wert auf einen gültigen setzen (also zulässiges min/max)... sowas z.B.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du in einem gekapselten FB einen Flankenmerker programmierst, benutzt Du dort normalerweise eine statische Variable, um Dir den Zustand für den nächsten Zyklus zu merken.

Benötigst Du dagegen einen Flankenmerker in einem FC, mußt Du Dir den Zustand außerhalb des FC's merken. Dann benutzt Du einen INOUT dafür. Im FC liest Du erst den Zustand vom vorigen Zyklus und schreibst anschließend den neuen Zustand hinein.

Ähnliches z.B. bei einem Betriebsstundenzähler.


Durch die Übergabe der Werte mittels INOUT ist der Baustein mehrfach im Zyklus verwendbar, was bei direktem Zugriff auf die Variable, z.B. bei dem Flankenmerker auf einen Merker, nicht möglich wäre.
 
Vielen Dank an euch. Jetzt dämmert es mir so langsam.
@ hucki Den Zustand außerhalb des FCs mit einem globalen Merker speichern bzw. wenn er von einem FB aufgerufen wird, mit einer stat-Variablen?
 
@ hucki Den Zustand außerhalb des FCs mit einem globalen Merker speichern bzw. wenn er von einem FB aufgerufen wird, mit einer stat-Variablen?
Bei einem FB kannst Du den Zustand im Instanzdatenbaustein speichern, denn genau dafür ist er da.
Bei einem FC hast Du den aber nicht, also mußt du irgendwo global speichern.

Hab' Dir als Beispiel mal einen "Serieneltako", realisiert mit einem FC, rausgesucht:
Code:
FUNCTION FC 1 : VOIDTITLE =
VERSION : 0.1

VAR_INPUT
  Taster : BOOL ;    
END_VAR

VAR_OUTPUT
  Ausgang1 : BOOL ;    
  Ausgang2 : BOOL ;    
END_VAR

VAR_IN_OUT
  FM : BOOL ;    
  Wechsler : BOOL ;    
END_VAR

VAR_TEMP
  Flanke : BOOL ;    
END_VAR


BEGIN

NETWORK
TITLE =Flanke ermitteln
      U     #Taster; 
      UN    #FM; 
      =     #Flanke; 

NETWORK
TITLE =Wechsler
      U     #Flanke; 
      UN    #Wechsler; 
      O     ; 
      UN    #Flanke; 
      U     #Wechsler; 
      =     #Wechsler; 

NETWORK
TITLE =Zwischenmerker 1
      U     #Flanke; 
      U     #Wechsler; 
      =     #FM; 

NETWORK
TITLE =Ausgang 1
      U     #FM; 
      UN    #Ausgang1; 
      O     ; 
      UN    #FM; 
      U     #Ausgang1; 
      =     #Ausgang1; 

NETWORK
TITLE =Zwischenmerker 2
      U     #Flanke; 
      UN    #Wechsler; 
      =     #FM; 

NETWORK
TITLE =Ausgang 2
      U     #FM; 
      UN    #Ausgang2; 
      O     ; 
      UN    #FM; 
      U     #Ausgang2; 
      =     #Ausgang2; 

NETWORK
TITLE =Merken
      U     #Taster; 
      =     #FM; 

END_FUNCTION
Den kann man mehrfach im Programm benutzen. Und nur für 2 boolsche Variablen extra einen FB mit IDB anzulegen, lohnt nicht unbedingt.

(PS: Der Code ist auf KOP umschaltbar, sonst ginge es sicher auch einfacher.)
 
Zuletzt bearbeitet:
Zurück
Oben