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

Results 1 to 7 of 7

Thread: Eingangs- und Ausgangsvariablen in der Main.pou

  1. #1
    Join Date
    05.09.2019
    Posts
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich bin noch relativ neu in SPS, nutze TwinCAT 3 XAE und komme eher aus der c/c++ Ecke. Ich soll mir den alten ST Code eines Kunden vorknöpfen und die Anlage um ein paar kleinere Features erweitern. Dabei bin ich schon ein paar mal über "seltsamen programmierstil" gestolpert. Kommentiert ist der Code natürlich kaum:/ Deshalb bin ich beim folgenden Tema jetzt nicht ganz sicher, ob der Kunde auf der Tastatur ausgerutscht ist oder ob ich noch etwas grundlegendes an SPS nicht verstanden habe:

    In dem Projekt gibt es im wesentlichen eine MAIN.POU die in einem Zyklus von 100ms ausgeführt wird. Diese ruft dann Blöcke und Funktionen auf. Alle Hardware Ein-und Ausgänge sind schön säuberlich in einer Globalen Variablenliste deklariert.
    Der Variablenteil der MAIN.POU sieht ungefähr so aus:
    Code:
    VAR
    [...]
    END_VAR
    
    VAR_INPUT
    [...]
    END_VAR
    
    VAR_OUTPUT
    [...]
    END_VAR
    Die Sektionen sind auch alle drei prall gefüllt. Ich kann aber bei den meisten nur einen mittlbaren Zusammenhang mit einer Periferie sehen. Die Werte der übrigen werden einmal pro Zyklus übertragen auf eine globale IO-Variable.

    Wie ich verstanden habe sind VAR_INPUT und VAR_OUTPUT doch nur für Funktionen und Blöcke gedacht um Parameter mit der aufrufenden Instanz zu kommunizieren. Wie parameter und Rückgabewerte in höheren Programmiersprachen Oder gibt es noch irgend einen Mechanismus, dass der aufrufende Thread Eingangsparameter des entprechenden Programms ändert? In das Thema Einstellungen in den Threads muss ich mich auch noch rein wühlen. Offensichtlich meckert der Kompiler ja nicht, wenn man ihm ein Programm mit input-Variablen vorsetzt aber einen richtigen Sinn ergibt das irgendwie nicht. Korregiert mich.

    Macht es in dem Fall noch einen Unterschied, ob ich die Variablen als VAR oder als VAR_INPUT deklariere?

    Wenn wir schon dabei sind: gibt es eine Möglichkeit in der TcXaeShell, sich alle Linkings zwischen IO-variablen/IO-Devices in einer Tabelle übersichtlich dar stellen zu lassen, ohne sich mühsam durch den I/O-Baum durch klicken zu müssen?

    Besten Dank.
    Last edited by tuxwurst; 12.09.2019 at 08:11.
    Reply With Quote Reply With Quote Answered: VAR_INPUT/VAR_OUTPUT in der Main.pou und I/O-Linkliste  

  2. "In der Baumansicht, unter [Projektname] Project sollte [Projektname] Instance zu finden sein. Wenn du das aufklappst, findest du alle im Projekt deklarierten IO-Variablen. Ob diese mit der Hardware verknüpft sind oder nicht erkennst du am Symbol.
    Über das Kontextmenü der Variablen kannst du dann z.B. zur Definition der Variablen springen oder zum verknüpften IO-Port (wenn eine Verknüpfung existiert)."


  3. #2
    Join Date
    20.12.2015
    Posts
    63
    Danke
    1
    Erhielt 13 Danke für 12 Beiträge

    Default

    In der Tat sinnfrei in Main.POU VAR_INPUT oder VAR_OUTPUT zu deklarieren. Was dieser Wrapper bezwecken soll, ist mir ein Rätstel. Eventuell werden über die Variablen Daten über das Prozessbild (unterschiedliche Tasks) ausgetauscht. Wobei auch dann ergibt VAR_INPUT keinen Sinn.

  4. Folgender Benutzer sagt Danke zu plcSniffer für den nützlichen Beitrag:

    tuxwurst (10.09.2019)

  5. #3
    tuxwurst is offline Neuer Benutzer
    Themenstarter
    Join Date
    05.09.2019
    Posts
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default

    Quote Originally Posted by plcSniffer View Post
    In der Tat sinnfrei in Main.POU VAR_INPUT oder VAR_OUTPUT zu deklarieren. Was dieser Wrapper bezwecken soll, ist mir ein Rätstel.
    Danke. das beruhigt mich.
    Quote Originally Posted by plcSniffer View Post
    Eventuell werden über die Variablen Daten über das Prozessbild (unterschiedliche Tasks) ausgetauscht. Wobei auch dann ergibt VAR_INPUT keinen Sinn.
    Ok. Wie würde das dann funktionieren? etwa so:
    main.pou:
    Code:
    VAR_OUTPUT
      myMsg: String;
    END_VAR
    ----------------------------------------------------------------
    myMsg:="Hello World.";
    sidetask.pou:
    Code:
    VAR
       myCopy:String;
    END_VAR
    ----------------------------------------------------------------
    myCopy:=Main.myMsg;
    dürfte das nicht auch mit einfachen VARs funktionieren?
    Last edited by tuxwurst; 10.09.2019 at 08:25.

  6. #4
    Join Date
    25.11.2010
    Location
    OWL
    Posts
    924
    Danke
    29
    Erhielt 230 Danke für 202 Beiträge

    Default

    Ganz so sinnfrei ist das nicht. Man kann auch aus eínem PRG ein anderes PRG aufrufen. Wird heute nicht mehr so oft getan, sondern man arbeitet lieber mit FBs, um die Segnungen der OOP nutzen zu können.

  7. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    tuxwurst (12.09.2019)

  8. #5
    Join Date
    24.02.2009
    Posts
    1,329
    Danke
    27
    Erhielt 303 Danke für 257 Beiträge

    Default

    "MAIN" ist ein ganz normaler Programmbaustein. Daher kommt er auch mit dem Standard Interface eines Programmbausteins.
    Sänd from mei Kombjudder mitse Dastadurr.

  9. #6
    tuxwurst is offline Neuer Benutzer
    Themenstarter
    Join Date
    05.09.2019
    Posts
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ok. Ich glaube, ich habs verstanden. Da ich den Aufruf der Main von einem anderen PRG hier ausschließen kann, ist es wohl in meinem Falle doch sinnfrei.

    Wie sieht es eigentlich mit meiner anderen Frage aus? Kann ich mir irgendwo eine vollständige Liste aller deklarierten I/O Variablen im Projekt anzeigen lassen, mit deren verlinkten Klemmen/Registern? Also andersherum als im I/O-Baum.

  10. #7
    Join Date
    24.02.2009
    Posts
    1,329
    Danke
    27
    Erhielt 303 Danke für 257 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In der Baumansicht, unter [Projektname] Project sollte [Projektname] Instance zu finden sein. Wenn du das aufklappst, findest du alle im Projekt deklarierten IO-Variablen. Ob diese mit der Hardware verknüpft sind oder nicht erkennst du am Symbol.
    Über das Kontextmenü der Variablen kannst du dann z.B. zur Definition der Variablen springen oder zum verknüpften IO-Port (wenn eine Verknüpfung existiert).
    Sänd from mei Kombjudder mitse Dastadurr.

  11. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    tuxwurst (12.09.2019)

Similar Threads

  1. Replies: 6
    Last Post: 30.08.2017, 17:20
  2. Step 7 Ausgangsvariablen in SCL
    By manseluk in forum Simatic
    Replies: 5
    Last Post: 25.11.2014, 08:14
  3. POU´s exportieren
    By Jense586 in forum CODESYS und IEC61131
    Replies: 2
    Last Post: 05.12.2012, 15:19
  4. Replies: 2
    Last Post: 28.09.2011, 15:28
  5. Laufzeitermittlung OB1 Main Programm und OB 90
    By Mondmann in forum Simatic
    Replies: 2
    Last Post: 25.08.2008, 21:04

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •