Step 7 IEC Timer in Multiinstanz läuft nicht

matziane

Level-1
Beiträge
120
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,
stehe gerade etwas auf dem Schlauch.

Habe in einem FB mehrere Aufrufe eines FBs welchen ich jeweils als Multiinstanz aufrufe, insgesamt 45 Stück.
In diesem Multiinstanz FB verwende ich einen IEC Timer TON SFB 4.

Dieses ganze Projekt habe ich am Arbeitsplatz mit PLCSIM erstellt, dort lief alles ganz sauber.
In der CPU, einer 317-2 PN/DP 6ES7 317-2EK14-0AB0 läuft dieser IEC Timer nicht.

Habe im Instanz DB des aufrufenden Bausteins geschaut, Zeit steht drin und der IN Eingang des Timers kommt auch.
Aber er läuft nicht und das nur in der CPU.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... meine Glaskugel ist leider nicht hilfreich im Moment ...
Vielleicht stellst du mal ein bißchen deines Programm-Codes ins Forum, damit man etwas dazu sagen könnte. Pauschal fällt mir dazu erstmal nichts ein ...
 
Im aufrufenden Baustein müssen die Instanzen eventuell initalisiert werden.Also dort mal mit Pt=0ms einmal initialisieren?Komisch.
So stehts in der Anleitung.
 
Ist der IN-Eingang auch mal FALSE oder ab CPU-RUN immer TRUE?
Initialisieren im OB100: es ist nicht so wichtig, den Timer mit T#0s aufzurufen, sondern vor der ersten Verwendung mit IN:=FALSE. Kann das Signal an IN von Anfang an TRUE sein, dann bietet sich das Aufrufen mit FALSE im OB100 an.

Bei so unnormalem Verhalten ist es meist hilfreich, den Programmcode zu sehen...

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Programmcode würde ich gern zeigen, nur wie.....ist alles sehr groß und komplex

attachment.php

