Weckalarm OB 32

Jeremy3

Well-known member
Beiträge
116
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen,

hier kurz die CPU : IM151-8F PN/DP CPU , 6es7 151-8fb01-0ab0

benutze den Weckalarm OB 32 für eine Zyklische Messung. Er wird alle 60 Sekunden 1 mal aufgerufen und liefert einen Integerwert. Dieser Wert wird im weiteren Programm benutzt. Soweit so gut, der OB funktioniert und das Programm auch.

zum Problem :
1. Der Wertebereich des OB 32 liegt im Bereich von 1 ... 60000 ms. Welche Möglichkeiten habe ich diesen OB auf z.B 100 000 ms zu programmieren ? ( siehe Bild im Anhang )
2. Gibt es vllt. andere OBs die einen höheren Wertebereich haben die ich verwenden könnte ?


Freundliche Grüße


Jeremy
 

Anhänge

  • 2012-11-20 12-46-41_HW Konfig - ET 200 S Photobioreaktor.png
    2012-11-20 12-46-41_HW Konfig - ET 200 S Photobioreaktor.png
    79,9 KB · Aufrufe: 41

wolder

Well-known member
Beiträge
549
Punkte Reaktionen
80
Nimm nen Zähler und zähle ihn im OB32 hoch.
Oder nimm den Uhrzeitalarm (OB10) -> minütlich, stündlich, monatlich....

Gruß wolder
 

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
Zuviel Werbung?
->Hier kostenlos registrieren
Brauchst Du denn wirklich den Weckalarm?. Normalerweise sind SPS-Zyklen nicht länger als 20ms. Lass doch einfach einen Timer laufen, und ruf alle 10s den Baustein für die Messung einmalig auf.
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
100s meint Tigerente...
Code:
U T1
=M x.y

UN T1
L S5t#100s
SE T1

U M x.y
CC "Dein OB32-Ersatz"
 
Zuletzt bearbeitet:
OP
J

Jeremy3

Well-known member
Beiträge
116
Punkte Reaktionen
0
@ wolder

1.Wie genau soll man mit dem Zähler genau 100 s programmieren ?

2.Wird der zähler nicht einfach nur einmal hoch oder runterzählen wenn man ihn im
OB 32 aufruft ?

3. Falls das so wirklich geht frage ich mich was mit dem OB 1 dann passiert wenn
im OB 32 diese 100 Sekunden gezählt werden ? Wird dieser 100 sekunden lang nicht
mehr bearbeitet ?.

@ wolder

Kann man mit dem Uhrzeitalarm denn 100 s einprogrammieren oder nur minütlich,
stündlich oder monatlich wie du es schreibst ?

------------------------------------------------------------------------------

@ Tigerente1974

Das mit dem Timer habe ich eig als erstes ausprobiert gehabt.
Ich habe mir sogar ein Taktsignal selber über Timer programmiert. Das
funktioniert auch ganz gut. So bekomme ich auch die 100 s eingestellt.

1. Aber mein Programm soll nur 1 mal jede 100 s aufgerufen werden, einen Messwert
Berechnen und noch zusätzlich einen Integerwert ausspucken in Abhängigkeit des
Messwertes. Wie Soll ich das ohne einen Interrupt machen , also ohne Weckalarm
oder sonst was ? Vor allem frage ich mich wie das im OB 1 funktionieren soll wenn
du selber sagst das der SPS Zyklus nicht länger wie 20 ms ist.

Wenn ich das einfach nur in dem OB 1 machen würde über einen FB würde das
Programm einen falschen Integerwert liefern da der Baustein während des taktes
einfach schon viel zu oft im OB 1 aufgerufen wird und der Integerwert ins
unermässliche steigt bzw. fällt. Das hatte ich schon mal ausprobiert.
Falls ich dich falsch verstehen sollte Bitte einfach aufklären.

------------------------------------------------------------------------------


@ borromeus

Danke für den Code und die Verbesserung. Das löst aber leider mein Problem noch nicht
 
Zuletzt bearbeitet:

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Zuviel Werbung?
->Hier kostenlos registrieren
Jeremy,

aufgrund Deiner Fragen kann man davon ausgehen, dass Dir eine SPS nicht ganz klar ist.
Seis drum, hier wird Dir geholfen. ;-)
Schreib mal was Du eigentlich machen möchtest!

Warum ein bedingter Programmaufruf alle 100s Dein Problem nicht löst verstehe ich nicht, weil genau das wolltest Du ja im OB32 mit 100000ms bezwecken.

Edit: es ist ja egal ob der OB1 alle 100s einen Baustein aufruft oder das "Betriebssystem" der SPS einen Weck- OB. Was denkst Du ist da anders?
 
