# Programme aufteilen?



## Stromer (28 Februar 2007)

Ich hätte auch mal eine grundsätzliche Frage bei Programmen für Maschinensteuerungen.
In der Regel bestehen diese Programme mindestens aus einem Automatikteil und einem Handprogramm, um zB. die Maschine einzurichten.

Die Programme die ich bisher dafür geschrieben habe waren so aufgebaut dass ich halt die Ausgänge immer so verriegelt hatte, dass entweder das eine oder das andere funktionieren konnte. Aber das ist für größere Anwendungen eher ungeeignet.

Mir würde nun eher vorschweben zwei, (oder mehrere) Programme zu schreiben und die nicht ausgeführten mit Sprungbefehlen zu überspringen.
Da ich in der Regel immer als Schrittkette programmiere, wollte ich dann bei dem aufzurufenden Programm am Anfang, die jeweils benutzten MW`s auf zero setzen. Der übersprungenen Schrittkette.
Die Ausgangszuweisungen werden natürlich immer abgearbeitet und sitzen auserhalb der eigentlichen Programme.

Also es geht nur ums Prinzip, wie am günstigsten zwischen mehreren Maschinenprogrammen gewählt werden kann.
Es ist ja auch SPS-Hersteller neutral gefragt.


----------



## HDD (28 Februar 2007)

Hi Stromer,
so wie du es beschrieben hast mache ich es eigentlich auch immer.
Also einen oder mehrere FC für Hand die aber nur bei Hand bearbeitet werden . Wenn Hand abgeschaltet springe ich kurz in einen FC in dem alle verwendeten Merker usw. auf 0 gesetzt werden. Genau so mache ich es bei dem Automatik Programm. Bei größeren Sachen mit Schrittkette teile ich die Maschine in Funktionseinheiten und Schrittketten die jeweils von einer Hauptschrittkette aufgerufen werden . So halte ich die Zykluszeit klein aber hier ganz wichtig man muss wissen was passiert wenn man einen Programmteil überspringt.

Hier ein Beispiel habe ich vor einiger Zeit schon einmal hier reingestellt.


----------



## Ralle (28 Februar 2007)

Ich mach das nicht wie hdd, sondern es gibt für jeden Zylinder, Motor etc. einen Standardbaustein, der hat Hand- und Automatikeingänge um den Aktor zu bewegen, also die Ausgänge zu schalten. Bei Hand sind dann in diesem Baustein die "Handeingänge" aktiv, bei Automatik die "Automatikeingänge". Das hat den Vorteil, daß ich bei Bedarf die Anlage in Hand schalte, an einer Station per Hand verfahre, und danach wieder im Automatikmodus weiterarbeiten kann, ohne in jedem Fall ein Reset durchführen zu müssen. Außerdem werden alle Statusmeldungen und Fehler von Aktoren so sowohl im Hand- als auch im Automatikbetrieb behandelt und angezeigt. Umspringen von Bausteinen behagt mit immer nicht so sehr, aber das ist ganz sicher eine Frage des Systems und der Philosophie hinter diesem System.


----------



## zotos (28 Februar 2007)

Ralle schrieb:


> ...aber das ist ganz sicher eine Frage des Systems und der Philosophie hinter diesem System.



100% ACK

Das ist keine leichte Frage.
Also solche Maschinen wie Ralle sie beschrieben hat wo man kurz die Betriebsart wechseln eine Manipulation durchführen und danach ohne Grundstellung zu faheren weiter machen kann. Habe ich schon gesehen aber nicht oft. Das geht IMHO nur unter bestimmten Vorraussetzungen eine davon ist das der Programmierer ein echter Profi ist (so einer wie Ralle eben). Ich war mal in einer Firma tätig wo die Kollegen so war realisiert haben bei diesen Maschinen war noch nicht mal ein Not-Aus ein Grund zur Grundstellungsfahrt. Das machte beim Kunden immer einen besonders guten Eindruck ;o) 
Da wo ich jetzt arbeite gibt es sowas nicht. Der Automatikstart ist mit der Grundstellung zu verknüpfen.

Wir haben Hand, Automatik (Start/Stop), Sonderbetrieb (Start/Stop) und Tipbetrieb.

Wenn eine andere Betriebsart angewählt wird z.B. von Automatik nach Hand stopt die Maschine den Automatikablauf (Schrittkette) sofort. Wenn man die Stoptaste drückt ist das nur ein Vorwahlstop also am ende der Schittkette wird in den Init-Schittgesprungen und dort ist dann Ende.

Im Sonderbetrieb (Schrittketten) gibt es immer die Möglichkeit einer Grundstellungsfahrt.

Das ist alles aber sehr komplex und schwer zu erklären.


----------



## Ralle (28 Februar 2007)

@zotos

Ja, aber natürlich kann nicht nach jeder Manipulation, einfach beliebig weitergefahren werden. Im Zweifelsfall wird dann wird ein Stations-Reset verlangt, danach sollte die Maschine weiterarbeiten können. Was besonders wichtig ist, nach Not-Aus, oder Wechsel Auto-Hand-Auto, sollte man möglichst ohne "Teileverluste" weiterfahren können. Also selbst wenn ich dann eine Reset aller Stationen mache, "wissen" die Greifer etc. noch, ob sie Teile haben und in welchen Bearbeitungszustand sie sind, bzw. die Stationen haben diese Informationen noch. Dann erfolgt der Einsprung in die Schrittkette an die richtige Stelle und es geht weiter. Dann gibts noch ein Reset mit "Teileinfo löschen", danach ist die Maschine faktisch leer, die Teile müssen per Hand entnommen werden. Das ist dann der absolute NOTFALL, wenn mal gar nichts mehr geht :twisted:.


----------



## volker (28 Februar 2007)

also unabhängig davon wann ich was resette ist für mich die kernfrage... sollte ich bausteine überspringen?
krass wäre dann sogar noch wenn in den bausteinen die gleichen merker verwendet werden (hab ich alles schon gesehen).
die gefahr beim überspringen ist in jedem fall dass uU nicht alles korrekt zurückgesetzt wird.

ich mache es grundsätzlich so, dass alle bausteine bearbeitet werden, auch wenn dadurch viele bits, aus den verschiedenen programmen, zusammen kommen. wenns zu viele werden um das bei der weiterschaltung zu überblicken, organisieren ich das noch über zwischenbits in gruppen die dann letzendlich auf der ausgangsenene wirken.


----------



## Ralle (28 Februar 2007)

@volker

ich sags mal mit zotos. 100% ACK


----------



## HDD (1 März 2007)

Hi,
was ich noch vergessen habe Ausgänge überspringe ich nicht, Merker werden nur einmal zugewiesen. Die Aufteilung in einzelne Schrittketten für jede Funktion, die dann über Hauptschrittketten gesteuert werden  , die die Funktion der Maschine vorgeben,
hat natürlich den Nachteil, dass die Programme recht groß werden. Deshalb überspringe ich die abgearbeitete Kette. Also Hauptkette gibt Start an Unterkette und wartete bis Fertigmeldung kommt. Beim verlassen von Automatik werden alle Automerker mit 0 geladen.
Mit Hand in die Anlage eingreifen und dann ab einem bestimmten Punkt weiter laufen zulassen habe ich auch schon  gemacht, hier kommt einem zugute wenn man das ganze in Funktionseinheiten aufgeteilt hat. Hängt sehr von den Maschinenbedienern ab. Die müssen dann schon sehr mitdenken und bei den heutigen zuständen ist das nicht immer möglich (Ständig wechselnde Bediener). 
HDD


----------



## Dagobert (1 März 2007)

*Überspringen von Bauteinen*

Hallo,

das Überspringen von Baustein ist immer schlecht.
Zwei gewichtige Gründe die dagegen sprechen sind

a) solche Programme sind nur sehr schwer n Betrieb zu setzen
und eine Fehlersuche wird unnötig erschwert weil man immer
wieder suchen muss, wo und warum bestimmte Programmteile
gerade nicht abgearbeitet werden.

b) eine stark schwankende Zykluszeit ist allemal wesentlich
schlechter wie eine einigermassen kontant hohe.

Es gibt meines Erachtens nur ganz wenige Fälle, wo ich ein
bedingtes Aufrufen von Programmteilen für gerechtfertigt und gut
halte.


----------



## TommyG (1 März 2007)

ACK 

So wie ich das gelernt habe, läuft in der Kette nur Der Ablauf mit den Ketten/ Schrittmerkern. Die Aktoren werden dann über separate Verknüpfungen mit den Bedingungen Auto, Hand, Reset, Stop und ähnlich gesteuert/ maskiert.

Mit der Grundstellung sehe ich manchmal das Problem, das, wenn die Maschine voll ist, man evtl einen hohen Material Verlust hat. Andersorum ist eine definierte anfahrweise nat. wichtig, weil sonst wäre eine Schrittkette ja Blödsinn...

Schwierig finde ich das Zurücksetzten der Merker mit der Anfahrstellung/ Weiterlaufbedingung in Bezug auf NOT AUS. Dort ist ja Forderung, das nach NOT AUS i.O. die Antriebe nich von aleine anlaufen dürfen. mit gesetztem Merker, der sagt 'Hier gehts weiter' oft ein Problem.

Aber ohne Probs wär das Leben langweilig. Oft ist es imho direkt von der Anwendung und dem Weg des geringsten Schadens abhängig..

Greetz


----------



## zotos (1 März 2007)

Stromer schrieb:


> Also es geht nur ums Prinzip, wie am günstigsten zwischen mehreren Maschinenprogrammen gewählt werden kann.
> Es ist ja auch SPS-Hersteller neutral gefragt.


 
Ich nutze ja CoDeSys und kein Step7.



Dagobert schrieb:


> Hallo,
> 
> das Überspringen von Baustein ist immer schlecht.
> Zwei gewichtige Gründe die dagegen sprechen sind
> ...


 
 Noch mal das Thema ist so komplex das man keine allgemeingültige Aussage dazu machen kann.

 Wobei alle Aussagen verstehe und nachvollziehen kann da ich mir eine Maschine/Anlage vorstellen kann wo die Argumente die bisher gebracht wurden 100% zu treffen.

 Was ich nicht mag ist der Begriff Überspringen. Auch wenn er richtig ist mag ich das Springen nicht das hat so einen GOTO touch wie in Basic.
 Ich benutze ja kein AWL sondern ST und mit bei IF und CASE Anweisungen überspringt man nun mal Programmteile oder auch Bausteinaufrufe.
 Ein SPS-Programm besteht ja aus verschiedenen Bausteinen. 
 PRG/FC/FB also ein FC benutz ich dann wenn ich keine Werte innerhalb der Bausteins speichern muss und er ist dafür prädestiniert öfter aufgerufen zu werden. Im FC nutze ich nur sehr, sehr ungern globale Variablen (da gibts eine Reihe von Variablen die ich dort aber lesend verwende Betriebsart und Co.). Ein FC eignet sich super dafür Umrechnungen oder ähnliches zu machen die "überspringe ich wenn ich sie nicht brauche ohne mit der Wimper zu zucken. 
 Ein FB ist für mich ähnlich er hat eben gegenüber dem FC einige Vorteile: Ich kann Werte Speichen da man von dem FB instanzen benutzt und man kann sich genau die Instanz anschauen die man sehen will und beobachten was da abgeht. Einen FB zu überspringen ist schon kritisch da ich in FB gerne mal eine Instanz von TON oder TOF drin habe und das "übersprungen" werden mögen die nicht so gerne. Aber auch hier gilt das verwenden von globalen variablen ist wie beim FC kritisch.
Das PRG ist ganz was anderes ein PRG wir nur einmal im SPS-Zyklus aufgerufen, dafür aber in fast jedem SPS-Zyklus (ich mach da nur ungern eine Ausnahme). Hier spreche ich globale Variablen an. Schrittketten z.B. sind bei mir fast immer vom Bausteintyp PRG. 

 Das es ein großer Vorteil ist wenn die Zykluszeit immer gleich groß stimmt. Dann setzt man diese eben auf einen festen Wert ein (ich habe letztens hier im Forum gelesen das auch die S7 so was kann). 

Also ich denke das man sehr wohl Bausteine "überspringen" darf wenn man weis was man tut und das auch klar im Programm darstellt. Man muss wie bei jedem System eben konsequent sein.


----------



## plc_tippser (1 März 2007)

Ich handhabe es wie Ralle, Standard-Baustein für die Aktoren mit Hand/Auto umschaltung.

Irgendwelche Programmteile zu überspringen, also Hand oder Auto ist ganz doll pfui.

pt


----------



## kiestumpe (1 März 2007)

*aufteilen - ein Programm, mehrere Programmierer*

Hallo,

hatte der Überschrift nach das zunächst so aufgefasst - 
wie ist das bei euch, habt ihr auf PLC-Systemen schonmal parallel an einem Projekt gearbeitet?

Gerade dann ist, was der Fönig hier schreibt besonders zu beachten:



zotos schrieb:


> Im FC nutze ich nur sehr, sehr ungern globale Variablen (da gibts eine Reihe von Variablen die ich dort aber lesend verwende Betriebsart und Co.).


 




zotos schrieb:


> Das es ein großer Vorteil ist wenn die Zykluszeit immer gleich groß stimmt. Dann setzt man diese eben auf einen festen Wert ein (ich habe letztens hier im Forum gelesen das auch die S7 so was kann).


Ja, geht über Weckalarm OB's ab 30 aufwärts, jeder steht für ne bestimmte Zykluszeit.

Gruss

kiestumpe


----------



## zotos (1 März 2007)

kiestumpe schrieb:


> ...
> Ja, geht über Weckalarm OB's ab 30 aufwärts, jeder steht für ne bestimmte Zykluszeit.
> ...



ich meinte das Kommentar:



Zottel schrieb:


> ...
> Weiterhin kann man bei der S7 eine Mindestzykluszeit angeben, natürlich nur länger als die normale. Sie wartet dann vor Beginn des nächsten Zyklus.
> ...


----------



## kiestumpe (1 März 2007)

zotos schrieb:


> ich meinte das Kommentar:


 
oha,und wann geht das? Bei mir ist das immer ausgegraut. Schneller als der OB38 wirst du damit kaum werden.


----------



## Stromer (1 März 2007)

Nun erstmals danke für die vielen Antworten, die ich mir auch als Vorschläge mal in den Hinterkopf lege.

Gerade für die Fehlersuche und Inbetriebnahme finde ich es leichter wenn ich einzelne Programmteile habe.
Die Ausgänge liegen in einem anderen immer abgearbeiteten Teil:
Oder Automatik 
Oder Hand
Ist Pumpe läuft, oder was weis ich.

So kann ich jetzt das Automatikprogramm oder das Handprogramm einzeln testen, die Abfrage der "nicht vorhandenen" Merker aus dem zB. Handbetrieb, sind dem Programm ja egal.

Wenn zB. das Automatikprogramm mit einer Schrittkette aus dem Merkerdoppelwort 20 geschrieben wäre und zurückgesetzt werden müsste, so wollte ich das so machen:

Im Handprogramm, würde ich schreiben:
Lade Konstante 0
Transferiere MD 20
Das natürlich an den Anfang.
Somit wäre sobald in den Handbetrieb gesprungen würde, sofort die Kette aus der Automatik aus.

Es gibt Maschinen wo sich so was gar nicht anbietet usw. Darüber braucht man nicht zu diskutieren, ebenso wie über den Not-Aus, der ja sowieso Hardwaremäßig auszuführen ist und nur als Hilfe der SPS zugewiesen wird.
Allein die SPS kann das wiederanlaufen ja nicht allein verhindern, sonst hätte man wohl ein Problem, wenn ein Ausgang wegen eines Defekts immer 1 ist.
(Vieleicht ist gerade deshalb sogar der Not-Aus betätigt worden), aber das ist wirklich eine andere Geschichte.

Anbieten tut sich natürlich immer ein Tippschritt, so wie oben erwähnt. Den mit remanenten Merkern ausgeführt, so weis auch die Maschine nach Netzausfall wo sie gerade stand und man könnte gerade weitertippen.
Selbst eine solche Kette könnte man überspringen allerdings müsste in den Ausgangszuweisungen noch stehen:
Und nicht Hand. Aber dann wäre das springen gar nicht nötig, dann könnte die SPS auch das durchrattern.

Ich denke halt das ganze würde mit einzelnen Programmen leichter überblickbar, aber ich merke das ist wirklich eine Philosophie für sich.


----------

