Schieberegister in FB

Rici

Level-2
Beiträge
128
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Freunde,
ich bin wieder mal auf ein Problem in der Simatic Step 7 gestoßen.
Ich habe schohn mal Schieberegister verwendet nur habe ich dort mit Merker gearbeitet.
Jetzt möchte ich ein Schieberegister im Funktionsbaustein erstellen.

Das Problem: ich finde keinen Datentyp mit dem ich arbeiten kann, benutze ich einen Word/Int so kann ich nicht auf die einzelnen bits zugreifen, und einen Struct wo ich auf die einzelnen bits zugreifen kann so nimmt das Schieberegister dises Format nicht an.
Ich möchte auch nicht mit DB…DBX… Arbeiten da dieser FB in der Zukunft eventuell mehrmals verwendet wird.

Gruß
Rici
 
Hallo,
du must dann mit einem Pointer arbeiten und deine Deklaration als WORD (z.B.) laden.
Im Einzelnen :
- Du deklarierst dir dein Schieberegister als Array[1..16] of Bool (weil das deine Haupt-Verwendung von dem Ding ist).
- Du bildest dir auf deine Schieberegister-Deklaration einen Pointer - falls dein FB irgendwann einmal Multi-Instanz-fähig sein soll dann darauf noch den Wert des AR2-Registers drauf-addieren
- Das WORD an Pointer-Poistion laden, schieben und zurückschreiben.

Kannst du mit der Beschreibung etwas anfangen ?

Gruß
Larry
 
Hast du wirklich "<Bool>" geschrieben ?
Wenn ja, dann änder das mal in "Bool" ohne die "<" und ">" ...
 
Alternative wäre das Du doche einen DB nimmst und die Adresse als Parameter an deinen FB übergibst.
Dann arbeitest mit diesen Daten dann.

Finde das hat den Vorteil, mann kan Kommentare usw. für den DB anlegen und wenn man mal im Status das S-Reg betrachten will, hat man nur diese Daten vor sich ... Die Daten sind dann halt nicht im Instanz DB des FB enthalten und werden ggf. bei Änderung des FB's überschrieben ...
 
versuchs mal so
Code:
      LAR1  P##schieberegister
      L     W [AR1,P#0.0]
      SRW   1
      T     W [AR1,P#0.0]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich dachte dieser Aray wird benötigt um dort das Schieberegister laufen zu lassen, aber der Baustein akzeptiert das Aray Format nicht.
Und ich sehe keine möglichkeit auf die einzelnen bits des Arays zuzugreifen.

Habe ich die Funktion nicht verstanden?

Gruß
Rici
 
Nein ... du willst auf die Bits einzeln zugreifen können (in deinem Baustein). Dafür mußt du dir das Pendant zu einem Merkerwort erschaffen. Das wäre dann z.B. das Array of Bool.
Der Schiebebefehl kann aber damit nichts anfangen. Dem mußt du das Array (wie in dem Beispiel von Volker) dann als Word verkaufen damit er arbeiten kann ...

Gruß
Larry
 
genau. das array kannst du nicht direkt laden. daher wird das über den pointer und das ar gemacht
willst du auf die bit intern zugreifen siehe bild.
kannst anstatt eines arry auch eine struct anlegen (register2)


edit
hups. alsches bild
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    7,3 KB · Aufrufe: 39
Zuletzt bearbeitet:
Danke noch mal für die Hilfe, leider mußte ich meine programmierung unterbrechen, ich habe das erste mal mit Pointer gearbeitet und es funktioniert ganz gut. Nur kann ich mein geliebtes FUP nicht mehr einsetzen, ich finde keinen Weg in FUP mit Pointer zu arbeiten. Na ja muß ich wohl wieder mal auf AWL umschalten.

Nur so als Info: mit dem Eintrag in den Forum habe ich parallel bei der Siemens Hotline angerufen. Die Antwort im Forum kamm schneller, und die Hotlein sagte zu mir, dass das was ich vorhabe nicht geht, nur mit globalen Variablen.
 
Zurück
Oben