Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: ST Programmierung FB-aufruf

  1. #1
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich habe ein Problem mit dem Aufruf eines von mir programmierten Funktionsbaustein und brauche etwas Hilfe.

    Den Quelltext habe ich zur besseren Übersicht stark verkürzt und nur das Wesentlichen drinnen gelassen.

    Funktionsbeschreibung:
    Wenn bVarX eingeschaltet ist, dann werden die anderen Bedingungen geprüft. Trifft eine zu wird der entsprechende Parameter an den FB übergeben.
    Schalte ich nun bVarX ab, bleibt alles im FB so wie es zuletzt übergeben wurde.
    Schreibe ich eine ELSE Bedinung wo ich die Werte für den FB wieder zurück setze, dann kann ich diese nicht mehr weiter anfassen. Die haben dann immer den Wert, weil bVarX in dem Fall immer FALSE wäre und immer die ELSE Bedingung zutrifft.
    Jedoch möchte ich mit der Bedingung bVarY die Werte wieder verändern können.

    Ich habe schon einiges ausprobiert aber irgendwie schaue ich gerade auf meinen Quelltext wie ein Schwein ins Uhrwerk.


    Code:
    fbFunktionsbaustein(rIstWert := rIstWertUnten , rSollWert:= rSollWertZpr);
    
    bVarHNB    := fbFunktionsbaustein.bVarout;    
    bVarHSB    := fbFunktionsbaustein.bVarout;    
    
    bA12_SS1 := bHSB;
    bA13_SS2 := bHSB;
    
    bA14_SN1 := bHNB;
    bA15_SN2 := bHNB;
    
     
    
    
    IF    bVarX    THEN
        
            IF    ....   THEN
                IF  ....   THEN
                    rSollWertZpr:= rSollWertTag;
                END_IF
                IF    ....   THEN                                     
                    rSollWertZpr:= rSollWertNacht;              
                END_IF
            END_IF
    
            IF    ... THEN
                IF    ... THEN
                    rSollWertZpr:= rSollWertTag;                
                END_IF
                IF    ... THEN
                    rSollWertZpr:= rSollWertNacht;
                END_IF
            END_IF
    
            IF   ...   THEN
                rSollWertZpr:= rSollWertWE;                    
            END_IF
        END_IF
    
    
    rIstSollDiff := rSollWertManuell - rIstWertUnten;
    
        IF    bVarYTHEN                              
            IF    bHNBAktiv    THEN
                bHNB := TRUE;
                IF    rIstSollDiff <= 0    THEN
                    bHNB := FALSE;       
                END_IF
            ELSE
                bHNB := FALSE;
            END_IF
    
            IF    bHSBAktiv    THEN
                bHSB := TRUE;
           
                IF    rIstSollDiffManuell <= 0    THEN
                    bHSB := FALSE;
                END_IF
            ELSE
                bHSB := FALSE;
            END_IF
        END_IF
    Vielen DANK im Voraus.
    Zitieren Zitieren ST Programmierung FB-aufruf  

  2. #2
    Bambam ist offline Benutzer
    Themenstarter
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Beim Formulieren meiner Frage ist meine Idee gekommen wie ich es noch lösen könnte. Ich hab mir das wie folgt überlegt:

    Code:
    fTrigTest(CLK:=bVarX);
    
    IF fTrigTest.Q THEN
    setze alles zurück
    END_IF
    Joa und es hat funktioniert.
    Vielleicht hat ja noch jemand eine Idee wie man das ganze noch etwas eleganter lösen kann.

    Viele Grüße

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    Hallo,
    deine Problem-Beschreibung war für mich ein bißchen Kuddel-Muddel - sorry ...
    Was ich aber da rausgelesen habe :
    Es gibr nicht nur IF ... THEN und dann ELSE sondern es gibt auch ein ELS_IF. Du mußt dabei natürlich berücksichtigen, dass es trotzdem mit dem IF verriegelt ist. Wenn du aber machen willst :
    Code:
    IF myBool_1 then  
       tue dies
    ELS_IF myBool_2 then
       tue jenes
    ELSE
       tue ansonsten
    EMD_IF ;
    ... dann wäre das ggf. deine Lösung.

    Sehr schön ist aber auch noch die SELECT CASE - Geschichte ... das paßt aber eigentlich nicht zu BOOL's ...

    Gruß
    Larry

  4. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Bambam (08.11.2010)

  5. #4
    Bambam ist offline Benutzer
    Themenstarter
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Sorry für meine verworrene Beschreibung, aber ich bin dir sehr dankbar für deine Antwort.

    Das ganze mit Select Case hatte ich mir auch überlegt. Jedoch erschien es mir in diesem Fall etwas unpraktikabel, da ich mit den IF Bedingungen zuersten den Wochentage und anschließend die Uhrzeit (bzw. ein Zeitfenster) prüfe. Ich verwende Select Case meistens nur für Schrittketten.

    Danke nochmal.


    Viele Grüße

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    Naja ... für diese Sache würde sich m.E. das CASE-Konstrukt auch eignen. Im Ergebnis kommt aber nichts anderes, wie bei der IF-Geschichte dabei heraus - es ist also mehr eine Geschmackssache ...

    Gruß
    Larry

  7. #6
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    da ich mit den IF Bedingungen zuersten den Wochentage und anschließend die Uhrzeit (bzw. ein Zeitfenster) prüfe.
    Das kann man vielleicht auch etwas anders programmieren, mit AND.

    also z.B.

    Code:
    IF ((Tag=Sonntag) AND (Uhr >20)) THEN

  8. #7
    Bambam ist offline Benutzer
    Themenstarter
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Stimmt ich würde so statt drei IF-Bed. für einen Tag nur noch zwei benötigen.
    Danke für den Hinweis.

  9. #8
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ergänzung:
    es sind natürlich mehrere AND und OR usw. kombinierbar

Ähnliche Themen

  1. FB-Aufruf
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 10.10.2009, 11:52
  2. DB aufruf
    Von Kiter11 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 19.03.2009, 16:39
  3. SFC-Aufruf in SCL
    Von Vatter im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 05.04.2008, 16:43
  4. DIX -Aufruf in SCL
    Von Wastel im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.10.2005, 11:09
  5. Wie oft FC1/FC2 aufruf?
    Von Kojote im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 04.11.2004, 09:33

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •