TIA Projekt Waschstrasse

Petschi

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute, ich kenne mich mit tia/step7 noch nicht so gut aus, darum beschreibe ich hier mal meine Situation. Ich bin gerade bei einem Projekt, und zwar geht es um eine Waschstrasse, das Programm sollte folgendes beinhalten: ein Schleifenkonstrukt, Schrittkette, PLC-Datatyp(UDT), Arrays,Handling mit Zeittypen, Sichten auf Variablen/Slice-Zugriff und eine Visualisierung mit einem HMI. Die Frage ist, wie ihr das ganze aufteilen würdet in Teilaufgaben sprich welche und wie viele FB`s und FC`s? Würde mich auf eine Antwort freuen!:D
 
Ohne überhaupt ansatzweise die Anlage mit den Aktoren und Sensoren zu kennen, bzw die gewünschte Funktion zu kennen, kann man sowas nicht beantworten in meiner Sicht.

Die FB und FC sollten die Funktionen und oder Teilbereiche der Anlage möglichst sinnvoll gliedern.

Die Dinge die du genannt hast haben meiner Ansicht nach nichts mit der Aufteilung die du erfragt hast zu tun, sie sind eeer Mittel zum Zweck um die letztendliche Funktion zu erfüllen.
 
Mal anders herum:

Was kann Deine Waschstrasse denn so alles und was genau brauchst Du?

Informationen wie man eine Struktur erkennt und erstellt, Daten sortiert, etc...?
 
Also dann probier ich mal die Anlage zu beschreiben. Das ganze ist nur eine Simulation als Übung in der Schule.
Dafür wird ein Förderband mit einem Träger aufm Band benutzt der das Auto simuliert. Das Band ist mit 8 Sensoren
bestattet ist. Also habe ich 8 physikalische Eingänge und ein Motor. Der Rest soll mittels HMI visuell dargestellt werden.
Die Projektinhalte welche ich erwähnt habe müssen irgendwie im Programm sinnvoll integriert werden um maximale Punkte zu erreichen.
Meine Idee:
-Bevor der Fahrer die Waschstrasse benutzen kann, muss er ein Programm auswählen wie z.b. Economy, Standard und
Deluxe (je nach Auswahl werden auch nur die entsprechenden Stationen aktiviert wie die Vorwäsche, Hauptwäsche, Polieren und Trocknen),
dannach drückt der Benutzer auf einen Starttaster.
-Der Betriebszustand der Anlage wird mit 2 Lampen angezeigt(in Betrieb oder Ruhestand).
-Jede Station wird auch jeweils mit einer Lampe angezeigt um zu sehen welcher Vorgang aktiviert ist (da ich z.b. die Vorwäsche nicht anders simulieren kann).
-Ich will auch eine Betriebszeit der Anlage anzeigen lassen, jedes mal wo die Anlage in Betrieb ist, wird die Zeit gezählt und summiert.
-Ein Not-Aus Schalter ist auch vorhanden um die Anlage komplett zu stopen.

Ich hoffe das hilft weiter und vielleicht habt ihr mir noch irgendwelche Ideen wie ich Arrays und so weiter sinnvoll integrieren kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

also - eine Waschstrasse für Autos.

Du hast dann ja in der Theorie ein Förderband das ein Objekt schiebt. Das ist der Hauptteil Deiner Anlage. Solange der Hauptteil keine eigene oder eine seiner Unterstationen keine Störung haben und ein Objekt auf dem Band ist und die Freigabe für das Band (Start) da ist, wird dieses laufen.

