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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: String in Datei abspeichern / Save String to Textfile

  1. #11
    Registriert seit
    13.12.2011
    Beiträge
    1.402
    Danke
    146
    Erhielt 158 Danke für 149 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Als Funktionsblock, wie in Deinem Beispiel geht es, als Funktion nicht, aus dem Grund den Koslovski genannt hatte, dann müsstest Du Step als statische Variable deklarieren.
    Ich hatte in Main eine Instanz Deines FBs angelegt und diesen da dann immer aufgerufen und es lief.

  2. #12
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Problem scheint gerade zu sein, dass ich die Datei durch einmaliges aufrufen eines Befehls (steigende flanke) erzeugen möchte. jedoch funktioniert das ganze gerade nur, wenn es in der Hauptschleife der Main aufgerufen wird. Gibt es hier eine elegante Lösung, das irgendwie hinzukriegen?

  3. #13
    Registriert seit
    13.12.2011
    Beiträge
    1.402
    Danke
    146
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Kannst Du da mal konkreter werden?
    Dein FB kann nicht nur einmal aufgerufen werden, dieser muss immer wieder aufgerufen werden, bis alle Schritte durch sind.

    Von irgendwas mit Internetzugang gesendet.

  4. #14
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das ganze sieht bisher wie folgt aus:

    Ich habe in meiner Main eine Abfrage, ob eine Nachricht per UDP Protokoll eingegangen ist.
    wenn dies der Fall ist, soll eine Routine ausgeführt werden, in der die empfangene Nachricht in einer Datei gespeichert wird.
    Danach soll die Main wieder von vorne beginnen.
    Das bedeutet für mich, dass ich in irgendeiner Form eine Schleife um meine Instanz des Funktionsblocks brauche.
    Jedoch weiß ich nicht, wie ich das geschickt anstellen soll.

  5. #15
    Registriert seit
    13.12.2011
    Beiträge
    1.402
    Danke
    146
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Die SPS soll also entweder empfangen oder in die Datei schreiben, aber niemals während des Schreibens neue Daten empfangen?

    Von irgendwas mit Internetzugang gesendet.

  6. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von bartsimpson Beitrag anzeigen
    Das bedeutet für mich, dass ich in irgendeiner Form eine Schleife um meine Instanz des Funktionsblocks brauche.
    Jedoch weiß ich nicht, wie ich das geschickt anstellen soll.
    Die "Schleife" gibt es doch schon als "äußere Schleife", indem Deine Main immer wieder aufgerufen wird. WHILE-Schleifen werden in SPS nicht verwendet, SPS werden anders programmiert. Dein Programm muß sich nur merken, daß es mit der Erfüllung einer Aufgabe beschäftigt ist, daß es einen Prozess angestoßen hat und nun auf die Fertig-/Rückmeldung wartet - allerdings nicht tatenlos wartet. Da "guckt" das Programm einfach immer wieder kurz vorbei, ob die Rückmeldung vorliegt, schaltet ggf. zum nächsten Schritt der Aufgabe und wendet sich weiteren Aufgaben zu.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von bartsimpson Beitrag anzeigen
    Ich habe die Switch anweisung mit
    Code:
    WHILE (Step<7) DO
    Anweisungen wie oben
    END_WHILE
    umschlossen, funktioniert nach wie vor nicht.
    Das mußt Du anders formulieren, z.B. etwa so:
    Code:
    Main:
    +--+
    |  |
    ^  v
    |  IF bUDP_Message_empfangen THEN bMessage_speichern_aktiv := true ; END_IF;
    ^
    |  MyFB(bMessage_speichern_aktiv, ...)
    ^
    |  IF NOT MyFB.busy THEN bMessage_speichern_aktiv := false ; END_IF;
    ^  |
    +--+
    
    
    FUNCTION_BLOCK MyFB
    
      IF Flanke(bMessage_speichern_aktiv) AND Step = 0 THEN Step := 1
    
      CASE Step OF
        1: fileinstance(bExecute:=FALSE); ...
        2: ...
        3: ...
        n: IF NOT filecloser.bBusy THEN Step:=0; END_IF
      END_CASE
    
      busy := Step <> 0;
    
    END_FUNCTION_BLOCK
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    bartsimpson (08.02.2016)

  9. #18
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Oliver und Harald,
    habe das Problem jetzt dank eurer Hilfe gelödt bekommen.
    Die Lösung sah jetzt so aus, dass mein Functionblock die Variablen bExecute und bBusy enthält, und einfach immer wieder aufgerufen wird.
    Gruß, Bart

  10. #19
    Registriert seit
    04.09.2012
    Beiträge
    54
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo, Bartsimpson!
    Wenn Du die 3 instanzen außerhalb der case anweisung aufrufst, sollte es gehen:
    fileinstance();
    filewriter();
    filecloser();
    case step of
    1: fileinstance.bExecute:=true;
    ....
    else
    ....;
    end_case

  11. #20
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Caroli,
    ist Dir aufgefallen, daß die Instanzen immer zweimal aufgerufen werden?
    Wie würdest Du das lösen? Mehr CASEs?

    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. String bzw. Name einer Datei hochzählen
    Von KingHelmer im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 22.10.2014, 11:11
  2. String mit Timer in CSV Datei schreiben.
    Von umpalumpa im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 04.07.2014, 11:02
  3. Antworten: 50
    Letzter Beitrag: 09.08.2012, 09:31
  4. String in eine Datei schreiben beim CP
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 18
    Letzter Beitrag: 30.11.2010, 08:53
  5. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54

Stichworte

Lesezeichen

Berechtigungen

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