Probleme beim Programmieren einer Moellersteuerung

bayerntobi

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich soll bei einer Extruderheizung mit 4 Heizkreisen unterschiedlicher Leistungen eine Steuerung programmieren, die bei einer vorgegeben Leistung die entsprechenden Heizkreise ansteuert. Genau Aufgabenstellung befindet sich im Anhang.
Um die Aufgabe zu lösen, habe ich mir eine Excel-Tabelle (Anhang: Heizkreise) erstellt, die beinhaltet, welche Heizkreise bei der jeweiligen Leistung angesteuert werden.
Nun zum Problem der Programmierung. Ich wollte per Strukturiertem Text das Problem entweder mit einer CASE-Anweisung oder mit mehreren IF-Anweisungen bearbeiten. Dieses funktioniert aber nicht, weil, sobald ich einen Wert bei der CASE-Anweisung mehrfach verwende, die Moeller Software mir die Fehlermeldung ausgibt:
Fehler 4270 ... CASE Konstante`...`wird bereits verwendet.
Zudem gibt es noch ein weiteres Problem. Wenn einmal ein Heizkreis=TRUE ist, so bleibt dieser das auch. Dieser kann aber bei einer neuen Eingabe eines Wertes wieder FALSE sein.
Die Lösungsversuche/ansätze sind ebenfalls im Anhang per pdf.

Da ich noch in den Anfängen der SPS Programmierung stecke, hoffe ich, dass mir jemand Ratschläge geben kann (u.a. ist mein Lösungsansatz überhaupt zu realisieren, wenn er richtig ausgeführt würde?), um diese Aufgabe lösen zu können.

MfG
Tobi
 

Anhänge

  • aufgabenstellung extruderheizung.pdf
    9,9 KB · Aufrufe: 17
  • Heizkreise.pdf
    5 KB · Aufrufe: 16
  • lsg-versuche.pdf
    6,5 KB · Aufrufe: 15
an deiner tabelle hege ich zweifel ...

case mit mehreren zuweisungen funktioniert natürlich nicht, ist ja auch eine eindeutige form der zuweisung...

versuch mal folgendes umzusetzen:

Code:
*
IF soll >= 9 THEN Q4:=True ELSE Q4:=False
IF (soll >=15 OR (soll>=6 AND soll<=8)) THEN Q3:=True ELSE Q3:=False
IF ((soll >=3 AND soll<=5) OR (soll >=13 AND soll<=14) OR (soll >=18 AND soll<=21)) THEN Q2:=True ELSE Q2:=False
IF ((soll >=1 AND soll<=2) OR (soll >=4 AND soll<=5) OR (soll >=7 AND soll<=8) OR (soll >=10 AND soll<=14) OR (soll >=16 AND soll<=17) OR (soll >=19 AND soll<=21)) THEN Q1:=True ELSE Q1:=False
ist aber nicht die schönste lösung, mal dir mal ein karnough-diagramm, da ist sicher noch was rauszuholen :rolleyes:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke mal, dass das von 4L schon gesagt wurde - ich schreibe es trotzdem nochmal :
die Case-Situationen : 1,3,4,6,7,8,10 ...
und : 2,4,5,9,10 ...
überschneiden sich. Das geht bei "IF .. OR .. OR .. THEN" so zu machen aber nicht bei CASE.

Gruß
LL
 
Ich würde es mit einem Array machen:

Code:
  heizkreise : ARRAY[1..21,1..4] OF BOOL := 
   (*HK1,    HK2,     HK3     HK4 *)
     FALSE, FALSE,  FALSE, TRUE,  (* Sollwert 1 *)
     FALSE, FALSE,  FALSE, TRUE,  (* Sollwert 2 *)
     FALSE, FALSE,  TRUE ,  FALSE,(* Sollwert 3 *)
     FALSE, FALSE,  TRUE , TRUE,   (* Sollwert 4 *)
    (* usw...... *)
Dann kann man dass so schreiben:

Code:
HK1 := heizkreise[sollwert,1];
HK2 := heizkreise[sollwert,2];
HK3 := heizkreise[sollwert,3];
HK4 := heizkreise[sollwert,4];
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja ja, aber mein Array spart CPU-Zeit oder ? Jedenfalls nach dem ich angefangen die kleinen Beckhoff-SPSen wie die CX1000 zu nutzen, wird man etwas vorsichtiger. Solche IF-Verknüpfungen sind doch etwas CPU-Intensiver.
 
wenn die moeller-steuerungen MODULO-Operationen unterstützt kann man das auch ganz einfach berechnen...

Bsp.:

Code:
*
16kW:  16 / 9    = 1 -> Q4:=True  ... Rest: 7
        7 / 6    = 1 -> Q3:=True  ... Rest: 1
        1 / 3    = 0 -> Q2:=False ... Rest: 1
        1 / 1..3 = 1 -> Q1:=True  ... Rest: 0

19kW:  19 / 9    = 2 -> Q4:=True  ... Rest: 1  (If x>=2 Then Rest:=(x-1)*9+Rest)
       10 / 6    = 1 -> Q3:=True  ... Rest: 4
        4 / 3    = 1 -> Q2:=True  ... Rest: 1
        1 / 1..3 = 1 -> Q1:=True  ... Rest: 0
 
Zuletzt bearbeitet:
Zitat von vierlagig:
an deiner tabelle hege ich zweifel ...
Ja, ich habe einige Lösungsmöglichkeiten weggelassen (HK1=HK2&HK3) und den HK4 nur dann benutzt, wenn die Leistung nicht durch die 3 anderen Heizkreise erzeugt werden konnte. Mir ging es erst einmal um die Methodik der Darstellung.

Dass die CASE eine eindeutige Form der Zuweisung ist, wusste ich nicht, dafür aber jetzt.

Ich werde mich dann mal mit der Möglichkeit des Arrays und der Modulo Operationen auseinandersetzen.
 
Zurück
Oben