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

Ergebnis 1 bis 4 von 4

Thema: Strukturierter Text - "static" Variablen wie in C

  1. #1
    Registriert seit
    14.08.2014
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi ,

    ich arbeite gerade das erst mal mit ST und will eine C-Funktion in eine ST-Funktionsblock überführen.
    Dazu habe ich folgende Frage:
    In der C - Funktion habe ich "static" Variablen und Arrays benutz.
    Ein Beispiel:
    static uint16_t IS_Cnt[4] = {0, 1500, 1000, 500};

    Wie deklariere ich das korrekt in ST? Also beim ersten Funktionsaufruf sollen die Anfangswerte übernommen werden und für alle weiteren Aufrufe sollen die jeweils letzen Werte gespeichert bleiben.
    Mein Ansatz ist das hier:

    VAR
    IS_Cnt[0..3]: INT := [0, 1500, 1000, 500];
    END_VAR

    Funktioniert das??
    Ich habe leider keine Möglichkeit es Auszuprobieren . Daher bitte ich um eure Hilfe.

    MFG
    Omnivore
    Zitieren Zitieren Strukturierter Text - "static" Variablen wie in C  

  2. #2
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Code:
    IS_Cnt : ARRAY [0..3] OF INT := 0,1500,1000,500;

    Die Suche spukt z.B. folgendes aus (da kommen auch normale Array drin vor nicht nur zweidimensionale): http://www.sps-forum.de/beckhoff-cod...en-arrays.html
    If you open your Mind too much, your Brain will fall out.

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Vom Prinzip her durfte das funktionieren, hängt aber davon ab wie du die static-Variablen in C genutzt hast ob das Ergebnis das ist was du haben willst.

    Wenn die C-Funktion von verschiedenen Stellen aus aufgerufen wird, arbeiten alle Aufrufe auf den gleichen statischen Daten. Wenn du das Verhalten in ST auch haben möchtest, muss bei den Aufrufen des Funktionsbausteins immer die gleiche Instanz verwendet werden.

    Das C-Äquivalent zu einem ST-Funktionsbaustein sieht etwas anders aus. Dort würde man einer Funktion einen Zeiger auf die Instanzdaten (IN, OUT, STAT) übergeben auf denen die Funktion arbeitet. Oder in C++ wäre das einfach eine Klasse.

  4. #4
    Omnivore ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2014
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die beiden schnellen Antworten!
    Der Link von zotos hilft mir auch gleich bei einer anderen Fragestellung, nämlich wie ich sehr große Array mit bestimmten werten initialisieren kann.

    @Thomas_v2.1: Ja im Prinzip ist dieses Verhalten erlaubt, da ich die Funktion / den Funktionsbaustein nur einmal pro Durchlauf meines Hauptprogramms aufrufe, also die Funktion eh immer an der selben stelle aufgerufen wird.
    In meinem C-Code habe ich die Funktion auch eher der Übersichtlichkeit wegen geschrieben. Und jetzt ist mein Chef auch nur an dem Algorithmus aus der C-Funktion in ST interessiert und dürfte sie später ähnlich verwenden.
    Danke für dein Feedback!

    Viele Grüße aus München

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 26.04.2012, 15:04
  2. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  3. Bool-Variablen "Sx.x" aus S7-200 auf MP277 darstellen
    Von ChristianVogel im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.11.2010, 18:08
  4. Suche Buch zu "Structured Text"
    Von MaxHeadroom im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 18.01.2010, 10:26
  5. Was ist "Strukturierter Text"
    Von andygts im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 28.11.2009, 13:18

Lesezeichen

Berechtigungen

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