Step 7 Timer in FB deklarieren ?

Machtnix

Level-2
Beiträge
77
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man in AWL in einem mehrfach verwendeten FB einen Timer deklarieren, dem dann beim Aufruf ein Timer zugewiesen wird ?

Ich hatte mir das so gedacht:

im FB:
...
TOel : TIMER ; // Timer für Öldruckaufbau
...

Beim Aufruf:

CALL #Gebl1(TOel:= "TOel1");

CALL #Gebl2(TOel:= "TOel2");

Nun bekomme ich aber die Fehlermeldung: Ungültige Deklaration bei Symbol Toel

Gibt es eine Möglichkeit für eine gültige Deklaration, evt mit Pointer ?
 
Du solltest einen Timer in der Deklaration verwenden, den es auch gibt! Also z.B. "TON", "TOF" ... bzw. deren SFB und nicht einfach "TIMER". Damit kann S7 nichts anfangen. Im Prinzip das Gleiche wie bei FUP/KOP.

Z.B.:
Code:
VAR
    TOel :       SFB4;   //TON Timer
   ...
END_VAR

Mach' das Ganze mal unter FUP/KOP und erstell Dir 'ne AWL-Quelle. Dann kannst Du Dir das ansehen.



Man kann auch die S7-Timer verwenden und die zu verwendende Timer-Nummer über die Bausteinschnittstelle übergeben, aber schön ist das nicht gerade.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich gehts es nur als VAR_INPUT.
Du musst es ja von aussen Parametrieren können.
Prinzipiell funktioniert es dann auch.
Allerdings würde ich mir auch den anderen Vorschlag an schauen, und testen.

Strebe immer nach der besseren Lösung

Grüße

René

@vollmi: keine Verarsche ich heiße auch so.
 
.