Zuletzt bearbeitet:

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
@ Tigerente1974

Das mit dem Timer habe ich eig als erstes ausprobiert gehabt.
Ich habe mir sogar ein Taktsignal selber über Timer programmiert. Das
funktioniert auch ganz gut. So bekomme ich auch die 100 s eingestellt.

1. Aber mein Programm soll nur 1 mal jede 100 s aufgerufen werden, einen Messwert
Berechnen und noch zusätzlich einen Integerwert ausspucken in Abhängigkeit des
Messwertes. Wie Soll ich das ohne einen Interrupt machen , also ohne Weckalarm
oder sonst was ? Vor allem frage ich mich wie das im OB 1 funktionieren soll wenn
du selber sagst das der SPS Zyklus nicht länger wie 20 ms ist.

Wenn ich das einfach nur in dem OB 1 machen würde über einen FB würde das
Programm einen falschen Integerwert liefern da der Baustein während des taktes
einfach schon viel zu oft im OB 1 aufgerufen wird und der Integerwert ins
unermässliche steigt bzw. fällt. Das hatte ich schon mal ausprobiert.
Falls ich dich falsch verstehen sollte Bitte einfach aufklären.

Ich bin mittlerweile sicher, Du brauchst keinen OB. Du kannst es mit dem Timer lösen wie von mir vorgeschlagen. Du musst eben nur dafür sorgen, dass der Bausteinaufruf nur 1x passiert.

Der Code von borromeus erfüllt das aber.
 
OP
J

Jeremy3

Well-known member
Beiträge
116
Punkte Reaktionen
0
Versteh ich euch Richtig. Den Taktsignal einfach auf den Freigabeeingang EN des entsprechenden FC drauflegen ( der vorher bei mir in meinem Weckalarm drin war ) und dann wird er auch wirklich nur einmal aufgerufen sobald das Taktsignal kommt ? Wenn das wirklich so einfach geht dann wäre das perfekt. Probiere es gleich mal später aus.

Wird dieser Freigabeeingang im Falle das man ihn nicht Benutzt automatisch auf True gesetzt ? Wahrscheinlich ja ? Sonst würden alle meine fbs und fcs im ob 1 nicht funktionieren . Bitte um kurze Bestätigung.

Freundliche Grüße

Jeremy
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Zuviel Werbung?
->Hier kostenlos registrieren
Der Takt muss eine Flanke sein....schau:
der OB1 läuft ständig... der arbeitet alle Befehle und Bausteinaufrufe ab, wenn er fertig ist fängt er von vorne an.
Je nach Programmlänge und CPU Geschwindigkeit ergibt sich eine Zykluszeit.
Wenn Du nun alle zB 100s vom OB1 einen Baustein EINMAL aufrufen willst, musst Du dafür sorgen, dass das Bit, das den Aufruf erzeugt eben nur einen Zyklus lang da ist.
Sprich, Du hast quasi 99,99 Sekunden den Zustand Null und dann für einen Zyklus lang Eins.
 
OP
J

Jeremy3

Well-known member
Beiträge
116
Punkte Reaktionen
0
habe das wie oben beschrieben ausprobiert. Es funktioniert : ). Vielen dank Leute. Mir war nicht bewusst das man im OB 1 über eine positive Flanke einfach nen FC nur einmal aufrufen kann über den Freigabeeingang, da ich diesem nie Beachtung geschenkt habe und dachte man bräuchte dafür diesen Weckalarm. Herzlichen Dank an euch alle ! Es hat bisher mal wunderbar geklappt.

Also ist es in der Tat so das dieser Freigabeeingang standartmäßig auf TRUE gesetzt ist und sobald man ihn ansteuert dieser einen TRUE Wert erst abwartet um den Baustein zu bearbeiten. Über eine positive Flanke kann man ihn sogar während eines SPS Zyklus auf diese Weise auch nur einmal aufrufen. Falls jmd nicht mit meiner Schlussfolgerung einverstanden ist Bitte korrigieren : ).

Danke nochmal an euch alle !
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
19.470
Punkte Reaktionen
5.871
Also ist es in der Tat so das dieser Freigabeeingang standartmäßig auf TRUE gesetzt ist und sobald man ihn ansteuert dieser einen TRUE Wert erst abwartet um den Baustein zu bearbeiten.
In der Editor-Ansicht "KOP" ist das deutlicher zu sehen. Da ist der EN-"Eingang" mit der linken Potentialschiene verbunden, doch man kann auf diese Verbindung auch Kontakte draufsetzen, wodurch aus dem unbedingten (immer) Aufruf ein bedingter Aufruf wird.

Harald
 
Oben