Verwendung von MC_DigitalCamSwitch_HighPrecision
Sie finden das Beispiel BasicMotion_DigitalCamSwitch_HighPrecision.project
ist im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples
.
Dieses Beispiel zeigt, wie Sie die Ausgänge von SMC_DigitalCamSwitch_HighPrecision
verwenden können, um digitale Ausgänge mit hoher Zeitauflösung anzusteuern. Als Beispiel werden die Klemmen EL2258 und EL2252 von der Firma Beckhoff verwendet.
Hinweis
Die Gerätebeschreibungen von der Fa. Beckhoff sind im Beispiel nicht enthalten. Laden Sie diese bitte direkt beim Hersteller herunter und installieren Sie sie im Geräte-Repository. Für den Betrieb des Beispiels benötigen Sie einen Buskoppler EK1100, eine Klemme EL2258 und eine Klemme EL2252.
Wichtig
Dieses Beispiel wurde gegen die Revision 0017 der EL2258 und die Revision 0020 der EL2252 entwickelt und getestet. Es hat lediglich Beispielcharakter. Wir übernehmen keine Garantie für die Korrektheit. Der Quellcode muss vor Verwendung getestet und gegebenenfalls auf andere Revisionen der Klemmen angepasst werden.
Struktur der Applikation
Die Applikation besteht aus einem Programm Main
, den Funktionsbausteinen DigitalCamSwitch_EL2258
und DigitalCamSwitch_EL2252
sowie einem Buskoppler EK1100 mit den Ausgangsklemmen EL2258 und EL2252.
Die Funktionsbausteine DigitalCamSwitch_EL2258
und DigitalCamSwitch_EL2252
sind der Kern des Beispiels. Sie zeigen, wie man den Ausgang Events
von SMC_DigitalCamSwitch_HighPrecision
verwenden kann, um digitale Ausgänge zu programmieren. Die Funktionsbausteine sind als Muster zu verstehen, das an andere Hardware angepasst werden kann.
DigitalCamSwitch_EL2258
Bei steigender Flanke am Eingang
Enable
wird der Funktionsbaustein initialisiert. In den ZuständenSTATE_INIT_0
undSTATE_INIT_1
werden die SignaleOutputBufferReset
der Klemme EL2258 geschrieben und es wird das ArrayaLastEventIds
initialisiert. In diesem Array wird pro Track die ID des zuletzt verarbeiteten Events gespeichert. Somit kann verhindert werden, dass ein Event mehrfach an die Klemme übergeben wird.Im laufenden Betrieb (
STATE_ACTIVE
) werden alle Tracks durchlaufen und für jeden Track nachfolgende Logik bearbeitet:Prüfung, ob die Klemme EL2258 die zuletzt kommandierten Events bereits übernommen hat (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter
).Durchlaufen aller Events des Tracks. Nur die Events, deren
ToggleEventId
größer ist als die zuletzt bearbeitete ID, werden weiter betrachtet. (AbfrageEventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel])
)Siehe Abschnitt "Hinweis zur Event-Reihenfolge".
Umrechnung der
Duration
des Events in einen EtherCAT-Zeitstempel und entsprechend Schreiben der AusgängeChannelsOut[channel].OutputEventState
undChannelsOut[channel].OutputEventTime
.Abbruch der Bearbeitung nach höchstens 5 Events.
Mitteilung an die Klemme, dass neue Events anliegen, wenn mindestens ein Event gefunden wurde (C
hannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1
).
Hinweis zur Event-Reihenfolge
Die Events werden vom Funktionsbaustein SMC_DigitalCamSwitch_HighPrecision
pro Track in einem Array zurückgegeben. Für jedes Event wird die SwitchNumber
und eine sogenannte ToggleEventId
zurückgegeben. Diese ToggleEventId
ist pro Track eindeutig und aufsteigend.
Für weitere Informationen siehe SMC_CAMSWITCH_TOGGLE_EVENT.
Im Beispiel wird in dem Array aLastEventIds[trackNo]
pro Track gespeichert, welche ToggleEventId
in einem vergangenen Bausteinaufruf zuletzt an die Klemme übertragen wurde. Da die ToggleEventIds
aufsteigend sind, ist beim nächsten Aufruf genau bekannt, welche Events noch übertragen werden müssen.
Da nicht bekannt ist, bei welcher
ToggleEventId
die Events starten, wird neben der Id noch einvalid
-Flag im DatentypEventId
gespeichert. Beim VergleichEventId_GreaterThan
wird diesesvalid
-Flag entsprechend berücksichtigt.Die
ToggleEventIds
haben den 32-Bit-DatentypUDINT
und können damit prinzipiell bei entsprechend langer Laufzeit oder hoher Schaltfrequenz überlaufen. Der Wert geht dann von 2^32-1 wieder nach 0. Die VergleichsfunktionEventId_GreaterThan
berücksichtigt auch die 32-Bit-Überläufe.
PDO Mapping EL2258
Die Ausgänge ChannelsOut
und ChannelsIn
des Funktionsbausteins DigitalCamSwitch_EL2258
sind mit den entsprechenden E/A-Kanälen der Klemme EL2258 verbunden. Im nachfolgenden Bild sind die Mappings für Channel 1 dargestellt. Bei Channel 2 ist es ähnlich, lediglich der Index beim Zugriff auf ChannelsOut
und ChannelsIn
ist 2, nicht 1.

