TIA Bit Schieberegister (über großen Bereich) mit 1500er

Zuviel Werbung?
-> Hier kostenlos registrieren
Genau möchte entwerder 0 oder 1 schieben
also wenn ich 1-10 Weiter drehe 0 oder 1
Also variabel 0 oder 1 vorbelgen dann sschiebe x 1-10
Und will nichts löschen
Versuche es nochmal kurz zu erklären

habe ein band mit 300 Aufnahmen das ich nach bedingungen takte mal 1 mal 5 mal 10 zb
Mal belade ich mal nicht
Gruß Micha
Und möchte wisen wo teile sind wo nicht
Also Gut.
Du willst einen Ringpuffer mit x Plätzen.
Ich gehe jetzt mal davon aus, dass nach jedem Takt ein Triggersignal kommt.
Unabhängig davon ob dort eine Teil liegt oder nicht. Ist das so?
 
mal aus dem bauch raus. nicht getestet.
das ganze funktioniert auch mit einer größeren datenmenge. also abhängig davon wie du den plc-datentypen definierst
 

Anhänge

  • Zwischenablage04.jpg
    Zwischenablage04.jpg
    177,4 KB · Aufrufe: 32
Zuviel Werbung?
-> Hier kostenlos registrieren
Darf ich mal fragen was ich grad nicht ganz auf die Reihe kriege:

Willst Du Bit 249 nach 255 verfrachten oder einen Bereich? Bleiben also die nebenstehenden Bits unberührt oder schieben sich so wie ich es grad verstehe bei den Lösungen ALLE Bits um X Stellen weiter? Hab ich was übersehen?
 
Alle Bits um x Stellen weiter. Und die x Bits die am Ende rausfallen vorne wieder rein. Weil es ist quasi ein Drehtisch, wo die letzte Position neben der ersten Position ist.
Ja genau ich brauche ein Ringpuffer, da die Teile auch im Kreis fahren können
Und nur bei Entnahme abgelöschte werden also was hinten raus fällt muss vorne wieder Rein
Da ich das auch visualisieren wollte wäre direkte Adressierung besser

Harald
 
Servus,
Das ist doch eigentlich ziemlich easy.

Code:
For i := 1 to Anzahl_Schritte do
     For j := 301 to 2 by -1 do
           Schiebedaten[j] := Schiebedaten[j-1]
     end_for;
     Schiebedaten[1] := Schiebedaten[301]
end_for;

Mit Sicherheit nicht die effizienteste Lösung aber die einfachste..
Anzahl_schritte ist dann die 1 5 oder 10 oder wie viele schritte auch immer gesprungen werden sollen.


Alternativ könnte man sowas probieren
Code:
For i := 300+Anzahl_schritte to 1+Anzahl_Schritte by -1 do
           Schiebedaten[i] := Schiebedaten[i-Anzahl_Schritte]
end_for;

For i := 1 to anzahl_schritte do
     Schiebedaten[i] := Schiebedaten[i+300]
end_for;
Das wäre dann Zyluszeiteffizienter

Grüße Balu
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Man sollte im allgemeinen Lösungen vermeiden, wo zum Verschieben um 10 Positionen der Code 10 mal aufgerufen werden muß, wo also die gesamten 300 Bits 10 mal um je 1 Position verschoben werden...
Man muß selbstverständlich auch aufpassen daß man nicht Array-Elemente adressiert die es gar nicht gibt, z.B. Bit[310]

Harald
 
Man sollte im allgemeinen Lösungen vermeiden, wo zum Verschieben um 10 Positionen der Code 10 mal aufgerufen werden muß, wo also die gesamten 300 Bits 10 mal um je 1 Position verschoben werden...
Man muß selbstverständlich auch aufpassen daß man nicht Array-Elemente adressiert die es gar nicht gibt, z.B. Bit[310]

Harald
Daher der 2. Vorschlag. und ja natürlich muss man das Array dementsprechend groß machen aber das hab ich jetzt mal als selbstverständlich angesehen.

Balu
 
Zurück
Oben