Schieberegister und die nachfolgende Abfrage - Blutiger Anfänger

Hobbyfunker

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum

Ich möchte mich zuerst kurz vorstellen:
Mein Name ist Thorsten, ich bin 27 Jahre alt und komme aus dem Zollernalbkreis. Ich bin gelernter Werkzeugmechaniker und bei uns in der Firma schon immer im "Vorrichtungsbau" tätig.
Ja und seit neuestem bin ich auch für die Programmierung von unseren neuen Automaten zuständig. Und hier kommt der Haken :p
Ich wurde mehr oder weniger ein bisschen ins sprichwörtliche "kalte Wasser" geworfen.
Ja, der, für mich erste Automat, den ich jetzt programmieren muss ist gleich ein echter Hammer...Zumidest für einen blutigen Anfänger wie mich...

Um den Automat mal kurz ein weinig zu erklären:

Ich habe einen Rundtaktisch mit 8 Positionen.
An jeder Staion wird etwas gemacht:
-Station 1: einlegen eines Kunststoffteils mittels Pneumatischen Greifern
-Station 2: einlegen eines Metallteils, dass in das Kunststoffteil eingepresst wird, ebenfalls pneumatische Greifer
-Station 3: Ringsum auftragen von einem UV-Kleber
-Station 4: Aushärten des Klebers unter UV-Licht
-Station 5: Prüfung der Teile mit Hilfe einer Kamera
-Station 6: Entnahme der Gutteile mit Hilfe von pneumatischen Greifern
-Station 7: Entnahme der Schlechtteile mit Hilfe von pneumatischen Greifern
-Station 8: Abfrage ob die Aufnahme leer ist

So, die einzelnen Stationen habe ich soweit glaube ich ganz gut hinbekommen, ich habe für jede Bearbeitungssation einen FB gemacht und das ganze funktioniert soweit eigentlich auch, das hab ich schon recht ausgiebeig getestet.

