Unterprogramme mit übergabeparameter

  • Moin Männer


    Wie geht das eigentlich bei der KRC2 wenn man mehrere ergebnisse aus einem Unterprogramm haben möchte. Mir geht es rein um die Syntax


    ;________________________________________________________________________________________________
    mein Beispiel


    DEFFCT sepp1(Zahl1:in,Zahl2:in,Summe:out,Summe1:out)


    REAL Zahl1, Zahl2, Summe, Summe1

    Summe=Zahl1+Zahl2
    Summe1=Zahl1-Zahl2


    RETURN(Summe)
    RETURN(Summe1)



    ;***************************
    Aufruf aus einer anderen *.src
    sepp1(4.5,5.0,Ergebnis,Ergebnis1) <-In dieser Src bekomme ich immer den Fehler Name nicht als Unterprogramm definiert



    ;_____________________________________________________________________________________________________
    Beipsiel 2:


    DEFFCT REAL Sepp1(Zahl1:in,Zahl2:in,Summe:out)


    REAL Zahl1, Zahl2, Summe

    Summe=Zahl1+Zahl2


    RETURN(Summe)




    ;***************************
    Aufruf aus einer anderen *.src
    Ergebnis=sepp1(4.5,5.0) <-So funktioniert es aber wenn ich jetzt wie im obigen Beispiel zwei Ergebnisse haben möchte



    Ich will das ganze aber mit 2 o. 3 o. 4 Ergebnissen machen.




    Was mache ich falsch?
    Gruß
    Sebbi

    Einmal editiert, zuletzt von Sebbi ()

  • Schritt für Schritt zum Roboterprofi!
  • Versuch mal:


    Zu 1. Beispiel
    --------------------------------------------------------------------------------
    GLOBAL DEF sepp1(Zahl1 :in,Zahl2 :in,Summe :out,Summe1 :out)
    REAL Zahl1, Zahl2, Summe, Summe1

    Summe=Zahl1+Zahl2
    Summe1=Zahl1-Zahl2


    END
    --------------------------------------------------------------------------------


    Zu 2. Beispiel
    --------------------------------------------------------------------------------
    GLOBAL DEFFCT REAL Sepp1(Zahl1:in,Zahl2:in)


    REAL Zahl1, Zahl2, Summe

    Summe=Zahl1+Zahl2


    RETURN(Summe)


    ENDFCT
    --------------------------------------------------------------------------------


    Benutze das "Global" nur wenn es ein Unterprogramm in einem SRC ist.

  • Servus Schmidt
    Du willst das ich in dem Programm wo die Rechnung statt findet ein Globales Unterprogramm definieren!?!?! Das müsste aber doch auch so gehen. Dafür sind doch die funktionen gedacht, oder nicht?!?!?!


    Call by Reference <-heist das doch oder


    Mein zweites Beipiel läuft übrigens auch, das war noch die Abgespeckte Version ich wollte das ganze jetzt mit 2 oder mehr augabe Parameter machen, mit mehreren Eingabe Parametern ist ja auch kein Problem!


    Gruß
    Sebbi

  • mal ne simple vermutung in den raum geworfen:


    statt


    RETURN(Summe)
    RETURN(Summe1)


    mal
    RETURN(Summe, Summe1)


    geht das?

    200% Override ... irgendwas klingt hier komisch ... und irgendwie riecht es auch ...<br /><br />Abkühlzeit Bremsen Achse 2: 57 Sekunden :D

  • ok, das war jetz quatsch (hab es grad offline probiert)

    200% Override ... irgendwas klingt hier komisch ... und irgendwie riecht es auch ...<br /><br />Abkühlzeit Bremsen Achse 2: 57 Sekunden :D

  • @Sebbi


    Du kannst selbstverständlich ein eignes SRC für das Programm verwenden, dann aber ohne "Global" meinte ich.
    das "Global" wird dann nötig wenn du z.B. eine SRC verwendest mit unterschiedlichsten Funktion und Unterprogrammen drin (eine Art "Library" an Funktionen)


    z.B. "Library.src"
    -------------------------------------------------------------------------------------
    DEF Library( )


    END


    GLOBAL DEF sepp1(Zahl1 :in,Zahl2 :in,Summe :out,Summe1 :out)
    REAL Zahl1, Zahl2, Summe, Summe1

    Summe=Zahl1+Zahl2
    Summe1=Zahl1-Zahl2


    END
    -------------------------------------------------------------------------------------

  • OK


    ich guck mir das morgen noch mal an, habe heute sehr zeitig feierabend gemacht!


    Und der Aufruf im letzten Beispiel OrangeApps währe dann ganz einfach


    sepp1(4.5,1.5,Ergebnis1, Ergebnis2)



    Danke an euch, bis morgen!

  • Andere Möglichkeit:


    $config.dat:


    STRUC zweiReal real zahl1, real zahl2


    und dann das Programm:
    Global DEFFCT zweireal (sepp1: IN, sepp2: IN)
    real sepp1,sepp2
    zweireal seppi


    seppi.zahl1 = sepp1+sepp2
    seppi.zahl2 = sepp1-sepp2
    return seppi
    endfct


    klappt todsicher. Wenn Du das mit mehreren Ergebnissen machen willst, dann kannst du ja locker dein STRUC aufblasen und dann dir Ergebnisse auf einen Schlag einsammeln.


    Ich hoffe, das war verständlich. Didaktik ist nicht grad meine Stärke.


    Gruß

    Weniger als 100% wird nicht akzeptiert :)

  • robodoc


    also ich habs zumindest verstanden ;)
    elegante lösung!!! gefällt mir

    200% Override ... irgendwas klingt hier komisch ... und irgendwie riecht es auch ...<br /><br />Abkühlzeit Bremsen Achse 2: 57 Sekunden :D

  • Servus zusammen


    Erstmal danke für eure Mühe die ich euch gemacht habe! Ja verstanden schon aber Robodoc's Beispiel hat ja auch nur ein Ergebnis. Was ich halt nicht ganz verstehe ist man kann mehrere OUT Parameter vergeben was kann man mit diesen machen? Siehe Auszug aus der Doku.


    Gruß
    Bastian

  • Das dient dazu, genau das zu machen, was Du laut Deinem ersten Post
    vorhattest. Da stimmt nur eine Kleinigkeit nicht:


    falsch:
    DEFFCT sepp1(Zahl1:in,Zahl2:in,Summe:out,Summe1:out)
    richtig:
    DEF sepp1(Zahl1:in,Zahl2:in,Summe:out,Summe1:out)


    Ersatzlos streichen:
    RETURN(Summe)
    RETURN(Summe1)

  • noch kurz:


    Code
    RETURN


    Bricht das aktuelle Unterprogramm ab. Wenn es sich dabei um eine Funktion handelt, wird noch der Wert nach RETURN als Rückgabewert übergeben.


    Code
    myVar:IN


    Definiert den Parameter als 'by Value'. Das heisst, dem Unterprogramm wird nur der effektive (Zahlen)wert übergeben.


    Code
    myVar:OUT


    Definiert den Parameter als'by Reference'. Das heisst, dem Unterprogramm wird die (Speicher)Adresse der angegebenen Variablen übergeben. Was dem Unterprogramm den direkten Zugriff auf diese Variable ermöglicht.

  • Hallo,


    ich denke das meine Frage hier her passt:


    habe in einem Programmablauf einen Aufruf mit:
    Bearb_Rech (5)


    Ist das ein Unterprogramm-Auruf und was bedeutet die Zahl in der Klammer?


    Grüße

  • ist ein wert der übergeben wird. dein unterprogramm wird verschiedene funktionen haben. was die 5 genau macht, musst du aus deinem unterprogramm entnehmen.


    schau mal in der definitionszeile des unterprogramms, in welche variable der wert geschrieben wird, dann kannst du das besser nachverfolgen.

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

    Einmal editiert, zuletzt von Anubis ()

  • Sehr wahrscheinlich wird diese Zahl im Unterprogramm in eine Integervariable eingelesen und anschliessend in einer Switch/Case - Anweisung ausgewertet.

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden