Avertissement

Vous lisez une ancienne version de cette documentation. Si vous souhaitez obtenir des informations actualisées, veuillez consulter 5.0 .

Exemple - Beckhoff TwinCAT

Cette section donne un exemple d’une intégration simple d’EYE+ avec le module EtherCAT dans Beckhoff TwinCAT version 3.1.

Conditions préalables

L’exemple suivant est basé sur la version 3.1 de Beckhoff TwinCAT, veuillez vous assurer que votre version est à jour.

Avant de commencer, veuillez télécharger les fichiers suivants :
  • Fichier EYE+ EtherCAT ESI (electronic datasheet)

  • Facultativement, modèle de projet EYE+ TwinCAT contenant des variables prédéclarées pour faciliter l’intégration.

Ces fichiers peuvent être téléchargés à partir des Téléchargements EtherCAT.

Une fois que vous avez téléchargé les fichiers nécessaires, veillez à installer le fichier ESI dans le dossier d’installation de Beckhoff TwinCAT :

<chemin_du_dossier_installation_twincat>\3.1\Config\Io\EtherCAT

<chemin_du_dossier_installation_twincat> correspond généralement à C:\TwinCAT\ .

Après avoir installé le fichier ESI dans le bon dossier, veuillez redémarrer Beckhoff TwinCAT.

Intégration de base

Une fois que tout est en place, vous pouvez procéder à la création d’un nouveau projet Beckhoff TwinCAT. Ensuite, assurez-vous que vous êtes en mode configuration en appuyant sur l’icône suivante dans la partie supérieure gauche :

../../_images/twincat_config_mode.png

Une fois cela effectué, vous êtes prêt à scanner le bus EtherCAT pour reconnaître et localiser votre EYE+ et le périphérique Master. L’option de scan est disponible en cliquant avec le bouton droit de la souris sur Devices dans le panneau de gauche :

../../_images/twincat_scan.png

Le processus de scannage peut prendre quelques secondes, il trouvera tous les appareils actuellement connectés au bus.

Remarque

Si votre EYE+ ne figure pas dans la liste après le scannage, vérifiez qu’il est correctement connecté et enclenché. Si le problème persiste, veuillez contacter notre équipe d’assistance.

Une fois le scannage terminée, vous devriez voir votre Box EYE+ dans la liste des périphériques (Devices) :

../../_images/twincat_scan_complete.png

Si vous avez téléchargé le modèle optionnel, veuillez suivre les étapes suivantes. L’importation du modèle permet de créer toutes les variables nécessaires pour tirer pleinement parti de votre système EYE+. L’importation du modèle est simple, faites un clic droit sur votre projet API et cliquez sur Import From ZIP :

../../_images/twincat_import_template.png

En cas de succès, vous devriez disposer de structures entières de variables :

../../_images/twincat_variables.png

Vous devrez construire le projet de manière à ce que les variables soient disponibles à partir de TwinCAT. Le mappage des variables aux variables propres à EYE+ peut être réalisé facilement avec la fonctionnalité Multi Link :

../../_images/twincat_variables_built.png
../../_images/twincat_multilink.png

Une fois que les variables ont été mappées, et après avoir redémarré en mode de fonctionnement, vous devriez être en mesure d’obtenir un retour en direct des registres :

../../_images/twincat_prod.png

L’exemple de code suivant vous permet de démarrer une production et d’obtenir vos premières pièces. Notez que la variable udRecipeID doit correspondre à l’identifiant de votre recette.

(*
 * 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