Kopfzerbrechen bereitet mir allerdings die Sation Nr.5, Kameraauswertung.
Die Kamera macht zwei Bilder von dem Teil, eins wenn der Tisch in Position ist und dann wird das Teil um 180 Grad gedreht und die Kamera macht ein weiteres Bild.
Pro Bild gibt sie dann entweder OK oder NOK aus..soweit so gut.
Jetzt wollte ich mithilfe der Funktion rechts schieben das entsprechende Ergebnis an die Stationen "Entnahme Gutteile" bzw. "Entnahme Schlechtteile" weitergeben...
Und hier steh ich total auf dem Schlauch, leider :-(
ICh hab mich schon durch das ganze Forum gelesen, aber als blutiger Anfänger komm ich immer wieder ins Stocken.
Könnt ihr bitte erkären was ich hier machen muss?
Vor allem ist mir überhaupt nicht klar, wie ich an den jeweiligen Entnahme-Stationen die entsprechenden Bits abfrage, die ich in dem Register immer weiterschiebe. Ich Stell mir das so vor, dass ich in dem Schieberegister im Prinzip ein Byte habe, das Bite beinhaltet 8 Bits...jetzt sollte ich also pro Takt des Rundschalttisches die Bits im Register ja um 2 stellen nach rechts schieben und dann an den Stationen wieder abfragen. Und ich komm ehrlich gesagt auch noch nicht ganz mit, was ich da an entsprechenden Datenbausteinen vorher anlegen muss...
Wie gesagt, ihr seid eigentlich meine letzte Rettung, das Forum hat mir auch vorher schob bei Kleinigkeiten immmer wieder weitergeholfen, aber jetzt komm ich einfach nicht mehr weiter :-(
Ich arbeite mit einer S7-1214C und TIA-Portal V11.
Und da ich blutiger Anfänger bin, hab ich alles in, ich glaube FUP (das wo die Funktionen immer in so Kästechen sind), erstellt, da es für mich irgendwie einfacher war...

Ich möchte mich auf jeden Fall schon mal im Vorraus bei alles für die hoffentlich zahlreichen Antworten bedanken und hoffe dass ich in geraumer Zeit vielleicht auch mal dem ein oder anderen hier im Forum weiterhelfen kann..

Mfg
Thorsten
 
Hallo Thorsten

Erstmal willkommen im Forum.
Deine Aussage <blutiger Anfänger> passt irgendwie nicht.
Die Aufgabe die Du beschreibst hat es ganz schön in sich, wenn das
sauber programmiert werden soll, aber naja, wenn Du sagst es funzt
alles, dann wird es schon stimmen.

Nun zu Deiner Frage:
Die S7-1200 ist meiner Meinung nach eine einzige Zumutung und
ich musste mich, Gott sei Dank, erst zwei mal mit dieser Krücke
herum ärgern. Deshalb kann ich Dir für die 1200er keine Lösung geben,
aber ich sag Dir mal wie ich das mit einer 300er machen würde.
Vielleicht kannst Du es ja auf die 1200er umsetzen.

Also ich würde schieben nach LINKS
Befehl ist SLW (Schiebe Links im Wort)
Wie der Name schon sagt geht das nur im Wort, nicht im Byte
Wenn der Rundtisch nun taktet muss dieser Befehl ausgeführt werden.
Das geht mit einem Sprungbefehl.

U "Takt fertig"
FP "Flankenbit"
SPBN m001 //Springe bedingt NICHT zur Sprungmarke m001
L "Datenwort Schieberegister"
SLW 1 //Schiebe alle Bit um eine Stelle nach Links
T "Datenwort Schieberegister"
m001: CLR //Hierher wird gesprungen, wenn die Flanke nicht aktiv ist.

Das Bitmuster in dem Wort sieht nun so aus:
Vor dem Schieben zum Beispiel
0000 0000 0000 0001
Nach dem Schieben
0000 0000 0000 0010

Jetzt musst Du noch folgendes beachten:
Das Wort ist folgendermaßen aufgebaut (als Beispiel Merkerwort 10) :

MW10
-----0000 0001----- 0000 1000
Bit 7..............0 .....7.............0
......Byte 10............. Byte11
In dem obigen Beispiel wären jetzt die Merker M 11.3 und M 10.0 <TRUE>
Durch den SLW Befehl "hüpfen" die Bits eine Stelle nach links
soll heißen M 11.4 und M 10.1 werden <TRUE>

Wenn Du ein Teil als NOK codieren willst, setzt Du M 11.0
vor dem Takt auf <TRUE> und fragst nach dem Takt den entsprechenden Merker ab.
2 Takte später M 11.2
3 Takte später M 11.3
je nachdem wie viele Takte eben zwischen codieren und auswerfen sind.

Wie gesagt: Ist für S7-300, aber lässt sich bestimmt auch auf die 1200er umschreiben

MfG
Paul

PS: Es tut gut endlich mal einen Neuling zu haben der auf verständlichen
Satzbau und Rechtschreibung achtet
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich arbeite mit einer S7-1214C und TIA-Portal V11.
Und da ich blutiger Anfänger bin, hab ich alles in, ich glaube FUP (das wo die Funktionen immer in so Kästechen sind), erstellt, da es für mich irgendwie einfacher war...
Ja, was anderes als FUP oder KOP kann doch die 1200er sowieso nicht.
@Paul, kannst du dem Thorsten die Befehle in FUP geben, bevor er hier noch komplett verblutet. ;)
 
@Paule
kannst du dem Thorsten die Befehle in FUP geben, bevor er hier noch komplett verblutet. :wink:

Nein, sorry
Das würde mit einer 300er schon ein paar Stunden dauern.
Ich kann zwar FUP relativ gut, aber Sprünge und Lade-/Transfer Geschichten habe ich schon immer in AWL gemacht.

Sollte nur ein Denkansatz für ihn sein und klären wie das Bitmmuster aufgebaut ist

MfG
Paul
 
Also erst mal vielen herzlichen Dank, für die schnelle und auch ausführliche Antwort :D
Ich werde mich gleich mal dran setzen und versuchen das ganze bei der 1200er hier umzusetzen.
@Paul, du hast mir wirklich schon mal ein großes Stück weitergeholfen, dankeschön :)
@Paule, danke für den Hinweis, das wäre zwar noch einfacher gewesen, aber ich denke ich komm auch damit erst mal weiter :)

Also danke nochmal euch beiden, ich werde dann berichten ob ich's hinbekommen habe.

Mfg
Thorsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Paule
kannst du dem Thorsten die Befehle in FUP geben, bevor er hier noch komplett verblutet. :wink:

Nein, sorry
Das würde mit einer 300er schon ein paar Stunden dauern.
Ich kann zwar FUP relativ gut, aber Sprünge und Lade-/Transfer Geschichten habe ich schon immer in AWL gemacht.
:ROFLMAO:
Der ist gut.

Bei dem Denkanstoß-Beispiel wird der Sprung doch nur in AWL programmiert.
Bei FUP/KOP bekommt man davon gar nichts mit (Bsp von der S7-300):

FUP



KOP



AWL
 
