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

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

Thema: Sehe das Problem nicht ...

  1. #1
    Registriert seit
    12.09.2012
    Beiträge
    954
    Danke
    178
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Zusammen,

    ich habe folgende Ungereimtheit beim Ansteuern eines FESTO-Antriebes:

    In einer FC15 habe ich folgende Zeilen programmiert:

    Code:
    U  #Start_Antrieb  // Input
    FP M10.0
    S  #Start_Task
    
    U #Ack_Start       // Input
    R #Start_Task
    Die Variable #Start_Task wurde ursprünglich als OUT-Variable deklariert und wird an einen DB übergeben.
    Im OB1 wird am FESTO-FB am Eingang "StartTask" dieser DB-Wert übergeben.


    Das Problem:

    Der Input "StartTask" des FESTO-Bausteins wird nur sporadisch TRUE; d.h. ich muss mehrmals #Start_Antrieb antriggern.

    Wenn ich allerdings im FC15 die Variable #Start_Task als IN_OUT deklariere, dann klappt alles Bestens (also auch beim ersten Mal).


    Frage:

    Aus welchem Grund muss hier #Start_Task als IN_OUT deklariert werden?
    LG
    spirit
    Zitieren Zitieren Sehe das Problem nicht ...  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.223
    Danke
    235
    Erhielt 326 Danke für 299 Beiträge

    Standard

    Das Problem ist, dass ein bedingtes zuweisen von OUT's in einem FC problematisch ist. Im Prinzip wird der OUT nämlich nicht bearbeitet und am Ende des FC-Aufrufes können da beliebige Werte (zufällig aus den Lokaldaten) drinnenstehen.

    Das funktioniert sicher:
    Code:
    U  #Start_Antrieb  // Input
    FP M10.0
    S M10.1
    
    U #Ack_Start       // Input
    R M10.1
    
    U M 10.1
    = #Start_Task

  3. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    spirit (23.08.2016)

  4. #3
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    954
    Danke
    178
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Das Problem ist, dass ein bedingtes zuweisen von OUT's in einem FC problematisch ist. Im Prinzip wird der OUT nämlich nicht bearbeitet und am Ende des FC-Aufrufes können da beliebige Werte (zufällig aus den Lokaldaten) drinnenstehen.

    Das funktioniert sicher:
    Code:
    U  #Start_Antrieb  // Input
    FP M10.0
    S M10.1
    
    U #Ack_Start       // Input
    R M10.1
    
    U M 10.1
    = #Start_Task
    Vielen Dank schon mal borromeus,

    aber diese zufälligen Werte kommen doch eigentlich nur bei Temp-Variablen vor, oder nicht?

    Dann dürfte ich ja auch die ganzen Ausgangsvariablen (z.B. für Zylinder) niemals in einem FC als OUT deklarieren?
    LG
    spirit

  5. #4
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.223
    Danke
    235
    Erhielt 326 Danke für 299 Beiträge

    Standard

    Wenn er nur bedingt beschrieben wird: JA, darfst du niemals machen!

  6. #5
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    954
    Danke
    178
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Wenn er nur bedingt beschrieben wird: JA, darfst du niemals machen!
    Noch ein kleines Verständnisproblem - was genau verstehst du unter bedingt?
    LG
    spirit

  7. #6
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.223
    Danke
    235
    Erhielt 326 Danke für 299 Beiträge

    Standard

    In der Hilfe von KOP/FUP/AWL steht unter "Funktionen (FC)":

    Achtung

    Wird in einem solchen Fall ein OUTPUT Parmeter in einem FC nicht beschrieben, können die ausgegebenen Werte zufällig sein!

    Der für die Kopie bereitgestellte Bereich in den Lokaldaten des rufenden Bausteins wird mangels Zuweisung an den OUTPUT Parmeter nicht beschrieben und bleibt somit unverändert. Damit wird zufällig der in diesem Bereich stehende Wert ausgegeben, da Lokaldaten nicht automatisch mit z. B. 0 vorbelegt sind.

  8. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    spirit (23.08.2016)

  9. #7
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.223
    Danke
    235
    Erhielt 326 Danke für 299 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Noch ein kleines Verständnisproblem - was genau verstehst du unter bedingt?
    Code:
    U Mx
    S OUT
    Ist das VKE nach U Mx null wird der S Befehl nicht bearbeitet!

    Eine Zuweisung mit = wird immer bearbeitet.

  10. #8
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    954
    Danke
    178
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Code:
    U Mx
    S OUT
    Ist das VKE nach U Mx null wird der S Befehl nicht bearbeitet!

    Eine Zuweisung mit = wird immer bearbeitet.

    Lieben Dank!

    Dann dürfte ich in einer FC also programmieren,

    Code:
    U #Eingang      // Input
    U #Freigabe     // Input
    = #Zylinder_A   // Output

    weil es sich hier um eine Zuweisung handelt. Stimmt das so?
    Geändert von spirit (23.08.2016 um 16:33 Uhr)
    LG
    spirit

  11. #9
    Registriert seit
    07.06.2016
    Beiträge
    34
    Danke
    9
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Code:
    U #Eingang      // Input
    U #Freigabe     // Input
    = #Zylinder_A   // Output
    Ne, bei deinem Code wir der Zylinder_A immer mit einem definierten Wert beschrieben (wegen =) .
    Dieser Wert ist dann abhängig vom VKE (der Und-Bedingung) entweder 0 oder 1.

    Code:
    U  #Start_Antrieb  // Input
    FP M10.0
    S  #Start_Task
    
    U #Ack_Start       // Input
    R #Start_Task
    Dahingegen wird ein Setzen oder Rücksetzen nur ausgeführt, wenn das VKE 1 ist.
    D.h. ist das VKE vor S und das VKE vor R false, bekommt der Ausgang in diesem FC-Aufruf keinen Wert.

    Gruß Käse

  12. Folgender Benutzer sagt Danke zu Käse für den nützlichen Beitrag:

    spirit (23.08.2016)

  13. #10
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    954
    Danke
    178
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Käse Beitrag anzeigen
    Code:
    U #Eingang      // Input
    U #Freigabe     // Input
    = #Zylinder_A   // Output
    Ne, bei deinem Code wir der Zylinder_A immer mit einem definierten Wert beschrieben (wegen =) .
    Dieser Wert ist dann abhängig vom VKE (der Und-Bedingung) entweder 0 oder 1.


    Gruß Käse

    Also wäre diese Programmierung (mit Zuweisung) auch in einer FC absolut korrekt, richtig?
    LG
    spirit

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 02.07.2015, 16:01
  2. Antworten: 6
    Letzter Beitrag: 27.12.2012, 07:55
  3. Antworten: 34
    Letzter Beitrag: 02.10.2012, 13:28
  4. VirtualBox mit S7, sehe keine Lizenz
    Von freic im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 29.03.2011, 09:44
  5. wieso sehe ich das nicht 1:1
    Von Anonymous im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 17.01.2006, 17:19

Lesezeichen

Berechtigungen

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