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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 40

Thema: Schieberegister in SCL?

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kannst du mal ein Bild von deiner Maschine/Anlage posten ?
    Das macht das "Vorschläge machen" leichter ...

    Aber generell - wenn es das ist, was ich annehme, dass du es hast, dann solltest du über meinen Vorschlag noch einmal intensiv nachdenken ...

  2. #12
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Mometan geht das leider noch nicht Larry, da es die Maschine noch nicht gibt... es sind erst einmal alles Vorüberlegungen. Deine Lösung wäre wohl die Profilösung... aber mal zum anfangen

    vielleicht so?

    Code:
    Ergebnis:=
    SHL(
    IN := TAKT
    N := 1);
    und dann in Station 3 die Abfrage, ob das Bit an Stelle 13 ist...

    Das könnte sich dann ja noch durchaus weiter entwickeln.
    Geändert von spirit (08.08.2013 um 13:52 Uhr)
    LG
    spirit

  3. #13
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Prinzipiell kann man das mit einem "einfachen" Schieberegister so machen. Sowohl Rundtaktmaschinen als auch linear angeordnete Anlagen mit Königswelle habe ich schon betreut, bei denen das dann so gelöst war.

    Grundsätzlich ist der von Larry beschriebene Weg mit den Möglichkeiten von SCL aber "eleganter".

    Ich würde ein UDT mit den entsprechenden Bits, ggf. Anwesenheitskontrollen oder Prüfergebnissen anlegen. Dieses UDT dann als ARRAY[1..14] deklarieren. (Ich mag die 0 nicht...)
    Beim Takten müsste dann das UDT in dem Array "durchgeschoben" werden.

    Ich frag mich übrigens gerade ob ich das vorgeben soll...
    Ich glaube nämlich Du brauchst etwas Übung
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  4. #14
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen

    Ich würde ein UDT mit den entsprechenden Bits, ggf. Anwesenheitskontrollen oder Prüfergebnissen anlegen. Dieses UDT dann als ARRAY[1..14] deklarieren. (Ich mag die 0 nicht...)
    Beim Takten müsste dann das UDT in dem Array "durchgeschoben" werden.

    Ich frag mich übrigens gerade ob ich das vorgeben soll...
    Ich glaube nämlich Du brauchst etwas Übung
    Also zweifelsfrei gebe ich dir recht, dass ich Übung brauche...

    Ein bisschen Probleme habe ich noch, deinen Ansatz zu verstehen... aber er würde mich schon sehr interessieren! Würde ihn sehr gerne nochmals aufgreifen...

    Ich bin jetzt mit meiner SCL-Lösung mittlerweile soweit gekommen:

    Code:
    TAKT := E0.0 AND NOT FM;
    FM := E0.0;
    
    IF TAKT THEN
      SchiebeRegister := SHL(IN := SchiebeRegister, N := 1);
    END_IF;
    
    IF SchiebeRegister = 8192 THEN
      A0.1 := 1;
    END_IF;
    Das Problem jetzt noch, dass sich hier NICHTS schiebt...

    Finde den begrabenen Hund nur grade nicht...
    LG
    spirit

  5. #15
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Hast Du denn Dein Schieberegister irgendwo initialisiert, sprich das erste Bit gesetzt?

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Mit jedem Takt wird eine neue "1" in das Register geschoben - es kann also niemals 8192 werden sondern höchstens
    Code:
    IF (SchiebeRegister AND 8192) = 8192 THEN
    oder ...
    Code:
    IF (SchiebeRegister AND 8192) <> 0 THEN
    ... der geschaltete Ausgang würde dann aber ab irgendwann immer an sein ... weil eben nur "1"-en reingeschoben werden.

    Welchen Typ's ist übrigens "SchiebeRegister" ?

    Gruß
    Larry

  7. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Übrigens :
    Das von mir beschriebene Ding ist ein Array_of_Byte in der einfachsten Form - selber nutze ich ein Array_of_Struct (UDT's mache ich nur, wenn ich das mehrfach in Deklarationen brauche) und es funktioniert fast schon so, wie dein erster Ansatz ... - nur eben mit einem Array - und es bildet einen Ringspeicher, wie dein Tisch auch.

    Wieviele Plätze hat denn der Tisch nun wirklich ? 13 kann ich mir nicht so recht vorstellen ...

    Gruß
    Larry

  8. #18
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von hucki Beitrag anzeigen
    Hast Du denn Dein Schieberegister irgendwo initialisiert, sprich das erste Bit gesetzt?
    Nein, das habe ich natürlich auch vergessen...

    Aber hier funktioniert irgendwie NICHTS!

    "SchiebeRegister" ist ein WORD (MW200). Nun wollte ich das erste Bit (Bit0) setzen:

    Code:
    IF E0.1 THEN
      M201.0 := 1;
    END_IF;
    Dadurch sollte doch M201.0 auf 1 gesetzt werden; klappt aber nicht!


    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Mit jedem Takt wird eine neue "1" in das Register geschoben - es kann also niemals 8192 werden.
    Gruß
    Larry
    Aber warum das denn? Die Schiebefunktion in FUP (SHL) schiebt doch ein Bit immer nur um eine Stelle nach links ohne ein neues aufzufüllen. Das kann doch in SCL nicht plötzlich anders sein...

    Gewünscht ist, dass mit jedem TAKT das Bit um eine Stelle nach links geschoben wird - und das macht doch die Schiebefunktion oder raffe ich hier jetzt gar nichts mehr
    LG
    spirit

  9. #19
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Initialisierung:

    if (MW200 > w#16#2000) or (MW200==0) then
    MW200:=1;
    END_IF;
    Geändert von wolfi_by (08.08.2013 um 16:39 Uhr)

  10. #20
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Nein, das habe ich natürlich auch vergessen...




    Zitat Zitat von spirit Beitrag anzeigen
    Aber hier funktioniert irgendwie NICHTS!

    "SchiebeRegister" ist ein WORD (MW200). Nun wollte ich das erste Bit (Bit0) setzen:

    Code:
    IF E0.1 THEN
      M201.0 := 1;
    END_IF;
    Dadurch sollte doch M201.0 auf 1 gesetzt werden; klappt aber nicht!
    Nö, M201.0 ist ein Bit das kann nicht (INT) 1 werden, sondern nur TRUE oder FALSE.
    Das ganze MW200 könnte 1 werden.

Ähnliche Themen

  1. Schieberegister per SCL?
    Von SEAL im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 03.04.2013, 11:41
  2. Schieberegister im FC
    Von Stefan1982 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.11.2010, 16:58
  3. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 30.01.2006, 08:47
  4. Schieberegister
    Von andreHST im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 29.09.2005, 10:57
  5. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.05.2005, 09:11

Lesezeichen

Berechtigungen

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