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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: FIFO Strukturierter Text / TwinCat 2

  1. #1
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich stehe vor folgendem Problem ich versuche gerade mit TwinCat 2 und ST ein ARRAY mit First in First Out zu erstellen.

    Es soll so sein, das sobald ein Signal anliegt, ein STRING in das ARRAY an Pos. 1 geschrieben wird und sobald das gleiche Signal wieder anliegt
    der Vorherige STRING auf Pos. 2 rutscht und der neue STRING auf POS. 1. Ich versuche damit eine Alarmhistroie zuerstellen.


    vielen Dank schon mal für eure hilfe =)
    Zitieren Zitieren FIFO Strukturierter Text / TwinCat 2  

  2. #2
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.719
    Danke
    729
    Erhielt 1.159 Danke für 970 Beiträge

    Standard

    Du schreibst das du eine Alarmhistorie erstellen möchtest. Bevor du selber was programmierst. Hast du eine HMI und wenn ja, welche?
    Die meisten HMIs haben sowas schon an Bord.

  3. #3
    Hendrik ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Habe ein HMI (CP 6606-0001-0020 ) aber brauche ein ARRAY um später einen Datenaustausch/Export möglich zu machen.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Na... das ist doch nichts Dramtisches ...

    Du baust dir zunächst einen FB mit einem Array_of_String in der entsprechenden Größe.
    Dieser FB hat dann einen IN-Parameter vom Typ Bool als Trigger für die Übernahmen des neuen Strings, vielleicht noch einen OUT-Parameter vom Typ Bool als Feedback, dass das geschehen ist.
    Dann brauchst du noch einen IN-Parameter vom Typ String, der ja den neuen String repräsentiert.
    Was du dir noch überlegen mußt ist, was du mit dem String machst, den du irgendwann einmal aus deinem Array heraus-schiebst - wird vielleicht ein OUT-Parameter deines FB.
    Nun machst du dir in dem FB eine Flankenauswertung auf den Trigger (damit dieser nur bearbeitet wird wenn Trigger = True und Flanke noch nicht = True - Flanke ist somit eine STAT-Bool).
    Ist das gegeben (also Trigger and not Flanke) dann schiebst du dir in einer Schleife deine Array-Inhalte um eins nach oben (also von hinten nach vorne) und schreibst dann den neuen String bei Index 1 in das Array.

    Versuch mal, dass als Code umzusetzen ...

    Gruß
    Larry

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Du kannst auch mal in die Oscat-Library (findet man leicht mit Google) schauen, die bringt viele Funktionen mit und im Bedarfsfall kann man sich diese als "Vorbild" nehmen. FIFO für numerische Werte sind auf jeden Fall enthalten, diese für Strings anzupassen dürfte nicht schwer sein.
    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

  6. #6
    Hendrik ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Hey Larry ich bin leider noch sehr sehr neu in sachen ST.

    Ich versuch deinen Text gleich mal zu Programmieren habe aber noch eine Frage die Fanke von der du Sprichst ist das eine Positive oder Negative

    und kannst du mir noch einen Tipp geben wegen den Trigger?
    Soll das In_Bool einfach nur ein kurzer Signal erzeugen? z.b. mit einem Pulsgeber? oder wie ist das gemeint?

    Danke und grüße
    Hendrik

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Naja,
    in ST hast du ja (zumindestens für diesen Anwendungsfall) nicht wirklich positive oder negative Flanken. Ich würde es vom Code her ggf. so machen :
    Code:
    if Trigger and not Flanke then
       // Daten umschaufeln
    end_if ;
    Flanke := Trigger ;
    Das IN-Bool soll ein Signal sein, dass du dann anlegst, wenn du einen neuen String in dein Array hineinschieben möchtest - also eigentlich kein Pulsgeber oder so sondern m.E. eher etwas, dass das deinem Restprogramm irgendwie generiert wird ... (Situations-abhängig)

    Gruß
    Larry

  8. #8
    Hendrik ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Hallo Larry
    Habe das jetzt folgendermasen mal programmiert:
    (Leider weis ich an dieser Stelle noch nicht wie ich das so als CODE fenster darstelle (nehme gerne gleich alle Tipps an)

    FUNCTION_BLOCK TEST
    VAR_INPUT
    Trigger:BOOL;
    String_Neu:STRING;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    ARRAY1:ARRAY [0..100] OF STRING;
    index:INT;
    Flanke: BOOL;
    END_VAR

    IF Trigger AND NOT Flanke THEN
    ARRAY1[index+1]:=ARRAY1[index];

    ARRAY1[0]:= STRING_Neu;
    END_IF
    Flanke := Trigger;


    Leider funktionierte es irgendwie nicht wenn ich (Fanke:= Trigger Dort stehen haben ohne diese Anweisung läuft es. Befürchte aber das es später zu problemen kommen könnte:S

    Mfg Hendrk

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    für die Code-Darstellung nimmst du die Code-Tags. Die erhältst du z.B. wenn du die Taste im Antwortfenster mit dem Doppelkreuz drauf (#) drückst.

    Zu deinem Code :
    Ich hatte da im Beitrag #4 auch noch etwas von einer Schleife geschrieben ... du willst ja schließlich ALLE Array-Elemente aufschieben ...
    Das sähe dann z.B. so aus :
    Code:
    for i := 100 to 2 by -1 do
       ARRAY1[i]:=ARRAY1[i-1];
    end_for ;
    ...

    Gruß
    Larry

  10. #10
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Rufst Du den FB in jedem Zyklus auf oder nur dann, wenn ein neuer String eingetragen werden soll? Im zweiten Fall kann die Flankenauswertung innerhalb des FB's nicht funktionieren und ist auch überflüssig.
    Ausserdem brauchst Du für das Verschieben der FIFO-Daten eine Schleife, denn jetzt kopierst Du nur ARRAY1[0] nach ARRAY1[1]:
    Code:
    FOR index:=100 TO 1 BY -1
       ARRAY1[index]:=ARRAY1[index-1];
    END_FOR
    Bei Strings sind das dann aber schon 25600 Bytes, die verschoben werden. Da würde ich eine Lösung vorziehen, bei der nicht die Daten, sondern nur die Schreib-/Lesezeiger verschoben werden.

Ähnliche Themen

  1. FOR-Schleife Strukturierter Text
    Von joern_85 im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 23.07.2013, 11:51
  2. Dynamische Speicherung - TWINCAT Strukturierter Text
    Von justplay im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 03.05.2010, 17:03
  3. Strukturierter Text ????HÄ?????
    Von Pinky im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 22.04.2010, 14:26
  4. For Schleif Strukturierter Text
    Von bluebird277 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 28.01.2010, 20:45
  5. Strukturierter Text
    Von bluebird277 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 21.01.2010, 15:54

Lesezeichen

Berechtigungen

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