Abkürzungen

FB | Funktionsblock
SAI | Einzelachsinterpolator (single axis interpolator)


Begriffserklärungen

Achsgruppe | Ein Verbund von Achsen, die durch einen Kanal eine Bewegung auf einer Raumkurve koordiniert durchführen können unter Einhaltung vorgegebener Werte für die Geschwindigkeit, Beschleunigung und Ruck auf dieser Raumkurve.
Kanal | Einheit, die Achsbewegungen einer Achsgruppe koordiniert.


SPS-Bibliotheken

Die ISG liefert eine Reihe von SPS-Bibliotheken aus, die von den beschriebenen Applikationen eingebunden werden. Da die ISG verschiedene SPS-Laufzeitsysteme auf unterschiedlichen Betriebssystemen und in unterschiedlichen Steuerungen unterstützt ist, werden in diesem Kapitel die einzelnen Bibliotheken aufgeführt und ein einheitlicher Name vereinbart. Dieser wird im weiteren in der Dokumentation verwendet, um eine einheitliche Bezeichnung für die unterschiedlich benamten Bibliotheken zu benutzen, die denselben Inhalt haben.

Einheitlicher Name | 3S / CoDeSys | TwinCat
HLI-Bibliothek | hli.lib bzw. 00_CNCHLIV5INIT.lib | TcCncHliV3.lib
Motionbibliothek Basis | McpBase.lib | TcCncBase.lib
Motionbibliothek Part1 | McpPlcopenP1.lib | TcCncPlcopenP1.lib
Motionbibliothek Part4 | McpPlcopenP4.lib | TcCncPlcopenP4.lib
Technobibliothek | McpPlcopenP1.lib | TcCncPlcopenP1.lib
SERCOS-Bibliothek | McpSercos.lib |

Tabelle 1-1: Übersicht SPS-Bibliotheken


Frame_PLCopenP1.pro: Applikationsrahmen für den Einsatz von PLCopen- Funktionsblöcken

Dieses Beispielprogramm zeigt, welche Funktionsblöcke anzulegen sind, damit eine Applikation korrekt funktioniert, die Funktionsblöcke nach PLCopen Part1 und Part2 verwenden soll.

Mehr:

button Erforderliche Bibliotheken

button Hauptprogramm MAIN()


Erforderliche Bibliotheken

In diese Applikation müssen folgende Bibliotheken eingebunden werden:

· Adaptionsbibliothek, bei RTX oder Simulationsbetrieb Win32

· HLI-Bibliothek

· Motionbibliothek Basis

· Motionbibliothek Part1


Hauptprogramm MAIN()

Im Programm MAIN wird zuallerst eine Instanz des FB MCV_HliInterface aus der HLI-Bibliothek durchgerechnet. Dieser FB prüft, ob die Schnittstelle HLI auf Seite der SPS derjenigen auf Seite des Motion-Controllers entspricht. Dazu muss der FB mehrfach berechnet werden. Erst wenn der Ausgang Initialized des FB TRUE und der Ausgang Error FALSE zeigt, darf auf das HLI, die Schnittstelle zwischen SPS und Motion-Controller, zugegriffen werden.

Aus diesem Grund darf auch erst danach eine Instanz des FB MCV_PlatformBase aufgerufen werden. Mit diesem FB werden die Achsreferenzen initialisiert. Nachdem der FB mit dem Ausgang Done = TRUE signalisiert, dass die Achsreferenzen nutzbar sind, kann eine Instanz des FB MCV_P1_PLATFORM durchgerechnet werden. Dieser FB muss zyklisch in der SPS-Applikation aufgerufen werden. Der FB sorgt dafür, dass Fehlermeldungen vom Motion-Controller entgegengenommen werden und über die Achsreferenzen jedem FB bekannt gemacht werden. Damit kann jeder FB auf Probleme mit der durch ihn beauftragen Achse reagieren.

Nach diesem FB wird der Applikationscode eingefügt.

Dieses Programm MAIN() wird dann einer Task zugewiesen.


PLCopen.pro:Testapplikation für PLCopen-Funktionsblöcke

TwinCAT CNC: Überblick

PLCopen.pro:
Testapplikation für PLCopen-Funktionsblöcke

Mit dieser Applikation wird dem Anwender die Möglichkeit gegeben sich mit dem Verhalten von Funktionsblöcken nach den PLCopen-Standards Part1, Part2 und Part4 vertraut zu machen. Die Anwendung ist so angelegt, dass zyklisch sämtliche Instanzen dieser Funktionsblöcke durchgerechnet werden. Es existieren keinerlei Abhängigkeiten zwischen den Funktionsblöcken. Als Beauftragungsschnittstelle dienen dem Benutzer die angelegten Visualisierungen, wobei für jeden Funktionsblocktyp genau eine Visualisierung angelegt wurde.

Das Konzept für dieses Beispiel sieht vor, dass jede Achse oder Achsgruppe immer derselben Funktionsblockinstanz zugeordnet ist. Dies dient dem leichteren Verständnis des Beispiels. Es sind deshalb mindestens so viele Funktionsblockinstanzen angelegt, wie Achsen oder Achsgruppen beauftragt werden sollen.

Abbildung 3-1: Zuordnung Achs- bzw. Achsgruppenreferenzen zu Funktionsblöcken

Damit der Nachweis möglich ist, dass die Funktionalität der Funktionsblöcke auch beim Austausch von Achsen und Achsgruppen korrekt erfüllt wird, kann man über 2 globale Variablen (gP1AxisRefChgDisable, gP4AxesGrpRefChgDisable) diesen Austausch zulassen. Diese Betriebsart ist aber eher für Demonstrationszwecke gedacht.

Das Beispiel enthält eine einzige Task, die das Hauptprogramm MAIN() aufruft.

Mehr:

button Anforderungen an die Konfiguration

button Erforderliche Bibliotheken

button Hauptprogramm MAIN()

button Allgemeines zur Implementierung

button Programm Part1_PLCopen

button Programm Part1_MCV_Fbs

button Programm Part1_TouchProbe

button Programm Part4_PLCopen

button Programm MotionOfAxes

button Programm MCV_Table_access

button Programm MCV_TriggerCamIn

button Programm Trace

button Programm SERCOS_PRG

button Visualisierungen für Funktionsblöcke

button Visualisierungen der Achsenpositionen

button Visualisierung für Kurvenscheibendaten

button Visualisierung zur Änderung von Kurvenscheibentabellen


Anforderungen an die Konfiguration

Diese Applikation setzt voraus, dass die konfigurierten Achsen als Achsen mit einem separaten Interpolator (SAI) angelegt werden. Dazu genügt es die Achsen in den Achsparameterlisten als

· Spindeln anzulegen: kenngr.achs_typ 4

oder

· bei anderen Achstypen den Einzelachsinterpolator zu aktivieren durch
kenngr.configure_sai 1

Alle die Achsen, die über Funktionsblöcke nach Part 4 der PLCopen-Spezifikation beauftragt werden sollen, müssen bereits bei der Konfiguration den Achsgruppen bekannt gemacht werden und sind deshalb in den Kanalparameterlisten einzutragen.


Erforderliche Bibliotheken

In diese Applikation müssen folgende Bibliotheken eingebunden werden:

· Adaptionsbibliothek, bei RTX oder Simulationsbetrieb Win32

· HLI-Bibliothek

· Motionbibliothek Basis

· Motionbibliothek Part1

· Motionbibliothek Part4

· Technobliothek

· SERCOS-Bibliothek


Hauptprogramm MAIN()

Das Hauptprogramm MAIN basiert auf dem Beispiel Frame_PlcopenP1.pro.

Da in dieser Applikation auch Funktionsblöcke des Part4 der PLCopen-Spezifikation instanziert werden, muss der Plattformbaustein für die Part4-Funktionsblöcke instanziert und durchgerechnet werden. Er besitzt den Typ MCV_P4_Platform, erhält den Bezeichner P4_Platform und wird unmittelbar nach dem Plattform-Funktionsblock für die Part1-Funktionsblöcke aufgerufen.

Die FB-Instanzen TechFctChIn und TechFctAxIn dienen dazu, Technologieinformationen, die über M-, H-, S- oder T-Befehle aus dem NC-Programm an die SPS gemeldet werden, aus der Schnittstelle HLI zwischen Motion-Kernel und SPS zu entnehmen und in der SPS bereitzustellen. Die korrespondierenden Funktionsblöcke TechFctChOut und TechFctAxOut am Ende des Programms MAIN quittieren automatisch alle die Technologiefunktionen, die nicht durch das SPS-Projekt behandelt wurden. Zur Behandlung einer Technologiefunktion wird im SPS-Projekt ein für den Technologiefunktionstyp spezifischer FB instanziert und mit der Ordnungsnummer der Technologiefunktion versorgt. In diesem Beispielprojekt wird auf diese Möglichkeit kein Augenmerk gelegt, sondern es sollen nur alle eintreffenden Technologiefunktionen quittiert werden, so dass ein NC-Programm ohne Unterbrechung abgearbeitet werden kann.

Nach dem Einlesen der Technologiefunktionen werden nacheinander die Programme aufgerufen, die letztendlich die Funktionsblöcke enthalten, die die Lösung von Bewegungsaufgaben von Einzelachsen oder Achsgruppen ermöglichen.


Allgemeines zur Implementierung

Den meisten Programme die nachfolgend beschrieben sind, liegt dasselbe Prinzip zu Grunde. In der Initialisierungsphase wird jeder Funktionsblockinstanz die für den Betrieb erforderliche Achse oder Achsgruppe über eine Variable des Typs AXIS_REF bzw. AXES_GROUP_REF zugewiesen. Diese Variablen sind bereits als Feld in der Motion-Basisbibliothek angelegt (g_array_Axis_ref und gAxesGroupRef). Nach dieser Phase werden in jedem SPS-Zyklus in einer FOR-Schleife alle Funktionsblockinstanzen durchgerechnet.

Da für jeden Funktionsblocktyp nur eine Visualisierung instanziert angelegt ist, ist es über die Visualisierung möglich diese auf die verschiedenen Funktionsblockinstanzen umzuschalten (s. Visualisierungen für Funktionsblöcke). Um dieses Verfahren abwickeln zu können, ist der restliche Code im Programm erforderlich, der Zeiger auf Funktionsblockinstanzen anwendet.

Abbildung 3-2: Zusammenhang von Funktionsblöcken und Visualisierung

Mehr:

button Globale Variablen

button Globale Konstanten


Globale Variablen

Die Funktionsblöcke, die von den verschiedenen Programmen aufgerufen werden, sind als globale Variablen angelegt und als Felder von Funktionsblöcken organisiert. An dieser Stelle erfolgt auch die Initialisierung der einzelnen Funktionsblockinstanzen.

Auch die für die Versorgung der Visualisierungen erforderlichen Variablen sind als globale Variablen angelegt.


Globale Konstanten

Im wesentlichen sind Standardwerte für die Beschleunigung, die Verzögerung, die Geschwindigkeit und den Ruck als globale Konstanten angelegt und werden dazu benutzt die Eingangsvariablen der Funktionsblöcke mit geeigneten Standardwerten zu versorgen. Weitere Erläuterungen sind der nachfolgenden Tabelle zu entnehmen. Die restlichen Konstanten skalieren die Applikation hinsichtlich Anzahl Funktionsblöcke je Funktionsblocktyp die angelegt und durchgerechnet werden.

Konstante | Wert | Beschreibung
DEFAULT_ACCELERATION | 2000.0 | Standardwert für die Beschleunigung
DEFAULT_DECELERATION | 2000.0 | Standardwert für die Verzögerung
DEFAULT_JERK | 10000.0 | Standardwert für den Ruck
DEFAULT_SPEED_25k DEFAULT_SPEED_50k DEFAULT_SPEED_75k DEFAULT_SPEED_100k | 25000.0 50000.0 75000.0 100000.0 | Standardwerte für die Geschwindigkeit
PLC_AX_MAXIDX | 15 | Anzahl der Funktionsblockinstanzen die für Funktionsblocktypen für die Einzelachsbeauftragung angelegt werden. Es können damit gleich viele Achsen beauftragt werden, wenn jeder Achse genau eine Funktionsblockinstanz zugewiesen wird.
PLC_MULTIAX_IDX | 8 | Anzahl der Funktionsblockinstanzen die für Funktionsblocktypen für die Beauftragung von Master/Salve-Achspaarungen angelegt werden. Es können damit gleich viele Slaveachsen beauftragt werden, wenn jeder Achse genau eine Funktionsblockinstanz zugewiesen wird.
PLC_CH_MAXIDX | 9 | Anzahl der Funktionsblockinstanzen die für Funktionsblocktypen für die Achsgruppenbeauftragung angelegt werden. Es können damit gleich viele Achsgruppen beauftragt werden, wenn jeder Achsgruppe genau eine Funktionsblockinstanz zugewiesen wird.

Tabelle 3-1: Globale Konstanten in PLCopen.pro


Programm Part1_PLCopen

Dieses Programm dient dazu Funktionsblockinstanzen, die nach dem Part 1 der PLCopen-Spezifikation implementiert wurden, zu berechnen.

Im Initialisierungsteil wird für die Funktionsblöcke, die sich auf eine einzelne Achse beziehen, wieder die in Abbildung 3-1 gezeigte Beziehung zwischen Achsreferenzen und Funktionsblöcken hergestellt.

FOR Idx := 0 TO PLC_AX_MAXIDX DO

IdxSingleAxFbs := Idx + g_axis_idx_offset;

IF (IdxSingleAxFbs >= 0) AND (IdxSingleAxFbs <= PLC_AX_MAXIDX) THEN

HomeAxRefIdx[IdxSingleAxFbs] := IdxSingleAxFbs;

(* Calculate the administrative FBs *)

ReadStatusAxRefIdx[IdxSingleAxFbs] := IdxSingleAxFbs;

END_IF;

END_FOR;

Für alle Funktionsblöcke die sich auf eine Master- und eine Slaveachse beziehen, wird als Masterachse die erste im System verfügbare SAI-Achse festgelegt. Die einzelnen Funktionsblockinstanzen erhalten dann aber unterschiedliche Referenzen für die Slaveachse.

FOR IdxMultAxFbs := 0 TO PLC_MULTIAX_IDX DO

GearInMstIdx[IdxMultAxFbs] := IdxMasterAx;

GearInSlvIdx[IdxMultAxFbs] := IdxSlaveAx;

GearOutSlvIdx[IdxMultAxFbs] := IdxSlaveAx;

IF IdxSlaveAx < GC_MCP_AXREF_MAXIDX THEN

IdxSlaveAx := IdxSlaveAx + 1;

ELSE

IdxMasterAx := IdxMasterAx + 1;

IdxSlaveAx := 0;

END_IF;

END_FOR;

Nach der Initialisierungsphase werden nur noch die Funktionsblockinstanzen zyklisch berechnet.

Sämtlicher Programmcode nach dem Kommentar

(*===========================================================*)

(* The following commmands are only for visualisation. *)

(*===========================================================*)

dient lediglich der Versorgung der zugeordneten Visualisierung mit den Daten der angewählten Funktionsblockinstanz.


Programm Part1_MCV_Fbs

In diesem Programm sind keine Initialisierungen erforderlich und so werden in der FOR-Schleife lediglich die von ISG definierten und zusätzlich in der Motionbibliothek Teil1 gelieferten FB durchgerechnet. Anschließend wird der Code für die Versorgung und Anbindung der Visualisierung ausgeführt.


Programm Part1_TouchProbe

Dieses Programm dient dazu die Instanzen der Funktionsblöcke vom Typ MC_AbortTrigger und MC_TouchProbe zu berechnen, welche die Messfunktionalität bereitstellen. Diese Funktionsblöcke besitzen als VAR_IN_OUT-Pin eine Referenz auf die Signalquelle vom Typ TRIGGER_REF. Dieser Datentyp ist in der Bibliothek Motionbibliothek Teil1 definiert. Im Initialisierungsteil des Programms wird für jede FB-Instanz eine solche Referenz angelegt und mit geeigneten Standardwerten belegt.

Nach der Initialisierungsphase werden in der FOR-Schleife alle FB-Instanzen der oben genannten Typen berechnet.

Der restliche Code wird wie schon bei den anderen Programmen ausgeführt lediglich dazu benutzt um die Visualisierung mit den Daten der ausgewählten FB-Instanz zu versorgen.


Programm Part4_PLCopen

In diesem Programm sind Variablen, die die ..._REF Datentypen (IDENT_IN_GROUP_REF, MC_PATH_DATA_REF, MC_PATH_REF) aus der Spezifikation repräsentieren, als lokale Variablen angelegt und als Felder organisiert.

Im Initialisierungsteil wird wiederum die 1:1-Beziehung der Indizes der Funktionsblockinstanz und der Achsgruppe hergestellt. Außerdem werden einige Eingangsvariablen von Funktionsblöcken initialisiert, damit der Benutzer sinnvolle Werte vorfindet.

Es folgt die bereits bekannte FOR-Schleife, in der sämtliche Instanzen der Funktionsblöcke durchgerechnet werden, und anschließend der Code für die Aktualisierung der notwendigen Daten zur Anzeige in den Visualisierungen.


Programm MotionOfAxes

Dieses Programm definiert lokale Variablen, in denen die aktuelle Position und ausgewählte Zustandsdaten einzelner Achsen gespeichert wird, nachdem diese aus der Schnittstelle HLI zwischen SPS und Motion-Kernel entnommen worden sind. Die Visualisierungen MotionOfAxes bzw. MotionOfAxes_XY zeigen dann die Werte dieser lokalen Variablen an.


Programm MCV_Table_access

Dieses Programm ist in der Motionbibliothek Teil1 definiert und erlaubt den Zugriff auf Kurvenscheibentabellen. In der Visualisierung Tbm_Display werden die Daten von zur Verfügung stehenden Kurvenscheibentabellen angezeigt. Diese Daten werden von dem Programm MCV_Table_access bereitgestellt.


TwinCAT CNC: Überblick

PLCopen.pro:Testapplikation für PLCopen-Funktionsblöcke

Programm MCV_TriggerCamIn


Programm Trace

Berechnet eine Funktionsblockinstanz, die die Erzeugung verschiedener Protokolle im Motion-Kernel veranlassen kann.


Programm SERCOS_PRG

Dieses Programm beauftragt je eine Instanz der Funktionsblöcke mit denen SERCOS-Parameter geschrieben und gelesen werden können. Die Instanzen der Funktionsblöcke sind hierbei lokal im Programm angelegt.


Visualisierungen für Funktionsblöcke

Für jeden der implementierten Funktionsblocktypen ist in der Applikation eine Visualisierung angelegt, mit der bei jeder Instanz eines Funktionsblocktyps die Werte der Eingangsvariablen verändert werden können und die Werte der Ausgangsvariablen angezeigt werden. Außer den Elementen, die die Eingangs- und Ausgangsvariablen entsprechend der Spezifikation repräsentieren, gibt es noch einige Elemente, die für die Bedienung der Visualisierung wichtig sind. Deren Funktion wird nachfolgend kurz beschrieben:

Nr.

Bezeichnung

Beschreibung

1

Funktionsblock-Index

Die Instanzen eines Funktionsblocktyps sind in dieser Applikation als Feld von Funktionsblöcken angelegt. Die Nummer ist der Index des Feldelementes das angezeigt wird, also der Index des mit der Visualisierung verbundenen Funktionsblockes.

Diese Nummer ist über die Visualisierung änderbar, was dem Anwender die Möglichkeit gibt die unterschiedlichen Funktionsblockinstanzen zu beauftragen und ihre Statusdaten abzufragen.

