FC oder FB überladen? Oder Datentyp Union vorhanden?

Benjamin
2006-12-07
2006-12-08
  • Benjamin - 2006-12-07

    Hallo Zusammen,

    habe ich unter Codesys eigentlich die Möglichkeit selbst geschriebene Funktionen zu überladen? Die vorhandenen Operatoren (+, -, SHL...) sind ja alle überladen.

    Ich wollte mir einen Baustein "Skalieren" erstellen, der mir alle Möglichkeiten an Ein- und Ausgangskombinationen abdeckt ohne dass ich daran denken muss ob ich jetzt Skalieren_int_to_real oder Skalieren_int_to_int aufrufen muss.

    Alternativ wäre auch eine Einzige Funktion möglich, bei der erst während des Compilerlaufs ermittelt wird, welchen Typ die Variablen an Ein- und Ausgang besitzen. Unter C würde ich ein Union definieren. Eine Variable als ANY zu definieren funktioniert schonmal nicht.

    Gibts da was in die Richtung?

    Gruß

    Benajmin

     
  • Anonymous - 2006-12-07

    Originally created by: Bernhard Werner

    Hallo Benjamin,

    es gibt kein überladen, es gibt keinen Datentyp ANY und es gibt leider auch keine UNION in CoDeSys 2.3.

    Wenn du deinen Baustein in LREAL realisierst, dann kannst du den Inputs alle Zahldatentypen zuweisen, nur der Output muss entsprechend gecastet werden.

    Wenn du einen FB schreibst dann kannst du wenigstens alle erforderlichen Datentypen als input definieren, und je nach Belegung anders rechnen.

    so in etwa:

    inst(int_in := int_val, int_out => int_erg)
    
    inst(real_in := reeal_val, real_out => real_erg)
    

    Das würde mir auf die Schnelle dazu einfallen.

    In der 3.0 haben wir dieses Manko beseitigt, zumindest gibt es da UNIONs.

    Bernhard

     
  • Benjamin - 2006-12-08

    Muss ich dann nochmal schauen, ob das dann mit den Unions so hinhaut.

    Den Baustein immer mit LREAL zu beschalten und dann jede Variable zu casten geht zwar, ist aber auch viel Schreibarbeit.

    Verschiedene Ein-/Ausgagsparameter.. Darauf bin ich noch nicht gekommen. Mal sehen, ob mir das gefällt.

    Gruß

    Benjamin

     

Log in to post a comment.