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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: Aufruf einer FUNCTION abhängig von einer Eingangsvariablen

  1. #1
    Registriert seit
    26.01.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi.

    Bin ein absoluter Neuling zum Thema TwinCat und Codesys.

    Habe bis dato immer Siemens eingesetzt und möchte mich jetzt mal an Beckhoff herantrauen.

    Nun mein Problem:

    "Ich möchte abhängig von einer Eingangsvariablen eine Function aufrufen."

    Beim Aufruf des Function_Block soll der Name der auszuführenden Function übergeben werden.

    TwinCat 3

    Beispiel:
    ____________________________________________________________
    Function_Block XXX
    ____________________________________________________________
    Var_In
    Baustein : Function;
    End_Var
    ____________________________________________________________

    Baustein();
    ____________________________________________________________



    Ist diese Aufgabe zu lösen ?

    Und wenn "JA", wie ?

    VIELEN DANK IM VORRAUS
    Geändert von SolidPro (26.01.2016 um 14:55 Uhr)
    Zitieren Zitieren Aufruf einer FUNCTION abhängig von einer Eingangsvariablen  

  2. #2
    Registriert seit
    26.11.2012
    Ort
    Gummersbach
    Beiträge
    504
    Danke
    18
    Erhielt 72 Danke für 70 Beiträge

    Standard

    Also wenn ich Dich richtig verstehe möchtest Du einen Baustein aufrufen, aber dessen Verhalten durch eine Variable steuern, nicht durch die Variable steuern OB der Baustein ausgeführt wird.
    Dann ist Dein Ansatz schon ganz in Ordnung. Über die Deklaration einer VAR_INPUT erhälst Du einen Eingang den Du beschalten kannst. Hier könntest Du z.B. eine INT übergeben. Innerhalb Deiner Funktion wird dann je nach übergebener Zahl etwas anderes ausgeführt.

    Wie genau das zu lösen ist hängt von der verwendeten Programmversion sowie der gewünschten Programmiersprache ab.
    Ganz kurz ganz hell
    ganz lange ganz dunkel....

  3. #3
    SolidPro ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.01.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi.

    Ich möchte über die Eingangsvariable entscheiden, welcher Baustein ausgeführt wird.
    Die Eingangsvariable soll den Namen der auszuführenden Funktion beinhalten.

    Der Function_block führt also die Function aus, welche ihm über die Eingangsvariable mitgeteilt wird.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.327
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard

    Hmm, gibt es tatsächlich echten Bedarf für eine solche Art zu programmieren (außer unverständlichen und unrobusten Code zu schreiben)?

    Man könnte einen codierten Modus-Wert übergeben und die verschiedenen Funktionsaufrufe in eine CASE-Anweisung einfügen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    mnuesser (27.01.2016)

  6. #5
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Zitat Zitat von pn/dp Beitrag anzeigen
    hmm, gibt es tatsächlich echten bedarf für eine solche art zu programmieren (außer unverständlichen und unrobusten code zu schreiben)?
    *ack*

    Genau!

  7. #6
    SolidPro ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.01.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Leider nicht zufriedenstellend.

    Der Function_block sollte später für andere zur Verfügung stehen, ohne ihn ändern zu müssen.
    Lediglich die Beschaltung der Var_Input sollte geändert werden.
    Deshalb keine festen Zuweisungen im Function_block. Alles über Variablen.

  8. #7
    SolidPro ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.01.2016
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    *ack*

    Genau!
    Das macht sogar richtig SINN !!!

    Wenn ich den Bedarf nicht hätte, würde ich es wohl kaum programmieren.

    Da steckt später einiges dahinter, was diese Programmierweise auf jeden Fall rechtfertigt.

    Gruß

  9. #8
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Zitat Zitat von SolidPro Beitrag anzeigen
    Das macht sogar richtig SINN !!!

    Wenn ich den Bedarf nicht hätte, würde ich es wohl kaum programmieren.

    Da steckt später einiges dahinter, was diese Programmierweise auf jeden Fall rechtfertigt.

    Gruß
    Dann passt es ja! Es ist eben nur so, dass GENAU bei solchen Beiträgen meist herauskommt, dass der Themenstarter eine abenteuerliche Programmierung umsetzen will und wenn man dann genau fragt was er eigentlich will das Problem einfacher, schneller und besser mittels anderem Weg lösbar ist.

  10. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.264
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Ich denke, das geht nicht, auch wenn ich kein Codesys-Crack bin. Denkbar wäre eine Referenz zu übergeben auf ene Funktion, die dann aufgerufen wird, aber was sollte so etwas bringen? Aber ob Codesys das so kann??? Case-Anweisung, ja das ginge sicher, aber dann stehen die Funktionen fest im Programm. Macht ja aber nichts, denn auch in der vom TE gewünschten Variante, müßten die Funktionen zumindest schon im Programm stehen, also existent sein.

    Ich denke auch wie PN/DP ud borromeus, das Ganze wäre abenteuerlich und in einer SPS eher fehl am Platze, aber bitte, jedem sein Königreich
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  11. #10
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich kann mir schon vorstellen, was der Sinn sein soll aber in dieser Umgebung nicht vorgesehen.

    In manchen Sprachen aus der PC und Rechner Welt ist das möglich, in Oracle ist es sogar möglich, ein Array Element mit einem String zu adressieren. Aber diese "elegante späte Bindung" verbirgt einen gewaltigen Overhead mir Hashtabels und Dictionaries etc.

    Die SPS aber hat in jedem Zustand deterministisch zu reagieren!

    Wenn ich über einen Übergabestring entscheide, welche Funktion ich aufrufe, dann muss deshalb die Funktion bekannt sein schon zum Zeitpunkt des Compilierens und Bindens.

    Ein bedingtes Nachladen mit später Bindung (wie z.B. einer Resource oder einer DLL) gibt es in der SPS Welt absichtlich nicht, denn dann könnte das Nachladen fehlschlagen und eine NULL Referenz entstehen und dann steht die SPS.

    Deshalb wie oben schon erwähnt, einen INT oder eine Enumeration (endliche Menge von Möglichkeiten) als Übergabe und eine CASE Liste mit ggf. einem ebenfalls definierten ELSE Verhalten.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren In IEC nicht vorgesehen  

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 16.12.2015, 15:57
  2. [codesys] variabler SMS Text abhängig von Zustand einer Variable
    Von linsenpago im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 27.02.2013, 13:35
  3. Antworten: 4
    Letzter Beitrag: 22.06.2012, 15:16
  4. OB1 mit Aufruf einer Funktion in SCL
    Von pinolino im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 29.04.2009, 17:18
  5. Antworten: 10
    Letzter Beitrag: 26.11.2007, 16:34

Lesezeichen

Berechtigungen

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