Erstmal schliesse ich mich grundsätzlich hucki (Beitrag#2) und René (Beitrag#5) an.


Aber wenn du es trotzdem wissen willst:

Du musst die Timernummer als Hex-Zahl übergeben,
im Baustein wird der Timer indiziert zum Beispiel so aufgerufen:

SI
T[#zeit_x]
//Die Variable "#zeit_x" ist eine temporäre Variable mit der Timer-Nummer mit dem Datentyp Word.


Allerdings musst du an jedem Bausteinaufruf stets eine andere Timer-Nummer angeben.


.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt hat dir Hucki genau erklärt wie mans richtig macht. Und du willst das trotzdem mit S5 Timern hinpfuschen?
In einem FB?

mfG René

Es geht in diesem Fall um eine Erweiterung eines Programms. Da darin auch sonst Timer verwendet werden, werde ich aus Gründen der Konsistenz
bei diesem Programm dabei bleiben. Außerdem tun sie genau das, was sie sollen, warum ist das dann hingepfuscht ?

Was ist an TON und TOF besser ?
 
Wenn es um die Erweiterung eines Programms geht (zur löblichen Wahrung des Stils), dann versteh ich die Frage nicht,
weil dann hättest du ja nachschauen können, wie es in den bestehenden FBs realisiert wurde.

Bei der Realisierung von wie auch immer gearteten FBs, welche mehrfach aufgerufen werden sollen,
musst du dich mit TON/TOF schlicht nicht um irgendwelche Timer-Nummern kümmern,
und hast auch nicht das Problem bezüglich Timeranzahl an irgendwelche CPU-Eigenschaften gebunden zu sein.
Selbst der mehrfache Aufruf von FBs in denen deinen neuen FBs mehrfach aufgerufen werden ist dann kein Problem mehr.

Mfg
Manuel
 
Wenn es um die Erweiterung eines Programms geht (zur löblichen Wahrung des Stils), dann versteh ich die Frage nicht,
weil dann hättest du ja nachschauen können, wie es in den bestehenden FBs realisiert wurde.

Bei der Realisierung von wie auch immer gearteten FBs, welche mehrfach aufgerufen werden sollen,
musst du dich mit TON/TOF schlicht nicht um irgendwelche Timer-Nummern kümmern,
und hast auch nicht das Problem bezüglich Timeranzahl an irgendwelche CPU-Eigenschaften gebunden zu sein.
Selbst der mehrfache Aufruf von FBs in denen deinen neuen FBs mehrfach aufgerufen werden ist dann kein Problem mehr.

Mfg
Manuel

Das Programm ist von mir. Bisher hab ich Timer nur in FBs eingesetzt, die nur einmal aufgerufen werden. Für komplexere Zeitfunktionen benutze ich eigene FBs oder FCs auf der Basis von Sekunden- oder Minutenimpulsen, die haben dieselben Vorteile wie TON und TOF. Es sind also nicht viele Timer, die ich benutze und die Nummern werden in der Symboltabelle festgelegt, so hab ich kein Problem damit.
 
.

:confused:

Nö, man muß die Timernummer als Timernummer übergeben

Hallo Harald,

eure Flitterwochen hast ihr sicher schön verlebt ?


Aber zur Sache:

Ich bin jetzt nicht an meinem PG und kann nicht konkret nachschauen,
aber ich habe im Hinterkopf, dass man nur eine Nummer als WORD (Ohne T)
an einen Baustein übergibt und ein Timer im Baustein mit dieser Nummer
indiziert aufgerufen werden kann.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man als TIMER deklariert (und in VAR_INPUT geht das ja) geht der Aufruf so wie DN/DP beschrieben hat. Nur bevorzuge ich Symbole statt T123.

Benutzt wird der Timer dann nicht indiziert, sondern einfach mit dem Namen :

... SE TOel;
...
U TOel; = ...
 
.
@ Harald

Habe (leider immer noch ohne PG) einfach mal gesucht und bei
Siemens gefunden, wobei die Variable natürlich gefüllt werden muss:


TIMER indiziert aufrufen, starten und auswerten
Sie können einen Timer über eine Variable mit dem Datentyp WORD indiziert aufrufen. Diese Variable kann
  • eine globale Variable [MW] sein,
  • eine lokale Variable in einem DB [DBW] sein,
  • oder eine temporäre Variable innerhalb eines Bausteins sein.



Den Zugriff realisieren Sie folgendermaßen (Beispiel):
SI
T[MW2]
//Die Timernummer befindet sich im Merkerwort 2, hex-codiert
SI
T[DBW2]
//Die Timernummer befindet sich im Datenbausteinwort 2, hex-codiert
SI
T[#zeit]
//Die Variable "#zeit" ist eine temporäre Variable mit dem Datentyp Word
 
Und an die Stelle, des z.b. [MW] kann nun eine Word aus den VAR_INPUT angelegt werden.
Oder aber der Komplette teil z.b. T[MW] kann durch ein Timer bei drn VAR_INPUT ersetzt werden.

Und so schließt sich der Kreis, den ich glaube das wurde schon relativ am Anfang vom Ersteller selbst so gepostet.

P.s. ne ich glaube ein Word aus dem VAR_INPUT musste dann in TEMP geschrieben werden ....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wobei die Variable natürlich gefüllt werden muss:


TIMER indiziert aufrufen, starten und auswerten
Es geht hier im Thema garnicht um indizierten Timeraufruf. Es wird die "absolute" Timernummer als Datentyp TIMER übergeben.

Doch auch bei indiziertem Timeraufruf "muß" man den Timer-Index nicht als Hexzahl übergeben, eine normal lesbare Dezimalzahl geht auch. Man braucht den Index-Übergabeparameter einfach nur als INT deklarieren. Auch die Index-Variable für "T[#index]" kann vom Datentyp INT sein.

Schlußendlich ist es dem AWL bekanntlich auch egal, ob man beim nötigen MOVE oder L+T vom Eingangsparameter in die TEMP-Variable von INT nach INT oder von INT nach WORD transferiert. Oder wenn man eine Dezimalzahl in den AKKU lädt und dann in eine Word-Variable transferiert. Ein "muss als Hex-Zahl übergeben" existiert nicht.


Nur bevorzuge ich Symbole statt T123.
Das T123 war einfach nur ein Beispiel um deutlich zu zeigen, daß nicht eine Zahl sondern eine Timernummer an den Übergabeparameter geschrieben werden muß. Gib dem T123 ein Symbol und schon ändert sich der Aufruf zu z.B.
Code:
CALL #Gebl1
 TOel:="Mein_S7_Timer"
Da sieht man aber nicht, daß "Mein_S7_Timer" eine Timernummer ist.

Harald
 
Will das noch beantworten.

Es geht in diesem Fall um eine Erweiterung eines Programms. Da darin auch sonst Timer verwendet werden, werde ich aus Gründen der Konsistenz
bei diesem Programm dabei bleiben. Außerdem tun sie genau das, was sie sollen, warum ist das dann hingepfuscht ?

Was ist an TON und TOF besser ?

Die Vorteile sind:
1. Die Schnittstelle wird kleiner
2. Der Baustein ist in sich gekapselt, du kannst ihn also in jedes Programm reinkopieren wie du lustig bist, ob dieses nun im S5 Style geschrieben ist oder ansich schon Objektorientiert und gekapselt ist.
3. Du bist nicht an freie Hardwaretimer gebunden musst dich also auch weniger mit den Hardwaregegebenheiten herumschlagen
4. Wenn der Baustein funktioniert wird der in einer S7-300 recht einfach auch in einer 400 1500 1200 funktionieren.

Hab ich schon erwähnt?
Die Schnittstelle wird kleiner. Alles was man nicht anhängen muss, kann nicht falsch angehängt werden.
Pulstimer sind schön und gut, aber es braucht wieder einen zusätzlichen Schnittstellenanschluss. Die SPS muss einen entsprechenden Pulsmerker projektiert haben etc. etc. Und wozu? Um ein bisschen Speicher und CPU Zeit zu sparen?

mfG Re^derAndere^né
 
Zurück
Oben