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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: WIE Aufruf organisieren?

  1. #11
    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 Larry Laffer Beitrag anzeigen
    Ich weiß ja nicht, wie dein Baustein so aufgebaut ist. Du kannst aber m.E. selbstverständlich 7 Bausteine mit der gleichen E/A-Beschaltung haben, von denen dann nur jeweils einer läuft. Das könntest du durchaus über eine Freigabe an den Baustein regeln - der Baustein braucht dann ja innen nicht mehr weiter bearbeitet zu werden. Aber vielleicht postest du mal etwas dazu ...

    Gruß
    Larry
    Danke Larry,

    in jedem einzelnen FB sind Schrittketten (in SCL) programmiert, die sich zwar durch den Ablauf der Ketten, nicht jedoch durch die anzusteuernden Aktoren (Ventile, Schütze, usw.) unterscheiden. Das bedeutet also, dass ich an jeden FB (derzeit 7 an der Zahl) die gleichen Aktualparameter (Variablen) anschreiben möchte.

    In einem spearaten FC werden dann diese Aktualparameter (E/A-Beschaltung) den eigentlichen Ausgängen zugeordnet.
    Meine Frage(n) hierzu:

    1) Wenn ich das so aufbaue, wie müsste ich dann die Freigabe an den einzelnen FB's regeln - über den ENO-Eingang oder über den Befehl "WHILE DO" in der Kette, oder wie sonst?
    2) Muss ich dann gar nicht die nicht aktiven FB's überspringen?

    Danke ...
    LG
    spirit

  2. #12
    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 Christmaspoo Beitrag anzeigen
    Code:
    CASE _variable_name_ OF
        1:  // Statement section case 1
            call dein_aufruf;
        2:  // Statement section case 2
            call dein_aufruf;
        ELSE  // Statement section ELSE
            ;
    END_CASE;
    Dann kannst du auch einfach alle gleich beschalten. Nicht schön, aber machbar. Die Schrittketten brauchst du nicht in SCL zu schreiben, da geht auch jede andere Sprache. Machst du den Aufruf in FUP oder AWL, musst du das über Jumps lösen, geht aber auch. Allerdings bekommst du zum dank einen Teller Spaghetti von demjenigen, der da mal Fehler suchen muss.
    Danke Christmaspoo,

    also ich mag Spaghetti schon sehr gerne!


    An Stelle von "call dein_aufruf" würde also jedes Mal der SK-FB aufgerufen werden, richtig? Aber an welcher Stelle würde dann die Bedingung für den Aufruf stehen - müsste ich das über dem CASE OF regeln?

    Und ich könnte dann auch ALLE Variablen an den aufgerufenen FB's GLEICH benennen, ohne dass es zu Komplikationen kommt?
    Geändert von spirit (14.07.2016 um 13:15 Uhr)
    LG
    spirit

  3. #13
    Registriert seit
    21.11.2014
    Beiträge
    196
    Danke
    5
    Erhielt 28 Danke für 26 Beiträge

    Standard

    Hilfe -> PLC programieren -> Anweisungen -> SCL -> Programmsteuerung -> CASE: Mehrfach verzweigen

    bischen eigenleistung muss schon da sein

    Mit den Spaghetti war übrigends folgendes gemeint: https://de.wikipedia.org/wiki/Spaghetticode

  4. #14
    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 Christmaspoo Beitrag anzeigen
    Hilfe -> PLC programieren -> Anweisungen -> SCL -> Programmsteuerung -> CASE: Mehrfach verzweigen

    bischen eigenleistung muss schon da sein

    Mit den Spaghetti war übrigends folgendes gemeint: https://de.wikipedia.org/wiki/Spaghetticode

    Ok, aber das Beispiel hatte ich mir schon angesehen. Im Grunde verstehe ich den Befehl CASE auch; ich bin mir nur nicht ganz klar darüber, wie die Vorauswahl für den Aufruf der einzelnen FB's organisiert werden muss?


    Code:
    IF #Bedingung_1 THEN
      #Aufrufe := 1;
    ELSIF #Bedingung_2 THEN
      #Aufrufe := 2;
    ELSIF #Bedingung_3 THEN
      #Aufrufe := 3;
      
      ...
      
    END_IF;
    
    
    CASE #Aufrufe OF
      1:  // Statement section case 1
      Call FB1, DB1;
      2:  // Statement section case 2 
      Call FB2, DB2;  
      3:  // Statement section case 3 
      Call FB3, DB3;
        
        ...
        
    END_CASE;
    Denke, so müsste es klappen?
    LG
    spirit

  5. #15
    Registriert seit
    21.11.2014
    Beiträge
    196
    Danke
    5
    Erhielt 28 Danke für 26 Beiträge

    Standard

    Oder in diesem Konstrukt den Case-Aufruf sparen und statt der Zuweisung der Auswahl direkt in der If-Anweisung den Aufruf machen. Funktion ist die gleiche.

  6. Folgender Benutzer sagt Danke zu Christmaspoo für den nützlichen Beitrag:

    spirit (14.07.2016)

  7. #16
    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

    Nun habe ich noch ein Problem beim Aufruf der FB's in einem FC im TIA-Portal ...

    Ich verwende in den FB's eine IN/OUT-Variable. Diese soll mit einer IN-Variable aus einem anderen DB "verkuppelt" werden. Dabei kommt es zu einer Fehlermeldung.


    Nun möchte ich diesen Weg gehen:

    1) Anlegen einer Temp-Var im Aufruf-FC
    2) Dieser Temp-Var übergebe ich die IN-Variable aus dem Datenbaustein
    3) Die Temp-Var übergebe ich schließlich der IN/OUT-Var aus den Schrittketten-FB's

    Kann ich das so lösen? Zumindest kommt keine Fehlermeldung!

    Lieben Dank ...
    Geändert von spirit (14.07.2016 um 16:49 Uhr)
    LG
    spirit

  8. #17
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.357
    Danke
    397
    Erhielt 822 Danke für 665 Beiträge

    Standard

    Und was soll das bringen?

    TIA meckert, weil das OUT-Ergebnis des FB nicht in die IN-Variable des FCs geschrieben werden kann, auch wenn diese aus einem DB stammt.
    Das würde bedeuten, dass der OUT nach dem Zyklus verloren geht. Wenn der nicht benötigt wird (Temp-Variante), wieso wird dann INOUT und nicht IN im FB verwendet?

  9. #18
    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 hucki Beitrag anzeigen
    Und was soll das bringen?

    TIA meckert, weil das OUT-Ergebnis des FB nicht in die IN-Variable des FCs geschrieben werden kann, auch wenn diese aus einem DB stammt.
    Das würde bedeuten, dass der OUT nach dem Zyklus verloren geht. Wenn der nicht benötigt wird (Temp-Variante), wieso wird dann INOUT und nicht IN im FB verwendet?

    Die IN/OUT-Variable dient zweierlei Zwecken:

    1) Es wird eine neue Position (out) in einen Antrieb geschrieben.

    2) Es wird überprüft (in), ob der Antrieb die neuen Positionsdaten verarbeitet hat.

    Daher also eine IN/OUT-Variable.


    Funktioniert das niemals, dass ein OUT eines FB's in ein IN eines FC's geschrieben wird?

    Welche Möglichkeit hätte ich jetzt hier speziell, dieses Problem zu lösen?
    Geändert von spirit (14.07.2016 um 20:10 Uhr)
    LG
    spirit

  10. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.202
    Danke
    389
    Erhielt 2.297 Danke für 1.911 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    1) Wenn ich das so aufbaue, wie müsste ich dann die Freigabe an den einzelnen FB's regeln - über den ENO-Eingang oder über den Befehl "WHILE DO" in der Kette, oder wie sonst?
    2) Muss ich dann gar nicht die nicht aktiven FB's überspringen?
    So in etwa würde ich es machen. Du kannst die unterschiedlichen Bausteine an ihrem Aufruf überpringen oder ihnen eine Freigabe geben und dann innen den ganzen Code überspringen (entweder mit einem GOTO :Ende oder mit einem IF dass die komplette innere Bearbeitung ausklammert). WHILE DO verbietet sich hier doch wohl von selbst ...

    So, wie du es beschreibst, würde ich hier wahrscheinlich nicht 7 unterschiedliche Schrittketten in den einen Baustein hinein packen und diese mit einem SELECT (oder IF) entsprechend laufen lassen. Ich kann mir vorstellen, dass das zu unübersichtlich wird - so etwas würde man so in der Hochsprachen-Programmierung auch nicht machen. Auch dort würde man einzelne Methoden haben, die man entsprechend anwählt ...

    Gruß
    Larry

  11. #20
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.357
    Danke
    397
    Erhielt 822 Danke für 665 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Funktioniert das niemals, dass ein OUT eines FB's in ein IN eines FC's geschrieben wird?
    Nicht wenn dieser FB vom FC aufgerufen wird.
    Wo soll denn der FC den Rückgabewert vom INOUT des FBs speichern?

    Wenn Du z.B. aus dem IN des FCs auch einen INOUT machst, dann kann das Ergebnis des FBs weiter (in diesem Fall an den DB) durchgereicht werden.

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 04.12.2013, 14:28
  2. Simotion SCOUT Organisieren
    Von tisler im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.02.2011, 07:09
  3. Aufruf von Methoden wie in C
    Von zergi im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 05.07.2010, 16:54
  4. SFC0 Aufruf - Wie häufig?
    Von HarryH im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.03.2010, 18:23
  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
  •