Also erst mal nochmal's Danke für eure Antworten, aber leider muss ich sagen, hab ich es irgendwie so nicht zum Laufen bekommen :-(
Ich habe den Schiebebefehl gestern ausgiebig getestet, mein Problem ist aber, dass wenn ich mit dem Schiebebefehl das Bit zum Beispiel ins MW100 schiebe, dann wird es komischerweise immer nur einmal geschoben.
Also als Beispiel, schieben um eine Stelle, dann wird der Merker 100.1 <True>, aber nach dem nächsten Takt bleibt das so, und nach meinem Verständnis sollte doch Takt für Takt der nächste Merker <True> werden. Oder hab ich da wieder was falsch verstanden? Wenn ich bei dem Befehl nach Links schieben aber z.B sage, um 3 Stellen schieben, dann wird eben der gleich M100.3 <True>. Aber das wars dann auch wieder.
Ich steh ehrlich gesagt grad voll auf dem Schlauch.
Ich hab das ganze jetzt momentan über Umwege anders gelöst, so funktioniert es auch, aber irgendwie gefällt es mir nicht, wenn ich immer im Hinterkopf hab, dass es eigentlich "Pfusch" ist...

Mfg
Thorsten
 
Für mich sieht das so aus, als ob dein Takt keinen Signalwechsel hat sondern TRUE bleibt.
Wenn es einmal schiebt, muss es auch mehrmals gehen.

MfG
Paul
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn ich mit dem Schiebebefehl das Bit zum Beispiel ins MW100 schiebe, ...
Nur mal zur Sicherheit:

Wenn Du im MW98 z.B. die 0000 0000 1000 0000 stehen hast und das nach rechts um den Wert 1 ins Wort MW100 schiebst, dann ist das Ergebnis immer 0000 0000 0100 0000! Ganz egal, wie oft Du das machst.

Schiebst Du aber das MW100 mit dem Anfangswert 0000 0000 1000 0000 nach rechts um den Wert 1 und schreibst das Ergebnis auch ins MW100 dann erhältst du im 1. Durchlauf 0000 0000 0100 0000, im 2. 0000 0000 0010 0000, im 3. 0000 0000 0001 0000, usw.

Es ist also in Deinem Fall wichtig, dass IN und OUT das gleiche DW sind.
Und natürlich die von Paul angesprochene Freigabe. Wenn Du mit der Flanke aus Pauls Beispiel arbeitest, muss der Merker für jedes Schieben erst von 0 auf 1 gehen.

Wie so oft - poste doch mal einen Auszug von Deinem Programm. Da kann man Dir sicher besser helfen.
Und es ist der einfachere Weg, solange unsere Kristallkugeln in der Wartung sind. ;)
 
Zuletzt bearbeitet:
Nur mal zur Sicherheit:
Wenn Du im MW98 z.B. die 0000 0000 1000 0000 stehen hast und das nach rechts um den Wert 1 ins Wort MW100 schiebst
OK diese Schiebegeschichten mache ich auch nicht jeden Tag, aber bist Du sicher, dass hier wortübergreifend von MW98 ins MW100 geschrieben wird??????
Ich glaube das nicht.
Da könnte ja ein Merker bis sonstwohin durchtakten, mit katastrophalen Auswirkungen im Rest vom Programm.

Und warum plötzlich Schiebe nach Rechts, die ganze Zeit war von Links die Rede??

mfg
Paul
 
Zuletzt bearbeitet:
OK, nicht verständlich genug ausgedrückt.

In AWL schiebt man im Accu. Wenn man den Schiebebefehl mehrfach aufruft, ohne einen neuen Wert zu laden, schiebt man die Bits jedes Mal weiter.

