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

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

Thema: Beckhoff systemtime

  1. #1
    Registriert seit
    30.09.2010
    Beiträge
    16
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi!
    Hab ein Problem mit dem FB NT_GetTime von Beckhoff. und zwar funktioniert er beim ersten Durchlauf, aber beim zweiten wird das BusyFlag nicht mehr gesetzt und somit wird die Zeit nicht aktualisiert. Viel komischer ist es´, dass es gestern noch funktioniert hat.
    Hoffe ihr könnt mir helfen!

    Vielen Dank!

    Code:
    Case Step of
    
    (*Davor passiert auch noch was *)
    
    4:
        NT_GetTime1( NETID:= '5.4.36.239.1.1', START:= TRUE, TIMESTR=> tTime);
        IF NOT (NT_GetTime1.BUSY) THEN
            IF ( NT_GetTime1.ERR ) THEN
                nErrId :=  NT_GetTime1.ERRID;
                bError := TRUE;
                Step := 50;
            ELSE
                Step := Step + 1;
            END_IF
        END_IF
    
    
    5:
        NT_Gettime1.START := FALSE;
        (* Hier kommt noch mehr *)
    End_Case
    Zitieren Zitieren Beckhoff systemtime  

  2. #2
    Registriert seit
    19.11.2010
    Ort
    Dresden
    Beiträge
    45
    Danke
    0
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo,

    sieht soweit ganz gut aus. Aber steht in deinem Step50 (Error) auch:
    Code:
    NT_Gettime1.START := FALSE;

  3. #3
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Du setzt NTGetTime1.START:=False wenn Step=5 ist. Das kriegt der NTGetTime1-FB aber gar nicht mit, weil Du ihn nur aufrufst, solange Step=4 ist.
    Entweder rufst Du den NTGetTime1 auch bei Step=5 auf, oder besser, Du nimmst den Aufruf ganz aus der CASE-Anweisung raus und rufst ihn in jedem Programmzyklus auf, dann aber mit START:=Step=4.

  4. #4
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Du kannst deine Case auch so lassen und machst dann im Schritt 5 einfach

    Code:
    NT_Gettime1(START := FALSE);
    A programmer is just a tool which converts caffeine into code.

  5. #5
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Und bei Step=50 noch einmal
    Code:
    NT_GetTime1(START:=FALSE);
    Ich bin gegen bedingte Aufrufe solcher asynchron zur PLC arbeitenden Bausteine, aber an diesem Punkt wird es natürlich schon philosophisch.

  6. #6
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Und bei Step=50 noch einmal
    Code:
    NT_GetTime1(START:=FALSE);
    Ich bin gegen bedingte Aufrufe solcher asynchron zur PLC arbeitenden Bausteine, aber an diesem Punkt wird es natürlich schon philosophisch.
    Also am Besten packt er es in Step = 4 nach dem inneren END_IF.
    A programmer is just a tool which converts caffeine into code.

  7. #7
    FredlFesl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.09.2010
    Beiträge
    16
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hab es jetzt so gelöst! Vielen Dank für eure Hilfe!

    Code:
    CASE Step OF
    ...
    3:
    ....
    NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE,TIMESTR=> tTime);
    Step := Step + 1;
    
    4:
    NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := TRUE, TIMESTR=> tTime);
    
     IF NOT (NT_GetTime1.BUSY) THEN
         IF ( NT_GetTime1.ERR ) THEN
              nErrId :=  NT_GetTime1.ERRID;
              bError := TRUE;
              NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE, TIMESTR=> tTime);
              Step := 50;
          ELSE
              Step := Step + 1;
              NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE, TIMESTR=> tTime);
           END_IF
      END_IF
     
    5:
    ....
     
    END_CASE

  8. #8
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Zitat Zitat von FredlFesl Beitrag anzeigen
    Hab es jetzt so gelöst! Vielen Dank für eure Hilfe!

    Code:
    CASE Step OF
    ...
    3:
    ....
    NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE,TIMESTR=> tTime);
    Step := Step + 1;
     
    4:
    NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := TRUE, TIMESTR=> tTime);
     
     IF NOT (NT_GetTime1.BUSY) THEN
         IF ( NT_GetTime1.ERR ) THEN
              nErrId :=  NT_GetTime1.ERRID;
              bError := TRUE;
              NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE, TIMESTR=> tTime);
              Step := 50;
          ELSE
              Step := Step + 1;
              NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE, TIMESTR=> tTime);
           END_IF
      END_IF
     
    5:
    ....
     
    END_CASE
    Noch ein paar Kleinigkeiten der Schönheit halber:
    Du kannst zu Beginn von Step=4 beim Aufruf von NT_GetTime1 die Parameter weglassen, und wenn du das Rücksetzen des Bausteins nach deiner IF-Schleife machst, sparst du einen Aufruf.

    Code:
    CASE Step OF
    ...
    3:
      ....
      NT_GetTime1( NETID:= '5.4.36.239.1.1', Start := FALSE,TIMESTR=> tTime);
      Step := Step + 1;
     
    4:
      NT_GetTime1();
      IF NOT (NT_GetTime1.BUSY) THEN
        IF ( NT_GetTime1.ERR ) THEN
          nErrId :=  NT_GetTime1.ERRID;
          bError := TRUE;
          Step := 50;
        ELSE
          Step := Step + 1;
        END_IF
        NT_GetTime1(START := FASE);
      END_IF
     
    5:
    ....
     
    END_CASE
    A programmer is just a tool which converts caffeine into code.

  9. #9
    FredlFesl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.09.2010
    Beiträge
    16
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Aber wenn ich im Step 4 die Parameter weglasse wird doch NT_GetTime1. Start nicht auf TRUE gesetzt und der FB somit nicht aktiviert.
    Hab es gerade probiert.

  10. #10
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von FredlFesl Beitrag anzeigen
    Aber wenn ich im Step 4 die Parameter weglasse wird doch NT_GetTime1. Start nicht auf TRUE gesetzt und der FB somit nicht aktiviert.
    Hab es gerade probiert.
    Stimmt habe es gerade auch gesehen. Ich habe den Aufruf in Step=3 als Start:=TRUE verwechselt.

    Dann ist aber die Frage, wieso wird der Baustein in Step=3 zurückgesetzt? Wird er davor schon irgendwo verwendet?
    A programmer is just a tool which converts caffeine into code.

Ähnliche Themen

  1. Beckhoff und LUX
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 28.05.2009, 20:09
  2. Beckhoff K-Bus
    Von cas im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 04.02.2009, 10:26
  3. Beckhoff - ADS.ocx
    Von phil87 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 29.09.2008, 23:04
  4. Beckhoff CX und SQL
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 06.03.2008, 11:21
  5. Beckhoff
    Von Wilhelm im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 06.09.2005, 00:17

Lesezeichen

Berechtigungen

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