2

Referenz-Index

In der PLCopen-Spezifikation sind unterschiedliche Datentypen deklariert, die eine Achse oder Achsgruppe usw. repräsentieren. Diese Datentypen dienen als Referenz für die aufgeführten Elemente.

Durch die implementierten SPS-Bibliotheken werden diese Referenzen als Feld von Referenzen definiert (g_array_axis_ref, gAxesGroupRef) oder bei anderen Datentypen als Feld innerhalb der Applikation angelegt.

Diese Nummer bezeichnet den Index des Elementes aus einem solchen Feld von Referenzen, das beim ausgewählten FB an den entsprechenden Ein-/Ausgangsvariablen anliegt.

Dieser Wert ist für Achs- Achsgruppenreferenzen nur dann editierbar, wenn die globalen Variablen
gP1AxisRefChgDisable, gP4AxesGrpRefChgDisable
auf FALSE gesetzt werden.

3

HLI-Index

Dies ist ein Statusdatum und deshalb nicht editierbar. Die Schnittstelle zwischen Motion-Kernel und SPS ist als Feld von Strukturen organisiert, denen Achsen bzw. Achsgruppen zugeordnet sind. Die Nummer ist der Index der achs- bzw. achsgruppenspezifischen Struktur, die über den angewählten Funktionsblock beauftragt wird.

4

Logische Nummer

Ordnungsnummer für Achsen und Achsgruppen.

5

All-Taste

Das Betätigen dieser Taste führt dazu, dass bei sämtlichen Funktionsblockinstanzen der Execute-Eingangspin auf TRUE gesetzt wird.

Solch eine Taste ist nicht in allen Visualisierungen vorhanden.

Tabelle 3-2: Elemente in Visualisierungen für Funktionsblöcke

Abbildung 3-3: Elemente einer Visualisierung


Visualisierungen der Achsenpositionen

Die Visualisierung MotionOfAxes dient dazu die aktuellen Positionen von bis zu 10 Achsen anzuzeigen. Die Positionen werden von dem gleichnamigen Programm aus dem HLI entnommen und in lokalen Variablen gespeichert, die dann von der Visualisierung angezeigt werden. Zusätzlich werden weitere Zustanddaten für die jeweilige Achse angezeigt, deren Bedeutung nachfolgend beschrieben wird.

Zustandsdatum | Beschreibung
Ready | Wird für Ready Grün angezeigt, so bedeutet dies dass der Antrieb betriebsbereit ist und sich Regelung befindet. Ansonsten wird Rot angezeigt.
Error | Wird für Error Grün angezeigt, so ist kein Fehler aufgetreten. Im Fenster neben der Fehlerstatusanzeige, wird die aktuelle Position der Achse angezeigt.
Homed | Ist die Achse referenziert, wird Grün angezeigt, ansonsten Rot
IsSAI | Wird Grün angezeigt, so wird diese Achse von einem Einzelachsinterpolator versorgt und kann mit Bausteinen nach Part1 der PLCopen-Spezifikation betrieben werden. Die Farbe Rot zeigt an, dass die Achse in eine Achsgruppe aufgenommen wurde und nun über Funktionsblöcke nach Part 4 der PLCopen-Spezifikation beauftragt werden kann.
IsChAx | Die Farbe Grün zeigt an, dass die Achse nun in eine Achsgruppe aufgenommen ist. Im Fenster daneben wird die Achsgruppennummer der entsprechenden Achsgruppe angezeigt.

Tabelle 3-3: Elemente zur Visualisierung von Zustandsdaten einer Achse

Abbildung 3-4: Visualisierung MotionOfAxes


TwinCAT CNC: Überblick

PLCopen.pro:Testapplikation für PLCopen-Funktionsblöcke

Visualisierung für Kurvenscheibendaten

Abbildung 3-5


TwinCAT CNC: Überblick

PLCopen.pro:Testapplikation für PLCopen-Funktionsblöcke

Visualisierung zur Änderung von Kurvenscheibentabellen

Abbildung 3-6