Skip to main content

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

. Die Arbeitsweise des Bausteins ist wie folgt:
  1. Bei steigender Flanke am Eingang Enable wird der Funktionsbaustein initialisiert. In den Zuständen STATE_INIT_0 und STATE_INIT_1 werden die Signale OutputBufferReset der Klemme EL2258 geschrieben und es wird das Array aLastEventIds 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.

  2. Im laufenden Betrieb (STATE_ACTIVE) werden alle Tracks durchlaufen und für jeden Track nachfolgende Logik bearbeitet:

    1. Prüfung, ob die Klemme EL2258 die zuletzt kommandierten Events bereits übernommen hat (ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).

    2. Durchlaufen aller Events des Tracks. Nur die Events, deren ToggleEventId größer ist als die zuletzt bearbeitete ID, werden weiter betrachtet. (Abfrage EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))

      Siehe Abschnitt "Hinweis zur Event-Reihenfolge".

    3. Umrechnung der Duration des Events in einen EtherCAT-Zeitstempel und entsprechend Schreiben der Ausgänge ChannelsOut[channel].OutputEventState und ChannelsOut[channel].OutputEventTime.

    4. Abbruch der Bearbeitung nach höchstens 5 Events.

    5. Mitteilung an die Klemme, dass neue Events anliegen, wenn mindestens ein Event gefunden wurde (ChannelsOut[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.

. Zwei Details sind noch zu beachten:
  1. Da nicht bekannt ist, bei welcher ToggleEventId die Events starten, wird neben der Id noch ein valid-Flag im Datentyp EventId gespeichert. Beim Vergleich EventId_GreaterThan wird dieses valid-Flag entsprechend berücksichtigt.

  2. Die ToggleEventIds haben den 32-Bit-Datentyp UDINT 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 Vergleichsfunktion EventId_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.

_sm_img_mapping_el2258.png

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.

  1. Zuerst wird der Funktionsbaustein in STATE_INIT initialisiert.

  2. In STATE_CHECK_FOR_EVENT wird überprüft, ob Events vom Funktionsbaustein SMC_DigitalCamSwitch_HighPrecision anstehen.

  3. 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 Ausgang Activate auf 3 gesetzt. Damit wird das Event in der Klemme aktiviert.

  4. 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 Eingangs Feedback der Klemme verwendet.

PDO Mapping EL2252

_sm_img_mapping_el2252.png

Main

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

_sm_img_digitalcamswitch_highprecision.png

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_HighPrecisionDigitalCamSwitch_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

  1. Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.

  2. Starten Sie die Applikation.