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

Ergebnis 1 bis 9 von 9

Thema: Hilfe Funktionsaufruf IF Funktion !!

  1. #1
    Registriert seit
    10.07.2011
    Beiträge
    6
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo

    Ich murxe mittlerweile seit ein paar Monaten immer wieder kleiner Programme für die Wago 750 zusammen. Klappt auch schon ganz gut, nur jetzt komm ich nicht mehr weiter .

    Aufgabe: Über Einen Boolschen wert eine Rechnung auslösen ( 1x Division und 1x Multiplikation ) und gut is ich bings aber nicht zum laufen

    Lösungsansatz von mir:

    Funktion erstellt
    und diese von einem Funktion Block aufrufen lassen

    Inhalt
    Funkion in FUP

    wert1------/ DIV /-----------/ MUL /-----wert raus
    wert2------/____/......100---/____ /



    das ganze soll von dem ausgelöst werden
    Funktion Block in ST

    IF uerbernahme=TRUE
    THEN rechnung();
    END_IF;

    frage warum geht es nicht ?? und was müsste in den () stehen ??

    ich hoffe ihr habt mich verstanden und könnt mir helfen

    mfg
    Michi
    Geändert von elektrowurm (01.11.2011 um 14:31 Uhr)
    Zitieren Zitieren Hilfe Funktionsaufruf IF Funktion !!  

  2. #2
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    "rechnung()" soll ne Funktion sein?

    Mach's doch so:
    Code:
    Ergebnis1 := zahl1 * zahl2; 
    Ergebnis2 := zahl1 / zahl2;
    Solange die Operanden kompatibel sind.

  3. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    elektrowurm (01.11.2011)

  4. #3
    elektrowurm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.07.2011
    Beiträge
    6
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Merci

    Ja
    Rechnung soll ne Funktion sein aber ich weiß nicht was ich (da) rein schreiben soll??

    deine Lösung teste ich heute Abend

    mfg
    Michi

  5. #4
    elektrowurm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.07.2011
    Beiträge
    6
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Lächeln

    Hi

    Toll funktioniert einwandfrei
    DANKE !!!

    Aber noch mal ne frage wie spreche ich dann einen Funktionsbock an wenn der z.b in FUP ist ????

    mfg
    Michi

  6. #5
    Registriert seit
    04.06.2008
    Beiträge
    45
    Danke
    2
    Erhielt 8 Danke für 8 Beiträge

    Standard

    In der Variablendeklaration deines Funktionsblocks definierst Du Ein- und Ausgangsvariablen. Diese werden dann beim Aufruf von Dir beschrieben bzw. bekommst Du von der Funktion zurück.

    Bsp.:

    FUNCTION_BLOCK Multiplikation

    VAR_INPUT
    Faktor_1:WORD;
    Faktor_2:WORD;
    END_VAR

    VAR_OUTPUT
    Ergebnis:WORD;
    END_VAR
    Im Variablendeklarationsbereichs des Baustein definierst Du Ein- und Ausgangsvariablen. Dann programmierst Du den Baustein nach Deinen Vorstellungen mit den definierten Variablen. Zum Beispiel:

    Ergebnis := Faktor_1 * Faktor_2;
    Beim Aufruf des Bausteins übergibst Du deine globalen Variablen an die Lokalvariablen des aufgerufenen Bausteins. In etwa so:

    Multiplikation(Faktor_1:=erste_Zahl, Faktor_2:=zweite Zahl, Ergebnis=>Ergebnis_Mul )
    Die Variablen "erste_Zahl", "zweite_Zahl" und "Ergebnis_Mul" hast Du natürlich global schon deklariert.
    Es ist beim Aufruf meines Wissens nicht relevant in welcher Sprache die Funktion/der Funktionsblock geschrieben ist.

  7. #6
    elektrowurm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.07.2011
    Beiträge
    6
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    doppel gemoppel

  8. #7
    elektrowurm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.07.2011
    Beiträge
    6
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hi
    Danke für deine Bemühungen.
    Ich steig da noch nicht ganz durch beim Baustein Aufruf
    habe ich folgendes verwendet
    Code:
    rechnung();
    (das funst aber nicht )

    da ich ja in dem Baustein nur mit Globalen-variablen arbeite.
    Wenn ich jetzt dein Beispiel verwende muss ich Globale Variablen und interne Variablen anlegen oder ist das ein muss???
    wenn das so wäre kann es ja mal sein das ich da 20 oder mehr Variablen eintragen muss


    mfg
    Michi

    P.s Cool neue Forenoptik
    Geändert von elektrowurm (02.11.2011 um 21:09 Uhr)

  9. #8
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Ein FB muss im Programm deklariert im Code aufgerufen werden.

    Angenommen du erstellst einen Baustein "Rechnung":
    Baustein:
    Code:
    FUNCTION BLOCK Rechnung
    VAR_INPUT
       Wert1 : REAL;
       Wert2 : REAL;
       Ergebnis : REAL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    -------------------
    Ergebnis  := Wert1  * Wert2 ;
    Im Programm dann:
    Code:
    VAR
       myRechnung : Rechnung;  (* Deklaration des FB *)
       ErgebnisProgramm: REAL;
       Zahl1: REAL;
       Zahl2: REAL;
    END_VAR
    ---------------
    myRechnung(Wert1:= Zahl1,Wert2:= Zahl2, Ergebnis => ErgebnisProgramm);    (* Aufruf des FB *)

  10. #9
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Function oder Funtions Block
    Zitat Zitat von elektrowurm
    Ja
    Rechnung soll ne Funktion sein aber ich weiß nicht was ich (da) rein schreiben soll??
    Also erstmal so ganz im allgemeinen, inherhalb eines FBs oder einer Function sollten schon mal gar keine Globalen Variablen verwendet werden.

    Und wenn wir jetzt mal bei einer Function bleiben (alles andere macht hier mal keinen Sinn). da kannst du ja mal ganz gepflegt die Standard Operanden MUL & DIV verwenden.
    Hier mal in FUP:
    Rechnung.jpg


    Wenn du dir jetzt immer noch eine eigene Function schreiben möchtest, musst Du dir auf jeden Fall mal Eingänge declarieren, an denen Du die Werte für die Berechnung übergibst.
    Dass könnte dann so aussehen:
    Code:
    FUNCTION Rechnung : REAL
    VAR_INPUT
     i_Zahl1  :REAL;
     i_Zahl2  :REAL;
     i_Operation :BYTE; (*bestimmt die Rechenoperation:
          0 = Multiplizieren,
          1 = Dividieren
          2 = Addieren
          3 = Subtrahieren *)
    END_VAR
    (*Implementierung*)
    CASE i_Operation OF
     0: Rechnung:=i_Zahl1*i_Zahl2;
     1: IF i_Zahl2 > 0 THEN
           Rechnung:=i_Zahl1/i_Zahl2;
        END_IF
     2: Rechnung:=i_Zahl1+i_Zahl2;
     3: Rechnung:=i_Zahl1/i_Zahl2;
    END_CASE
    Inklusive der Auswahl für die Rechenoperation und nem Schutz gegen "Division by zero". Irgend nen Sinn muß es ja haben.


    Im Programm könnte der Aufruf dann so aussehen (FUP):
    RechnungFun.jpg
    oder so in ST:
    Code:
    ErgebnisMul:=Rechnung(Wert1,Wert2,0);
    ErgebnisDiv:=Rechnung(Wert1,Wert2,1);
    ErgebnisAdd:=Rechnung(Wert1,Wert2,2);
    ErgebnisSub:=Rechnung(Wert1,Wert2,3);
    Aber wenn du eine eigene Function schreibst mußt du dich auf Datentypen festlegen (im Bsp: REAL). Die Standard operanden sind kompatible mit allen nummerischen Datentypen.
    Geändert von Simatiker (04.11.2011 um 13:23 Uhr) Grund: Da hat sich der Fehlerteufel eingeschlichen! ;o)
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.
    Zitieren Zitieren Was denn nu?  

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 14.12.2010, 18:12
  2. Funktionsaufruf in SCL
    Von petzi im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 30.04.2009, 16:29
  3. Funktionsaufruf in ST
    Von Vogei im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 01.09.2008, 18:19
  4. Funktionsaufruf aus OB 35 ... )-:
    Von Andi_W im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 06.05.2008, 07:23
  5. Funktionsaufruf mit Aktualparamerern
    Von manas im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 06.03.2008, 13:41

Lesezeichen

Berechtigungen

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