Bausteine aktivieren

sstrasser
2008-11-03
2008-12-12
  • sstrasser - 2008-11-03

    Hallo zusammen,

    ich habe in einem kleinen SPS Programm (CodeSys 2.3.8.5) mehrere Bausteine (KOP, FUP) geschrieben, welche auf die selben physikalischen Ausgänge wirken. Die Ausgängsvariablen sind logisch über OR auf die physik gebunden. Gibt es eine "einfache" möglichkeit, diese Einzelprogramme/Bausteine/Funktionen zu "enablen"? Ich möchte nicht unbedingt innerhalb der einzelnen Programme jeweils eine Enablevariable setzen, sondern diese Bausteine quasi als "Funktion" in ein Hauptprogramm einbinden und dort über einen Kontakt o.ä. einschalten können. Bin "Anfänger" und hoffe, daß meine Formulierungen hier verständlich sind. Grüße und Danke schonmal für jeden Tip(p)

    Stefan

     
  • Matze001 - 2008-11-03

    Hallo,

    ich verstehe dein Problem noch nicht so ganz.

    Du hast mehrere Programme die auf die selben Ausgänge wirken.

    Soll davon ein Programm dominant sein oder soll setzen einfach vorgehen?

    Wenn setzen einfach vorgehen soll bist du mit deinem OR sehr gut beraten.

    Ansonsten machst du es folgendermaßen:

    Du machst deine Unterprogramme als FBs. Diese rufst du dann im PLC_PRG auf. Als Eingangsvariable machst du zusätzlich "enable" und verknüpfst jede Ausgabe mit dieser Variable mit einem UND. So kann eine Ausgangsvariable des FB nur gesetzt werden wenn Enable eine 1 hat!

    Hoffe es ist verständlich

    MfG

    Marcel

     
  • sstrasser - 2008-12-11

    Hallo und Danke für die Antwort,

    war länger krank, daher erst jetzt der Dank und die Info:

    Es war ganz einfach zu lösen was ich wollte. Ich habe das Hauptprogramm als KOP definiert und setze einfach vor meine dort eingebundenen Unterprogramme einen EN Eingang. Damit kann ich diese dann ein und ausschalten. Das war es einfach was ich gemeint hatte. Manchmal denkt man zu kompliziert...

    Danke nochmal für die schnelle Antwort & Grüße

    S.

     
  • sstrasser - 2008-12-12

    Hallo nochmal: Ganz so einfach war es dann doch nicht. Ich habe die Enable-Funktion falsch interpretiert. Folgendes Szenario:

    Ich habe in meinem Projekt nun 10 Programme in ST geschrieben, welche innerhalb des PLC_PRG instanziert werden. Dort tauchen sie als Baustein mit Enable auf. Ich wollte nun über Eingangsvariablen (Schalter an HW-Eingängen) diese Unterprogramme aktivieren bzw. deaktivieren. Jedes dieser Programme schreibt über Variablen auf die selben Ausgänge, alle Ausgangsvariablen sind mit oder verknüpft. Abhängig vom aktivierten Programm werden nun die Ausgänge entsprechend angesteuert.

    Soweit so gut, das funktioniert auch sehr schön aber: Nun ist es so, daß EN die Programme zwar deaktiviert, die Ausgangsvariablen aber auf TRUE belässt wenn diese gerade True waren während ich EN deaktiviere. Eigentlich ja auch "logisch" im wahrsten Sinne des Wortes. Dies führt aber dazu, daß meine Ausgänge "hängen bleiben". Ich hatte an eine Möglichkeit gedacht, einen Baustein komplett zu deaktivieren und beim deaktivieren dessen Variablen gezielt auf false setzen zu können. Da wir hier über ca. 200 Ausgänge reden, die Bitweise angesprochen werden, möchte ich ja gerade nicht für jeden Ein/Ausgang innerhalb des eigentlichen Programmes eine AND-Verknüpfung mit dem Enable-Signal einbauen. Gibt es also eine einfache Möglichkeit, zu definieren, daß ein "disable"-ter Baustein seine Variablen auf 0 zieht?

    Beste Grüße

    S.

     
  • Pitsch52 - 2008-12-12

    Hallo

    Wenn Du in allen Programmen die gleichen Ausgänge ansteuerst, kannst Du die Ausgänge ja nur mit TRUE setzen, oder FALSE resetten. Die Ausgänge, müssen sowiso Global definiert sein.

    Ich würde im PLC_PRG ganz am Anfang eine For Next schleife einbauen, die mir die Ausgänge alle auf FALSE setzt, also resetten.

    Dann kommen die Programm-Aufrufe. In abhängigkeit der entsprechenden ENABLE-Variable, (SELECT CASE - Auswertung) sollte jeweils nur ein Programm aufgerufen werden. Sonst pfuschen die verschiedenen Programme einander ins Handwerk.

    Im entsprechenden Programm, das aufgerufen wird, setzst Du dann nur noch die gewünschten Ausgänge auf TRUE.

    Bei jedem Zyklus, werden die Ausgänge dann neu gesetzt. Das heisst sämtliche Aenderungen, die sich zwischen den Zyklen ergeben, werden berücksichtigt und sofort übernommen.

    Mit freundlichen Grüssen! Pitsch

     
  • hugo - 2008-12-12

    auch im sfc und anderen grafischen editoren kannst du per rechter maustaste auf dem symbol einen zusätzlichen en eingang und ausgang einschalten.

    dies funktioniert ohne dafür code zu erzeugen.

     

Log in to post a comment.