Schieberegister verfeinern

incude

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

ich hätte ein Anliegen zum Thema Schieberegister und hoffe mir kann jemand hier eventuell einen kleinen Tipp geben.

Zur Problemstellung: Es geht um ein Förderband auf welchem Werkstücke durch eine Maschine befördert werden. Hier wird ein Schieberegister (32 Bit, SLD) verwendet um eine Möglichkeit zu haben, zu prüfen ob an Position X gerade ein Werkstück vorhanden ist oder nicht. In dem Fall ist an dem entsprechenden Bit für die entsprechende Position im Schieberegister eine 1 vorhanden.

Damit eine 1 (Werkstück vorhanden) in das Schieberegister geschoben wird, muss das Signal einer Lichtschranke am Einlauf der Maschine vorhanden sein und dort das Werkstück erkennen. Über den Maschinentakt wird mit jeder positiven Flanke die 1 um ein Bit verschoben. Das Ganze über insgesamt vier Merker-Doppelworte.

Nun zu dem Problem: Eine neue Erkennung soll installiert werden. Die derzeitige Auflösung des Schieberegisters ist für diese Erkennung zu ungenau.

Das heisst, an der Stelle wo die Erkennung in der Maschine positioniert ist, benötige ich zur Programmierung dieser optimalerweise ca. 10 einzelne Bits.
Durch mein vorhandenes Schieberegister habe ich allerdings nur ein Bit zur Verfügung.

Ich suche nun eine Möglichkeit, wie ich zwischen beispielsweise im Bereich von 5 aufeinanderfolgenden Bits in meinem bestehenden, schlecht aufgelösten Schieberegister ein zweites, feiner ausgelöstes Schieberegister für meine Erkennung erstellen könnte.

Ich bräuchte hier einen Ansatz, wie ich das ganze verfeinern könnte z.B. um den Faktor 10. An dem vorhandenen Schieberegister soll jedoch nach Möglichkeit nichts geändert werden.

Ein neues Schieberegister zu erstellen welches einfach einen größeren Bereich umfasst, also anstatt der 4 MDW dann das 10 fache würde ja nicht ausreichen, da der Maschinentakt von seiner Geschwindigkeit gleich bleiben würde. Also wäre mein Ansatz, wie bekomme ich den vorhandenen Maschinentakt (0_1_0_1_0_1 ...) in der Steuerung von der Geschwindigkeit her verzehnfacht.

Vielleicht liege ich auch falsch und jemand könnte mir einmal schreiben, wie man sowas eleganter löst.

Vielen Dank :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
für mich war das Ganze etwas widersprüchlich.
Was willst du nun haben :
- ein "Schieberegister" das Worte statt Bits verschiebt und du somit für jetzige Bit-Position Werte verabeiten kannst ?
- ein "Schiebe-Register" das eine höhere Auflösung hat, also statt z.B. cm in Zukunft auf mm auflößt ?

Das wäre 2 grundverschiedene Ansätze.
Würdest du in SCL programmieren wollen / können ?

Gruß
Larry
 
Ja, ich würde auch blasterbocks Vorschlag empfehlen. Den Maschinentakt willst/musst du wohl beibehalten. Also nimmst statt eines Bits ein Word oder Doppelword und schiebst dieses. In das Word kannst du dann deine "verfeinerten" Informationen ablegen. Was du da hineinschreibst, ist ja komplett dir überlassen.
 
Ähnliches Problem

Hallo ,
habe momentan ein ähnliches Problem. An eine Anlage ist eine Förderkette, welche Gehänge durch diese Anlage transportiert. Diese Gehänge sollen jetzt mit verschiedene fertigungsdaten bearbeitet werden.( sechs Zeiten und eine vorgabe zwischen 0 und 100% )
Mein Ansatz ist jetzt folgender: In einen DB lege ich die felder mit den Programmen ab.
In ein zweiter DB wird den fertigungsauftrag hinten angeschoben,und wird vorne gelöscht wenn ein Gehänge durch die Anlage Transportiert wurde.
Ich will keine Rezeptur machen weil meine Daten dann nur im OP liegen und nicht in der SPS, datensicherung der S7 würde dann nicht automatisch meine Rezepte sichern.
Da ich aber ein alter S5 Hase bin und bei S7 mir alles selbst beibringen musste folgende Frage:
kann ich wie bei S5 in S7 ein ähnliches Befehl wie < A DB0 und dann B MW5> verwenden, also eine INDIZIERTE BEARBEITUNG ????
Wenn ja, wo finde ich bei S7 detaillierte info´s dazu, sonst kackt mir die Kiste ab, und das will ich nicht riskieren!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kann ich wie bei S5 in S7 ein ähnliches Befehl wie < A DB0 und dann B MW5> verwenden, also eine INDIZIERTE BEARBEITUNG ????
Wenn ja, wo finde ich bei S7 detaillierte info´s dazu
Hallo,
lies mal in der Step7-Hilfe zu AWL unter "indirekte Adressierung".
Die "speicherindirekte Adressierung" funktioniert wie der S5-Befehl "B MWx" und kommt indizierter Bearbeitung schon sehr nahe.
Wenn Du SCL hast, dann kannst Du mit SCL leicht auch höhere Datentypen echt indiziert verarbeiten.

