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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: TwinCAT am PC (WinXP) Timer (TP) läuft zu schnell

  1. #1
    Registriert seit
    01.04.2013
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein komisches Problem. Und zwar habe ich ein kleines Programm erstellt, welches ein Ausgang kontinuierlich ein und ausschaltet.
    z.B Ausgang ist für 1 Sekunde high, dann für 1 Sekunde low usw.
    Als Timer verwende ich zwei TP Bausteine.

    Das ganze scheint ja zu funktionieren, aber obwohl ich t#1s verwende ist es keine Sekunde, sondern vielleicht 500 ms. Also mir kommt vor, dass das System keine Echtzeit hat. Wenn ich bei einem TP Baustein mir die Werte anzeigen lasse, sehe ich, dass die Startzeit immer um 2 Sekunden erhöht wird --> das stimmt also.
    Wenn ich jetzt z.b die Timer auf 10 Sekunden stelle. Wird immer um 20 Sekunden erhöht (Anzeige), aber wenn ich mit der Uhr stoppe sehe ich, dass es nur zirka 5 Sekunden low und danach 5 Sekunden high ist.

    Zum Testen habe ich noch einen anderen Rechner verwendet (alter Notebook), hier war es genau umgekehrt. Obwohl ich 1 Sekunde einstelle, dauert es hier etwa 2 Sekunden.
    Kann mir hier jemand helfen? Was mache ich falsch?

    LG Ludi
    Zitieren Zitieren TwinCAT am PC (WinXP) Timer (TP) läuft zu schnell  

  2. #2
    Registriert seit
    02.03.2004
    Beiträge
    34
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Guten Morgen

    Am Besten wäre es, wenn Du einen Auschnitt aus Deinem Programm hier zeigen würdest.
    So wird eine Hilfe sonst schwierig.

    Matthias

  3. #3
    ludi81 ist offline Benutzer
    Themenstarter
    Registriert seit
    01.04.2013
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    ich glaube kaum das der Fehler im Programm ist, denn bei einer Steuerung (CX9010) stimmt die Zeit.

    Aber vielleicht irre ich mich ja:
    Prinzipiell habe ich den WARTEN block von folgendem Beispiel verwendet.
    Beckhoff Information System - German

    Code:
    FUNCTION_BLOCK WARTEN(*Dieser Funktionsbaustein kann zum warten verwendet werden*)
    VAR_INPUT
    	ZEIT:TIME;
    END_VAR
    VAR_OUTPUT
    	OK:BOOL:=FALSE;
    END_VAR
    VAR
    	ZAB:TP;
    END_VAR
    
    
    	LD		ZEIT
    	ST		ZAB.PT
    
    
    	LD		ZAB.Q
    	JMPC	marke
    
    
    	CAL		ZAB(IN:=FALSE)
    	LD		ZEIT
    	ST		ZAB.PT
    	CAL		ZAB(IN:=TRUE)
    	JMP		ende
    
    
    marke:
    	CAL		ZAB
    
    
    ende:
    	LDN		ZAB.Q
    	ST		OK
    	RET

    Verwenden tue ich es so:
    Code:
    zeitEin(ZEIT:=t#1s); enmalig
    zeitEin(); kontinuierlich
    zeitEin.OK -> Abbruchbedingung

    Das gesamte Testprojekt ist im Anhang.

    Danke für eure Hilfe
    Ludi
    Angehängte Dateien Angehängte Dateien

  4. #4
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard

    Hi,

    ich meine mich zu erinnern, das es etwas mit dem Powermanagement bei einem Notebook zu tuen hat.
    Man konnte da etwas in der Windows Registrierung anpassen damit Timer laufen.

    Mal bei Beckhoff anfragen, sonst kann ich morgen mal auf meinem Dienstrechner nachschauen. Ich hatte mir da mal etwas notiert.

    Gruß

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von ludi81 Beitrag anzeigen
    Als Timer verwende ich zwei TP Bausteine.
    Ich habe kein TwinCAT, kann mit Deiner ZIP also nichts anfangen.
    Wichtig wäre es, die Aufrufe Deiner 2 Zeitgeber zu sehen (in PLC_PRG ?).

    Rufst Du auch 2 verschiedene Instanzen der TP-Bausteine auf? Oder rufst Du womöglich zweimal die gleiche Instanz des FB WARTEN auf?
    Das von Dir beschriebene Verhalten ist typisch wenn ein Timer im Zyklus zweimal aufgerufen wird.

    PS: Auch wenn der WARTEN-Baustein aus einem Beckhoff-Beispiel stammt - ich mag diese Art Programmierung mit Sprüngen und 3x CALL des TP überhaupt nicht. Ich würde den FB WARTEN etwa so schreiben:
    Code:
    FUNCTION_BLOCK WARTEN
    VAR_INPUT
    	ZEIT:TIME;
    END_VAR
    VAR_OUTPUT
    	OK : BOOL;
    END_VAR
    VAR
    	ZAB : TP;
    	ZAB_EN : BOOL;
    END_VAR
    
    	LDN		ZAB.Q
    	ST		ZAB_EN
    
    	CAL		ZAB(IN:=ZAB_EN, PT:=ZEIT)
    
    	LDN		ZAB.Q
    	ST		OK
    	RET
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    ludi81 ist offline Benutzer
    Themenstarter
    Registriert seit
    01.04.2013
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Mkd,

    wenn es dir keine Umstände macht wäre ich dir für deine Infos dankbar.
    Wenn nicht, werde ich einfach mal bei Beckhoff anrufen.

    Schöne Grüße

  7. #7
    ludi81 ist offline Benutzer
    Themenstarter
    Registriert seit
    01.04.2013
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald,

    also mein Hauptprogramm sieht so aus wie im Bild.

    In der Eingangsaktion "ein" steht:
    Code:
    out1 := TRUE;
    zeitEin(ZEIT:=t#1s);
    In der "ein" Funktion steht:
    Code:
    zeitEin();
    In der Eingangsaktion "aus" steht:
    Code:
    out1 := FALSE;
    zeitAus(ZEIT:=t#1s)
    In der "aus" Funktion steht:
    Code:
    zeitAus();
    Also hier habe ich keine Funktion doppelt verwendet. Ich kann es mir auch irgendwie nicht damit erklären, denn die Startzeit von TP geht ja richtig weiter, aber es ist einfach alles zu schnell.

    Vielen Dank
    Angehängte Grafiken Angehängte Grafiken
    Geändert von ludi81 (28.04.2013 um 21:22 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Hmm, mit Grafcet/Ablaufsprache bei Codesys kenne ich mich nicht wirklich aus.

    Wenn ich Dein Bild und Deine Erklärung richtig verstanden habe, dann werden Deine Zeitgeber (zeitEin, zeitAus) nur in dem jeweiligen Schritt aufgerufen ... hmm ... bedingte Bearbeitung von Timern ist so eine Sache, da muß man höllisch aufpassen, daß die Timer richtig funktionieren. Ist aber hinzukriegen, wenn es nicht anders geht. Deshalb also die "komische" Programmierung des FB WARTEN, wenn man partout keinen Start- bzw. Reset-Eingang herausführen will ... (ich finde diesen Beispielcode aber sowas von an der Praxis vorbei!!! )

    Ich nehme mal an, die "Eingangsaktion" eines Schrittes wird nur einmal beim Aktivieren des Schrittes aufgerufen. Dann werden die Timer jeweils nur im Aktivierungszyklus zweimal aufgerufen und die Zeit wird um einen Zyklus zu kurz - aber nicht um eine halbe Sekunde.

    Jetzt wäre es interessant zu wissen, wie die TP-Bausteine intern funktionieren. Was passiert, wenn die lange nicht aufgerufen werden? Ich schätze, die Timer laufen intern trotzdem weiter und wenn sie in der Eingangsaktion vermeintlich neu gestartet werden, ist in Wahrheit schon eine halbe Sekunde abgelaufen. Das würde das merkwürdige Verhalten bei Dir erklären.

    --> Ich schätze, Du MUSST in Deinem Programm in jedem sequentiellen Schritt immer die gleiche Instanz von WARTEN benutzen (PS: nicht in Parallelschritten!). Also nur eine WARTEN-Instanz, nicht zeitEin() und zeitAus(). Und den Aufruf der WARTEN-Instanz in den Eingangsaktionen weglassen. Am besten die ganze Eingangsaktion weglassen.

    Ich würde das ganze mal so ändern:

    Im Hauptprogramm
    Code:
    VAR
    	warte : WARTEN;
    END_VAR
    Funktion "ein" (hat keine Eingangsaktion)
    Code:
    out1 := TRUE;
    warte(ZEIT:=t#1s);
    Funktion "aus" (hat keine Eingangsaktion)
    Code:
    out1 := FALSE;
    warte(ZEIT:=t#1s);
    Verbesserung: Um ganz sicher zu gehen, daß der Timer im FB WARTEN beim ersten Mal und nach längerer Nichtbenutzung neu startet, würde ich den FB WARTEN sogar umschreiben und TON statt TP benutzen und ein Freigabe- oder Restart-Signal als INPUT oder IN_OUT herausführen. Dann kann man auch mehrere Zeitgeber-Instanzen benutzen und auch verschiedene Instanzen in Parallelschritten. Dann macht ein Neustarten der Zeitgeber in Eingangsaktionen Sinn.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    ludi81 ist offline Benutzer
    Themenstarter
    Registriert seit
    01.04.2013
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald,

    ich habe alles genau so geändert wie du geschrieben hast, es hat aber immer noch das gleiche Problem. Da es ja bei einem CX9010 funktioniert, glaube ich dass es eher so was ist wie MKD geschrieben hat.
    Oder wie auch hier beschrieben wird: http://www.sps-forum.de/beckhoff-cod...tel-karte.html
    Bei mir ist es aber viel schneller, deshalb glaube ich, dass was mit dem Hyperthreading zu tun hat.
    Weiß jemand wie ich das alles deaktivieren kann?

    Danke

  10. #10
    Registriert seit
    12.08.2010
    Beiträge
    236
    Danke
    57
    Erhielt 118 Danke für 57 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    ...ich finde diesen Beispielcode aber sowas von an der Praxis vorbei!!! ...


    Hallo Ihr,

    Die Ampelschaltung ist wahrscheinlich aus dem ursprünglichen CoDeSys- Handbuch übernommen. Der Versuch war, in einem „kleinen Projekt“ alle Programmiersprachen aufzuführen. Das ist nicht einfach, könnte aber bestimmt eleganter umgesetzt werden.
    Ganz bestimmt sollte man damit nicht den Aufbau für größere Projekte ableiten...

    Zum Zeitproblem:
    http://www.sps-forum.de/beckhoff-cod...-sekunden.html

    LG Cassandra

Ähnliche Themen

  1. Test ob Twincat läuft
    Von Vogei im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 01.08.2012, 12:08
  2. Antworten: 12
    Letzter Beitrag: 25.01.2012, 09:39
  3. TwinCat: Win7 x64 oder Virtual PC mit winXP?
    Von MikeJ im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 27.10.2011, 13:08
  4. Timer läuft nicht, TIA-Portal
    Von pinolino im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.07.2011, 14:51
  5. Timer läuft einfach nicht...
    Von slma im Forum Simatic
    Antworten: 42
    Letzter Beitrag: 16.07.2007, 08:21

Lesezeichen

Berechtigungen

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