Sprünge nach Zeit (in AWL)

poppycock

Level-1
Beiträge
253
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Eins vorweg: Es handelt sich hierbei um eine Übungsanlage und es geht mir nicht um eine sauber geregelte Steuerung, sondern eher um den Aha-Effekt bei einer Regelung! :ROFLMAO:

Hallo,

in Sachen Sprungmarken bin ich nicht wirklich fit und es funktioniert auch nicht richtig.
Ich habe mir einen einfachen Regelbaustein für eine Zweipunktregelung erstellt.
Die Hysterese ist anfangs auf 10°C festgelegt.
Wenn ich nun den Sollwert auf 53°C setze, so heizt das Modell eine Lampe bis auf 60°C auf, um danach den Abkühlvorgang einzuleiten.
Dummerweise wird meine Lampe nicht heißer als 57°C, also komme ich nie in die Abkühlphase.
Da es sich um eine Übungsanlage handelt, möchte ich nach 120 Sekunden die Hysterese um 1°C verringern.
Übungsweise habe ich erstmal nach 120 Sekunden die Hysterese auf 4°C gesetzt:
Code:
// Hystere 10°C bis 120 Sekunden
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     0
      >=I   
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     120
      <=I   
      )     
      L     10
      T     "Regelbaustein_DB".Temp_Hysterese
      SPB   neu

// Hystere 4°C ab 121 Sekunden
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     120
      >I    
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     120
      >I    
      )     
      L     4
      T     "Regelbaustein_DB".Temp_Hysterese
      SPB   neu

neu:  L     "Daten an Visu".SOLL_Temperatur
      L     "Regelbaustein_DB".Temp_Hysterese
      -I    
      T     "Regelbaustein_DB".Temp_Regel_MIN
      L     "Daten an Visu".SOLL_Temperatur
      L     "Regelbaustein_DB".Temp_Hysterese
      +I    
      T     "Regelbaustein_DB".Temp_Regel_MAX
Aber es gibt ein Problem. Ich kann beobachten, dass nach ca. 68 Sekunden die 4°C gesetzt werden. Finde einfach den Fehler nicht.

Im Anhang befindet sich der komplette FC.
M10.6 und M10.7 starten den Zähler.
M0.2 gibt jede Sekunde einen Impuls raus.

Vielleicht geht das aber effizienter?
Sorry für die blöde Anfängerfrage, aber ich beschäftige mich erst seit ein paar Tagen intensiver mit AWL.

Gruß,
poppycock
 

Anhänge

  • Zeiten und Sprünge.pdf
    16,5 KB · Aufrufe: 13
Zuletzt bearbeitet:
Code:
// Hystere 10°C bis 120 Sekunden
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     0
      >=I   
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     120
      <=I   
      )     
      L     10
      T     "Regelbaustein_DB".Temp_Hysterese
      SPB   neu

Die Zeilen
L 10
T "Regelbaustein_DB".Temp_Hysterese
werden immer ausgeführt. Du musst vorher aufgrund des VKE an die Stelle springen, die ausgeführt werden soll wenn das VKE false ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wenn im einfachsten Falle wenn der zeitzähler nicht unter 0 gehen kann:

Code:
L "Regelbaustein_DB".Zeitzaehler
L 120
>I
spb h2
// Hysterese 1
L 10
spa out
// Hysterese 2
h2: L 4
out: T "Regelbaustein_DB".Temp_Hysterese
 
Hallo Thomas,

ich habe bemerkt, dass mein Zähler sporadisch um ca. 7 Zähler nach vorne springt. Bei 120 Sekunden wird der Wert 4 zwar gesetzt, aber weil der Zähler springt, erreiche ich nach ca. 78 Sekunden den Zählerstand 120!
Ich werde wohl mal einen Timer nehmen anstatt eines Zählers.
Dann werde ich mich um die weiteren Sprünge kümmern, also, ich melde mich dann wieder hier...

Gruß,
poppycock
 
kannst auch erstmal zeigen, wie du den zähler programmiert hast ... einen sprung sollte er eigentlich nicht machen!

Code:
 U(    
      O     M     10.6
      O     M     10.7
      )     
      U     M      0.2
      ZV    Z      0
      BLD   101
      NOP   0
      NOP   0
      UN    M     10.5
      R     Z      0
      NOP   0
      LC    Z      0
      T     "Regelbaustein_DB".Zeitzaehler
      NOP   0
M10.6 oder M10.7 starten den Zähler.
M10.5 setzt den Zähler zurück (Anlage aus).