Das passiert unter FUP alles im Hintergrund. Am Baustein selbst hat man ein Eingangswort, das wie gesagt im Hintergrund in den Accu kommt, dann wird geschoben (meine Beispiele waren zufällig nach rechts, hab' gar nicht darauf geachtet, was Paul vorher genommen hatte) und das Ergebnis kommt ins Ausgangswort.
Ich geb' also unter FUP nur das EW an, das geschoben wird und dann das AW. Und wenn die verschieden sind und sich das EW selbst nicht ändert, kann ich den Befehl Schieben sooft aufrufen, wie ich will, das Ergebnis im AW wird immer das Selbe sein.

Ist ja von der Sache unter AWL auch so, wenn Du immer das gleiche Wort erst in den Accu lädst und dann erst schiebst, kommt auch immer das gleiche Ergebnis raus. Ich find' nur, das einem das bei AWL eher auffällt als unter FUP. Deswegen wollte ich nochmal darauf hinweisen.
Das mit MW98 und MW100 war von mir blöd gewählt, hätte mehr getrennte Wörter wählen sollen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, kapiere nicht was Du meinst:confused:

Eingangswort -- Ausgangswort ist doch was völlig anderes.

Wir reden hier von einem Merkerwort, (obwohl ein Wort in einem DB besser wäre, wegen Remanenz)

Für die CPU (und den Akku) spielt es doch gar keine Rolle ob der Code mit KOP - FUP - AWL erstellt wurde

Nochmal SORRY, aber ich verstehe hinten und vorne nicht was Du eigentlich ausdrücken willst


Nochmal um sicher zu gehen:

Wir schreiben hier nicht von einem Wort ins andere, sondern bleiben im selben Wort

z. Bsp.
L MW 10
L 1
+I
T MW 10


oder in unserem Fall

L MW 10
SLW 1
T MW 10
 
Zuletzt bearbeitet:
Der FUP-Baustein Schieben hat auch ein Ein- und ein Ausgangswort. Hat nichts mit den Ein- und Ausgängen der Hardware zu tun. Vlt werden die beim Baustein auch richtigerweise etwas anders bezeichnet, ist mir aber nicht (mehr?) bekannt.
Und das Wort am Ausgang muss ja nicht das Gleiche sein, wie am Eingang.

Vlt nehm ich einfach mal Dein Bsp.:
Code:
[FONT=courier new][COLOR=#333333]U "Takt fertig"[/COLOR]
[COLOR=#333333]FP "Flankenbit"[/COLOR]
[COLOR=#333333]SPBN m001 //Springe bedingt NICHT zur Sprungmarke m001[/COLOR]
[COLOR=#333333]L "Datenwort Schieberegister"[/COLOR]
[COLOR=#333333]SLW 1 //Schiebe alle Bit um eine Stelle nach Links[/COLOR]
[COLOR=#333333]T "Datenwort Schieberegister"[/COLOR]
[/FONT][COLOR=#333333][FONT=courier new]m001: CLR //Hierher wird gesprungen, wenn die Flanke nicht aktiv ist.[/FONT][/COLOR]
So wie Du's als Bsp angegeben hast, werden bei jeder positiven Flanke die Bits weiter geschoben (wie gewollt).

Wenn man aber Ein- und Ausgang unterschiedlich angibt:
Code:
[FONT=courier new][COLOR=#333333]U "Takt fertig"[/COLOR]
[COLOR=#333333]FP "Flankenbit"[/COLOR]
[COLOR=#333333]SPBN m001 //Springe bedingt NICHT zur Sprungmarke m001[/COLOR]
[COLOR=#333333]L "Datenwort Schieberegister Ein"[/COLOR]
[COLOR=#333333]SLW 1 //Schiebe alle Bit um eine Stelle nach Links[/COLOR]
[COLOR=#333333]T "Datenwort Schieberegister Aus"[/COLOR]
[/FONT][COLOR=#333333][FONT=courier new]m001: CLR //Hierher wird gesprungen, wenn die Flanke nicht aktiv ist.[/FONT][/COLOR]
kommt bei jeder positiven Flanke trotzdem nur jedesmal das 1.Schiebeergebnis raus (weil bzw. solange sich das Datenwort Schieberegister Ein nicht ändert). M.M.n übersieht man unter FUP die Ursache dafür schnell.

Für jemanden wie Dich wird das alles selbstverständlich sein, aber für jemanden, der noch nicht groß damit gearbeitet hat?
 
Zuletzt bearbeitet:
...
Nochmal um sicher zu gehen:

Wir schreiben hier nicht von einem Wort ins andere, sondern bleiben im selben Wort

z. Bsp.
L MW 10
L 1
+I
T MW 10


oder in unserem Fall

L MW 10
SLW 1
T MW 10
Ja, Du hast ihm das so vorgegeben, aber hat er das auch so gemacht?
Er hat ja nur geschrieben, das er viel rumprobiert hat. Und er muss alles in FUP machen, weil ihm AWL nicht zur Verfügung steht.

Dein Tip mit dem Takt kam ja auch als Erstes, da denke ich, daß er dem auch als Erstes nachgehen wird.
Ich kann mich aber auch noch an meine ersten Versuche erinnern und da lag's leider manchmal auch an solchen Sachen, wie unterschiedlicher Ein-/Ausgang am Baustein. Ich wollte damit aber nicht verwirren. Wenn dem dennoch so ist, sorry.
 
Zurück
Oben