Schieberegister bei Bosch Indraworx

Jerome67

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo verehrte Gemeinde :p

ich hänge grad ein wenig :confused:

Vielleicht kann mich ja jemand von euch abhängen :p

Folgendes Problem.

Programmiersoftware: Indraworx von Bosch (CoDeSys basiert)

Ich brauche für eine Maschinensteuerung ein Schieberegister.
Ich habe bei CoDeSys bisher noch nie ein solches gebraucht.
Bin jetzt auf der Suche nach dem passenden FUB. Gibt es so was überhaupt fertig bei CoDeSys. ?

Und wenn nein. Wie stelle ich so was am besten auf die Beine ?
Ich arbeite zwar schon ne geraume Zeit mit SPS bin aber noch nie in die Verlegenheit gekommen selbst ein Schieberegister programmieren zu müssen.

Bin für alle Anregungen dankbar.

Mit bestem Dank im voraus
 
Tja es wird leider doch ein bisschen aufwendiger.

Nach genauer Analyse der Maschinenfunktionen ergibt sich das ich 17 Abfragepositionen auf eine Länge von 1500-2000 schieben muss.

Ein Array hierfür habe ich schon angelegt.

Ist wahrscheinlich ganz einfach aber im Moment komme ich einfach nicht drauf. Hirnblockade:p

Wie schiebe ich den ganzen Kram denn nun Taktweise durch das ganze array ?

Auch wenn die Frage wahrscheinlich doof ist und ich mir hiterher vor den Kopf schlage, wäre nett wenn jemand ne Anregung für mich hätte.

Mit bestem Dank im voraus.
 
Hier mal ein Beispiel:
Code:
VAR
   SReg:ARRAY[0..49] OF DWORD;   (* 50*32=1600 Bits *)
   Loop:INT;                                (* Schleifenzähler *)
END_VAR
 
FOR Loop:=49 TO 1 BY -1 DO
   SReg[Loop]:=SReg[Loop]+SReg[Loop];   (* SReg[Loop] um 1 nach links schieben *)
   SReg[Loop].0:=SReg[Loop-1].31;   (*Bit 31 von SReg[Loop-1] in Bit 0 von SReg[Loop] kopieren *)
END_FOR;
SReg[0]:=SReg[0]+SReg[0];   (* SReg[0] um 1 nach links schieben *)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Trash,

danke dir erstmal für deine Antwort.

Insofern hatte ich es auch schon verstanden.

Mein Problem ist das ich 17 Spuren des Schieberegisters um bis zu 2000 Positionen nach rechts verschieben muss. Das bekomme ich halt nicht abgeleitet.

Die 17 Spuren sind BOOL und werden an verschiedenen Stellen der Maschine abgefragt und müssen von dort bis zur Fehlweiche weitergeschoben werden.

Array ist wie folgt definiert :
<Array> : ARRAY [1..17, 0..1999] OF <UDT_***>;

Ich sage ja vielleicht ist es echt nur das Brett vorm Kopf bei mir aber ich komm nicht drauf wie ich alle 17 Spuren gleichzeitig verschiebe.
 
Hallo Trash,

entschuldige die verspätete Rückmeldung. Ich hab leider ne Weile gesundheitsbedingt flachgelegen.

Ich habe mir deinen letzten Verweis mal angesehen. Scheint mir passend zu sein probiere ich gleich mal aus :)

Eine Frage noch. Ich muss am Ende des Schieberegisters die Daten an 2 weitere Schieberegister übergeben. Geht das mit diesem Ringpuffer. Weil die Daten die hinten übergeben werden sollen vorne nicht wieder auftauchen sondern es kommen ja von vorne laufend neue Daten. Ich kann mir das fertige Programm inzwischen immerhin schon zu 90 % vorstellen :) Wenn nur nicht die verflixten 10% wären :)
Ich hoffe ich habe mich verständlich genug ausgedrückt, beschreiben ist nicht unbedingt meine Stärke :-(

Mit besten Grüßen aus BW
Jerome
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Arrayindex für Position 1999 berechnen, die Daten aus dem berechneten Arrayfeld auslesen und woanders wieder reinschreiben. Würde man bei einem richtigen Schieberegister doch auch so machen (mit Ausnahme der Indexberechnung, die dabei entfällt).
 
Zurück
Oben