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

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

Thema: CTD Rückwärtzähler gib keinen aktuellen Zählwert aus (CV)

  1. #1
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    hier ist mein Code:

    Code:
    #IEC_Counter_0_Instance_1(CD:=#sm_counter[1],
                              LD:=#neuer_wert_CTD1,
                              PV:=#Spuelzyklen_panel);
    
    #IEC_Counter_0_Instance_2(CD:=#sm_counter[4],
                            LD:=#neuer_wert_CTD2,
                            PV:=#Spuelzyklen_panel);
    
    IF #sm_main[2] THEN
      #sm_counter[0]:=1;
    END_IF;
    
    IF #sm_counter[0] THEN
      IF #sm_main[6] THEN
        #sm_counter[0]:=0;
        #sm_counter[1]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[1] THEN
      IF NOT #IEC_Counter_0_Instance_1.Q THEN
        #sm_counter[1]:=0;
        #sm_counter[2]:=1;
      ELSIF #IEC_Counter_0_Instance_1.Q THEN
        #sm_counter[1]:=0;
        #sm_counter[3]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[2] THEN
      IF #sm_main[5] THEN
        #sm_counter[2]:=0;
        #sm_counter[1]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[3] THEN
      IF #sm_main[6] THEN
        #sm_counter[3]:=0;
        #sm_counter[4]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[4] THEN
      IF NOT #IEC_Counter_0_Instance_2.Q THEN
        #sm_counter[4]:=0;
        #sm_counter[5]:=1;
      ELSIF #IEC_Counter_0_Instance_2.Q THEN
        #sm_counter[4]:=0;
        #sm_counter[0]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[5] THEN
      IF #sm_main[5] THEN
        #sm_counter[5]:=0;
        #sm_counter[4]:=1;
      END_IF;
    END_IF;
    
    IF #sm_counter[0] THEN
      #neuer_wert_CTD1:=1;
    ELSE
      #neuer_wert_CTD1:=0;
    END_IF;
    
    IF #sm_counter[3] THEN
      #neuer_wert_CTD2:=1;
    ELSE
      #neuer_wert_CTD2:=0;
    END_IF;
    
    //Hier wird die Integer-Variable Rest_Spuelzyklen mal mit "0" oder mit 256" beschrieben. Wenn ich mit aber die Instanz von dem IEC-Counter angucke, wird diese so zurückgezählt wie es sein muss.
    
    #Rest_Spuelzyklen_F003:=#IEC_Counter_0_Instance_1.CV;
    #Rest_Spuelzyklen_F004:=#IEC_Counter_0_Instance_2.CV;

    Danke
    Zitieren Zitieren CTD Rückwärtzähler gib keinen aktuellen Zählwert aus (CV)  

  2. #2
    SanjaDO ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Kann mir denn keiner helfen???

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Wer soll sich das reinziehen, ohne weitere Infos, ohne Kommentare?
    Mit gefällt der Code schon optisch nicht, er "sieht nicht schön aus" (natürlich ist das rein subjektiv!!!), man kann nicht erkennen, was genau er machen soll, es sind Variablen dabei, die aus dem "Nirgendwo" kommen.
    Das ist einfach schwierig, hier zu sagen, warum das nicht funzt.
    Die Erfahrung sagt, dann gibt es Schwierigkeiten und so ist es ja auch.
    Man sieht ja auch nicht die Setzwerte, das sind Variablen (Inhalt unbekannt).
    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

  4. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    hucki (15.04.2014)

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

    Standard

    Zitat Zitat von SanjaDO Beitrag anzeigen
    Kann mir denn keiner helfen???
    Die Frage ist eher, wer sich diese m.M.n. grausame Programmierweise antuen will?!
    Sorry, aber ich hoffe inständig, das ich sowas nie warten muss!


    Das Du unter SCL wie in FUP/KOP programmierst, ist sicher Geschmackssache.
    Aber sowas:
    Zitat Zitat von SanjaDO Beitrag anzeigen
    ...
    Code:
    ...
    IF #sm_counter[0] THEN
      #neuer_wert_CTD1:=1;
    ELSE
      #neuer_wert_CTD1:=0;
    END_IF;
    ...
    ...

    Es wurde Dir im anderen Thread doch schon mehrfach gesagt, das boolsche Variablen nicht mit 0 oder 1 sondern mit TRUE oder FALSE zugewiesen werden.
    Und dann sieht man auch, das dieses ganze IF-THEN-Rumgewurschtel teilweise durch eine einfache Zuweisung ersetzt werden kann:
    Code:
    #neuer_wert_CTD1:= #sm_counter[0];

    An der Zuweisung des CV-Werts an die INT-Variable sieht für mich alles OK aus.
    Wo kommt denn die 256 her? Und wie sieht denn die Deklaration der Variablen aus?


    PS:
    Warum benennst Du die Zählerinstanzen nicht aussagekräftig?
    Warum kommentierst Du Deine Zeilen nicht?
    Geändert von hucki (15.04.2014 um 23:04 Uhr)

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

    Standard

    Auch so 'ne Sache:
    Zitat Zitat von SanjaDO Beitrag anzeigen
    ...
    Code:
    ...
    IF #sm_counter[1] THEN
      IF NOT #IEC_Counter_0_Instance_1.Q THEN
        #sm_counter[1]:=0;
        #sm_counter[2]:=1;
      ELSIF #IEC_Counter_0_Instance_1.Q THEN
        #sm_counter[1]:=0;
        #sm_counter[3]:=1;
      END_IF;
    END_IF;
    ...
    ...
    #IEC_Counter_0_Instance_1.Q kann nur TRUE oder FALSE sein. Eine weitere Möglichkeit gibt es nicht.
    Warum also mit ELSIF und 'ner weiteren Abfrage der gleichen Variable arbeiten? Ein einfaches ELSE reicht hier doch auch.
    #sm_counter[1] wird so oder so auf FALSE gesetzt. Warum steht das dann 2x in der IF-THEN Bedingung der Counterabfrage, statt nur 1x außerhalb?

  7. #6
    SanjaDO ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das war ein Textcode und auch noch nicht optimiert gewesen... Ich wollte erstmal die IEC Zähler ausprobieren. Naja ich habe jetzt den Fehler nach 5 stunden suchen gefunden und der heißt PLCSIM!!!! Es hat alles funktioniert bis auf den OUTPUT CV! Also aufpassen und nie wieder PLCSIM nutzen!!! Danke

  8. #7
    SanjaDO ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich glaube es nicht, jetzt ist der Fehler wieder aufgetaucht... Jetzt ist es auch auf der Hardware CPU (314er)...

    Ich habe um den Fehler einzugrenzen nur den Counter dringelassen:

    Code:
    FUNCTION_BLOCK "FIlterüberwachung"
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          sm_main : Array [0..50] of Bool;
          Spuelzyklen_panel : Int;
       END_VAR
    
    
       VAR 
          IEC_Counter_1 {OriginalPartName := 'CTD'; VersionGUID := '2f9cc075-5e30-4b29-86bb-fa9266e3605b'} : CTD;
          IEC_Counter_2 {OriginalPartName := 'CTD'; VersionGUID := '2f9cc075-5e30-4b29-86bb-fa9266e3605b'} : CTD;
          Restspuelzyklen_F003 : Int;
          Restspuelzyklen_F004 : Int;
       END_VAR
    
    
    
    
    BEGIN
    	
    	
    	#IEC_Counter_1(CD:=#sm_main[6],LD:="Wiederanlauf",PV:=#Spuelzyklen_panel);
    	#Restspuelzyklen_F003:=#IEC_Counter_1.CV;
    	
    	
    	
    END_FUNCTION_BLOCK
    In der Instanz wird CV rückwärts gezählt:

    Instanz.JPG

    Im FB selbst nicht:

    Online.JPG

    Wenn der Zähler läuft wird CV auf "0" gesetzt, wenn der abgelaufen ist auf "256":

    abgelaufen.JPG

    Nun werdet ihr fragen was den sm_main[6] macht...sm_main[6] toggelt im 15 Sekundentakt - mehr nicht!

  9. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich hab das mal bei mir reingeladen, das funktioniert mit PLCSIM.
    Allerdings läuft bei mir nur ein 15-Sekunden Timer mit einem Merker als Takt und dann dein FB.
    Da wird CV richtig angezeigt.
    Kann es sein, dass du irgendwo in deinem weiteren Programm noch einen Bock hast?
    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

  10. #9
    SanjaDO ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jau! ich habe ein neues Projekt angelegt und es funktioniert wie es soll! Ich hab im alten Projekt nichts verdächtiges gefunden. Was kann das denn sein?

  11. #10
    SanjaDO ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kann er daran liegen?

    fehler.JPG

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 09.02.2012, 19:06
  2. Fc103 ctd
    Von Computerliebe im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.08.2010, 14:33
  3. Zählwert Speichern
    Von mauli im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 26.05.2009, 08:46
  4. S7 Zählwert-Einschaltgrenze
    Von K3ul3 im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 08.09.2008, 20:00
  5. Zählwert zwischen speichern
    Von kawa im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.02.2006, 14:46

Lesezeichen

Berechtigungen

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