Die einzelnen Stationen wie Vorsprühen, Felgenreinigung, Lappen-/Bürstensteuerung, Klarsprüher, Wachs, Trocknung etc. arbeiten in einem FB für sich. Sie erkennen über einen eigenen Sensor wann sie starten und wann sie beendet sein sollen. Eine Felgenreinigung hat nur ein Startsignal und fährt mit dem Wagen meist einen Meter mit und beendet sich, wohingegen ein Sprühbogen einen Sensor für den Start und einen für Stop erhält. Man kann auch einen Sensor der diagonal durch den Bogen schaut nutzen, das ist Budget- und Geschmackssache.
Da Du nur 8 Sensoren hast muss jede Station bei Dir also eine bestimmte simulierte Laufzeit haben. Dafür eine Schrittkette mit einzelnen Positionen was gemacht wird, ein Integer als Status für das HMI-Bild und das war es fast auch schon.
Vielleicht ist es interessant jeder Station einen Button "Störung" beizufügen um eine Störung zu simulieren.
Dafür würde jeder Stations-FB einen Ausgang Störung haben den er dem Hauptteil mitteilt wodurch die Förderkette steht und allen anderen Stationen dann natürlich die Freigabe fehlt. Das diese dann kontrolliert stehen müssen muss irgendwie sichergestellt werden, das ist Programmieraufwand. Wenn die Störung beseitigt und die Freigabe wieder da ist sollten alle Stationen an der Stelle weitermachen wo sie aufgehört haben.

Du schreibst es muss entschieden werden bevor es überhaupt losgeht ob Deluxe, Standard,... - Ja, das ist richtig. Aber das ist meistens für den Einschub gedacht, damit ein Wagen kontrolliert eingeschleust wird. Das Band würde dennoch laufen. Bei den meisten Anlagen ist das der Punkt wo bezahlt wird.

Die Stationen benötigen natürlich die Angabe was der Fahrer bezahlt hat, also Komfort, Standard,... - Dafür nutze ich ein Array mit einer Struktur. Auf dem Array fährt eine Zahl mit. Die Zahl repräsentiert das Programm. Dann gibt es die Startzeit. Durch die Sensoren der Stationen wird der Wagen immer ein Stück weiter im Array verschoben, bis er schliesslich am Ende hinausgeschoben wurde. Ist er draussen, wird Endzeit-Startzeit das Ergebnis der Dauer sein. Das wandert in den Tageszähler sowie in die Serverstruktur für die Einzelaufbewahrung.

Das Programm ist bei mir wie gesagt - nur eine Zahl. 1-20 sind einfache Programmnummern. Addiere ich nun 256 zu dieser Zahl, dann bekommt er Heißwachs oben. 257 Heißwachs unten, 258 Heißwachs oben und unten. Addiere ich ferner 1024, so wird die Trocknung verlängert. Addiere ich 4096, so wird die Felge mit gereinigt.
Dies vereinfacht es ungemein wenig Bytes zu verbrauchen, da Speicher früher teuer gewesen ist. Ich brauche nur einen Integer als komplettes Programm. Heute spielt es schon fast keine Rolle mehr, aber Du hast einen Anhaltspunkt wie man Programme unterscheiden kann.

Ich kenne einige Anlagen bei denen sowohl der Hauptteil als auch die Unterstationen in Graph erstellt wurden. Das ist eine ganz nette Sache, da man diese Schrittketten leicht unterbrechen, weiterlaufen oder aber sogar zurücksetzen kann. Es entfällt viel Programmieraufwand.
Da meine paar Waschstrassen die ich bisher gemacht habe alle aufeinander beruhen, also Programme angepasst aber nicht neu geschrieben wurden, nutze ich Graph nicht bzw. nur bei ganz neuen Stationsarten. Heutzutage aber sind viele Stationen von Einzelherstellern, sodass die Anlage immer häufiger aus vielen Steuerungen besteht da alles nur noch Zukaufteile sind. Den einen großen Anbieter der alle Stationen inne hat gibt es kaum noch.

So, ich bin ein wenig abgeschweift, macht aber ja nix - bei Waschanlagen blüht ein bisschen das Herz, da ich diese Anlagen sehr gerne programmiere und die Kunden etwa alle halbe Jahr bis Jahr nach Neuerungen fragen um Energie und Kosten zu sparen. Nicht selten bekommt man dann die Möglichkeiten zu denen man neue Ideen einsetzen oder aber die Steuerung noch weiter optimieren darf.

