TIA Silo Linearisierung programmieren

Guten Abend,
hat etwas gedauert, aber dafür hab ich gute Nachrichten. Ich hab tatsächlich einen SCL FB geschrieben, mit 2 FOR Schleifen, die wirklich klasse sind, wenn mans mal versteht. Ich habe die gesamte Aufgabe, also sowohl die Linearisierung mit den Berechnungen der Volumina als auch die Addition des Schüttkegels und die Substraktion des Leerlauftrichters in diesem FB gelöst. Dabei habe ich festgestellt, dass Rechenfunktionen am saubersten mit SCL einsetzbar sind.
Das mit den Regions hat auf einmal auch irgendwie funktioniert.
Vielen Dank an kiar, du hast mit deinem SCL Code mich erst auf den Geschmack gebracht, freut mich wirklich sehr.
Dankeschön für eure wertvollen Antworten!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo grüß dich kiar, ich glaube, dass bei deinem Code zwar der Konus berechnet wird, wenn er voll ist, aber z.B. halb leer
hab ich einen anderen r1.Das habe ich mit Linearisierung gemeint.
Moin,
Das ist Korrekt. Ich habe mich nochmal rangemacht, über den Code gebeugt und das noch angepasst.
 

Anhänge

  • VolumenSilo.scl
    1,9 KB · Aufrufe: 13
Moin,
Das ist Korrekt. Ich habe mich nochmal rangemacht, über den Code gebeugt und das noch angepasst.
Grüß dich klar,
ich hab den Baustein jetzt im Projekt, aber wird wegen des optimierten Bausteinzugriffs nicht geöffnet.Wie Harald in einem anderen Beitrag beschrieben hat, funktioniert auch nicht, weil das Häckchen in der Liste mit den Details ausgegraut ist. Die Eigenschaften sind nur Name und FB und Nummer. Kann man da was machen?
Der Baustein berechnet nur etwas und muss sich nichts merken: typische Anwendung für eine FUNCTION (FC)
Da könnte ich tatsächlich eine Erklärung brauchen. Ich schreibe fast alles in FBs, weil ich damit immer gut gefahren bin. Hat das Nachteile oder gibt es Regeln was mit FC oder FB zu programmieren ist.
Franz
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da könnte ich tatsächlich eine Erklärung brauchen. Ich schreibe fast alles in FBs, weil ich damit immer gut gefahren bin. Hat das Nachteile oder gibt es Regeln was mit FC oder FB zu programmieren ist.
Franz

Regeln nicht, aber Empfehlungen.
Grundsätzlich handhabe ich das für mich so, alles was sich über einen Zyklus hinweg gemerkt werden muss, wird erstmal als FB vorgesehen
Allerdings gibt es auch Mittel und Wege, dass mit FC's zu handhaben.


Nachtrag:
Habe das vielleicht etwas schammig formuliert:

Wenn es die Aufgabe es erfordert, dass im Bausteine Zustände über einen Zyklus hinaus gespeichert werden müssen (was auch ggf. auf im Baustein verwendete Multiinstanzen zutreffenden kann), empfiehlt es sich den Baustein als FB anzulegen.
 
Zuletzt bearbeitet:
Moin,

hier als FC


Code:
FUNCTION "Volumen_Silo" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      h_sensor : Real;
   END_VAR


   VAR_OUTPUT
      V_gesamt : Real;
   END_VAR


   VAR_TEMP
      h_temp : Real;
      r_level : Real;
      V_zylinder : Real;
      V_kegelstumpf : Real;
   END_VAR


   VAR CONSTANT
      r1 : Real := 1.75;
      r2 : Real := 0.2;
      h1 : Real := 7.0;
      h2 : Real := 2.8;
      pi : Real := 3.14;
   END_VAR

BEGIN
    #V_zylinder := 0.0;
    #V_kegelstumpf := 0.0;
    IF #h_sensor <= #h1 THEN
        #V_zylinder := (#pi * SQR(#r1) * (#h1 - #h_sensor));
        #V_kegelstumpf := ((#r1 * #r2) + SQR(#r1) + SQR(#r2)) * #h2 * #pi * 1 / 3;
    ELSE
        #h_temp := #h2 - (#h_sensor - #h1);
        #r_level := (#r1 - #r2) * #h_temp / #h2 + #r2;
        #V_kegelstumpf := ((#r2 * #r_level) + SQR(#r_level) + SQR(#r2)) * #h_temp * #pi * 1 / 3;
    END_IF;
    #V_gesamt := #V_zylinder + #V_kegelstumpf;
END_FUNCTION

das setzt aber voraus, das Du die Werte in einem DB speichern musst.
 
Ich schreibe fast alles in FBs, weil ich damit immer gut gefahren bin. Hat das Nachteile oder gibt es Regeln was mit FC oder FB zu programmieren ist.
Ein FB muss immer zusätzlich eine Instanz haben (Multiinstanz oder eigenen Instanz-DB), auch wenn er gar keine lokalen Variablen oder Aufrufparameter hat (von tricky Aufrufen in AWL abgesehen). Da können schon mal DB-Nummern knapp werden. Auf FB-Übergabeparameter kann man global zugreifen, entweder um bequem per Variablentabelle zu beobachten oder um dirty Sachen zu machen. In FB muss man sehr umsichtig vorgehen, wenn man das AR2-Register verwenden will (enthält den Multiinstanz-Offset, den der Programmcode beim Zugriff auf lokale Instanz-Variablen benötigt).

FC brauchen keine Instanz, können sich daher aber selber nichts zwischen den Aufrufen merken (sie können aber per IN_OUT auf Merkspeicher zugreifen). Ganz clever: Wenn man FC im Sinne von y := FUNCTION(x); mit Rückgabewert verwendet. Dann kann man den Rückgabewert in SCL direkt zum Verknüpfen oder Weiterrechnen verwenden. Z.B. so einen Silo-Volumen-Berechnungsbaustein, der nur eine Formel berechnet, den könnte man in SCL dann so verwenden:

Gesamtvorrat_m3 := MySiloVol(Fuellhoehe := Fh_Silo1) + MySiloVol(Fuellhoehe := Fh_Silo2) + MySiloVol(Fuellhoehe := Fh_Silo3);

Code:
FUNCTION "MySiloVol" : REAL
VAR_INPUT
  Fuellhoehe : REAL;
END_VAR

BEGIN
  MySiloVol := Fuellhoehe * .... ; //irgendeine Formel ... für Rückgabe des Volumens
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FUNCTION "Volumen_Silo" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      h_sensor : Real;
   END_VAR

   VAR_OUTPUT
      V_gesamt : Real;
   END_VAR
...
BEGIN
...
    #V_gesamt := #V_zylinder + #V_kegelstumpf;
END_FUNCTION
würde ich so schreiben (ohne Output, aber dafür Return-Wert):
Code:
FUNCTION "Volumen_Silo" : Real
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      h_sensor : Real;
   END_VAR
...
BEGIN
...
    #"Volumen_Silo" := #V_zylinder + #V_kegelstumpf;
END_FUNCTION

Für den Rückgabewert einer FC steht der Typ der Function und der Name der Function.
Bei Aufruf des FC in FUP/KOP/AWL wird für den Rückgabewert der Output RET_VAL angezeigt.
 
Guten Abend,
läuft nicht so rund bei mir. Alle vier Quadrieroperationen sind gelb mit drei Fragezeichen.
Ich hab bei den Eigenschaften - Attribute alle Hacken entfernt, die Rechenoperationen werden jetzt durchgeführt, aber die Fragezeichen sind geblieben, und natürlich bei mir auch.
 
Zurück
Oben