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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 40

Thema: Schieberegister in SCL?

  1. #21
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von hucki Beitrag anzeigen

    Nö, M201.0 ist ein Bit das kann nicht (INT) 1 werden, sondern nur TRUE oder FALSE.
    Das ganze MW200 könnte 1 werden.
    Ja ok, das MW ist ja als Word deklariert, stimmt. Aber wie setze ich dann in SCL ein Bit eines Merkerworts auf 1?

    Ich möchte ja nur das Bit0 des MB201 setzen!
    Geändert von spirit (08.08.2013 um 16:56 Uhr)
    LG
    spirit

  2. #22
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Aber wie setze ich dann in SCL ein Bit eines Merkerworts auf 1?

    Ich möchte ja nur das Bit0 des MB201 setzen!
    Hallooo:
    Zitat Zitat von hucki Beitrag anzeigen
    M201.0 ist ein Bit das kann ... nur TRUE oder FALSE.
    TRUE = 1, FALSE = 0
    Code:
    M201.0 := TRUE;



  3. #23
    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

    Oh natürlich, bin ich b...!

    Nun klappt auch das Schieberegister; nur mit dem Ausgang gibt es noch ein Problemchen...

    Wenn ich E0.0 2x aktiv lasse, dann wird hintereinander 2x M201.0 gesetzt.

    Wenn jetzt die erste 1 die Stelle 13 (M200.5) erreicht, so wird der Ausgang plötzlich nicht mehr gesetzt, warum das?

    Code:
    IF E0.1 THEN
      M201.0 := true;
    END_IF;
    
    IF TAKT THEN
      SchiebeRegister := SHL(IN := SchiebeRegister, N := 1);
    END_IF;
    
    IF M200.5 = true THEN
      A0.1 := 1;
    END_IF;
    LG
    spirit

  4. #24
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Wenn ich E0.0 2x aktiv lasse, dann wird hintereinander 2x M201.0 gesetzt.
    Ich vermute mal, Du meinst E0.1.
    Flanke bilden oder MW200 auf 0 abfragen.


    Zitat Zitat von spirit Beitrag anzeigen
    Wenn jetzt die erste 1 die Stelle 13 (M200.5) erreicht, so wird der Ausgang plötzlich nicht mehr gesetzt, warum das?
    Immer diese IF...THEN-Verschwendung. Versuch mal so:
    Code:
    ...
    IF TAKT THEN
      SchiebeRegister := SHL(IN := SchiebeRegister, N := 1);
    END_IF;
    
    A0.1 := M200.5;
    PS: Außer der Ausgang soll auch an bleiben, wenn M200.5 wieder 0 ist, dann:
    Code:
    IF M200.5 THEN A0.1 := TRUE; END_IF;
    Geändert von hucki (08.08.2013 um 17:59 Uhr)

  5. #25
    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
    Ich vermute mal, Du meinst E0.1.

    PS: Außer der Ausgang soll auch an bleiben, wenn M200.5 wieder 0 ist, dann:
    Code:
    IF M200.5 THEN A0.1 := TRUE; END_IF;
    Lieben Dank hucki!

    Ja, meinte E0.1

    Also wenn ich schreibe

    A0.1 := M200.5;

    dann klappt das!

    Und mit

    Code:
    IF M200.5 THEN
      A0.1 := 1;
    END_IF;
    funktioniert es auch plötzlich...

    Könnte es sein, dass es daran gelegen hat, dass nach einer Änderung der Instanz-DB nicht in die Steuerung geladen wurde; bzw. muss nach jeder kleinen Änderung zusammen mit dem FB auch immer der Instanz-DB geladen werden?
    Geändert von spirit (08.08.2013 um 18:36 Uhr)
    LG
    spirit

  6. #26
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    seltsamerweise nur, wenn keine zwei einser hintereinander kommen.

    A0.1 wird dann nicht TRUE? Kannst Du das Verhalten nochmal genauer erklären?

  7. #27
    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

    Hi hucki,

    du warst schneller mit deiner Antwort als ich mit meiner Korrektur. Also es klappt jetzt alles!

    Vorhin allerdings nicht und daher nochmals meine Frage:

    Könnte es sein, dass es daran gelegen hat, dass nach einer Änderung der Instanz-DB nicht in die Steuerung geladen wurde; bzw. muss nach jeder kleinen Änderung zusammen mit dem FB auch immer der Instanz-DB geladen werden?
    LG
    spirit

  8. #28
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Könnte es sein, dass es daran gelegen hat, dass nach einer Änderung der Instanz-DB nicht in die Steuerung geladen wurde; bzw. muss nach jeder kleinen Änderung zusammen mit dem FB auch immer der Instanz-DB geladen werden?
    Zumindest, wenn Du an der Instanz was änderst. Und das dürftest Du mit der Flankenerkennung getan haben, oder?

    Wenn du aber schon einen FB verwendest, solltest Du nicht mit den absoluten Adressen arbeiten, sondern diese über die Schnittstelle auf lokale Variablen übergeben!
    PS: Diese Unart gewöhnt man sich nur schwer wieder ab. Glaub' mir, ich hab's durch.
    Geändert von hucki (08.08.2013 um 18:57 Uhr)

  9. #29
    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

    Ok, dann wird es vermutlich daran gelegen haben.

    Also, wenn man an der Deklaration nichts verändert, dann muss man nach Änderungen im FB nicht auch automatisch den Instanz-DB mit in die Steuerung laden, richtig?

    Du meinst, bei einem FB sollte mit IN- und Out-Variablen gearbeitet werden, die dann den Aktualparametern übergeben werden? Gibt es da einen Vorteil gegenüber dem Arbeiten mit absoluten Adressen?

    Lieben Dank!
    LG
    spirit

  10. #30
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Gibt es da einen Vorteil gegenüber dem Arbeiten mit absoluten Adressen?
    Erstmal kann man den FB dadurch mehrfach im Programm verwenden, dadurch, das man nur die Außenbeschaltung des FBs austauschen muss/kann.
    Dann kann man die Adressen viel einfacher austauschen, ohne das ganze Programm des FBs durchsuchen zu müssen.
    Dadurch kann man den FB dann auch einfacher in andere Programme kopieren oder weitergeben, ohne prüfen zu müssen, ob die Variablen schon irgendwo anders genutzt werden.

    Der FB arbeitet dann intern immer gleich, egal was sich an der Außenbeschaltung ändert.

Ä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
  •