Fang also an Dir aufzuschreiben wann die Anlage was machen soll, erstelle daraus eine Struktur was wovon abhängt und dann fülle die Lücken. So ist dann auch später in weiten Teilen die Aufrufstruktur der einzelnen Bausteine. Bei weiteren Fragen meldest Du Dich sicher dann ja.
 
Vielen Dank für deine ausführliche hilfreiche Antwort und dass du dir die Zeit genommen hast! Hat mir schon auf ein paar weiteren Ideen gebracht und einen Einblick in die Automation einer solchen Anlage verschaffen! Im Moment geht es nur um das Design, Analyse und Vorbereitung auf das Projekt, wenn es dann ums Programmieren geht melde ich mich wahrscheinlich wieder :)
 
Hallo Leute, ich komme irgendwie nicht weiter. Was würdet ihr bei so einem Programm in einem UDT brauchen? Vielleicht ein Programm welches dann der Datentyp integer wäre und noch eine Zeit? Ich bin gerade überfordert da ja nichts vorgegeb ist und wir selber diese definieren können. Auch so ein Array um eine Statistik erzustellen z.B. die Tagesbetriebszeit der Anlage in einer Woche. Ah ja das ganze programmiere ich mit SCL.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ein UDT nutzt man nur für zusammenhängende Daten. Es bringt nichts wenn man Störung Motor Station 2 mit LED Motor Station 1 in einem UDT aufführt.
Die UDT wird genutzt um sinnvoll eine Struktur zu erstellen. Wenn Du keine 2 oder mehr Daten hast die immer voneinander anhängig sind, dann brauchst Du auch keine UDT. Es hängt nun also von der Komplexität Deiner Anlage ab.
Es ist auch Teil Deiner Aufgabe genau das herauszufinden.

Ein Array für die Statistik - Zeit. Nun, ich würde ein Array mit einem Integer sowie einem DTL nutzen. Die Strukur sieht dann ungefähr so aus:
array [1..20] of struct
Programm integer
Startzeit DTL
end_struct

Die 1..20 sind die Positionen in der Waschstrasse. An jeder Position kann immer nur ein Auto stehen. Daher kann jede Station beim Erfassen des Autos aus dem Array herauslesen was sie machen soll, an der Position an der sie halt arbeitet. Anschließend würde diese Station den von ihr genutzten Wert anziehen, wodurch ich weiß, das diese Bearbeitung stattgefunden hat. Das ganze in der HMI würde sich darstellen lassen an der Position indem eine Gestaltung >0 Farbe XYZ darstellt. Also ist hier ein Auto vorhanden.

Man kann auch anstelle des Arrays eine Durchreichvariable mitgeben in der von Station zu Station immer die Info mitgegeben wird was als nächstes kommt und beim Belegen des Sensors dann genutzt wird. Da allerdings ist es etwas schwieriger das zeitgleich mit der HMI darzustellen, aber nicht unmöglich.

Die Startzeit wird am Anfang der Kette mitgegeben und bleibt im System unverändert, wird nach dem Trockner von einem Baustein ausgelesen, berechnet, in ein weiteres Array mit 1..256 z.B. eingelagert und in der HMI sind dadurch die letzten 256 Durchgänge sichtbar.
Wenn ich nun noch Variablen nutze in der die Anzahl Durchläufe sowie die addierte Zeit aller gezählten drin sind habe ich den Tagessatz.

