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

Ergebnis 1 bis 4 von 4

Thema: Achsbaustein: AXIS_REF als InOut-Variable

  1. #1
    Registriert seit
    26.10.2011
    Beiträge
    32
    Danke
    8
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bin mal wieder in der Siemens-Welt gelandet und hab folgendes vor:
    Ich habe 4 Achsen, die prinzipiell das Selbe bewerkstelligen sollen. Also möchte ich mir einen FB_Achse erstellen, in dem alle benötigten Bausteine aufgerufen werden. Z.B. MC_Init, MC_MoveAbsolute ect.pp. So mache ich das zumindest in der Beckhoff immer.
    Jetzt gibt's ja da an jedem Baustein die Variable Axis vom Typ AXIS_REF. Diese ist bei den einzelnen Bausteinen eine IO-Variable.
    Diese möchte ich bei meinem FB_Achse nun auch als IO-Variable nach draußen geben, so dass ich schön Instanzieren kann. Ich nennen sie mal iostr_Axis. Wenn ich diese (bzw. das Element Ax darin) nun an die Bausteine Verknüpfen will, mag mich TIA nicht mehr, sondern meckert "Unzulässige Parameterversorgung für Axis.". Deklariere ich selbige Variable als Static ist alles okay. Nur bringt mich das zum instanzieren ja nicht wirklich weiter.

    Hat jemand einen Tipp?
    Zitieren Zitieren Achsbaustein: AXIS_REF als InOut-Variable  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von D-Platoon Beitrag anzeigen
    meckert "Unzulässige Parameterversorgung für Axis."
    Nur elementare Datentypen können von IN_OUT an aufgerufene Bausteine weitergereicht werden.


    Zitat Zitat von D-Platoon Beitrag anzeigen
    Deklariere ich selbige Variable als Static ist alles okay. Nur bringt mich das zum instanzieren ja nicht wirklich weiter.
    Wieso nicht? Du kannst doch Instanzen Deines FB_Achse erstellen.

    Wenn Du denn Deine Achs-Instanzen außerhalb des FB_Achse haben willst, dann müßtest Du am Anfang des FB_Achse die iostr_Axis auf eine lokale Variable kopieren, mit dieser Kopie arbeiten und am Ende wieder auf iostr_Axis kopieren. Und penibel aufpassen, daß die Variablen der FB_Achse nicht zwischen den Instanzen vermischt werden! Im Grunde benutzt Du den FB_Achse dann wie eine FC und die STAT-Variablen dürfen nur wie TEMP-Variablen benutzt werden (sind aber im Gegensatz zu TEMP von außen beobachtbar).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    26.10.2011
    Beiträge
    32
    Danke
    8
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Harald!

    Vielen Dank für deine Ausführungen!

    Zitat Zitat von PN/DP Beitrag anzeigen
    Nur elementare Datentypen können von IN_OUT an aufgerufene Bausteine weitergereicht werden.
    Gut zu wissen! Bin wohl von Beckhoff zu sehr verwöhnt worden - dort gehen auch Strukturen.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wieso nicht? Du kannst doch Instanzen Deines FB_Achse erstellen.
    Ich bin jetzt bei den Bausteinen noch nicht so tief drin. Aber ich war es von Beckhoff gewöhnt, dass ich die Struktur direkt an die Hardware weitergebe. Damit wird dann alles übergeben, was die Achse braucht (Solldrehzahl, Sollposition, Istopsition ect.).
    Deshalb dachte ich, dass das mit dem AXIS_REF auch so ist. Ergo bräuchte ich die Variable außerhalb des Bausteins. Oder bin ich da auf dem Holzweg?

    Mein Problem ist, dass ich noch im Büro am Schreibtisch sitze und die Hardware noch nicht fertig ist, sonst könnte ich schonmal probieren.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wenn Du denn Deine Achs-Instanzen außerhalb des FB_Achse haben willst, dann müßtest Du am Anfang des FB_Achse die iostr_Axis auf eine lokale Variable kopieren, mit dieser Kopie arbeiten und am Ende wieder auf iostr_Axis kopieren.
    Das hatte ich schon befürchtet.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Und penibel aufpassen, daß die Variablen der FB_Achse nicht zwischen den Instanzen vermischt werden!
    Also bei Beckhoff ist eine Instanz in sich abgeschlossen. Was in der Instanz abgearbeitet wird, bleibt auch drinne. Es sei denn, man verweist explizit nach draußen. Ist das bei Siemens anders?
    Bzw. wie könnten sie sich vermischen bzw. wie kann ich es verhindern?

    Grüße,
    Thomas
    Geändert von D-Platoon (26.08.2015 um 10:48 Uhr)

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von D-Platoon Beitrag anzeigen
    Also bei Beckhoff ist eine Instanz in sich abgeschlossen. Was in der Instanz abgearbeitet wird, bleibt auch drinne. Es sei denn, man verweist explizit nach draußen. Ist das bei Siemens anders?
    Bei Siemens kann ungehindert auf alle Instanzvariablen von außen zugegriffen werden. Das wird nur von der Disziplin des Programmierers begrenzt.


    Zitat Zitat von D-Platoon Beitrag anzeigen
    Bzw. wie könnten sie sich vermischen bzw. wie kann ich es verhindern?
    Dein FB_Achse wäre bei Deinem Vorhaben gar nicht "instanziiert" bzw. es gäbe nur 1 Instanz des FB.

    Das Problem: Du willst alles in einen FB packen, der FB kann Static-Variablen haben, man könnte in Versuchung kommen die Static-Variablen als Variablen mit "Gedächtnis" zu nutzen (z.B. für Flankenmerker oder Timer), der FB (die selbe Instanz!) wird dann aber für jede externe Achs-Instanz einmal aufgerufen --> dann arbeitet jede Achs-Instanz mit den Hinterlassenschaften der davor aufgerufenen Achs-Instanz. Bei einem FC besteht diese Gefahr nicht.

    Abhilfe: Für jede Achs-Instanz eine eigene FB_Achse-Instanz benutzen - dann kann aber auch gleich die Achs-Instanz in FB_Achse liegen und müßte dann nicht kopiert werden.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. TIA DB als IO Variable übergeben
    Von Atlas im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.09.2015, 13:36
  2. Antworten: 0
    Letzter Beitrag: 25.02.2014, 17:47
  3. Step 7 Inout-Variable
    Von kuti im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.01.2014, 20:00
  4. Timer mit Instanz als InOut Varíable
    Von blubbi im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 31.01.2013, 20:37
  5. FB Array als OUT Variable
    Von Beckx-net im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.09.2009, 16:41

Stichworte

Lesezeichen

Berechtigungen

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