Mit der "registerindirekten Adressierung" mit Hilfe von 2 Adressregistern wird man noch flexibler, allerdings muß man beachten, daß die Pointer in den Adressregistern Bit-Adressen sind und keine Indexe. Für die korrekte Adressberechnung zur Adressierung von Elementen muß man selber sorgen.

Harald
 
Danke für den Tipp, PN-DP,

ich bin leider wie gesagt ein ( alter) S5 Hase, und muss mir von S7 alles an programmiertricks aus vorhandene Programme abgucken.Da gibt es welche die über den Mond nach Rom gehen, und es dann noch für eine gute Lösung halten. Mir liegt das meiste daran das ein Programm auch für anderen lesbar ist ohne erst mal zwei Tage über das Programm zu hängen.
Und leider beherrschen nicht alle SCL, ich auch (noch ?)nicht.
werde es mir garantiert aber mal ganz genau angucken weil es viele Potentialen hat.

Wenn ich 32 Bit intus habe, kann ich auch ALLES!!!
 
Hallo zusammen,

Hallo ,
Da ich aber ein alter S5 Hase bin und bei S7 mir alles selbst beibringen musste folgende Frage:
kann ich wie bei S5 in S7 ein ähnliches Befehl wie < A DB0 und dann B MW5> verwenden, also eine INDIZIERTE BEARBEITUNG ????
Wenn ja, wo finde ich bei S7 detaillierte info´s dazu, sonst kackt mir die Kiste ab, und das will ich nicht riskieren!!!

Hallo,
lies mal in der Step7-Hilfe zu AWL unter "indirekte Adressierung".
Die "speicherindirekte Adressierung" funktioniert wie der S5-Befehl "B MWx" und kommt indizierter Bearbeitung schon sehr nahe.
Harald

... zustimm ... [accepted]

Hier noch ein Beitrag, wie die S5- und S7-Operationen unterscheiden:

http://support.automation.siemens.c...extranet=standard&viewreg=WW&load=treecontent

Viel Erfolg !

Gruss an beide...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ahhhhhhh, jetzt hab ich verstanden was Ihr meint.

Mit jedem Maschinentakt also nicht immer nur um ein Bit, sondern um ein ganzes Wort verschieben und somit für jede Position letztlich 8 Bits zur Verfügung zu haben.

So ähnlich wird das bei einer unserer Maschinen in S5 gemacht. Der Ansatz ist gut, vielleicht hat ja noch jemand ein Programmbeispiel für mich.

Aber ich setz mich mal dran und versuch ne Lösung zu finden ...
 
In der einfachsten Form wird es wohl so aussehen.
Code:
      U     M      5.0
      FP    M      5.1
      SPBN  m001
      L     MW   108
      T     MW   110
      L     MW   106
      T     MW   108
      L     MW   104
      T     MW   106
      L     MW   102
      T     MW   104
      L     MW   100
      T     MW   102
m001: NOP   0

Wobei der M5.0 Dein Schiebezeitpunkt ist und das MW 100 die aktuellen Daten enthält.
Die anderen MW enthalten jeweils den geschobenen Stand deiner Daten.

Wichtig ist der FP M 5.1, weil der sicherstellt, dass pro Ereignis am M5.0 die Daten nur exakt einmal geschoben werden.

Das kann man natürlich auch mit DBW'S machen.

Es geht auch ganz elegant, wenn man sich ein Schieberegister mit Schreib- und Lesezeigern aufbaut. Ist aber dann schwieriger zu verstehen.
 
Zurück
Oben