TIA Geschwindigkeit eines Bandes ausgeben

Marco_ET12

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,
ich habe bezüglich eines Mini-Projektes in der Uni einmal ein paar Fragen.

Gearbeitet wird mit einem SIEMENS PC System SIMATIC S7 Open Controller ET200SP, CPU1515SP

Und war geht es um ein Fließband, welches verschiedene Bauteile, die immer 50mm lang sind, per Sensor erkennen und am Ende durch einen Auswerfer in eine Kiste werfen soll. Die Bandgeschwindigkeit kann sich durch Spannungsregelung ändern, somit auch die Zeit vom Sensor zum Auswerfer.

Mein Lösungsansatz war nun folgender: Dadurch, dass jedes Bauteil IMMER 50 mm lang ist, kann ich den Sensor zur V_Band Messung verwenden. Unterbricht das Bauteil den Sensor, speichere ich diese Flanke in eine Variable. Dieser weise ich dann mit der Funktion TIME_TCK() die aktuelle Laufzeit seit Start zu. Verlässt das Bauteil den Sensor wieder, fange ich diese Flanke ebenso ab und speichere sie in einer anderen Variablen.
Die Differenz dieser Zeiten entspricht genau der Zeit die das Bauteil gebraucht hat um am Sensor entlang zu fahren. Teile ich diesen Wert nun durch 50mm, so habe ich V_Band in mm/s. Durch Messung des Astandes Sensor-Auswerfer, kann ich nun einen TON so programmieren, dass nach Ablauf der Zeit, die das Bauteil bis zum Auswerfer braucht, dieser aktiv wird. PT des TON hängt also von t=S(Sensor-Auswerfer)/V_Band ab. So zumindest in der Theorie, damit ihr eine Vorstellung habt worum es geht.

Nun kommt jedoch meine eigentliche Frage:

Der Weg s ist eine Variable vom Datentyp REAL. Die Differenzzeit ist eine Variable vom Datentyp TIME. Ich kann ja nicht einfach REAL durch TIME teilen. Wie würdet ihr das am besten lösen? Wenn ich TIME_TO_REAL konvertiere wird der Wert doch nicht wirklich so bleiben, wie ich ihn brauche oder? Leider habe ich erst ab Freitag wieder die Möglichkeit im Labor praxisnah zu testen. ( Danke CORONA). Allerdings möchte ich mir schon vorher einen Lösungsschritt überlegen, dem ich meinem PROF vorlegen kann.

Ich kann mir nur nich ganz vorstellen, wie ich die richtige Einheit von V_Band bekomme durch die Arithmetik.

Ich hoffe, dass jemand Lust hat mir etwas zu helfen und freue mich auf tolle und hilfreiche Antworten.

Liebe Grüße und sonnige Tage,

Marco
 
TIME sind einfach Millisekunden als 32bit Integer.
Das kannst Du schon umwandeln, bzw. passiert es wahrscheinlich sogar implizit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
weise ich dann mit der Funktion TIME_TCK() die aktuelle Laufzeit seit Start zu.
Achtung, TIME_TCK() hat ca. alle 24 Tage einen Überlauf (siehe Beschreibung des TIME_TCK in der TIA Hilfe)
Den Überlauf kann/muß man herausrechnen, allerdings ist der simple Rechenweg anscheinend nicht so naheliegend daß selbst Siemens-Programmierer das fast immer falsch machen.
Wie man den Überlauf korrekt herausrechnet

Harald
 
Das Auswerfen eines Teils vom Band wird < eigentlich > anhand der Position, unabhängig der Geschwinigkeit gemacht.
d.h. man benutze
a) Inkrementalgeber
b) ein Zählrad , was Impulse an eine Gabellichtschranke, schmaler Sensot , o.ä. an die SPS gibt.

Die "Geschwindigkeitsermittelung" geht nur wenn die Geschwindigkeit nahezu konstannt bleibt.
Statt Time_Tick könnte man auch den 100ms Ticker der CPU nutzen und damit ein INT oder DINT hochzählen.
(Einstellung eies MB in der CPU)

Falls mehr als ein Teil bis zum Auswerfen da sind müsste auch ein "Register" mit rein.
 
... kann ich nun einen TON so programmieren, dass nach Ablauf der Zeit, die das Bauteil bis zum Auswerfer braucht, dieser aktiv wird.
Abgesehen davon, dass sich die Geschwindigkeit weiterhin unbemerkt verändern könnte, geht das nur, wenn zwischen Sensor und Auswerfer maximal 1 Teil unterwegs ist.
Sind dort mehrere Teile unterwegs, müsstest Du für jedes davon einen eigenen TON spendieren!

Wenn in kurzen Abständen weitere Teile nachfolgen, könntest Du zwar GeschwindigkeitsÄnderungen besser nachvollziehen, aber den entsprechenden TON hast Du längst gestartet und Du müsstet ihn ggfs mehrfach "korrigieren". Zu viel Aufwand für zu wenig Nutzen. Es bleibt zu ungenau.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Anstatt den TIME_TCK() zu nutzen könnte man aus den RD_SYS_T nutzen,
dieser liest die Systemzeit in DATE_AND_TIME aus, dort dürfte es eigentlich
keinen überlauf geben.

Wenn sich wirklich nicht die Bandgeschwindigkeit ändert, soll es ja geben.
und es sin dann mehre Werkstücke, die dann verfolgt werten sollen, kann man
die Werte in ein FiFo-Register eintragen und abarbeiten.
 
Zuletzt bearbeitet:
Solange die Geschwindigkeit vom Band sich nicht ändert ist es möglich das Teil mit dem Auswerfer genau herunterzuwerfen. Ändert sich diese allerdings zur Laufzeit, so wird das nichts und der Auswerfer benötigt einen Sensor, das wäre der normale Weg, wie Senator42 auch geschrieben hat.

Die Nutzung einer Berechnung zwischen Start- und Endzeit als Differenz verstehe ich nicht so richtig. Warum nicht einfach einen TON starten wenn das Teil den Sensor belegt und stoppen wenn er verlassen wird? Am ET (Elapsed Time) kann die Zeit direkt in ms abgelesen werden. Der Ton würde dann, sofern er zu lange aktiv ist durchlaufen bis Q kommt und hierdurch eine Fehlermeldung generieren ala "Teil steckt fest".

Die implizite Konvertierung Time/Real/Int würde die SPS fast immer zuverlässig machen, sollte aber bei den meisten Aufgabenstellungen als "nicht so ganz richtig" angenommen werden, da die implizierte Konvertierung nicht von allen Steuerungen durchgeführt wird und eine Eigenheit einiger Steuerungen ist.
 
Zurück
Oben