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

Ergebnis 1 bis 5 von 5

Thema: Bausteinaufrufe mit mehreren Zyklen Laufzeit

  1. #1
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich programmiere zwar gerade hauptsächlich mit CoDeSys 2.3 (Wago), aber ich denke die Frage bezieht sich auf ein grundsätzlichen Problem.

    Wie arbeitet ihr mit Funktionen/Funktionsbausteinen die über mehrere Zyklen laufen. z.B. Kommunikationsbausteine

    Konkret habe ich hier einen Kommunikationsbaustein mit dem ich auf einen Bus schreibe. Mit positiver Flanke am Enable Signal fängt der Baustein an zu senden. Wenn alle Daten gesendet sind, erfolgreich oder nicht, wird das Ausgangsignal auf True gesetzt. Dabei können während der Ausführung mehrere Zyklen vergehen, bis der Ausgang gesetzt wird. Danach muß das Enable Signal auf False gesetzt werden, damit mit einer neuen positiven Flanke erneut gesendet werden kann.

    Da ich mehrere Datensätze zur Initialisierung hintereinander schreiben muß, muß der Baustein mehrmals aufgerufen werden.

    Wie geht ihr dabei vor? Ich muß das ganze ja in den zyklischen Aufruf der SPS unterbringen. Ich kann den Bausteinaufruf ja nicht in eine Schleife packen und warten bis der Baustein erfoglreich abgearbeitet ist. Das würde ja die ganze SPS/ den ganzen Task blockieren. Verwendet ihr da Schrittketten?

    Gruß
    Zitieren Zitieren Bausteinaufrufe mit mehreren Zyklen Laufzeit  

  2. #2
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.487
    Danke
    1.141
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Schrittkette ist nicht die schlechteste Idee

  3. #3
    Registriert seit
    13.12.2014
    Beiträge
    7
    Danke
    0
    Erhielt 3 Danke für 2 Beiträge

    Standard

    Hallo Thruser,

    was für einen WAGO-Controller verwendest du? Handelt es sich um ein 32Bit Controller (750-88X, 750-841), so hast Du die Möglichkeit in der Registerkarte Ressourcen => Tasksystem eine zusätzliche zyklische Task mit einem Aufrufintervall und einer Priorität anzulegen (z.B. Priorität 2, Intervall t#20ms). Tasks werden dann so abgearbeitet, dass höher priorisierte Tasks (dezimale Wertigkeit kleiner) nieder priore Tasks unterbrechen. Bei Kommunikationsbausteinen empfiehlt es sich diese in einer hoch priorisierten Task mit relativ kleinem Aufrufintervall einzubinden. Die Flanke für die Abarbeitung des Bausteins jedoch nur so häufig wie nötig zu triggern.
    Konkret würde ich je nach Vorhaben, das Hauptprogramm in einer Task mit der Priorität 1 und die Kommunikation in einer Task mit der Prioriät 2 abarbeiten lassen.

    Gruß Informer

  4. #4
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Hallo,

    das mit den Tasks ist mir bekannt und würde ich generell auch so machen.

    Hier habe ist jetzt aber das Problem, das ich einen Sensor erst parametrieren muß, damit er mir die richtigen Werte schickt. Dazu müssen bestimmte Befehlsfolgen in der richtigen Reihenfolge an den Sensor geschickt werden. Auch möchte ich unter Umständen später über die Bedienoberfläche noch bestimmte Parameterwerte ändern.

    Man könnte es ja so machen:
    Sende Sequenz 1
    Warte solange bis Senden abgeschlossen.
    Sende Sequenz 2
    Warte solange bis Senden abgeschlossen.
    Sende Sequenz ...

    Das Warten kann ich ja jetzt nicht z.B. mit einer while Schleife machen
    Code:
    WHILE NOT SEND.CONFIRM DO
      SEND();
    END_WHILE
    da dann der ganze Task blockiert wäre

    Gruß

  5. #5
    Registriert seit
    13.12.2014
    Beiträge
    7
    Danke
    0
    Erhielt 3 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Thruser,

    wenn ich das richtig verstehe, dann willst Du zuerst den Sensor in einer definierten Reihenfolge parametrieren und dann soll erst das restliche Programm abgearbeitet werden in dem die Daten vom Sensor verarbeitet werden.
    In diesem Fall würde ich in einer separaten Task (Init_PRG) die sequenzielle Abarbeitung der Parametrierung ablaufen lassen. Das aufgerufene Programm würde ich dann so schreiben, dass die ersten Daten an den Sensor geschickt werden, dann wird gewartet bis die Triggervariable am Baustein fällt, dann werden erst die nächsten Daten geschickt... so lange bis die Parametrierung fertig ist. Das Hauptprogramm läuft in einer weiteren höher prioren Task, jedoch wird die eigentliche Datenverarbeitung in diesem Programm über ein

    IF (xInitReady) then
    Code für die eigentliche Datenverarbeitung
    END_IF

    blockiert, dieses in dem Init_PRG erst nach erfolgreicher Sensorparametrierung auf TRUE gesetzt wird.
    So wird keine Task blockiert und der Sensor kann zunächst in alle Ruhe sequenziell parametriert werden bevor die Datenverarbeitung beginnt.

    Gruß Informer

Ähnliche Themen

  1. Step 7 Suche auf meher Zyklen verteilen
    Von sidi im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 16.08.2013, 01:27
  2. Antworten: 0
    Letzter Beitrag: 21.11.2008, 10:43
  3. Mittelwert bilden (von zb 5 SPS-Zyklen)
    Von Matthias O. im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.01.2007, 14:21
  4. Schleife mit Variabler Laufzeit
    Von Garog im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 29.08.2006, 19:56
  5. schreib/lese zyklen MMC
    Von Markus im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.04.2004, 14:50

Lesezeichen

Berechtigungen

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