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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Neueinsteiger: FUP zu SCL

  1. #1
    Registriert seit
    16.03.2014
    Beiträge
    358
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo in die Runde,
    bin im Forum bisher nur bei Twincat aktiv gewesen und versuche nun TIA Step7 zu verstehen...

    Bin daher hingegangen und habe erstmal die einfachste CPU genommen und mit FUP einen TON an einen CTU gehängt.
    Dann auf Übersetzen, alles ausgebügelt und dann Simulation gestartet.
    Anschl. die kleine Brille angeklickt und konnte nun prima über beiden Bausteinen alles exkat nachvollziehen > Prima.

    Dann alles neu und ne 1500er ausgewählt.
    Den OB1 gelöscht und mit SCL neu angelegt.
    Den TON und den CTU eingedaddelt, übersetzt etc.
    Dann etwas mehr geklickt wegen der anderen Simulation...
    Dann lief die Sache wohl und trotz eingeschalteter Brille war rechts daneben erstmal nur der Q vom TON und überall FALSE.
    Dann das Beobachtungsfenster gefunden, den TON mit ET und den CTU mit CV anzeigen lassen: TON timert sich korrekt hoch und startet wie gewollt,
    ABER der CTU zählt nur Ab und Zu weiter ????

    Vesrtehe ich überhaupt nicht ?

    Als wenn der Impuls nur ab und an beim CTU ankommen würde ???

    Was mache ich hier falsch ?

    Nun feste Druff

    LG
    Shrimps
    Zitieren Zitieren Neueinsteiger: FUP zu SCL  

  2. #2
    Registriert seit
    12.03.2011
    Ort
    Erzgebirge
    Beiträge
    247
    Danke
    77
    Erhielt 29 Danke für 27 Beiträge

    Standard

    Vielleicht solltest du den Timer-Q nur einmal abfragen und zwischenspeichern. Evtl. setzt du den Timer mit der ersten Abfrage zurück. Die nächste Abfrage gibt schon wieder false zurück.
    Nur so eine Idee

  3. Folgender Benutzer sagt Danke zu holgero für den nützlichen Beitrag:

    shrimps (13.09.2015)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Timer laufen asynchron zum OB1. Wenn man Timer mehrmals im OB1 abfragt dann kann das durchaus beim zweiten mal abweichende Ergebnisse liefern.

    Zusätzlich läßt sich Siemens für die S7-1500 noch neuartige Verhaltensweisen und diverse Bugs einfallen, so daß man sich in Bezug auf Timer eisern an die Regeln halten muß:
    - Timer im Zyklus nur ein einziges Mal unbedingt aufrufen
    - Timer-Ausgänge in Zwischenvariablen sichern und dann mit diesem "Timer-Abbild" arbeiten
    - Timer nicht mit sich selbst verknüpfen

    s7-1500 Timer resetieren
    TIA V13 Bug

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    shrimps (13.09.2015)

  6. #4
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.725
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Naja, da du ja Beckhoff Erfahrung hast ... kann man ja von etwas Background ausgehen.

    Bei der S7-300 mit SFB4 sowie den allermeisten IEC-Systemen (Beckhoff, Codesys etc.) ist ein TON ein ganz normaler FB welcher sich auch an alle Regeln eines FB hält.
    Die wichtigste: Der FB verändert seinen Zustand ausschließlich beim Aufruf des FB, hier also z.B. "myTON();".
    Bei Siemens und der S7-1500 ist das in Bezug auf die vermeintlichen IEC-Timer nun leider etwas anders.
    Die Instanz wird bei jeden Zugriff auf die Timerinstanz aktualisiert, konkret bei Zugriff auf myTON.ET bzw. myTON.Q.

    Dein SCL-Code dürfte nun also ungefähr so aussehen:
    Code:
    myTON( IN := NOT myTON.Q , PT := T#1s);
    myCTU( CU := myTON.Q .... )
    Hier passiert nun also folgendes, die Aktualisierung der Schnittstellen-IN-Parameter steht Codemäßig vor den Aufruf myTON(); woraus nun also folgt, das myTON.Q dann schon High wird vorm Aufruf des myTON(), woraus wiederum folgt, das myCTU dann schon wieder myTON.Q = False mitbekommt.
    Ob und wie oft, myTON.Q beim Aufruf des myCTU nunt High ist, ist reiner statistischer Zufall.

    Dein SCL-Code müsste nun also so aussehen:
    Code:
    myTON( IN := NOT xTimer , PT := T#1s, Q=> xTimer );
    myCTU( CU := xTimer .... )
    Was dann der von Holgero angesprochenen Zwischenvariable entspricht.

    Mfg
    Manuel
    Geändert von MSB (13.09.2015 um 21:39 Uhr)
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  7. #5
    shrimps ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.03.2014
    Beiträge
    358
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hallo an alle,
    erstmal besten Dank an die schnelle und ausführliche Hilfe !
    Das habe ich alles soweit verstanden und versucht umzusetzen:
    Code:
    ORGANIZATION_BLOCK "Main"
    TITLE = "Main Program Sweep (Cycle)"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_TEMP 
          xTimer : Bool;
       END_VAR
    
    
    BEGIN
        "Timer1".TON(IN:= NOT #xTimer,
                     PT:= t#5s,
                     Q=>#xTimer);
        
        "Counter1".CTU(CU:=#xTimer,
                       R:= false,
                       PV:=0);
        
        "Impuls1".TP(IN:=#xTimer,
                     PT:=t#3s);
        
    END_ORGANIZATION_BLOCK
    Nun läuft er einmal los und dann nicht mehr ?
    Wenn ich die xTimer als M1.0 anlege dann findet er sie nicht mehr ?
    Hmm, bin noch zu Twincattig am Denken...

    Bitte noch einen Tip
    Danke
    Shrimps

  8. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.725
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Zitat Zitat von shrimps Beitrag anzeigen
    Hallo an alle,
    erstmal besten Dank an die schnelle und ausführliche Hilfe !
    Das habe ich alles soweit verstanden und versucht umzusetzen:
    Code:
    ORGANIZATION_BLOCK "Main"
    TITLE = "Main Program Sweep (Cycle)"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_TEMP 
          xTimer : Bool;
       END_VAR
    
    
    BEGIN
        "Timer1".TON(IN:= NOT #xTimer,
                     PT:= t#5s,
                     Q=>#xTimer);
        
        "Counter1".CTU(CU:=#xTimer,
                       R:= false,
                       PV:=0);
        
        "Impuls1".TP(IN:=#xTimer,
                     PT:=t#3s);
        
    END_ORGANIZATION_BLOCK
    Nun läuft er einmal los und dann nicht mehr ?
    Wenn ich die xTimer als M1.0 anlege dann findet er sie nicht mehr ?
    Hmm, bin noch zu Twincattig am Denken...
    Temp ist am Anfang des Bausteins unbeschrieben zufällig bei S7-300, bzw. Null bei 1200/1500.

    ...findet er sie nicht mehr...?
    Geht das auch in Deutsch?
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  9. #7
    shrimps ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.03.2014
    Beiträge
    358
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hallo MSB,
    das verstehe ich nun nicht:
    Wenn die xTimer beim Start Null ist (=False) dann ist ja alles richtig und deswegen startet das ganze ja auch einmal, aber dann übernimmt er das nicht mehr ?
    Zur Definition: Wenn ich die xTimer aus der VAR_TEMP lösche und in der Standard-Variablentabelle definiere bekomme ich immer:
    Der Operand #xTimer ist nicht definiert !
    Das meinte ich mit "findet er sie nicht mehr ?"
    Sorry für die Ausdrucksweise.

  10. #8
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.725
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    a) Du liest xTimer bevor du xTimer beschreibst = Vor Aufruf des Timers ist xTimer durch das Betriebssystem immer Low, danach dann nach der Zeitverzögerung immer High
    So ähnlich wie Var in Funktionen bei Bechoff

    b) Siemens verwendet in TIA eine unterschiedliche Prefix für Lokal und Globalvar
    #xTimer = Lokal
    "xTimer" = Global
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Eine Variable in TEMP ist bei jedem Baustein-Aufruf zunächst 0 (S7-1500). TEMP-Variablen können sich nicht Werte bis zum nächsten Aufruf merken. Deshalb heißen die TEMP.
    Weil Du Deine Variable xTimer in einem OB deklariert hast, ohne daß Du die bereits vorhandenen TEMP-Variablen deklariert hast, liegt die Variable vermutlich auch noch auf dem Speicherplatz einer anderen Variable (OB1_EV_CLASS ?), welche vom Betriebssystem beim OB-Aufruf mit einem Wert beschrieben wird.

    Der Name einer globalen Variable darf nicht mit # anfangen. Variablen mit # am Anfang sind lokale Variablen und werden nicht in der globalen Variablentabelle gesucht. Lasse das # beim Bezug auf die globale Variable weg. Deklariere die Variable xTimer als BOOL in der Variablentabelle und schreibe in SCL "xTimer" in Hochkomma.
    Code:
    ORGANIZATION_BLOCK "Main"
    TITLE = "Main Program Sweep (Cycle)"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
    
    BEGIN
        "Timer1".TON(IN:= NOT "xTimer",
                     PT:= t#5s,
                     Q=>#xTimer);
        
        "Counter1".CTU(CU:="xTimer",
                       R:= false,
                       PV:=0);
        
        "Impuls1".TP(IN:="xTimer",
                     PT:=t#3s);
        
    END_ORGANIZATION_BLOCK
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    shrimps (14.09.2015)

  13. #10
    shrimps ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.03.2014
    Beiträge
    358
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo PN/DP,
    das wars !
    Besten Dank !
    Ich hatte die Temp onehin als "seltsam" angesehen, aber in Twincat kann ich ja auch VAR anlegen, nur in Step7 nicht...
    Nun läuft der Timer sauber und der Zähler auch, ABER:
    Der TP macht nichts ???

    Geht hier auch wieder etwas "verloren" ?
    In der Beocbachtungsliste sehe ich den Timer1.IN dauerhaft auf TRUE und der ET läuft nie los ?

    Bevor ich nix verstehe, habe ich es nochmals in Twincat versucht und da rennt es wie gewünscht ?

    LG
    Hardy

Ähnliche Themen

  1. SCL vs. FUP/KOP/AWL
    Von flicflac im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.09.2011, 13:48
  2. OB1 Zuweisungsfehler FUP & SCL
    Von max_sho im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 16.12.2010, 15:43
  3. Fachliteratur Step7, AWL, FUP, SCL
    Von Toki0604 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.11.2010, 19:32
  4. PWM in SCL, AWL oder FUP?
    Von stefanblitz im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 01.02.2009, 20:47
  5. Antworten: 17
    Letzter Beitrag: 18.06.2007, 22:10

Lesezeichen

Berechtigungen

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