Nocken
TB_CamSwitch
Mit dem Baustein kann eine Nocke erzeugt werden, mit der ein Ereignis an einer Nockenposition ausgelöst wird. Die Nocke kann zeitlich vorgesteuert werden um Totzeiten zu kompensieren.
In Kombination mit dem FB TB_MasterEngine kann die Totzeitkompensation auch während der Beschleunigungs- und Bremsphase exakt berechnet werden. Bei Verwendung einer realen Achse kann nur eine Geschwindigkeitskompensation angewandt werden.
Beschreibungallgemein
Mit dem Baustein kann eine Nocke erzeugt werden, mit der ein Ereignis an einer Nockenposition ausgelöst wird. Die Nocke kann zeitlich vorgesteuert werden um Totzeiten zu kompensieren.
In Kombination mit dem FB TB_MasterEngine kann die Totzeitkompensation auch während der Beschleunigungs- und Bremsphase exakt berechnet werden. Bei Verwendung einer realen Achse kann nur eine Geschwindigkeitskompensation angewandt werden.
Es wird eine Nocke erzeugt, die abhängig von einer (Geber-) Position ausgelöst wird. Ziel ist es, einen Aktor (mit Totzeit) so anzusteuern, dass die Reaktion genau an einer gegebenen Position (di_CamPos) eintritt. Dazu wird anhand der aktuellen Geschwindigkeit des Positionsgebers (di_Vel) die vorgesteuerte Nockenposition ermittelt.
Mit dem Start-Signal wird die Position di_Pos auf di_StartPos gesetzt und x_Running wird TRUE. Damit wird dem Baustein gesagt, wo sich die erste Zielposition (di_CamPos) aktuell befindet.
Bei großen Verzögerungszeiten kann es vorkommen, dass die nächste Nocke gesetzt wird, bevor die aktuelle bearbeitet wurde. Beispiel vertikale Schlauchbeutelmaschine: Wird die Fallzeit des Produkts größer als die Taktzeit, so befinden sich mehrere Abwürfe im Fallrohr. Um festzustellen, ob alle Abwürfe in den Beuteln angekommen sind, kann der Ausgang x_Running auf FALSE geprüft werden.
Generell ist zu bedenken, dass eine gestartete Nocke nicht mehr zurückgenommen oder verändert werden kann. Für das Bespiel der Schlauchbeutelmaschine bedeutet dies, ein abgeworfenes Produkt kann natürlich auch nicht mehr gestoppt oder abgebremst werden. Ebenso kann eine Position, die bereits überfahren wurde, nicht mehr erreicht werden. Dies wäre auch dann der Fall, wenn die Totzeit kurz vor Nockenstart vergrößert, ODER die Geschwindigkeit di_Vel stark erhöht wird. (Fehler i_Error = -2).
Darum sind folgende Punkte generell zu beachten:
- Totzeiten nur in kleinen Schritten vergrößern, verkleinern ist unkritisch.
- Während des Betriebs keine großen Beschleunigungen verwenden, weder positiv noch negativ
- Zum Anhalten warten, bis die letzte Nocke fertig ist, danach schnell stoppen. (siehe x_Running)
Wird die Position einer virtuellen Leitachse verwendet, so wird neben der Geschwindigkeit auch die Beschleunigung vorgesteuert. Dadurch kann auch beim Beschleunigen und Bremsen die Nockenposition exakt ermittelt werden.
Empfohlene Task: Event
Eingänge
| Bezeichnung: | Datentyp: | Anfangswert: | Wertebereich: | Beschreibung: |
|---|---|---|---|---|
| x_Enable | BOOL | ... | ... | TRUE: Freigabe des Bausteins. |
| x_Start | BOOL | ... | ... | TRUE: Start der Nockengenerierung. Mit der positiven Flanke wird die Position di_Pos auf die Position di_StartPos gesetzt. |
| x_Ready | BOOL | ... | ... | TRUE: Aktor ist bereit. Soll eine Nocke ausgegeben werden (x_CamOut=TRUE) so muss der Eingang TRUE sein. Ansonsten wird ein Fehler ausgegeben. |
| di_Vel | DINT | ... | ... | Ist-Geschwindigkeit des Gebers in Anwendereinheiten/Ts. |
| di_StartPos | DINT | ... | ... | Start- oder Referenzposition des Gebers. Mit x_Start=TRUE wird x_Pos auf diese Position gesetzt. |
| di_CamPos | DINT | ... | ... | Position des Gebers, an der die Nocke wirken soll. Diese Position abzüglich dem Weg ud_Travel, der während der Totzeit verfahren werden wird, ergibt die Position, an der die Nocke schaltet. |
| di_Period | DINT | ... | ... | Periode der Position in Anwendereinheiten. Immer wenn die Nocke schaltet, wird die Position di_Pos um di_Period zurückgesetzt. |
| di_Delay_ms | DINT | ... | ... | Totzeit in ms. Hier werden alle Verzögerungszeiten des Systems zusammengefasst. Es sind maximal Zeiten bis 5000 ms möglich, wird ein größerer Wert angeschlossen, wird dieser intern auf 5000 ms begrenzt. |
| ud_TimeAcc_ms | UDINT | ... | ... | Restliche Beschleunigungszeit in ms aus dem Baustein TB_MasterEngine bei Verwendung des virtuellen Masters. Sonst offen lassen. |
| di_VelSet_s | DINT | ... | ... | Sollgeschwindigkeit in Anwendereinheiten/s aus dem Baustein TB_MasterEngine bei Verwendung des virtuellen Masters. Sonst offen lassen. |
| di_VelAct_s | DINT | ... | ... | Istgeschwindigkeit in Anwendereinheiten/s. Dieser Wert muss für die Totzeitkompensation angeschlossen werden. Die Istgeschwindigkeit ist entweder von einem reellen oder virtuellen Master (FB TB_MasterEngine). |
Ausgänge
| Bezeichnung: | Datentyp: | Beschreibung: |
|---|---|---|
| x_Active | BOOL | TRUE: Baustein ist aktiv. |
| x_Running | BOOL | TRUE: Nockenberechnung ist aktiv. x_Running wird FALSE, wenn x_Start=FALSE und die NockenPos der letzten Nocke erreicht wurde. Dieser Ausgang kann verwendet werden, um festzustellen, ob alle zu bearbeitenden Nocken fertig sind. Um einen Prozess anzuhalten, wird x_Start=FALSE gesetzt. Sind alle Nocken abgearbeitet wird x_Running=FALSE. Nun kann die Achse gestoppt werden. |
| x_CamOut | BOOL | Nockenausgang. ud_CamOut ist für einen Zyklus TRUE. |
| di_Pos | DINT | Position des Gebers in Anwendereinheiten. |
| ud_Travel | UDINT | Weg des Gebers während der Verzögerungszeit di_Delay_ms. Dieser Weg hängt von der Geschwindigkeit des Gebers ab und wird zyklisch neu berechnet. |
| x_Error | BOOL | TRUE: Fehler erkannt. |
| i_Error | INT | Fehlernummer des Bausteins. Siehe Fehlertabelle. |