----------------NACHTRAG------------------

Zählersprünge:
9 auf 16
25 auf 32
41 auf 48
57 auf 64
73 auf 80
89 auf 96
106 auf 113
121 auf 128
usw...
 
Zuletzt bearbeitet:
Mit LC lädst du den Zählerwert im BCD Format.
Mit
L Z 0
T "Regelbaustein_DB".Zeitzaehler
sollte es gehen.

(Oder schmeißt das Zählergelumpe raus und machst dir einen eigenen)
 
Verdammt, blöder Anfängerfehler! Aber man lernt nie aus! *froi*
Danke euch beiden! Es geht!

Jetzt muss ich nur noch die anderen Hysterese-Werte programmieren.
Mal sehen, vielleicht bekomme ich es jetzt ohne Hilfe hin! ;)
 
Ich habe jetzt folgendes geschrieben... Funktioniert auch:

Code:
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      >I    
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     10
      <=I   
      )     
      SPB   h2

      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     10
      >I    
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     20
      <=I   
      )     
      SPB   h3


// Hysterese 1
      L     10
      SPA   out
// Hysterese 2
h2:   L     6
      SPA   out
// Hysterese 3
h3:   L     4
      SPA   out

out:  T     "Regelbaustein_DB".Temp_Hysterese

Geht das noch effizienter?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Geht das noch effizienter?
Jepp
Code:
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      >I    
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     10
      <=I   
      )     
      L 6
      SPB   out
       U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     10
      >I    
      )     
      U(    
      L     "Regelbaustein_DB".Zeitzaehler
      L     20
      <=I   
      )     
      L 4
      SPB   out
      L     10
out:  T     "Regelbaustein_DB".Temp_Hysterese
[/CODE]
 
probiers mal kürzer so:

Code:
      L     10
      T     #iTemp

      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      >I    
      L     #iTemp
      SPBN  end
      +     -4
      T     #iTemp

      L     "Regelbaustein_DB".Zeitzaehler
      L     10
      >I    
      L     #iTemp
      SPBN  end
      +     -2
      T     #iTemp

end:  T     "Regelbaustein_DB".Temp_Hysterese

oder verständlicher so:

Code:
CASE "Regelbaustein_DB".Zeitzaehler OF
    6..10: "Regelbaustein_DB".Temp_Hysterese := 6;
    11..20: "Regelbaustein_DB".Temp_Hysterese := 4;
ELSE
    "Regelbaustein_DB".Temp_Hysterese := 10;
END_CASE
 
und mit SPL so:

Code:
      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      /I    
      SPL   vier
      SPA   null
      SPA   eins
      SPA   zwei
      SPA   drei
      SPA   vier
null: L     10
      SPA   end
eins: L     6
      SPA   end
zwei: L     4
      SPA   end
drei: L     4
      SPA   end
vier: L     4
      SPA   end
end:  T     "Regelbaustein_DB".Temp_Hysterese
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und mit SPL so:

Code:
      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      /I    
      SPL   vier
      SPA   null
      SPA   eins
      SPA   zwei
      SPA   drei
      SPA   vier
null: L     10
      SPA   end
eins: L     6
      SPA   end
zwei: L     4
      SPA   end
drei: L     4
      SPA   end
vier: L     4
      SPA   end
end:  T     "Regelbaustein_DB".Temp_Hysterese

Bekomme folgenden Fehler:
Sprungverteiler: Unzulässige Anweisung vor ggf. fehlendem Sprungziel.

Da ich mich mit der Anweisung SPL noch nicht auseinander gesetzt habe, hilft mir auch die Hilfe nicht viel.
Ich habe aber bald Urlaub, werde mich dann damit näher beschäftigen!
Trotzdem danke!
 
Bekomme folgenden Fehler:
Sprungverteiler: Unzulässige Anweisung vor ggf. fehlendem Sprungziel.

so ist das, wenn man nur im notepad++ proggt :rolleyes:

natürlich muß es so sein:

Code:
*
      L     "Regelbaustein_DB".Zeitzaehler
      L     5
      /I    
      SPL   ende
      SPA   null
      SPA   eins
      SPA   zwei
      SPA   drei
      SPA   vier
ende: L     4
      SPA   end
null: L     10
      SPA   end
eins: L     6
      SPA   end
zwei: L     4
      SPA   end
drei: L     4
      SPA   end
vier: L     4
      SPA   end
end:  T     "Regelbaustein_DB".Temp_Hysterese
 
Zurück
Oben