Alles in SCL zu schreiben würde ich unterlassen.
Es gibt sehr viele Dinge die ich nur in SCL machen würde, aber einige eben auch nicht.
Generell arbeite ich so das ich alles, was nicht beobachtet werden muss, auch nicht zur Fehlersuche, in SCL geschrieben wird. Das sind hauptsächlich mathematische Operationen.
Da ich meine Schrittketten aber sehr gerne als Case ausführe und ein erfolgter Schritt die Variable dann verändert kommen meine meisten Schrittketten auch in SCL. Darin allerdings werden dann meist nur Befehle wie
0:
klappe_1:=false;
motor:=false;
[...]
31: if eingangxyz then
klappe_1:=true;
Schrittkette:=32;
end_if;
32: if rueckmeldung_klappe_1 then
motor:=true;
schrittkette:=33:
end_if;
[...]
Dadurch ist Schritt 0 immer die Initialisierung.
Eine Beobachtung ist nicht nötig, da immer nur ein Befehl pro Schritt ausgeführt wird. Selbst wenn 3 Ausgänge geschaltet werden müssen werden die durchgeschaltet.
Dadurch kann ich in der HMI eine Textliste erstellen und jederzeit sehen was nun passieren soll. Die gleiche Textliste steht dann nochmal unter Service im Klartext zur Verfügung wo soviel drin steht wie: "Schritt 31 - Warte auf Button Start - eingangxyz soll high/true sein"
für den Bediener würde dort stehen:
"Schritt 31 - Warte auf Button Start"
Mit dem PG reicht es die Schrittkette zu öffnen und im DB kurz schauen wo der Integer steht.

Abläufe die komplizierter sind kommen natürlich in FUP-/KOP-Netzwerke.


Die Schwierigkeit an der Programmierung einer kompletten Anlage ist meistens nicht das Programm selbst sondern der Ablauf.
Wenn einem nur vorgegeben wird was die Anlage können muss, dann muss man sich den Ablauf selbst erarbeiten und stellt bei der Inbetriebnahme fest das einiges doch etwas anders geschehen soll.
Damit das änderbar ist schreibt man vieles so, das man leicht Schritte einfügen aber auch herausnehmen könnte.
Also muss man sich damit beschäftigen wenn ich ein einziges Produkt einfördere was ich nun genau in welchen Schritten machen möchte. Das fasst man dann in Teilbereiche zusammen und hat den größten Teil eigentlich schon geschafft.

An einer Durchschnittsanlage bei der 40h Programmierung geplant sind benötige ich meistens 15-17h für das Programm und dann etwa 10-23h nur für die HMI (Comfort-Panel). Hängt eben davon ab was benötigt wird.
 