TB_Channel
Der Funktionsbaustein Channel realisiert eine Nocke mit Ein- und Ausschaltpunkt über die erfasste Position. Die Änderung dieser Eingänge ist online möglich. Der FB Channel kann für Rechtsdrehung, Linksdrehung und Reversierbetrieb eingesetzt werden. Mehrere Nocken können durch den Einsatz mehrerer Funktionsbausteine Channel realisiert werden.
Beschreibungallgemein
Der Funktionsbaustein Channel realisiert eine Nocke mit Ein- und Ausschaltpunkt über die erfasste Position. Die Änderung dieser Eingänge ist online möglich. Der TB_Channel kann für Rechtsdrehung, Linksdrehung und Reversierbetrieb eingesetzt werden. Mehrere Nocken können durch den Einsatz mehrerer Funktionsbausteine Channel realisiert werden.
Wird bei positiver Drehrichtung an ud_POS die Position ud_ON erkannt, wird der Ausgang x_ACTIVE von FALSE nach TRUE geschaltet. Der Ausgang bleibt solange gesetzt, bis die Istposition den Ausschaltpunkt ud_OFF erreicht (ud_POS = ud_OFF). Das nachfolgende Bild zeigt die Arbeitsweise des FB bei folgenden Bedingungen:
Bei der Festlegung des Ein- sowie des Ausschaltpunktes sind die folgenden Kombinationen möglich:
| Drehrichtung | Einschaltpunkt | Ausschaltpunkt |
|---|---|---|
| Positiv | ud_ON | ud_OFF |
| Negativ | ud_OFF | ud_ON |
Welcher der Eingänge (ud_ON oder ud_OFF) der Ein- bzw. Ausschaltpunkt ist, ist abhängig von der Drehrichtung!
Empfohlene Task: Event
Verwendete Bibliotheken: CAMSWITCH_20bdxx oder höher
Zusätzliche Datentypen: .....
Verwendet Static-Variablen: ....
Eingänge
| Bezeichnung: | Datentyp: | Anfangswert: | Wertebereich: | Beschreibung: |
|---|---|---|---|---|
| ud_POS | UDINT | ... | ... | Mit ud_POS wird die Position erfasst, auf welche die Einschaltposition und die Ausschaltposition bezogen sind. Minimalwert: 0 Inkremente Maximalwert: 232-1 Inkremente |
| ud_ON | UDINT | ... | ... | Über diesen Parameter wird die Ein-/Ausschaltposition für den Ausgang x_ACTIVE eingestellt. Änderungen während der Laufzeit sind möglich. Minimalwert: 0 Inkremente Maximalwert: 232-1 Inkremente |
| ud_OFF | UDINT | ... | ... | Über diesen Parameter wird die Aus-/Einschaltposition für den Ausgang x_ACTIVE eingestellt. Änderungen während der Laufzeit sind möglich. Minimalwert: 0 Inkremente Maximalwert: 232-1 Inkremente |
Ausgänge
| Bezeichnung: | Datentyp: | Beschreibung: |
|---|---|---|
| x_Active | BOOL | Wird bei positiver Drehrichtung der Einschaltpunkt ud_ON erkannt, wird der Ausgang x_ACTIVE = TRUE gesetzt. Ist der Ausschaltpunkt ud_OFF erreicht, wird der Ausgang x_ACTIVE = FALSE gesetzt. Wird bei negativer Drehrichtung der Einschaltpunkt ud_OFF erkannt, so wird der Ausgang x_ACTIVE = TRUE gesetzt. Ist der Ausschaltpunkt ud_ON erreicht, wird der Ausgang x_ACTIVE = FALSE gesetzt. |
TB_ChannelTime
Der FB (Funktionsbaustein) ChannelTime realisiert eine Nocke mit Einschaltpunkt ud_ON über die erfasste Position in Inkrementen und Ausschaltzeitpunkt über eine am Eingang ud_OFF_TIME eingestellte Einschaltzeit. Ein Nachtriggern ist nicht implementiert. Der Funktionsbaustein gibt das Schaltsignal x_ACTIVE zur Ansteuerung einer Nocke aus. Der FB ChannelTime kann für Rechtsdrehung, Linksdrehung und Reversierbetrieb eingesetzt werden. Mehrere Nocken können durch den Einsatz mehrerer Funktionsbausteine ChannelTime realisiert werden.
Beschreibungallgemein
Der Funktionsbaustein CHANNEL_TIME realisiert eine Nocke mit einer Einschaltposition über die erfasste Position (Inkremente) und einer Einschaltzeit über eine am Eingang ud_OFF_TIME eingestellte Zeit (Mikrosekunden). Der Funktionsbaustein gibt das Schaltsignal x_ACTIVE = TRUE zur Ansteuerung einer Nocke aus, wenn der Vergleich zwischen der Position ud_POS und dem Einschaltpunkt ud_ON folgende Bedingung erfüllt:
Positive Drehrichtung: ud_POS >= ud_ON x_ACTIVE = TRUE
Negative Drehrichtung: ud_POS <= ud_ON x_ACTIVE = TRUE
x_ACTIVE wird FALSE, wenn die am Eingang ud_OFF_TIME eingegebene Zeit abgelaufen ist. Die Änderung der Eingänge ud_ON und ud_OFF_TIME sind online möglich. Zu beachten ist, dass ein erneutes Setzen des Ausganges x_ACTIVE erst möglich ist, wenn die Einschaltzeit abgelaufen ist und somit x_ACTIVE = FALSE ist! Dies gilt auch bei Drehrichtungswechsel! D.h., dass ein Nachtriggern nicht möglich ist. Das nachfolgende Diagramm zeigt das Verhalten von x_ACTIVE bei verschiedenen Einschaltzeiten
Empfohlene Task: Event
Verwendete Bibliotheken: CAMSWITCH_20bdxx oder höher
Zusätzliche Datentypen: .....
Verwendet Static-Variablen: ....
Eingänge
| Bezeichnung: | Datentyp: | Anfangswert: | Wertebereich: | Beschreibung: |
|---|---|---|---|---|
| ud_POS | UDINT | ... | ... | Der Parameter ud_POS beinhaltet die jeweils aktuelle Position. Sobald der Parameterwert den in ud_ON eingestellten Wert (Einschaltposition) erreicht hat, wird x_ACTIVE = TRUE gesetzt. Die erlaubte Maximalgeschwindigkeit (Positionsänderung pro Zyklus) beträgt 1/2 ud_POS_RES. Wenn der Eingangswert sich um mehr als die halbe Auflösung (1/2 ud_POS_RES) verändert, wird davon ausgegangen, dass ein Überlauf über den Zahlenbereich von 0 bis ud_POS_RES zu behandeln ist. Ist die Eingangsgeschwindigkeit größer als die halbe Auflösung pro Abtastung, führt das zu einer Fehlfunktion (keine Fehlermeldung!) des Funktionsbausteines. |
| ud_POS_RES | UDINT | ... | ... | Mit Hilfe dieses Einganges kann die Auflösung (Überschlag) der eingehenden Position pro Umdrehung bzw. pro Arbeitszyklus eingestellt werden. Wird der Eingang mit dem Wert 0 belegt, wird automatisch mit einer Auflösung von 2^32 gerechnet. Wird am Eingang ud_POS_RES ein Wert eingetragen, darf der Positionswert am Eingang ud_POS maximal ud_POS = ud_POS_RES - 1 betragen. Wird dieser Wert überschritten, kommt es zu einer Fehlermeldung des Bausteines! Die Fehlermeldung wird gelöscht, wenn ein neuer Wert auf diesen Parameter geschrieben wird. |
| u_INTERRUPT_TIME | UINT | ... | ... | An diesem Eingang wird die verwendete Interruptzeit der Task, in welcher der FB abgearbeitet wird, eingetragen. Die Zeitangabe erfolgt in Mikrosekunden. Minimalwert: 125 Mikrosekunden Maximalwert: 65535 Mikrosekunden Wird ein Wert kleiner als 125 Mikrosekunden eingestellt, so kommt es zu einer Fehlermeldung. Durch die Eingabe eines Wertes >= 125 wird die Fehlermeldung gelöscht. Bei einer großen Interruptzeit entsteht ein ensprechend schlechtes Schaltverhalten, da der FB natürlich genau so oft wie der Interrupt abgearbeitet wird! Siehe dazu auch Applikationsbeispiel. |
| ud_ON | UDINT | ... | ... | Über diesen Parameter wird die Ein-/Ausschaltposition für den Ausgang x_ACTIVE eingestellt. Änderungen während der Laufzeit sind möglich. Minimalwert: 0 Inkremente Maximalwert: 232-1 Inkremente |
| ud_OFF_TIME | UDINT | ... | ... | Dieser Eingang gibt die Einschaltzeit in Mikrosekunden an. Eine Veränderung online ist möglich. Die eingegebene Zeit sollte ein ganzzahliges Vielfaches der Interruptzeit sein. Wird ein Wert eingestellt, der nicht dieser Forderung entspricht, wird die nächst größere Zahl, die einem ganzahligem Vielfachen der Interruptzeit entspricht, verwendet. Das nachfolgende Beispiel verdeutlicht dies: Folgende Eingabe erfolgt: u_INTERRUPT_TIME = 1.000 Mikrosekunden ud_OFF_TIME = 10.500 Mikrosekunden Das System verwendet ud_OFF_TIME = 11.000 Mikrosekunden als Einschaltzeit! Minimalwert: 0 Mikrosekunden Maximalwert: 232-1 Mikrosekunden |
Ausgänge
| Bezeichnung: | Datentyp: | Beschreibung: |
|---|---|---|
| x_Active | BOOL | Wird an ud_POS die Einschaltposition ud_ON von der Software erkannt, so wird der Ausgang x_ACTIVE = TRUE gesetzt. Ist die Verzögerungszeit abgelaufen, wird der Ausgang x_ACTIVE = FALSE gesetzt. Erst bei x_ACTIVE = FALSE ist ein erneutes Schalten des Ausganges möglich. Ein Nachtriggern des Ausganges (= verlängern der Einschaltdauer während x_ACTIVE = TRUE) ist nicht möglich! |
| x_ERR | BOOL | Zeigt an, dass ein Fehler bezogen auf den Funktionsbaustein aufgetreten ist. |
| u_ERR_NO | UINT | Zeigt die Nummer des aufgetretenen Fehlers an. |