Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Schieberegister Positionsbestimmung

  1. #1
    Registriert seit
    11.08.2011
    Beiträge
    22
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen

    Ich habe ein Förderband von 10 Meter Länge mit einem Sensor am Eingang. Auf diesem Förderband werden Dinge transportiert,
    und ich muss zu jedem Zeitpunkt wissen, wo auf dem Band etwas ist.
    Ich dachte, ich teile dem Band 100 Bits aus einem Array zu, also pro 10cm 1 Bit.
    Wird der Sensor aktiviert, setze ich das erste Bit.
    Bei einer Bandgeschwindigkeit von 10cm/s schiebe ich pro Sekunde das Schieberegister einmal hoch,
    und so sehe ich dann zB nach 37 Sekunden, dass das Bit Nr. 37 "True" ist, sich also bei 3.70m etwas befindet.

    Leider weiss ich nicht, wie ich das mit der indirekten Adressierung realisieren kann.
    Ich arbeite mit AWL, S7.

    Ich muss das zweithöchste Bit des Arrays in einen Pointer stecken, dieses prüfen, dann je nach Status das nächste Bit setzen/rücksetzen.
    Danach muss ich den Bit-Pointer um eins verringern und es geht von vorne los. Bin ich bei Bit 1 angekommen, resette ich dieses und verlasse den Loop.


    Pointererstellung stelle ich mir so vor:
    l p#5080.2 // Bit nr99
    lar 1

    Das Prüfen so:
    U DBX [AR1,P#0.0]

    Mir ist jetzt allerdings unklar, wie ich

    - den Pointer um 1 reduziere
    - den Offset verändere, dass ich das nächsthöhere Bit setzen kann, ohne den Pointer zu ändern.

    Ich hoffe, jemand kann mir helfen und vielen Dank

    MfG
    Florin


    -------
    Nachtrag:
    Wie ich den Offset verändere, ist mir eigentlich klar, zb: U DBX [AR1,P#0.1]
    Geändert von Florin (04.04.2013 um 15:07 Uhr)
    Heureka!
    Zitieren Zitieren Schieberegister Positionsbestimmung  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Sie dir das hier mal an: SLD/SRD für 64 Bit? Da gibt es eine Lösungen für das Schieben von Bits über 64 Bit. Das kann man noch erweitern, irgendwo im Forum gibt es noch mehr davon.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    27.11.2012
    Beiträge
    22
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Braucht man hier LAR überhaupt? Ich bin da auch nicht so fit. Vielleicht ist es mit LAR leichter aber ich würde es so versuchen:

    L P#5080.2
    T #Position

    und dann mit
    AUF DB100
    U DBX[#Position]
    die Positionen abfragen. Damit müsste es eigentlich ganz einfach sein, wenn ich nicht etwas wichtiges übersehe.

    Den Pointer reduzierst oder erhöhst du dann einfach mit:
    L #Position
    L 1
    +D oder -D
    T #Position
    oder
    T #Offset

    Edit: Ich habe Ralles Lösungsvorschlag jetzt erst verstanden. Das wäre auf jedenfall besser (Zykluszeit) und eleganter, wenn du das mit SLD oder SRD hinbekommst!
    Geändert von Marius86 (04.04.2013 um 16:24 Uhr)

  4. #4
    Avatar von Florin
    Florin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.08.2011
    Beiträge
    22
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke euch Beiden

    Nach dem, was Marius gepostet hat, habe ich gesucht.
    Allerdings stimmts, wenn ich das ganze Array schiebe ist das simpler!
    Werde mir das mal genau anschauen..

    Nochmals Danke,
    Liebe Grüsse
    Heureka!

  5. #5
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.335
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    ungenau wird es mit beiden Methoden von selbst.
    Wenn dann würde ich wenigsten irgendwie mittels einem Positionsschalter versuchen eine definierte Position zu finden wenn ein Teil aufgelegt wird oder wenn das Antriebsrad eine Umdrehung gemacht hat.

  6. #6
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Wozu ist das Schieben gut? Warum nicht einfach einen Zähler hochzählen? Falls du alle 100 Bits auswerten willst, hat das Schieberegister wohl einen Sinn. Falls du aber einfach nur bei position 57 etwas besonderes hast und wissen willst, ob dein Fördergut dort angekommen ist, prüfst du einfach ob Zähler=57.
    Generell gilt: (Bit n im Schieberegister gesetzt) ist identisch mit (Zähler=n).
    Wenn du nun mehrere Dinge (Marken, Ereignisse,...) zugleich schieben möchtest(mußt): Ein Schieberegister kann zwei oder mehr Einsen schieben, sofern sie nicht auf derselben Position sind. Bei Zählern einfach mehrere Zähler (einen pro durchlaufende Sache) verwenden. Hat den Vorteil, dass man auch noch eindeutig jede ihrem Zähler zuordnen kann...

  7. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Aber im Extremfall bräuchte er 100 Zähler.
    Da er nur wissen muss, ob an einer Position was ist oder nicht, und nicht was da ist, ist das mit dem Bit-Schieben von Ralle m.M.n. am Besten geeignet.

    Ich würde aber Boxys Hinweis umsetzen und nicht versuchen die Geschwindigkeiten zw. Band und Schieberegister zu synchronisieren. Besser ist sicher z.B. an der Umlenkrolle zu erfassen, wann sich das Band wirklich um 10cm bewegt hat, um dann über einen realen Impuls weiter zu schieben.

  8. #8
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Ich nutze ja sowas immer zum Lernen. Deshalb hätte ich da mal 'ne Frage:

    Dieses Schieberegister (128 Bit) würde ich unter KOP so aufbauen:



    und würde das Ganze dann (mittlerweile) folgenderweise in AWL umsetzen:
    Code:
          U     #Schieben
          FP    #FM[0]
          SPBN  Ende
    
    Pos0: L     #Position_A[0]
          SLD   1
          T     #Position_A[0]
    
    Pos1: L     #Position_A[1]
          RLDA  
          T     #Position_A[1]
    
    Pos2: L     #Position_A[2]
          RLDA  
          T     #Position_A[2]
    
    Pos3: L     #Position_A[3]
          RLDA  
          T     #Position_A[3]
    
    Neu:  U     #Sensor
          SPBN  Ende
          L     #Position_A[0]
          OD    DW#16#1
          T     #Position_A[0]
    
    Ende: NOP   0
    Der Ablauf von Pos0 bis Pos3 ist ja im Grunde immer der Gleiche bis auf den Index des Positions-DW. Kann man das unter AWL als Schleife anlegen, sprich den Index als Variable (außer über AR-Pointer) und wenn ja, wie ist dann der korrekte Syntax? In SCL geht das ja relativ einfach, aber für AWL hab' ich dazu leider nichts in der Hilfe gefunden.
    Geändert von hucki (06.04.2013 um 22:34 Uhr) Grund: Vereinfachung für meinen AWL-Code in Ralles verlinktem Thread gefunden

  9. #9
    Avatar von Florin
    Florin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.08.2011
    Beiträge
    22
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen
    Danke nochmals für eure Antworten.
    Das mit dem Inkrementalgeber am Antrieb ist eine gute Idee, vielen Dank.

    Freundliche Grüsse
    Heureka!

Ähnliche Themen

  1. SIEMENS LOGO! positionsbestimmung ???
    Von ygoerken im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 09.02.2011, 18:48
  2. Positionsbestimmung
    Von sps_mitte im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 06.01.2011, 20:43
  3. Positionsbestimmung von Glassscheiben
    Von arcis im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 31.05.2006, 04:36
  4. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 30.01.2006, 08:47
  5. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.01.2006, 21:54

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •