Warnung
Sie lesen eine alte Version dieser Dokumentation. Wenn Sie aktuelle Informationen wünschen, schauen Sie bitte unter 5.0 .Beispiel - Beckhoff TwinCAT
Dieser Abschnitt zeigt ein Beispiel einer einfachen Integration von EYE+ mit dem EtherCAT-Modul in Beckhoff TwinCAT Version 3.1.
Voraussetzungen
Das folgende Beispiel basiert auf der Version 3.1 von Beckhoff TwinCAT. Bitte stellen Sie sicher, dass Ihre Version auf dem neuesten Stand ist.
- Bevor Sie beginnen, laden Sie bitte folgende Dateien herunter:
EYE+ EtherCAT ESI Datei (electronic datasheet)
Ggf. EYE+ TwinCAT Projektvorlage, die vordeklarierte Variablen für eine einfachere Integration enthält
Diese Dateien können unter EtherCAT Downloads heruntergeladen werden.
Nachdem Sie die notwendigen Dateien heruntergeladen haben, müssen Sie die ESI-Datei in das Installationsverzeichnis von Beckhoff TwinCAT installieren:
<pfad_zu_twincat_install>\3.1\Config\Io\EtherCAT
Wobei <pfad_zu_twincat_install>
normalerweise C:\TwinCAT\
entspricht.
Nachdem Sie die ESI-Datei in den richtigen Ordner installiert haben, starten Sie Beckhoff TwinCAT bitte neu.
Basis-Integration
Sobald alles eingerichtet ist, können Sie mit der Erstellung eines neuen Beckhoff TwinCAT Projekts fortfahren. Vergewissern Sie sich dann, dass Sie sich im Konfigurationsmodus befinden, indem Sie auf das folgende Symbol oben links drücken:
Danach sind Sie bereit, den EtherCAT-Bus zu scannen, um Ihr EYE+ und das Master-Gerät zu erkennen und zu lokalisieren. Die Scan-Option können Sie abrufen, indem Sie mit der rechten Maustaste auf Devices im linken Navigationsfenster klicken:
Der Scan-Vorgang kann einige Sekunden dauern und findet alle Geräte, die derzeit an den Bus angeschlossen sind.
Bemerkung
Wenn Ihr EYE+ nach dem Scan nicht in der Liste erscheint, stellen Sie bitte sicher, dass es korrekt angeschlossen und eingeschaltet ist. Wenn das Problem weiterhin besteht, wenden Sie sich bitte an unser Support-Team.
Nach Abschluss des Scans sollten Sie Ihre EYE+ Box in der Liste unter Devices sehen:
Wenn Sie die optionale Projektvorlage heruntergeladen haben, folgen Sie bitte den nächsten Schritten. Durch das Importieren der Vorlage werden alle notwendigen Variablen erstellt, sodass Sie die Vorteile Ihres EYE+ in vollem Umfang ausschöpfen können. Das Importieren der Vorlage ist ganz einfach: Klicken Sie mit der rechten Maustaste auf Ihr SPS-Projekt und klicken Sie dann auf Import From ZIP:
Wenn dies gelingt, sollten Sie vollständige Variabel-Strukturen zur Verfügung haben:
Sie müssen das Projekt so erstellen, dass die Variablen innerhalb von TwinCAT verfügbar sind. Das Mapping der Variablen zu den Variablen von EYE+ kann mit der Multi-Link-Funktionalität leicht erreicht werden:
Nachdem die Variablen zugeordnet wurden und Sie im Betriebsmodus neu gestartet haben, sollten Sie in der Lage sein, eine Live-Rückmeldung der Register zu erhalten:
Mit dem folgenden Beispielcode können Sie eine Produktion starten und Ihre ersten Teile erhalten. Beachten Sie, dass die Variable udRecipeID
dem Identifikator Ihres Rezepts entsprechen muss.
(*
* This sample code is distributed under the license CC0 1.0 Universal,
* you can get a copy of the license at https://creativecommons.org/publicdomain/zero/1.0/
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*)
VAR CONSTANT
STATE_WAIT_CMD: UDINT := 0;
STATE_START_PRODUCTION: UDINT := 10;
STATE_GET_PART: UDINT := 20;
STATE_READ_COORDINATES: UDINT := 30;
END_VAR
VAR
//Input EYE+ controller
suEYEplusInputGLO: EYEplus_TxPDO;
//Output EYE+ controller
suEYEplusOutputGLO: EYEplus_RxPDO;
eState: UDINT := STATE_WAIT_CMD;
udRecipeID: UDINT;
boStartProduction: BOOL;
boGetPart: BOOL;
reRobotTargetX: REAL;
reRobotTargetY: REAL;
reRobotTargetRz: REAL;
fbRTrig_StartProductionDone: R_TRIG;
fbRTrig_GetPartDone: R_TRIG;
END_VAR
(* --------------------------------------------------------------------------------------- *)
// Monitor rising edge of the Done flag for the "start production" command.
fbRTrig_StartProductionDone(CLK := suEYEplusInputGLO.boStartProductionDoneGIN);
// Monitor rising edge of the Done flag for the "get_part" command.
fbRTrig_GetPartDone(CLK := suEYEplusInputGLO.boGetPartDoneGIN);
CASE eState OF
// State: waiting to receive a command from the PLC application.
STATE_WAIT_CMD:
IF boStartProduction THEN // Command Start Production set.
boStartProduction := FALSE;
eState := STATE_START_PRODUCTION;
ELSIF boGetPart THEN // Command Get Part set.
boGetPart := FALSE;
eState := STATE_GET_PART;
END_IF
// State: send a "start production" command to EYE+ and wait for completion.
STATE_START_PRODUCTION:
// Set recipe ID according to EYE+ Studio.
suEYEplusOutputGLO.udRecipeIDGOU := udRecipeID;
// Send "start production" command to EYE+.
suEYEplusOutputGLO.boStartProductionTriggerGOU := TRUE;
// Wait for EYE+ response after command completion.
IF fbRTrig_StartProductionDone.Q THEN
// Reset command.
suEYEplusOutputGLO.boStartProductionTriggerGOU := FALSE;
eState := STATE_WAIT_CMD;
END_IF
// State: send a "get_part" command to EYE+ and wait for completion.
STATE_GET_PART:
// Send "get_part" command to EYE+.
// EYE+ looks for the number of parts set in "usPartQuantityGIN".
suEYEplusOutputGLO.boGetPartTriggerGOU := TRUE;
// Wait for EYE+ response after command completion.
IF fbRTrig_GetPartDone.Q THEN
// Reset command.
suEYEplusOutputGLO.boGetPartTriggerGOU := FALSE;
eState := STATE_READ_COORDINATES;
END_IF
// State: read the coordinates returned by the EYE+ "get_part" command.
STATE_READ_COORDINATES:
// Read coordinates returned by the "get_part" command.
reRobotTargetX := suEYEplusInputGLO.rePose1XGIN;
reRobotTargetY := suEYEplusInputGLO.rePose1YGIN;
reRobotTargetRz := suEYEplusInputGLO.rePose1RzGIN;
eState := STATE_WAIT_CMD;
END_CASE