FB Aufruf PAW Fehler

der_iwan

Level-2
Beiträge
138
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss eine Hydraulikpumpe mit verschiedenen Drücken ansteuern.
Ich habe mir als Anfang einen FB geschrieben.
Funktionsweise
Wenn Start aktiv wird der Sollwert zum PAW geschickt.
Wenn Start nicht mehr aktiv, wird mit negativer Flanke 0 zum Paw geschickt.

Code:
      U     #Start                      //Baustein aktiv,als In deklariert
      FN    #null_Volt                  //Flanke nicht mehr ,als Stat deklariert
      SPBNB los                         //Wenn Start weg, mit Flanke 0Volt zum Ventil
      L     0                           //lade 0
      T     #zum_Ventil                 //Hier zum PAW 288, als Out deklariert
 
los:  U     #Start                      //Wenn Start aktiv
      SPBNB ende
      L     #Sollwert                   //Lade 27648 als Beispiel 10V ,als IN deklariert
      T     #zum_Ventil                 //schicke zum Ventil
ende: NOP   0
Wenn ich den Baustein mit Call FB1/DB1 aufrufe funktioniert alles wunderbar.
Mache ich aber einen weiteren Aufruf Call FB1/DB2 stehen "wirre" Werte im PAW. Wo ist da mein Fehler?

der_iwan
 
Wie ist die Beschaltung der FB1-Aufrufe?

Warum lädst Du den "0"-Wert nur einmalig? den würde ich ständig eintragen, wie Du es bei Startgemacht hast.

Was genau sind wirre Werte?

Wechselt es zwischen den unterschiedlichen Sollwerten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Wert 0 lade ich über Flanke damit ich nicht dauernd 0Volt zum Paw transferiere. Sonst würde ja beim nächsten Aufruf immer noch 0Volt zum Paw geschickt werden, oder?
Wirre Werte sind : Wenn der Baustein einmal aufgerufen wird, sind es 10 Volt, rufe ich ihn aber zweimal auf sind es nur noch 7,89 Volt.
Obwohl der Startbefehl für den zweiten Aufruf noch nicht da ist.
Im Moment gebe ich 10 und 5 Volt als Sollwert vor.
Aufruf1:
Code:
  U     "E0.0"
      =     L      0.0
      BLD   103
      CALL  FB   223 , DB2222
       Start     :=L0.0
       Sollwert  :=13824
       zum_Ventil:="PAW288"
      NOP   0

Aufruf 2:
Code:
  U     "E0.1"
      =     L      0.0
      BLD   103
      CALL  FB   223 , DB2223
       Start     :=L0.0
       Sollwert  :=27684
       zum_Ventil:="PAW288"
      NOP   0

der_iwan
 
Na ... du bist ja Klasse ... schreibst mit beiden Instanzen auf das gleiche PAW.
Es wird natürlich hier nur das ausgeführt, was der 2. FB-Aufruf befiehlt ...

Wie wäre es mit 2 IN-Parametern an dem FB umd dadurch zwischen den Sollwerten zu wechseln ?

Gruß
Larry
 
Noch ein Gedanke zu den unterschiedlichen Drücken...

wäre es nicht besser mit den Eingängen die unterschiedlichen sollwerte zu laden und dan FB dann nur einmal aufzurufen?

Code:
UN E 0.0
spb E001
 
L xxxxxx
T #SOLLWERT
SPA EINT
 
E001: NOP 0
UN E 0.1
spb E002
 
L xxxxxx
T #SOLLWERT
SPA EINT
 
E002: NOP 0
 
...
 
EINT: NOP 0
 
Call FB...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es sich um AW und nicht um PAW handeln würde, wäre das richtig. Da es sich jedoch um PAW handelt, werden in einem Zyklus zwei Werte zur Peripherie geschickt!

Hallo Onkel,
und welcher gilt dann (vor allem, wenn die Zuweisungen unmittelbar hintereinander erfolgen) ? Doch wohl der zuletzt geschriebene, da der auf der Zeitscheibe am längsten ansteht.
Aber im Grundsatz richtig, für den Bruchteil einer Millisekunde würde auch der zuerst geschriebene Wert auf dem PAW anstehen ...

Gruß
Larry
 
Aber, es wird doch immer nur eine Instanz zur Zeit bearbeitet,
Bei e0.0 die erste
bei e0.1 die zweite

Nein ... es werden, so wie du es erstellt hast, immer beide Instanzen aufgerufen und bearbeitet. Das könntest du natürlich auch über indirekte Bearbetung der bausteine lösen ... mir gefällt das mit dem Wahlschalter-FB aber persönlich besser ... ;)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Iwan,

mach es nicht zu kompliziert. dtsclipper hatte es ja auch schon vorgeschlagen. Insbesondere das mit der Flanke ist fehl am Platz. Eine einfache Funktion (FC) wäre doch hierfür ideal. Wichtig ist bei einer FC dass der Ausgang in jedem Fall mit einem Wert beschrieben wird. Ach, was soll ich viel erläutern, sieh selbst:

Code:
//*** Initialisierung
      L     0                           // Wert 0

//*** Auswahl Wert 1
      U     #S1                         // Eingang S1 (vorrang gegenüber S2), Bool
      SPBN  M001
      L     #X1                         // Wert 1
      SPA   ENDE

//*** Auswahl Wert 2
M001: U     #S2                         // Eingang S2, Bool
      SPBN  ENDE
      L     #X2                         // Wert 2
//    SPA   ENDE

//*** Wert ausgeben
ENDE: T     #RET_VAL                    // Rückgabewert der Funktion
 
Zuletzt bearbeitet:
Zurück
Oben