Strukturierter Text für Anfänger

Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute!

Danke für eure super Tipps, habe mein Programm überarbeitet und es ist sehr viel übersichtlicher geworden. Bin zwar von der Profiliga noch weit entfernt aber immerhin ein leichter fortschritt. Habt ihr vielleicht noch Ansätze zum Programmaufbau für mich?

Gruß
Andi
 
Teste auf die steigende Flanke vom Taster und setze den Wert.

Code:
VAR
  Taster : R_TRIG;
END_VAR

Taster(IN:=bT1093);

IF Taster.Q THEN
  Temperatur := <was auch immer>;
END_IF

Dann mach einen Funktionsblock FB_Regler und instanziere den in einem Array:

Code:
 Regler : ARRAY[1..24] OF FB_Regler;

Dann kannst du einfach eine Schleife fahren:

Code:
FOR idx:=1 TO 24 DO
  Regler[idx](SetPoint := <was auch immer>, Out => Heater);
END_FOR ;

und wenn du zu mehr Lust hast:

Jeder Block wie eine Heizung etc. bekommt einen Eingang für statische Parameter und einen Eingang für Sensoren. Als Ausgang nimmste alles, was ein FB berechnet. Damit das geht, machste 3 Strukturen.

Code:
Type ST_Parameter
  STRUCT 
    Soll : LREAL; 
    Verzoegerung : TIME;
  END_STRUCT;
END_TYPE;

Type ST_Signal
  STRUCT 
    RealeTemp : LREAL; 
    Taster : BOOL;
  END_STRUCT;
END_TYPE;

Type ST_Runtime
  STRUCT 
    ReglerAnHeizung: LREAL; 
    Alarm : BOOL;
  END_STRUCT;
END_TYPE;

FB_Regler;
VAR_INPUT
  Parameter : ST_Parameter;
  Signal : ST_Signal
END_VAR
VAR_OUTPUT
  RT : ST_Runtime;
END_VAR

IF Signal.Taster THEN
  RT.ReglerAnheizung := <blabla>
END_IF;

Grundsätzlich ist es natürlich hässlich in einer Schleife mit Zahlen zu arbeiten, weil man weiss nie, ob man die nicht ändern muss. Dh. eine Konstante für den Endwert anlegen, ist schon Pflicht

Code:
VAR CONSTANT
 nAnzahlRegler : INT := 24;
END_VAR

Dann kann man

Code:
  Regler : ARRAY [1..nAnzahlRegler] OF FB_REGLER ;
 
Zuletzt bearbeitet:
Morgen Leute

Heute habe ich die Nachricht erhalten mein Programm mit einer neuen funktion auszustatten. Auch wenn alle 24 Regler angewählt sind soll immer nur einer aktiv heizen um die Temperatur zu halten. Grund dafür ist die aufnahme Leistung auf ein minimum zu beschränken. Könnt ihr mir einen ansatz liefern wie ich das machen kann? Ich bin derzeit noch etwas überfordert damit.

Danke

Gruß
Andi
 
Zurück
Oben