Hier der Multiinstanzaufruf des FBs im übergeordneten FB (davon gibt's 45 Stück)
attachment.php

Der Bereich in dem der IEC Timer bearbeitet wird, mit der Deklaration
attachment.php

Und der Teil des IEC Timers im Instanz DB

Das mit dem True und Falsewechsel passiert schon so wie es soll, ist ja auch wichtig wegen der internen Flankenauswertung des IEC Timers. Hatte ich ja auch schon im Verdacht, dass da permanent True ansteht oder das True garnicht durch geht oder so.

Was mit der Initialisierung des PT gemeint ist ist mir noch nicht so ganz klar. Einfach einmal kurz zur Initialisierung jeden PT der 45 IEC Timer mit 0ms beschalten.
So Initialisierungsfunktionen hab ich ja im Programm, da würde ich mich dann einfach mal mit dran hängen.
 
Generell solltest du den Timer aus der bedingten Bearbeitung heraus nehmen.
Da du ihn aber mit "feste_1" im Prinzip immer freigibst sollte das nicht die vorrangige Rolle spielen.
Wenn du das Konstrukt jedoch 45 mal einsetzt - hat es dann jedes Mal einen anderen Instanz-DB ? Oder immer den selben ?

Gruß
Larry
 
Im aufrufenden Baustein machst du zum Bsp.

Un M "Init"
S M "Init"

U M "Init"
FP M "Init_Help"
= M "Init_Flanke"//einmal 0 ms laden

Ruf dann mal im übergeordneten Baustein die Instanz für ein Zyklus mit PT=0 ms. auf.:D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Larry
In der Doku steht ja nichts davon, dass ich mit der Beschaltung des EN die Funktion beeinflusse.
Das sollte dann also meines Erachtens nach keinen Einfluss haben, das ich davor die "Feste_1" hab. Denke ich zumindest, lass mich aber gern eines besseren belehren.

Es ist immer der selbe Instanz DB, aber je ein anderer Bereich im Instanz DB, da es ja in den verschiedenen Aufrufen jeweils Multiinstanzen sind.
attachment.php
attachment.php


Hier mal die Bereiche aus dem Instanz DB von 2 Multiinstanzaufrufen, davon gibt's jetzt noch 43 in dem Instanz DB.

Die Beschaltung mit 0ms zur Initialisierung werd ich mal mit einbauen, kann ja nicht schaden. Vielleicht ist das ja schon des Rätsels Lösung.
 

Anhänge

  • IEC 1.JPG
    IEC 1.JPG
    68,2 KB · Aufrufe: 208
  • IEC 2.JPG
    IEC 2.JPG
    79,1 KB · Aufrufe: 190
Ich bin einfach mal doof: Hast du im vom OB1 die Instanzen mal bis zu deinem Timer verfolgt? Wird der evtl nicht vom OB1 geladen? Wie ists mit anderen Teimern in der gleichen Multiinstanz?
 
Wie machst du den Aufruf des Timers? Wird der gegebenenfalls übersprungen? Wird gegebenenfalls der Aufrufende Baustein nicht ausgeführt (EN bedingung bei FUP/KOP programmierung)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Instanzen werden nur im aufrufenden FB aufgerufen.
attachment.php
Hier mal die Aufrufstruktur ab OB1 mit ein paar Aufrufen der Multiinstanzen.

Der IEC Timer wird nie übersprungen, der wird immer bearbeitet.
Höchstens wird mal der ganze Baustein nicht bearbeitet, da ich in bestimmten Zuständen die Bearbeitung wegschalten muss.
Aber dann wird der gesamte FB nicht bearbeitet, hier in diesem Fall der FB 1017.
attachment.php
 

Anhänge

  • ufrufstruktur.JPG
    ufrufstruktur.JPG
    129,6 KB · Aufrufe: 133
  • FB1017 Enable.JPG
    FB1017 Enable.JPG
    52,2 KB · Aufrufe: 129
Wenn der FB übersprungen wird, dann gehen alle Timer zurück auf 0. könnte das dein fehler sein? (doofe vermutung)
 
Zuletzt bearbeitet:
Die Werte bleiben im Instanz DB bestehen auch wenn er nicht bearbeitet wird.
Spielt eigentlich auch keine Rolle, denn wenn er nicht bearbeitet wird, dann ist eh alles deaktiviert und der FB bzw. seine Multiinstanzen sollen nichts tun.

Habe diese Initialisierungsgeschichte jetzt mit eingebunden, nicht beim Anlauf der Steuerung also im OB100 sondern direkt im Programm über meine schon vorhandene Initialisierung.
Funktioniert auch gut wie ich im InstanzDB sehen kann.

Morgen kann ich wieder an die Anlage ran und dann wird ich sehen ob es daran lag oder Fehler eben doch noch woanders ist.

Aber....bis hier her erstmal sehr vielen Dank an euch für eure Hilfe und Ratschläge.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du den Ganzen Baustein überspringst, dann wird auch der Timer übersprungen. Das kann unvorhergesehene Schwierigkeiten machen. Bausteine überspringen ist uncool.
Wenn du was im Baustein nicht abarbeiten willst mach einen eigenen Enable Eingang dafür.
ggf kriegt dein Timer darum kein False/true übergang mit weil du ihn bei False eh immer überspringst und erst wieder den Baustein aktivierst wenn die bedingung für das IN am Timer schon wieder erfüllt ist.

mfG René
 
@Larry
In der Doku steht ja nichts davon, dass ich mit der Beschaltung des EN die Funktion beeinflusse.
Das sollte dann also meines Erachtens nach keinen Einfluss haben, das ich davor die "Feste_1" hab. Denke ich zumindest, lass mich aber gern eines besseren belehren.

Ganz generell :
Ich sagte ja schon, dass das vermutlich nicht der Verursacher ist. Du solltest dir nur bei der Verwendung von Timern eine bedingte Bearbeitung derselben grundsätzlich abgewöhnen.
Timer "stehen" unheimlich darauf, einen eventuell erfolgenden Signalwechsel an ihrem Trigger-Eingang auch mitbekommen zu wollen. Tun sie das mal nicht dann kann das schon zu genau den Ergebnissen führen über die wir da gerade reden ...
Da du den Timer allerdings multiplext - wie machst du denn das Umkopieren der anderen TON-Instanzen ? Ist es sichergestellt, das die jeweilige Instanz ihren Signalwechsel immer mitbekommt ? (Du merkst - wir sind schon wieder bei demselben Thema).
Das Initialisieren mit "T#0" (Vorschlag von silverfreaky) halte ich nicht für zielführend ...

Gruß
Larry
 
Programmcode würde ich gern zeigen, nur wie.....ist alles sehr groß und komplex...
Eventuell als AWL-Quelle anhängen? Die Quellen vom FB1017 und aller darin aufgerufenen Bausteine wäre sinnvoll.

Der Standard-Tipp, alles mal zu reorganisieren (Menü Datei..), könnte hier eventuell auch helfen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuchen wirs mal mit den AWL Quellen, bin gespannt. Sollten im Zip File im Anhang sein.

Und wie schon ganz am Anfang gesagt, das mit dem Timer funktioniert ja, nur nicht in der Steuerung.
Im PLCSIM funktioniert das alles tadellos.
 

Anhänge

  • FB1017.zip
    12,5 KB · Aufrufe: 25
Habe mal die UDTs auch mit rausgezogen, denke mal dass die wichtig sind um es einzubinden.
 

Anhänge

  • UDT.zip
    2,2 KB · Aufrufe: 5
Generell: Hast du im PLCSIM den Test auch mit dem kompletten Programm gemacht? Also inklusive Multiinstanzierung?
Ich frage weil im Screenshot dein FB einen Globalen Instanzdb hat.

Und dann würde ich mal im FB1017 nach dem Aufruf der Instanz diesen Codeblock eintragen
Code:
      CALL  "TIME_TCK"
       RET_VAL:=#TCK // time




      U     #en // statbool muss vom enable des Bausteins noch abgezweigt und zugewiesen werde "="
      FP    #fpen // statbool
      SPBN  aufn
      L     #TCK
      T     #timeen 
aufn: NOP   0


      U     #HW4_unten_Str_5.ON_temp // ON_Temp aus der instanz die du überprüfen willst.
      FP    #fpon_temp
      SPBN  aufn
      L     #TCK
      T     #timestart
aufn: NOP   0

Damit könntest du mal schauen ob IN TON und der Aufruf wirklich nicht im selben Zyklus kommen.

mfg René
 
Zurück
Oben