... Förderband ... mit 8 Sensoren ... also 8 physikalische Eingänge - Eingänge 1 bis 8 - zuordnen welcher Eingang (LichtSchranke?) in welcher Station wofür benötigt wird
... und ein Motor - Eingang 9 (MotorSchutzSchalter) + Ausgang 1 (Relais/Schütz)
... ein Programm auswählen wie z.b. Economy, Standard und Deluxe - Eingänge 10 und 11 oder 10 bis 12 (vllt zählen, wie oft 'Economy'/'Standard'/'Deluxe' gewählt wurde?)
... Stationen ... Vorwäsche, Hauptwäsche, Polieren und Trocknen - 4 Stationen (evtl. zusätzlich noch eine vor Station1 und eine nach Station 4?)
... Starttaster - Eingang 13
... Betriebszustand ... 2 Lampen ... in Betrieb oder Ruhezustand - Ausgänge 2 und 3
... Jede Station ... mit einer Lampe angezeigt - Ausgänge 4 bis 7
... Betriebszeit ... die Zeit gezählt und summiert - evtl. pro Station getrennt?
... Not-Aus - Eingang 14
Ich hoffe das hilft DIR weiter
... Waschstrasse, das Programm sollte folgendes beinhalten:
Schleifenkonstrukt, - für sich wiederholende ProgrammAbschnitte
Schrittkette, - für ProgrammAbschnitte, die in einer bestimmten ReihenFolge ablaufen müssen
PLC-Datatyp(UDT), - für Variablen, die man nach "irgendwelchen" GesichtsPunkten unter einem OberBegriff zusammen fassen möchte (z.B. Spalten[Überschriften] einer Tabelle - DatenTypen dürfen unterschiedlich sein, d.h. UDT ist ein [Benutzer-definierter] DatenTyp, der verschiedene DatenTypen beinhalten kann)
Arrays, - für Variablen, die mit identischer "Struktur" mehrfach vorkommen (z.B. Zeilen einer Tabelle - alle ArrayElemente haben denselben DatenTyp [der UDT sein darf] - gilt auch für mehrdimensionale Arrays)
Handling mit Zeittypen, - hier vermutlich: Umgang mit Starten, Stoppen, Abfragen von Timern trainieren; Isolieren einzelner Bereiche (Tage, Stunden, Minuten, Sekunden), Rechnen und Vergleichen inkl. erforderlicher DatenTypWandlungen, ... ?
Sichten auf Variablen/Slice-Zugriff - für Daten, die mal so (z.B. als BitMuster) und mal anders (z.B. als Ganzzahl) interpretiert werden ("TypeCasting")
Was würdet ihr bei so einem Programm in einem UDT brauchen? - Prognose: insbesondere bei den Arrays drängt sich auf, welche "SpaltenÜberschriften" benötigt werden
Vielleicht ein Programm welches dann der Datentyp integer wäre und noch eine Zeit? - ProgrammSchrittNr könnte INT sein. 1 Zeit? Z.B. EndZeit - StartZeit = Dauer. Vielleicht auch StillstandsZeiten (und Häufigkeit des Auftretens? Evtl. pro Station?) wegen Störung bzw. NotAus summieren?
Auch so ein Array um eine Statistik erzustellen z.B. die Tagesbetriebszeit der Anlage in einer Woche. - zuerst überlegen (ggfs Kunden löchern), welche Daten benötigt werden (zusätzlich, welche Du Dir wünschst, wenn Du z.B. eine Störung beheben sollst), dann schauen, ob Array bzw. wie viele und welche Inhalte.
? ? ? ? ? ? ? ?

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nochmals vielen Dank für deine hilfreichen Inputs zu diesem Thema! Ich werde versuchen das ganze umzusetzen. Habe bereits meine Abläufe und Szenarien anhand von Zustands- und Aktivitätendiagrammen übersichtlicher gemacht um das Programmieren zu vereinfachern. Und ja, leider muss ich das ganze in SCL schreiben da in diesem Kurs ums "SPS Programmieren mit ST" handelt.:|
 
Was würdet ihr bei so einem Programm in einem UDT brauchen?

Du könntest eventuell jedem einfahrenden Auto einen UDT zuordnen, in dem gespeichert wird, welche Stationen wie lange aktiv sein sollen (Waschprogramm) und welche es schon absolviert hat - bei der Waschstraße ist letzteres nicht ganz so wichtig, da die Position des Autos ja den Fortschritt bestimmt, bei getakteten Anlagen ist es bei einem Stopp aber schon interessant, ob der Bearbeitungsschritt schon ausgeführt wurde oder nicht. Diese UDTs "schiebst" Du dann mit den Autos durch die Anlage.
 
... welche Stationen wie lange aktiv sein sollen (Waschprogramm) ...
Wie ermittelt man, wie lange die Stationen aktiv sein sollen? DurschnittsWert ausrechnen aus Smart und StretchLimousine?

... bei der Waschstraße ist letzteres nicht ganz so wichtig, da die Position des Autos ja den Fortschritt bestimmt, bei getakteten Anlagen ist es ...
... die Position der Station[en].
Ob die Autos gefahren werden oder die Station[en] - was macht das für einen Unterschied?
Die Station[en] müssen wieder zurück gefahren werden, folglich ist ein weiterer Ausgang erforderlich ... aber sonst???

... ob der Bearbeitungsschritt schon ausgeführt wurde oder nicht ...
... das weiss die Schrittkette.
 
Zuletzt bearbeitet:
Zurück
Oben