DigitalCamSwitch_EL2252
Das Grundprinzip ist identisch zum DigitalCamSwitch_EL2258
. Der Unterschied besteht darin, wie die Signale geschrieben werden, da die Klemme EL2252 nur ein aktives Event programmieren kann.
Zuerst wird der Funktionsbaustein in
STATE_INIT
initialisiert.In
STATE_CHECK_FOR_EVENT
wird überprüft, ob Events vom FunktionsbausteinSMC_DigitalCamSwitch_HighPrecision
anstehen.Wenn ein Event vorhanden ist, muss das Event innerhalb von zwei Zyklen programmiert werden:
Im ersten Zyklus werden die Ausgänge und der EtherCAT-Zeitstempel geschrieben. Der Ausgang
Activate
wird auf 0 gesetzt.Im zweiten Zyklus wird in
STATE_ACTIVATE_EVENT_IN_EL2252
der AusgangActivate
auf 3 gesetzt. Damit wird das Event in der Klemme aktiviert.
In
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS
wird anschließend gewartet, bis das Event ausgeführt wurde. Hierfür werden die Signale des EingangsFeedback
der Klemme verwendet.
PDO Mapping EL2252

Main
Im Hauptprogramm werden vier Schalter konfiguriert, 2 auf jedem Track. Die Tracks erhalten zudem unterschiedliche Einschalt- und Ausschaltkompensationen (OnComp
, OffComp
):

Das Programm enthält die nötigen Bausteinaufrufe, um einen Forecast für die Achse zu aktivieren und sie konstant mit 180°/s zu bewegen (*), sowie für SMC_DigitalCamSwitch_HighPrecision
, DigitalCamSwitch_EL2258
und DigitalCamSwitch_EL2252
. Bevor mit der Bewegung gestartet wird, muss der Feldbus vollständig hochgefahren sein. Ansonsten können die Events nicht zur Klemme übertragen werden.
(*) Die konstante Bewegung wurde gewählt, um das Beispiel einfach und übersichtlich zu halten. Der Funktionsbaustein SMC_DigitalCamSwitch_HighPrecision
funktioniert jedoch mit allen Bewegungsarten. Er liefert zum Beispiel auch während einer Beschleunigungsphase oder bei Kurvenscheiben exakte Zeitstempel.
Inbetriebnahme
Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.
Starten Sie die Applikation.