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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Problem mit Temp-Variable im FC

  1. #1
    Registriert seit
    18.10.2009
    Beiträge
    220
    Danke
    71
    Erhielt 17 Danke für 16 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe in einem FC eine Schleife programmiert, welche nur einmal durchlaufen soll, wenn eine Eingangsvariable (#aktive_DatensatzNr [INT]) den Wert ändert.
    Versucht habe ich es indem ich eine Temp-Variable (#Temp_aktiver_Datensatz [INT]) angelegt habe, und diese mit der Eingabsvariable vergleiche um den Durchlauf der Schleife zu starten.

    Das Problem ist, das die Schleife immer durchlaufen wird, da die Temp-Variable nicht den Wert hat, den ich ihr zuweise.
    Lege ich die Temp-Variable in den Bereich Ein-Ausgangsvariable und weise ihr beim Bausteinaufruf des FC´s eine Adresse in einem Datenbaustein zu, funktioniert es.

    Allerdings finde ich es unschön, an einem FC-Aufruf "Variablenspeicher" anhängen zu müssen. Gibt es da vielleicht eine elegantere Lösung?

    Hier mal der Code-Auszug:

    Code:
            SET   
            U(    
            L     #aktive_DatensatzNr
            L     #Temp_aktiver_Datensatz
            <>I   
            )     
            SPBN  _002
            AUF   DB [#t_Datenbank_Nr]
            L     #Startadr_akt_Datensatz
            SLW   3
            LAR1  
            AUF   DI [#t_User_DB_Nr]
            L     #Startadr_Datensatz_HMI
            SLW   3
            LAR2  
            L     #Groesse_Datensatz
    Loo1: T     #LOOP_Count_1
            L     DBB [AR1,P#0.0]
            T     DIB [AR2,P#0.0]
            +AR1  P#1.0
            +AR2  P#1.0
            L     #LOOP_Count_1
            LOOP  Loo1
            L     #aktive_DatensatzNr
            T     #Temp_aktiver_Datensatz
    _002: NOP   0
    Grüßele vom Bärle
    Zitieren Zitieren Problem mit Temp-Variable im FC  

  2. #2
    Registriert seit
    05.10.2005
    Beiträge
    2.382
    Danke
    321
    Erhielt 298 Danke für 268 Beiträge

    Standard

    Der FC "vergisst" die Temps bei seinem Ende. Ist ja auch Sinn der Sache. Oder Du machst nen FB mit IDB.

    Thomas

  3. #3
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Grins...

    Da bist Du in die Falle des TEMP gefallen.

    Die TEMP-Variablen eines FC sind genau das wie sie heissen - nämlich teporär.
    Das heist wenn Dein FC durchgelaufen ist vergiss die CPU sie einfach - oder schreibt irgendwelche werte 'rein.

    Um das so zu lösen kannst Du entweder einen FB draus machen und statische Variablen nehmen oder in dem FC in Merkerwort oder so was implementieren.

    dtsclipper
    Geändert von dtsclipper (19.01.2011 um 08:50 Uhr)
    Das Grauen lauert in der Zwischenablage !!

  4. #4
    Registriert seit
    05.10.2005
    Beiträge
    2.382
    Danke
    321
    Erhielt 298 Danke für 268 Beiträge

    Standard

    Ein FC ist einen "dumme" Funktion, die Du mehrfach aufrufen kannst. Woher soll er denn "wissen" in welchem Aufruf er ist, und das seine gespeicherte TEMP Variable zu diesem Aufruf gehört oder nicht.

    Thomas

  5. #5
    Bär1971 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.10.2009
    Beiträge
    220
    Danke
    71
    Erhielt 17 Danke für 16 Beiträge

    Standard

    Das ein FC seine Temp-Variablen am Bausteinende verliert ist mir (jetzt) richtig bewusst geworden, aber ich suche eben noch eine Lösung die innerhalb eines FC´s funktioniert, um eben die Schleife nur in Abhängigkeit einer Wertänderung der Eingangsvariablen (#aktive_DatensatzNr [INT]) durchlaufen zu lassen. Da muss es doch irgendwas geben ?!?
    Grüßele vom Bärle

  6. #6
    Bär1971 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.10.2009
    Beiträge
    220
    Danke
    71
    Erhielt 17 Danke für 16 Beiträge

    Standard

    Zitat Zitat von thomass5 Beitrag anzeigen
    Ein FC ist einen "dumme" Funktion, die Du mehrfach aufrufen kannst. Woher soll er denn "wissen" in welchem Aufruf er ist, und das seine gespeicherte TEMP Variable zu diesem Aufruf gehört oder nicht.

    Thomas
    irritierend ist hierbei, das die Inhalte der Adressregister und der Schleifenzähler erhalten bleiben...
    (Aber das mit der TEMP-Variable ist jetzt klar)
    Grüßele vom Bärle

  7. #7
    Registriert seit
    05.10.2005
    Beiträge
    2.382
    Danke
    321
    Erhielt 298 Danke für 268 Beiträge

    Standard

    Zitat Zitat von Bär1971 Beitrag anzeigen
    Das ein FC seine Temp-Variablen am Bausteinende verliert ist mir (jetzt) richtig bewusst geworden, aber ich suche eben noch eine Lösung die innerhalb eines FC´s funktioniert, um eben die Schleife nur in Abhängigkeit einer Wertänderung der Eingangsvariablen (#aktive_DatensatzNr [INT]) durchlaufen zu lassen. Da muss es doch irgendwas geben ?!?
    Dann werte die Werteänderung extern aus, und ruf die Funktion nur auf, wenn sich was geändert hat. Oder Du benutzt "nichtflüchtige" Zwichenspeicher um eine Werteänderung zu erfassen, must aber bei einem mehrfachen Aufruf der Funktion darauf aufpassen.

    Thomas

  8. #8
    Bär1971 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.10.2009
    Beiträge
    220
    Danke
    71
    Erhielt 17 Danke für 16 Beiträge

    Standard

    naja, das Problem ist, in diesem Baustein läuft mein gesamtes Datenbankhandling ab. Es geht wirklich ausschliesslich um diese eine Schleife welche eben nur einmal durchlaufen werden darf bei Änderung der Anwahl. Ich möchte den FC ungern in 4 oder mehrere FC´s aufteilen, nur um diese eine Teilfunktion einzeln aufzurufen...

    Ich weis, ist nicht immer einfach mit mir *grins*
    Grüßele vom Bärle

  9. #9
    Registriert seit
    05.10.2005
    Beiträge
    2.382
    Danke
    321
    Erhielt 298 Danke für 268 Beiträge

    Standard

    Wenn Du nur den einen Aufruf hast, dann nimm statt TEMP Merker oder ein Datenwort in nem DB.
    Thomas

  10. #10
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von thomass5 Beitrag anzeigen
    ... Oder Du benutzt "nichtflüchtige" Zwichenspeicher um eine Werteänderung zu erfassen, ...

    Thomas

    ...oder in dem FC in Merkerwort oder so was implementieren.
    Ich weiss nun ja nicht wie oft dieser FC aufgerufen wird, aber über o.A. würde ich jetzt mal nachdenken...
    Das Grauen lauert in der Zwischenablage !!

Ähnliche Themen

  1. TEMP-Variable
    Von anne im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 14.06.2010, 19:55
  2. FB mit Temp Variable ergänzen.
    Von swisscrane im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 27.02.2009, 13:42
  3. Temp-Variablen bei FCs
    Von !Chris! im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.04.2006, 21:48
  4. Antworten: 17
    Letzter Beitrag: 06.10.2004, 12:02
  5. Antworten: 2
    Letzter Beitrag: 23.09.2004, 09:26

Lesezeichen

Berechtigungen

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