scieee AI-readable full text Open interactive document viewer

Servo drives implementation for robot's motor control

Navarro Soler, Yeray

Abstract

This project explores the enhancement of motor controllers in the mobile robots developed by the CDEI, simplifying the control system by reducing the number of elements and, consequently, the weight, while improving the robots’ overall efficiency. To achieve this, the study evaluates the implementation and use of Ingenia EtherCAT servo drives, specifically the EVSNET-E and EVE-XCR-E models. There are two primary objectives for the project: first, to validate the proper functioning of a printed circuit board (PCB) that integrates the EVS-NET-E drive, ensuring it enables real-time control of a brushless motor; and second, to develop a control program for installing this device in the robots. Additionally, the project establishes a methodology for integrating these drives into robots, including configuration guidelines and programming examples. To validate the PCB, the MotionLab3 software was employed, allowing the configuration of the attached drive. During this process, the various functionalities of the drive and its associated circuits were analyzed, making the necessary modifications. For the design of the control program, the fucntions of the Python Ingeniamotion library were used. The development of the code followed an iterative approach to ensure proper functionality at all stages. The control program was written in Python and subsequently implemented in ROS. Validation of the code was carried out through tests with the actual motor and simulations of the robot’s movement. The analysis of the PCB revealed that while some components, such as communication and feedback circuits, were successfully verified, achieving a fully functional board requires a more detailed analysis to identify and address the causes of motor control issues. The design of the control program resulted in the creation of a final modular and versatile control program that allows for easy modifications and is compatible with any of the Ingenia controllers. Additionally, example codes were created to demonstrate the various functionalities of the drives. Therefore, despite some challenges encountered during the PCB analysis, the project demonstrated the feasibility of integrating Ingenia EtherCAT drives into the robots, obtaining the benefits that this involves, such as improved performance and reduced overall programming complexity.

Full text

Treball de Fi de Màster Doble màster universitari en enginyeria industrial i automàtica i robòtica Servo drives implementation for robot’s motor control REPORT January 27, 2025 Author: Yeray Navarro Soler Supervisor: David Caballero Flores Call: February 2025 Escola Tècnica Superior d’Enginyeria Industrial de Barcelona Servo drives implementation for robot’s motor control i ii Report Resum Aquest projecte estudia la millora dels controladors de motors dels robots del CDEI, simplificant el sistema de control en reduir el nombre d’elements que el componen, i per tant el pes, augmentant també l’eficiència del robot. Per fer això, s’analitza l’ús i la implementació dels servo drives EtherCAT de l’empresa Ingenia, en concret els models EVS-NET-E i EVE-XCR-E. Els objectius principals del projecte són: primer, la validació del correcte funcionament d’una placa de circuit imprès (PCB) que incorpora el drive EVS-NET-E, assegurant que permet el control en temps real d’un motor brushless; i segon, el desenvolupament del programa de control per poder implementar aquests dispositius als robots. A més, s’estableix una metodologia per integrar aquests drives als robots, aportant guies de configuració i exemples de programació. Per validar la PCB s’ha utilitzat el programa MotionLab3, mitjançant el qual es pot configurar el drive incorporat. Durant la configuració s’han analitzat les diferents funcionalitats del drive, i per tant també la dels seus circuits associats, modificant-los quan ha estat necessari. Pel disseny del programa de control, s’han fet servir les funcions de la llibreria ingeniamotion de Python, i s’ha desenvolupat el codi seguint un procés iteratiu per assegurar el seu correcte funcionament en tot moment. Aquest programa s’ha escrit en Python, i posteriorment s’ha implementat a ROS. Per realitzar la validació del codi s’han dut a terme proves amb el motor real i una simulació del moviment del robot. L’anàlisi de la PCB indica que, encara que algunes de les parts han estat verificades, com les comunicacions i el feedback, per obtenir una placa funcional és necessari realitzar un estudi més detallat de la placa per poder determinar la causa del mal funcionament a l’hora de controlar el motor. El disseny del programa de control ha conclòs amb l’obtenció d’un codi modular i versàtil, que facilita modificacions i pot ser utilitzar amb qualsevol dels controladors d’Ingenia. A més, s’han creat codis d’exemple per il·lustrar les diferents funcionalitats dels drives usats. Per tant, encara que han sorgit algunes dificultats durant l’anàlisi de la PCB, el projecte demostra la viabilitat d’implementar els servodrives EtherCAT d’Ingenia als robots, obtenint els beneficis que això comporta, com la millora en les seves prestacions i una programació de tot el sistema més senzilla. Servo drives implementation for robot’s motor control iii Resumen Este proyecto estudia la mejora de los controladores de motores de los robots móviles del CDEI, simplificando el sistema de control al reducir el número de elementos que lo componen, y en consecuencia el peso, consiguiendo una mejora en la eficiencia del robot. Para ello, se analiza la implementación y uso de los servo drives EtherCAT de la empresa Ingenia, en concreto los modelos EVS-NET-E y EVE-XCR-E. Los objetivos principales del proyecto son: primero, la validación del correcto funcionamiento de una placa de circuito impreso (PCB) que incorpora el drive EVS-NET-E, asegurando que permite el control en tiempo real de un motor brushless; y segundo, el desarrollo del programa de control para poder implementar este dispositivo en los robots. Además, se establece una metodología para integrar estos drives en robots, aportando guías de configuración y ejemplos de programación. Para validar la PCB se ha utilizado el programa MotionLab3, mediante el cual se puede configurar el drive acoplado. Durante la configuración, se analizan las diferentes funcionalidades del drive y, por tanto, también de los circuitos asociados, modificandolos cuando ha sido necesario. Para el diseño del programa de control, se han utilizado las funciones de la librería ingeniamotion de Python, y se ha desarrollado el código mediante un enfoque iterativo para asegurar su correcto funcionamiento en todas sus fases. Este programa de control se ha escrito en Python, y posteriormente se ha implementado en ROS. Para la validación del código se han realizado pruebas con el motor real y una simulación del movimiento del robot. El análisis de la PCB indica que, aunque algunas partes se han podido verificar, como las comunicaciones y el feedback, para obtener una placa funcional se debe hacer un análisis más profundo y detallado de la placa para poder identificar la causa del mal funcionamiento a la hora de controlar el motor. El diseño del programa de control ha concluido con la obtención de un código modular y versátil, que facilita su modificación, y puede ser usado con cualquiera de los controladores de Ingenia. Además, se han creado códigos de ejemplo para mostrar las diferentes funcionalidades de los drives usados. Por lotanto, apesarde algunasdificultadesencontradasduranteelanálisis delaPCB, elproyecto ha demostrado la viabilidad de integrar los drives EtherCAT de Ingenia en los robots, obteniendo los beneficios que esto comporta, como la mejora en sus prestaciones y una programación de todo el sistema más sencilla. iv Report Abstract This project explores the enhancement of motor controllers in the mobile robots developed by the CDEI, simplifying the control system by reducing the number of elements and, consequently, the weight, while improving the robots’ overall efficiency. To achieve this, the study evaluates the implementation and use of Ingenia EtherCAT servo drives, specifically the EVSNET-E and EVE-XCR-E models. There are two primary objectives for the project: first, to validate the proper functioning of a printed circuit board (PCB) that integrates the EVS-NET-E drive, ensuring it enables real-time control of a brushless motor; and second, to develop a control program for installing this device in the robots. Additionally, the project establishes a methodology for integrating these drives into robots, including configuration guidelines and programming examples. To validate the PCB, the MotionLab3 software was employed, allowing the configuration of the attached drive. During this process, the various functionalities of the drive and its associated circuits were analyzed, making the necessary modifications. For the design of the control program, the fucntions of the Python Ingeniamotion library were used. The development of the code followed an iterative approach to ensure proper functionality at all stages. The control program was written in Python and subsequently implemented in ROS. Validation of the code was carried out through tests with the actual motor and simulations of the robot’s movement. The analysis of the PCB revealed that while some components, such as communication and feedback circuits, were successfully verified, achieving a fully functional board requires a more detailed analysis to identify and address the causes of motor control issues. The design of the control program resulted in the creation of a final modular and versatile control program that allows for easy modifications and is compatible with any of the Ingenia controllers. Additionally, example codes were created to demonstrate the various functionalities of the drives. Therefore, despite some challenges encountered during the PCB analysis, the project demonstrated the feasibility of integrating Ingenia EtherCAT drives into the robots, obtaining the benefits that this involves, such as improved performance and reduced overall programming complexity. Servo drives implementation for robot’s motor control v vi Report Contents 1 Introduction 1 1.1 Motivation ......................................... 1 1.2 Objectives ......................................... 2 1.3 Scope ............................................ 2 1.4 Report structure ...................................... 3 I Theoretical framework 4 2 Theoretical concepts 5 2.1 Motion control systems .................................. 5 2.1.1 PLC ......................................... 5 2.1.2 Brushless motors ................................. 6 2.1.3 Servo drives .................................... 7 2.1.4 Feedback ...................................... 8 2.2 Communication protocols ................................ 9 2.2.1 Comparison between EtherCAT and CANopen ................ 11 2.3 Printed Circuit Boards concepts ............................. 12 3 Background and current state 14 3.1 Hardware of CDEI robots ................................ 14 3.2 Software of CDEI robots ................................. 15 4 State of the Art 16 4.1 Printed Circuit Boards .................................. 16 4.2 EtherCAT drives in motion control ........................... 17 4.3 Improvement of the current motor controllers at CDEI ................ 19 5 Description of the servo drives 20 5.1 Main components ..................................... 20 5.1.1 Everest S NET E (EVS-NET-E) ......................... 20 5.1.2 Everest XCR E (EVE-XCR-E) .......................... 21 5.2 Comparison between EVS-NET-E and EVE-XCR-E .................. 22 5.3 Control architecture .................................... 23 5.4 Safe Torque Off ...................................... 24 5.5 Register dictionary .................................... 24 6 Description of the PCB 25 6.1 Main features ....................................... 25 6.2 Altium design and schematics .............................. 27 6.2.1 STO and voltage monitor circuits ........................ 27 6.2.2 DC bus and reverse polarity protection circuits ................ 28 II Methodology 29 7 Description of the tools employed 30 7.1 Tools and equipement used for the modification of the PCB ............. 30 Servo drives implementation for robot’s motor control vii 7.2 Software used for the PCB Validation .......................... 30 7.2.1 TwinCAT ...................................... 30 7.2.2 MotionLab3 .................................... 30 7.3 Software used for the control program implementation ............... 35 7.3.1 Python ....................................... 35 7.3.2 Visual Studio Code ................................ 36 7.3.3 ROS2 ........................................ 36 7.3.4 Software installation ............................... 36 8 Methodology for the PCB validation 38 8.1 Experimental setup .................................... 38 8.1.1 Materials used .................................. 38 8.1.2 Components connections ............................ 38 8.2 PCB validation procedure ................................ 41 8.2.1 Communication circuit .............................. 41 8.2.2 Safe Torque Off circuit .............................. 42 8.2.3 Feedback circuit .................................. 43 8.2.4 Controller configuration (servo drive EVS-NET-E) .............. 43 9 Methodology for the control program implementation 46 9.1 Experimental setup .................................... 46 9.2 Control program implementation procedure ..................... 46 9.2.1 Controller configuration (servo drive EVE-XCR-E) ............. 47 9.2.2 Study of the ingeniamotion library ....................... 48 9.2.3 Code implementation .............................. 49 9.2.4 Code functionality verification ......................... 52 III Results 53 10 Results of the PCB validation 54 10.1 Communication circuit .................................. 54 10.2 Safe Torque Off circuit .................................. 54 10.3 Feedback circuit ...................................... 56 10.4 Controller configuration (servo drive EVS-NET-E) .................. 57 10.4.1 Comprehensive PCB review ........................... 57 10.4.2 Motor configuration test ............................. 57 10.4.3 Power Supply circuit analysis .......................... 58 11 Results of the control program implementation 60 11.1 Controller configuration (servo drive EVE-XCR-E) .................. 60 11.2 Results of the code implementation ........................... 63 11.2.1 Windows ...................................... 64 11.2.2 Ubuntu ....................................... 69 12 Analysis and discussion 74 12.1 Discussion of the results ................................. 74 12.2 Proposals for future work ................................ 74 viii Report IV Supplementary assessments 76 13 Planning of the project 77 14 Economic assessment 79 15 Environmental assessment 81 16 Social and gender equality assessment 82 Conclusions 83 Acknowledgments 84 V Appendices 93 A Control loops 94 A.1 Current control ...................................... 94 A.2 Velocity control ...................................... 95 A.3 Position control ...................................... 95 B PCB schematic 97 C PCB layouts 99 D Software Installation Guide 107 D.1 TwinCAT ..........................................107 D.2 MotionLab3 ........................................107 E Guide to establish PC-Drive-MotionLab3 communication 108 E.1 Communication with the computer ...........................108 E.1.1 Port configuration ................................108 E.1.2 Drive connection to TwinCAT ..........................109 E.1.3 Drive firmware update ..............................112 E.2 Drive connection to MotionLab3 ............................114 F Guide on manual tuning through MotionLab3 117 G Main functions of the ingeniamotion library 119 G.1 Communication ......................................119 G.2 Configuration .......................................120 G.3 Motion ...........................................120 H Created codes 122 H.1 driver_connection .....................................122 H.2 load_safe_config.py ....................................123 H.3 set_get_registers.py ....................................125 H.4 velocity_motion.py ....................................126 H.5 position_motion.py ....................................129 H.6 program_velocity_keys.py ................................131 2 Report performance and adaptability to demanding applications in agriculture and construction. From a personal perspective, my main motivation for undertaking this work stems from my deep interestin robotics, electronics, and processcontrol. Theseare branches ofengineering that are closely interconnected and have either been a part of my life for as long as I can remember or became passions as I progressed through my degree in Industrial Technologies. With my interests clearly defined and my transition into the professional world approaching, I wanted my Master’s Thesis to be both fulfilling and a valuable opportunity to deepen my knowledge. That’s when I discovered the CDEI, which offered me the chance to work on an exciting project encompassing both electronics and control, areas I would not have been able to explore so thoroughly on my own. I was drawn to this opportunity immediately and eagerly embarked on this journey. 1.2 Objectives This work has two main objectives: the validation of the correct operation of an electronic board designed for motor controllers, and the development of a control program for these devices. The controllers selected for the study are the Ingenia servo drives. Among the available models, the EVS-NET-E and the EVE-XCR-E have been used, with the former requiring an electronic board for its operation, which is the primary focus of validation in this project. Therefore, the specific objectives of the project are: 1. Validate the functioning of the electronic board. In particular, ensure that the board facilitates communication between the drive and the computer, enables motor control through the drive, and allows real-time monitoring of system parameters such as motor speed and position. 2. Propose improvements for future iterations of the board design. 3. Develop a modular and versatile control program, making it applicable to any Ingenia controller. 4. Establish a methodology for integrating these drives into robots, including guidelines for programming them using its specific software and designing the control code for smooth and trouble-free implementation. 1.3 Scope The time frame and available resources define the scope of this project. It does not aim to study the controllers currently installed on the robot or their control programs. Similarly, the assembly and use of the new controllers on the actual robot are beyond the scope of this work. The function and design of the electronic board will be analyzed; however, a complete redesign or manufacturing of the board is not included. The time required for these processes makes them unfeasible within the time constraints of this project. In summary, this work contributes to improving motor control in CDEI robots through the integration of Ingenia drives, delivering a control program within the methodological and con- Servo drives implementation for robot’s motor control 3 textual limitations outlined. 1.4 Report structure Due to the extensive number of sections and concepts covered in this work, as well as the combination of theoretical study, practical work, and program development, this section provides a brief description of the structure of the document. The aim is to serve as a guide for the reader. •Theoretical framework: This section includes the following: –An introduction to theoretical concepts related to motion control, communication protocols, and printed circuit boards. This provides the reader with a basic understanding of the topics addressed in following sections. –A summary of the current control system used in CDEI robots, along with an explanation of the current state of the improvement process for these robots. –A description of the printed circuit board developed at CDEI, which is essential for understanding the study conducted in this work. –An explanation of the characteristics of the controllers used in the project. •Methodology: This section outlines the development process and experimental procedures followed for both validating the PCB and designing the control program used to operate a motor with Ingenia drives. The methodology is presented in a way that enables readers to replicate the procedures and achieve similar results. •Results: This section describes and explains the results obtained. Due to the nature of the project, the results are divided into two parts: one for the validation of the PCB and another for the implementation of the control program. It details the functions and code developed for motion control, the drive configurations used, and the execution results of the codes. Additionally, it includes a discussion of the results and proposals for future work. •Supplementary assessments: This section presents subsequent analyses, such as economic, environmental, or social evaluations. Part I Theoretical framework Servo drives implementation for robot’s motor control 5 2 Theoretical concepts This section introduces the theoretical concepts within the scope of this work to provide the reader with the necessary context regarding the terms and elements referenced throughout the report. It is divided into three sections corresponding to the main topics addressed in the project. 2.1 Motion control systems A motion control system is any system that regulates the energy flow to generate mechanical motion. These systems are composed by the following key components [6]: •Motion controller: This component takes instructions from the software, combines them with feedback from the motor, and sends commands to the motor drive. An example of a motion controller is a PLC. •Motor drive: The motor drive converts the low energy signals from the controller into high energy signals used to move the motor. In some cases, these are built into motion controllers, such as in servo drives. •Motor: Converts the electrical energy into mechanical energy to generate motion. •Feedback sensors: These sensors provide information about the position of the motor and direction of the motion. Encoders are the most common feedback sensors. Figure 1: Motion control system scheme. Source: [6]. 2.1.1 PLC Programmable Logic Controllers (PLCs) are electronic systems designed to control systems or applications autonomously, optimizing processes. Their main components include a programmable memory, a processing unit, and an input/output module [7]. By receiving input signals from sensors and other devices, the PLC can monitor the system’s state. This information is processed to generate actions, activating or deactivating outputs to control actuators and execute specific functions as dictated by its programming. PLCs are programmed in advance using a computer and specialized software, which in most cases it increases complexity on the system [8]. Due to their high flexibility, PLCs are widely used in process automation. They are commonly found in production plants, elevators, escalators, and even in medical applications [8]. 6 Report 2.1.2 Brushless motors Brushless motors are characterized by a rotor consisting of a permanent magnet and a stator that generates an electromagnetic field through coupled coils. These motors do not produce friction, which extends their lifespan, reduces heating, and enhances performance. However, they require a controller, such as a servo drive, to manage the rotation of the electromagnetic field [9,10]. Motor rotationis achieved by changing the direction of the magnetic field produced by the stator coils. To control this rotation, the magnitude and direction of the current flowing through the stator coils must be adjusted [11]. For instance, in a motor with three stator coils, two coils are excited simultaneously, as illustrated in Figure 2. The resulting magnetic field causes the rotor to align with the magnetic field’s direction (pole N at the tip of the arrow). Continuous rotation is maintained by sequentially exciting the coils, forcing the permanent magnet to constantly align with the changing magnetic field [11,12]. Figure 2: Magnetic field generated by the excitation of two coils. Source: [11]. This method of motor rotation control is known as trapezoidal commutation, which is the simplest technique. It allows for only six distinct directions of the magnetic field, as shown in Figure 3. Transitioning from one direction to another causes the rotor movement to be slightly uneven, making it less suitable for applications requiring precise control at low speeds [11,13]. Figure 3: Possible magnetic field directions. Source: [11]. An alternative is sinusoidal commutation, where varying flux magnitudes are applied to each coil by adjusting the current flowing through them at all times. The applied currents follow sinusoidal waveforms that are 120°out of phase. This approach allows for smoother motor Servo drives implementation for robot’s motor control 7 movement by providing a more continuous and precise variation in the magnetic field direction, as shown in Figure 4. However, this technique requires accurate position feedback, which is typically obtained using encoders or similar devices [11,13]. Figure 4: Sinusoidal commutation. Source: [11]. Finally, to regulate the speed of the motor, the voltage and current of its coils must be adjusted. This can be achieved in several ways, with the most common methods being [14]: •Analog signal control: The voltage or current generated by the motor controller is adjusted using external analog signals provided by the operator. •Pulse frequency control: This method varies the frequency of the pulse signal emitted by the electronic controller that drives the motor. •Pulse Width Modulation (PWM) control: The voltage in the coils is adjusted by generating a variable width pulse signal. By modifying the duty cycle, the effective motor voltage is altered, which in turn changes the motor speed. Increasing the duty cycle is equivalent to increasing the effective voltage, raising the motor speed as shown in Figure 5. Figure 5: Pulse Width Modulation control. Source: [11]. 2.1.3 Servo drives Servo drives are electronic devices designed for the precise control of the movement of electric motors. Their primary function is to control the speed, position, and torque of the motor. This process is achieved by comparing the desired motor behavior with its actual behavior and adjusting the energy supplied to the motor to perform the desired movements with precision [15,16]. 8 Report These devices translate the operator’s commands to the motor, and their operation involves several elements [15]: •Input signal: Receives the operator’s command specifying the position, speed or torque. •Feedback signal: Provides information about the current speed and position of the motor. Feedback is a crucial element supplied by external devices such as encoders or similar sensors. •Motor behavior adjustment: Based on the received commands and feedback, the servo drive adjusts the motor’s behavior by varying the current supplied to achieve the desired performance. Servo drives operate in closed-loop control systems, continuously monitoring motor parameters and correcting any deviations based on the feedback received. These devices are highly valuable due to their precision and speed in motion control, which also reduces the energy consumption of systems. 2.1.4 Feedback Feedback devices allow the position of the motor rotor to be continuously monitored, enabling the rotational speed to be deduced in real time. These devices can be installed internally within the motor housing or externally attached to the motor shaft. Typical devices that perform the feedback function include: •Resolvers: Analog devices that do not contain any electronics or optics. Their design makes them highly robust against high temperatures, vibrations, and shocks. Resolvers are rotary power transformers that generate a complete sine and cosine wave for each revolution of the motor shaft. Using these voltage waves, the motor’s rotation can be calculated [17]. •Encoders: Digital devices that incorporate optical or magnetic sensors to detect the rotor’s position, as illustrated in Figure 6. Encoders provide higher accuracy than resolvers, and there are two types [18,17]: – Incremental encoders: These sensors generate two pulse signals that provide information about displacement and movement direction. As the name suggests, they only measure changes in position. To determine the absolute position, a reference point (home position) must be established. When the system powers off, the encoder loses track of the position and must return to the reference point to determine the absolute position. A simplified diagram of an incremental encoder disk is shown in Figure 6b. – Absolute encoders: These encoders provide the exact position of the motor without requiring a reference point. Additionally, they retain the current position even when the system powers off, as their output value is unique for each position. A simplified diagram of an absolute encoder disk is shown in Figure 6c. •Hall effect sensors: These sensors detect the magnetic field generated by the motor rotor and produce electrical signals proportional to the rotor’s speed and direction of rota- Servo drives implementation for robot’s motor control 9 tion [19]. (a) Internal structure. Source: [18] (b) Incremental Encoder. Source: [20] (c) Absolute Encoder. Source: [20] Figure 6: Internal structure and disks of an encoder. 2.2 Communication protocols Communication protocols are a set of formal rules and guidelines that describe the transmission and exchange of data, especially over a network. Protocols enable efficient and secure communication between devices and systems by defining the characteristics of communication [21]. The main characteristics of communication protocols are [22,23]: •Network topology: Defines the structure of the network and the addressing schemes used for data transmission. •Data format: Specifies the standardized format of the data to ensure it is understandable by all devices on the network. It also defines the structure of the messages being transmitted. •Data transmission: Establishes how data is transmitted efficiently, including error detection and correction mechanisms. Data must arrive complete, ordered, and uncorrupted to be correctly understood. If errors occur, the transmission process is restarted. •Security: Incorporates measures such as encryption and data protection mechanisms to safeguard information during transmission. •Synchronization: Ensuresdevices aresynchronized toavoid communication issues. Flow control methods are included to handle differences in processing speeds between devices. The critical importance of operational efficiency and reliability in industrial automation has made communication protocols a core element of the field. These protocols facilitate smooth operations in factories and machines by enabling communication between systems and devices. Below are some of the primary industrial automation protocols [23,24,25]: 10 Report Table 1: Communication protocols and their features. Protocol Features Modbus One of the oldest and open source protocols. Simple and highly compatible. Operates on a master-slave model with serial and Ethernet communication. Commonly used with PLCs, computers, drives, sensors, etc. PROFINET A modern protocol based on Ethernet offering high flexibility and performance. Supports high speed and real time communication. Works with various network topologies such as star, tree, and ring Allows integration of a large number of devices. Operates with a central controller and peripheral nodes. EtherNET/IP Provides robust security and high compatibility with Ethernet. Enables smooth exchange of information between devices. Operates on a node to node communication model. DeviceNET A simple, cost effective protocol with easy installation and wiring. Based on CAN (Controller Area Network) technology. Commonly used with simple actuators and sensors. Figure 7: Primary communication protocols. Source: propia. CANopen Based on the CAN standard, CANopen enables real-time communication for complex devices and systems. It is known for its robustness and ability to operate in harsh environments with high levels of interference. CANopen is characterized by simplicity of connections, efficiency, high reliability, and the ability to expand the communication network easily and at low cost. It typically uses a star topology, with different devices connected at each node [26]. The CAN bus consists of two wires and operates as a broadcast system, meaning data is transmitted to all nodes regardless of their function (controllers, sensors, actuators, etc.). Each transmitted message contains an identifier that determines its priority in case two devices transmit information simultaneously. CANopen is widely used in vehicles, equipment, and machinery [24]. Devices on the CAN bus are not strictly defined as master or slave; instead, they can perform both roles simultaneously in relation to other devices. This flexibility allows for a wide variety of systems to be connected. However, to connect a computer directly to the CAN bus, an intermediate device is often required. This device translates CAN bus messages into a format the Servo drives implementation for robot’s motor control 11 computer can understand [25]. A simplified structure of a CANopen network can be seen in Figure 8. Figure 8: CANopen: Operating schematic. Source: [27]. EtherCAT EtherCAT is an open source, high performance protocol based on Ethernet. It is valued for its high speed (low latency) and high precision communication, making it ideal for real-time and precise control applications, such as robotics and motion control. EtherCAT supports various network topologies, increasing its flexibility and adaptability to existing Ethernet networks, into which it can be integrated. It connects to a wide range of devices, from motor controllers to complex control systems and computers [25,24]. EtherCAT offers simple and low cost implementation by using standard Ethernet hardware in its fieldbus system. It is particularly suitable for motion applications requiring a large number of precisely synchronized motions or axes [23]. EtherCAT uses a master-slave communication model with a unique mode of operation based on the "on-the-fly processing" principle, which increases system communication efficiency and speed [26,28]. In this model, a single telegram (data frame) is sent through all connected devices instead of sending individual messages to each node. The telegram contains data for each slave device, which reads its designated messages as the frame passes through and simultaneously writes response data. Once the frame has passed through all the slaves, it returns to the master device with all the collected responses [29,28]. This series connection of the salves simplifies network wiring. To connect an EtherCAT slave to a master computer, no intermediate device is required, thanks to Ethernet compatibility. However, in some cases, specific software may be needed to establish communication, as will be discussed in later sections. A simplified structure of an EtherCAT network can be seen in Figure 9. Figure 9: EtherCAT: Operating schematic. Source: [27]. 2.2.1 Comparison between EtherCAT and CANopen EtherCAT provides significantly higher communication speeds than CANopen, enabling faster update cycles and better synchronization for critical applications. EtherCAT can also handle a larger number of nodes without sacrificing performance, while CANopen has limitations re- 18 Report Recent research on EtherCAT drives, such as [47] and [48], has demonstrated that this technology its capable of performing high-precision multi-axis motion control thanks to its high-speed communication and reliable synchronization. Nowadays, EtherCAT technology has made a significant impact on productivity and efficiency, with over 100.000 EtherCAT networks around the globe [46]. Given the large market for this technology, there are several companies that specialize in manufacturing these devices, being Ingenia a distinguished one. Ingenia is a recognized company in the field of motion control and is part of Celera Motion, a division of Novanta Inc., which operates globally. The company specializes in the design and manufacture of high-power-density, compact, and highly efficient servo drives. Its products are widely used in robotic and industrial applications where space and efficiency are critical, such as robotic joints and mobile robots, providing precise and reliable motor control [49]. (a) Ingenia. Source: [50]. (b) Novanta. Source: [51]. Figure 18: Companies providing the servo drives used. Ingenia offers a wide variety of servo drives, including customized options to meet the specific requirements oftheirapplications. Their servo drives areorganized into series(Denali, Captain, Everest), each containing different models. Some models require an electronic board to operate (pluggable, such as the EVS-NET), while others are ready to use and only require the necessary cables to be connected to the appropriate terminals (connection-ready, such as the EVE-XCR). Each series includes models compatible with both CANopen and EtherCAT communication protocols, allowing users to choose the most suitable option. Additionally, some drives support Safety over EtherCAT, a protocol that integrates safety functions into EtherCAT communication, ensuring reliable data transmission for critical applications in industrial automation. For each servo drive, extensive documentation is available in three manuals: the Product Manual, which describes the technical specifications of the device, including its pinout, dimensions, and safety recommendations; the Reference Manual, which details the register dictionaries, communication protocols, and configuration options, as well as the controller’s internal functioning and error management; and the Application Guide, which provides a basic guide and recommendations for creating the schematic and layout of the PCB that contains the drive. Additionally, firmware files and register dictionaries for various models can be downloaded directly from the documentation. Ingenia also offers free access to MotionLab3, its proprietary software for configuring any of its drives easily. This programfeatures anintuitive andhighly configurable userinterface, allowing users to verify the proper functioning of the motor control system. A guide to using MotionLab3 is accessible at [52], and the software is described in Section 7.2.2. Servo drives implementation for robot’s motor control 19 Finally, Ingenia provides additional extensive documentation [53], including troubleshooting guides, tips, and FAQs. All the documentation mentioned is accessible and centralized at [54]. 4.3 Improvement of the current motor controllers at CDEI The process of improving the motor controllers of the CDEI robots began last year with the proposal to design a printed circuit board capable of including the EVS-NET-E servo drive from Ingenia, which uses the EtherCAT communication protocol. This electronic board was designed to enable the control of both brushed and brushless DC motors [55]. The design process consisted of several phases, starting with the creation of the PCB circuit using Altium software, where both the schematics and layout of the board were defined. The designs were carried out following the instructions and recommendations provided by Ingenia regarding connection traces, as well as the placement of components and connectors, as specified in their online documentation [56] and [57]. The PCB was then manufactured by the JLCPCB company. Although commonly used electronic components were selected during the design process, some were unavailable through the manufacturer. These components were sourced from other suppliers and manually soldered onto the board to complete its assembly. Therefore, at the start of this project, the CDEI already possessed a PCB capable of integrating an EtherCAT servo drive. However, this board is an initial design and has not been tested and so it still requires validation to verify its proper operation, a study that will be conducted as part of this work. A detailed description of the printed circuit board is provided in Section 6. 20 Report 5 Description of the servo drives This section provides a brief description of the servo drives used in the project, including their main components and features. Two different drives from Ingenia were used, both of which are described and compared below. The devices used in this project belong to the Summit servo drive series from Ingenia, specifically the Everest S Net and Everest XCR models. Their details are presented below. 5.1 Main components The functional components of both servo drives are divided into four groups: •Control unit: Includes the integrated processor that executes real-time control algorithms and its auxiliary components. •Power connection: Contains both the DC power supply for operating the drive and the power it delivers to the motor to control its operation. •Communication interface: Comprises elements that enable interaction between the controller and its environment. •Memory unit: Stores the device’s configuration and the real-time variable values during operation. The configuration is saved in the persistent memory, while the other variables are stored in the volatile memory, which loses its data when power is disconnected. 5.1.1 Everest S NET E (EVS-NET-E) The Everest S NET digital servo drive (Figure 19a) is a high power, ultracompact unit designed to be integrated into a printed circuit board for specific applications. It features high energy efficiency thanks to its next generation power stage. This device supports both EtherCAT and CANopen communication protocols, with the model EVS-NET-E corresponding to EtherCAT technology [58]. The main technical specifications of this model can be found in Table 2, and the full datasheet is available in the catalog [59]. The drive includes an input for a motor temperature sensor and safety systems such as protections against short circuits, overtemperature, overcurrent, and overvoltage. These limits are pre-set by Ingenia but can be also configured to enhance the device’s safety. Due to the high temperatures it may reach during operation, it is recommended to use heat sinks whenever possible to prevent thermal overload. The physical structure and pinout of the drive for its connections are shown in Figure 19b. Connector P1 supplies power to the device, while P2 connects to the motor. The later consists of three pins corresponding to the phases of brushless motors. Connector P3 accommodates encoders, digital halls, and the temperature sensor. Connector P4 includes EtherCAT communication and digital input/output connections. Some feedback and interface pins should remain disconnected by order of the manufacturer [60]. Servo drives implementation for robot’s motor control 21 (a) Servo drive. Source: [58]. (b) EVS-NET-E Connectors. Source: [60]. Figure 19: Summit servo drive Everest S NET EtherCAT. 5.1.2 Everest XCR E (EVE-XCR-E) The Everest XCR digital servo drive (Figure 20a) is a high power, fully integrated unit ready for use. This device includes all the connectors and electronic interfaces required for its operation. Like the EVS-NET-E, it features high energy efficiency due to its next generation power stage and supports both EtherCAT and CANopen communication protocols. The EVE-XCR-E model corresponds to EtherCAT technology [61]. The main technical specifications of this model can be found in Table 2, and the full datasheet is available in the catalog [62]. This drive also includes an input for a motor temperature sensor and features the same safety systems as the EVS-NET-E. These limits can also be configured to enhance safety. Due to the high temperatures it may reach during operation, heat sinks are also recommended. (a) Servo drive. Source: [61]. (b) EVE-XCR-E Connectors. Source: [63]. Figure 20: Summit servo drive Everest XCR EtherCAT model. The physical structure and pinout of the drive are shown in Figure 20b. Connector P1 supplies power to the device, while P2 connects to the motor. The later consists of three pins corresponding to the phases of brushless motors. Connector J1 is used for encoders and digital halls, while J2 includes digital input/output connections and the temperature sensor. Connectors J3 and J4 22 Report serve as the EtherCAT communication output and input, respectively [63]. 5.2 Comparison between EVS-NET-E and EVE-XCR-E Table 2summarizes the main technical specifications of each of the drives used in this project, facilitating their comparison. Table 2: Technical specifications of the drives. Source: [58], [61] EVS-NET-E EVE-XCR-E Supply Voltage 12 - 80 VDC 12 - 80 VDC Max Continuous Current Up to 45 A Up to 45 A Peak Current 60 A for 1 s 60 A for 1 s Operating Temperature -20 to 85 ºC -20 to 85 ºC Efficiency 99% 98% PWM Frequency 10 - 100 kHz 10 - 100 kHz Supported Motors Brushed DC motors Brushless rotary motors Brushed DC motors Brushless rotary motors Supported Feedbacks Digital halls Incremental encoder: up to 2 simultaneously Absolute encoder (BiSS-C, SSI): up to 2 simultaneously Digital halls Incremental encoder: single Absolute encoder (BiSS-C, SSI): up to 2 simultaneously Simultaneous Feedbacks Up to 4 Up to 4 Control Modes Current Velocity Position Current Velocity Position Inputs 4x digital 2x analog 4x digital 1x analog Outputs 4x digital 4x digital Protections Short circuit Voltage Current Temperature Short circuit Voltage Current Temperature Dimensions 34.5 x 26 x 14.59 mm342 x 29 x 23.2 mm3 Weight 18 g 38 g Price 535 €869 € As shown in the table, the two drives share many similar properties, though the EVS-NET-E supports a greater variety of feedback types. The primary difference lies in the fact that the EVE-XCR-E is ready to use, requiring only the appropriate connections for the application. In contrast, the EVS-NET-E requires a PCB for operation, as it lacks integrated safety elements. This difference is also reflected in their prices, with the plug-and-play EVE-XCR-E being more expensive. While ready-to-use devices eliminate the need for PCB design, they also limit flexibility regarding connections and electronic circuits. The EVS-NET-E, by requiring a custom-designed PCB, allows for a personalized circuit and component layout based on the application requirements. Servo drives implementation for robot’s motor control 23 For example, when connecting multiple EVE-XCR-E drives in series for multi-axis control, cables are required to link them. However, with the EVS-NET-E, it is possible to design a PCB that integrates multiple drives, with their communication and connections handled internally through PCB traces. 5.3 Control architecture This section describes the internal operation of the drives, which allows them to process user commands and adjust motor behavior accordingly. This description does not aim to explain control theory but rather to present the control structure integrated into the device that governs its operation. The Summit series drives from Ingenia have an architecture based on a cascaded triple control loop (position - velocity - current) [64]. Each of these three levels contains the previous ones, ordered by their processing velocity, as shown in the simplified diagram in Figure 21. Figure 21: Cascaded triple control loop architecture. Source: author. The lowest level is the current control loop, which operates at the highest processing frequency since changes in this variable occur very rapidly. This means that current commands can be sent directly to the drive, which will convert them into voltage for the motor (V), achieving the desired movement [65]. The next level is velocity control, which operates slower than the current loop but faster than the position loop. In this case, velocity commands sent to the drive are converted into motor torque (Nm) [66]. The outer level is position control, which is the slowest of all. Position commands input to the drive are converted into velocity (rev/s) [67]. Due to the cascade structure, the control loops must be configured appropriately and in order, starting with the fastest loop. Filters and offsets can be defined during configuration to modify the behavior of the described loops to a greater or lesser extent. The configuration process will be explained later in the document. For readers interested to look over both the complete control schemes and the implemented PID model for each of the loops as defined by the manufacturer, please refer to Appendix A, which includes these diagrams. For more detailed information on this aspect, the official documentation is recommended [64]. 24 Report 5.4 Safe Torque Off Ingenia drives are equipped with three inputs dedicated to the Safe Torque Off (STO) safety system. The STO is a functional safety mechanism designed to prevent motor torque in emergency situations while maintaining the drive’s power supply. When the STO is activated, the power stage supplying the motor is disconnected through hardware, overriding any control commands or device firmware. It is important to note that this disconnection does not brake the motor (unless an external brake is programmed for this purpose), instead, the motor will decelerate to a stop due to the interaction of frictional forces and inertia. If the STO inputs are not active, the power stage is disconnected, and an STO fault is reported. To enable the power stage, both inputs must be active simultaneously, typically at a high voltage level (commonly 5V). If the two inputs are not activated or deactivated simultaneously, an STO fault is also triggered, as this may indicate an abnormal condition. To clear these errors and resume normal operation, the power supply must be reset. 5.5 Register dictionary The memory and functionality of the drives are based on a register dictionary, which is a standardized structure containing all parameters that define the device’s behavior. This architecture is flexible and supports a wide range of topologies, from simple single-axis devices to complex multi-axis systems. The dictionary includes general registers for communication protocols and specific registers for motion control. When multiple drives are connected in cascade for multi-axis control, each axis has its own specific motion control registers, while shared general registers apply to all connected drives. The registers for each drive are detailed in its dictionary, a file with the .xdf extension. This file provides a complete overview of all available registers, including their category, name, description, and data type, among other details. It also indicates if the register can be written or is read-only, as shown in Figure 22. The registers store both the drive’s configuration parameters and various status variables, such as the current voltage, and the position and velocity measured by the encoder. Figure 22: Dictionary registers. Source: author. Servo drives implementation for robot’s motor control 25 6 Description of the PCB This section describes the printed circuit board designed to incorporate the Everest S NET E drive for controlling brushed or brushless DC motors [55]. 6.1 Main features The PCB has been designed to include all the features provided by the drive, summarized as follows: •Inputs/Outputs: Digital (4 inputs and 4 outputs) and an analog input for reading motor temperature. •Feedback: Absolute encoders (x2), incremental encoders (x2), and digital halls (x3). •Communications: EtherCATandCAN. Thelatter isincluded for compatibilitywith CANopen devices. •Safe Torque Off (STO): Functional safety feature. •Motor brake: Integrated brake control. •Status signaling: Indicated via LEDs. The PCB also includes protections against reverse polarity and overvoltage, adding an extra layer of safety for the drive. Additionally, since the components require 5V or 3.3V power, voltage divider circuits are implemented to achieve these values. The PCB also provides a 5V output for powering auxiliary components if necessary. These features correspond to specific parts of the PCB, which include the components that implement them. The functional parts, as well as the eight connectors that form the communication interface, are shown in Figures 23 and 24. In these images, the groups of components for each functional unit are marked in red, while the connectors are identified in blue. The functions of each connector shown in Figures 23 and 24 are as follows: •Power connector (CA): Power supply of the PCB, providing the necessary power for the drive and all PCB components. •Ethernet connector (CE): Enables communication between the PCB and the computer, as well as between other drive board. The input port (marked "E") connects to the computer, while the output port (marked "S") connects to another drive in series. •Motor connector (CM): Powers and controls motor movement. The motor phases (A, B, C) and the ground protection (PE) are indicated. •Connector 1 (C1): Used for an incremental encoder. •Connectors 2 and 3 (C2 and C3): Used for absolute encoders. •Connector 4 (C4): Contains connections for an incremental encoder and three digital 26 Report halls. •Connector 5 (C5): Contains digital input and output connections and the brake connection. Figure 23: Top view of the PCB with functional parts. Source: author. Figure 24: Bottom view of the PCB with functional parts. Source: author. The PCB is primarily designed to control brushless DC motors. However, since the drive also supports brushed DC motors, this feature is included. To control brushed motors, the motor Servo drives implementation for robot’s motor control 27 cables should be connected to terminals A and B of the CM connector, leaving terminal C disconnected. Since the EVS-NET-E drive is integrated into the PCB, it has been designed to support an input voltage from 12 to 80V. However, a maximum supply voltage of 48V is recommended, as the board has not been tested at higher voltages. The nominal voltage of 48V for the PCB and drive corresponds to the battery voltage used in the CDEI robots. Thedigital inputs supportup to30V,withprotectioncircuitsusingvoltagedividerstoensure the voltage reaching the drive’s inputs meets its technical limitations (5V). Logic low is detected for voltages equal to or below 0.8V, while logic high is detected for voltages above 2.5V. The digital outputs can support loads of up to 48V and 1A. The PCB is rigid and multilayered, consisting of six different layers: •Top Layer: Contains components, signal traces, and power connections. •Intermediate Layer 1: Forms the ground (GND) copper plane. •Intermediate Layer 2: Contains signal traces and motor phase A power. •Intermediate Layer 3: Includes 5V power and motor phases B and PE. •Intermediate Layer 4: Contains signal traces and motor phases C and PE. •Bottom Layer: Contains components and signal traces. 6.2 Altium design and schematics This section presents only the parts of the schematic that were analyzed and studied in detail during the verification process. For the complete schematic and PCB layout documents [55], please refer to Appendices Band C. 6.2.1 STO and voltage monitor circuits The circuit for the Safe Torque Off (STO) safety system is integrated with the voltage monitor, and their schematics can be seen in Figure 25. The voltage monitor includes overvoltage protection (yellow block, reference LTC4360CSC81#TRMPBF) and a MOSFET acting as an automatic switch to enable the STO circuit. The STO circuit’s key components include two optocouplers (part TCMD1000), which electrically isolate the PCB inputs (three inputs from connector C5 in this case) from the drive’s pins. The outer circuit, corresponding to the PCB inputs, includes protection diodes (parts SD36C01FTG and BAS16P2T5G) and capacitors to absorb temporary voltage oscillations, ensuring smoother input signals. The inner circuit also contains capacitors for the same purpose and voltage dividers to achieve the 5V required for activating the STO on the drive’s pins. 34 Report For this project, the Forced method was chosen, as incremental encoders were employed. After the configuration, the commutation test was conducted to confirm that the system behaved correctly. Mechanical Tuning In this phase, MotionLab3 configures the velocity and position control loops sequentially. First, the program identifies the mechanical characteristics of the system, such as motor inertia and friction, to generate a theoretical model. Users can perform this identification manually or allow MotionLab3 to execute it automatically. Forthe velocity control loop, MotionLab3 designs the PID controller based on the selected design method and specified parameters. The Kp and Ki values can also be adjusted manually to achieve the desired transient response. Finally, the program configures the position control loop. The process is similar to the velocity loop configuration: a plant model is identified (manually or automatically), and the PID controller is calculated. The program also allows users to modify the parameters to fine tune the loop’s behavior. Application In this phase, MotionLab3 configures parameters such as positioning modes, protections, and events, specific to the application. For positioning modes, users can specify the motor’s behavior at defined limit positions. The protections section allows users to configure the motor’s response to velocity and position commands. In the events section, users define how the drive should respond to error signals. Each error signal can be assigned a specific action mode to ensure system and environmental safety. Summary Once the configuration is complete, MotionLab3 allows the settings to be saved as a file. This file can be used to replicate the configuration on other controllers of the same model. The program also provides options to restore the drive’s factory settings or load a specific configuration. The menu options available in this phase are: •Load all: Selects a configuration file (.xcf) from the computer and loads it into the drive’s volatile memory. •Save all: Saves the current configuration as a file on the computer. •Store all: Saves the current configuration in the drive’s nonvolatile memory. •Restore all: Restores the factory configuration and saves it in the volatile memory. During this project, the configuration was saved and stored to facilitate replication on other drives. Servo drives implementation for robot’s motor control 35 Jog menu MotionLab3 provides an interface to test the operation of the drive-motor system using the completed configuration. The Jog menu, located in the top bar, allows users to test motor behavior by sending speed and position commands through the drive. By pressing the Enable button in the Motor section of the Control panel, motor movement is activated. Adjusting the Velocity set-point or Position set-point parameters causes the motor to move accordingly. These changes can be monitored using the automatic display by pressing the play button in the Scope section (top left area). For this project, the Jog menu was used to verify the motor’s behavior and ensure that the configuration was correctly implemented. 7.3 Software used for the control program implementation When using the EVE-XCR-E drive, it also required programming. Therefore, TwinCAT and MotionLab3 were also used in this part of the project. Explanations related to these programs are omitted here to avoid redundancy. The primary goal of using Ingenia drives is to implement them in the CDEI robots, which are controlled through a computer running ROS2 on the Ubuntu operating system. Consequently, the control program must be implemented in ROS2 to allow the robot’s onboard computer to use it, integrating the drive control into the robot’s existing code. This approach enables the reuse of existing code and avoids the need for a complete reprogramming. Therefore, both Windows and Ubuntu operating systems were used for developing the control program. Windows was utilized for an initial version of the code and to verify its basic functionality. This included checking the drive configuration parameters using MotionLab3 and TwinCAT, as these programs are not supported on Ubuntu. Ubuntu, on the other hand, was used for the final implementation of the code in ROS2 to integrate it into the robots’ control systems. 7.3.1 Python Python was chosen as the programming language due to its simplicity and because Ingenia provides a library for establishing communication with and controlling the drive. This library, named ingeniamotion, depends on other libraries such as ingenialink-python and fsoe-master. The versions of these libraries used were 0.8.5, 7.3.5, and 0.1.3, respectively. Python 3.11 was required to use these libraries, as compatibility issues could prevent certain functions from working in other versions. C++ was not used for this project, as its potential speed and performance benefits are negligible with current computing power. Additionally, Ingenia discontinued its C++ library, which is no longer supported or maintained due to the language’s complexity. Additional modules used To implement the desired functionality in the control code, additional Python libraries were required, as detailed below: 36 Report •Keyboard [72]:This module reads user commands via the computer keyboard on Windows. The is_pressed(’key’) function detects specific key presses within a loop, and conditional structures determine the program’s behavior based on the key pressed. •Pynput [73]:Thismodule performsthesamefunctiononUbuntu. It usesa keyboard.Listener object to listen for key presses with the on_press(key) function. Program behavior is determined through conditional structures. •Threading [74]:This module allows the creation of separate threads of control that execute concurrently with the main program. For instance, this enables simultaneous execution of commands to display results and control motor speed. •Navigation CDEI: This ROS2 package contains all the codes for controlling the CDEI robots. It includes a simulation that allows users to observe robot movement, which can be controlled with a joystick. This package was used to conduct a final experiment with the ROS2 nodes created in this project, verifying synchronization between the robot’s simulated movement and the motor’s movement. Installation instructions for this package are detailed in [75]. 7.3.2 Visual Studio Code Visual Studio Code was used as the editor for developing the control program, though similar programs could perform the same tasks. This editor was chosen for its open source nature and ease of installation on both Windows and Ubuntu. Additionally, it supports Python and other programming languages, making it suitable for ROS2 implementation. 7.3.3 ROS2 ROS2 Humble was used for this project, as it is the version employed by the CDEI robots’ existing codes. Using the same version ensured compatibility, simplifying the integration of the new control code with the existing system. 7.3.4 Software installation The installation processes for these programs are well-documented on their respective official websites and are not detailed here. Below are the links to the installation instructions for each software: •Python 3.11.9: Download the installer from [76] and follow the assistant’s instructions. •ROS2 Humble: Install through the Ubuntu terminal, following the instructions at [77]. For beginners, it is recommended to review the official documentation’s tutorials [78]. •Visual Studio Code: Download the installer from [79] and follow the assistant’s instructions. •Python libraries: Install via terminal, either in Visual Studio Code or Ubuntu, using the following commands: –pip install ingeniamotion [80] Servo drives implementation for robot’s motor control 37 –pip install ingenialink [81] –pip install fsoe-master [82] In summary, this project used both Windows and Ubuntu operating systems. Python 3.11.9 was used for programming, by means of the Visual Studio Code editor. ROS2 Humble was employed on Ubuntu to ensure compatibility with the existing codes. Figure 31 summarizes the software used in this part of the project and its relationship with the resulting codes. Figure 31: Software used for the control program implementation. Source: author. 38 Report 8 Methodology for the PCB validation It is essential to verify the functioning of the printed circuit board experimentally, not only through theoretical studies. This ensures that the drive can control the motor in real time with its full capabilities. This section details the experimental setup, the software used, and the procedure followed for validating the PCB. 8.1 Experimental setup 8.1.1 Materials used The experimental setup used for validating the PCB is shown in Figure 32. Figure 32: Experimental setup for the PCB validation. Source: author. The wires used in the setup were selected based on their diameter, ensuring they could handle the required current. This specification can be verified using official documentation, such as the described in [83]. 8.1.2 Components connections The schematic of the electrical connections between elements is shown in Figure 33. Figure 33: Connection schematic for the experimental setup. Source: author. Servo drives implementation for robot’s motor control 39 For this project, the EVS-NET-E drive was mounted onto the PCB using its integrated connectors. Additionally, it was soldered to the PCB through its power supply and motor power pins. This ensured a reliable connection between all components, avoiding additional resistance or irregular behavior caused by poor contact. Since this was a testing phase and high motor speeds were not required, the PCB was powered with 24V supplied by a variable power source. It could deliver up to 2A of current, which was sufficient for all tests and for powering the motor. Furthermore, the power source featured a display for monitoring of the applied voltage and the current drawn by the circuit, allowing for easy and visual control of these variables. The CA power connector had a unique orientation, and the PCB itself indicated the positive terminal. After powering the PCB, the LED Supply indicator was checked to ensure it was illuminated, as shown in Figure 34. Figure 34: Status of the Supply LED when the PCB is powered. Source: author. Although the current limit of the variable power source was considered sufficient protection, an automatic switch was added to the PCB’s power line after the power source. This provided additional protection against potential current spikes during testing that could temporarily exceed the power source’s limit. This element was also used as a switch for the drive, since the power source produced a voltage spike exceeding the required 24V during startup. The addition of the switch allowed the power source to remain on continuously, avoiding the voltage fluctuations mentioned. The computer connection was done by an Ethernet cable, connected to the PCB through the input (E) of the CE connector. If the computer lacks an Ethernet port or all ports are occupied, a USB adapter can be employed. Two different brushless motors from Infranor were used in this project: the BLS072 and the BR02 presented in Figure 35. Both motors included an incremental encoder used as feedback. The primary difference between these motors, apart from their technical specifications, was that the BLS072 had an integrated brake. BLS072: The connection cables were divided into two bundles: an orange bundle for power and a green one for feedback. The orange one contained five wires, three of which were labeled (U, V, W) and connected directly to the CM connector of the PCB in alphabetical order (A-U, B-V, C-W). The remaining two wires (brown and white) were for the brake and needed to be connected to 24V and GND, respectively, to enable motor movement. 40 Report (a) BLS072 Motor. Source: author. (b) BR02 Motor. Source: author. Figure 35: Motors used for the project. The green bundle had additional wires that were not connected: orange, yellow, blue, whitegreen, and white-yellow. The remaining wires were connected to the PCB’s C4 connector, following the configuration outlined in Table 3. The pin numbering for the C4 connector is shown in Figure 36. The encoder cable connections for the BLS072 motor are shown in Figure 37. (a) Front view. (b) Rear view. Figure 37: Encoder connections for the BLS072 motor. Source: author. BR02: Its connection cables were also divided into two bundles. One of them contains only four cables, which are the motor phases and are grouped in a specific connector with a unique orientation. In this case, the equivalence of colors with the motor phases is A-red, B-blue, Cgrey. The other bundle of cables is directly attached to a specific connector, since originally, this Servo drives implementation for robot’s motor control 41 Table 3: BLS072 motor connections to the C4 connector. Source: [55]. C4 Connector Green Cable Bundle Pin 1 - A/ channel Gray Pin 2 - A channel White Pin 3 - B/ channel White/Brown Pin 4 - B channel White/Black Pin 5 - Z/ marker pulse White/Orange Pin 6 - Z marker pulse White/Red Pin 7 - Temperature - Pin 8 - Temperature - Pin 9 - Hall U Red Pin 10 - Hall V Green Pin 11 - Hall W Violet Pin 12 - Pin 13 - Pin 14 - Pin 15 - +5 V Brown Pin 16 - GND Black Figure 36: Front view of C4 connector pins. Source: author. motor was used with the EVE-XCR-E drive. It has not been needed to modify it since the motor has not been used with the encoder using the EVS-NET-E drive. 8.2 PCB validation procedure The validation process for the printed circuit board was divided into four phases: •Communication circuit: configuring the computer port and establishing communication between the drive and the software programs TwinCAT and MotionLab3. •Safe Torque Off circuit: troubleshooting and repairing the STO circuit. •Feedback circuit: verifying the operation of the incremental encoder circuit. •Controller configuration (servo drive EVS-NET-E): setting up the drive parameters to control the motor using MotionLab3. Throughout the process, any errors detected in the board were addressed by making the necessary changes to the PCB components and connections. 8.2.1 Communication circuit To keep the project report concise, this section provides a summary of the procedure, focusing on the key points of each phase. Detailed step by step instructions are available in the created guide included in Part V, specifically in Appendix E. Computer Port Configuration To use the Ethernet connection between the computer and the drive, the network adapter had 42 Report to be configured to match the controller’s subnet. The adapter’s IP address (TCP/IPv4) was set to 192.168.2.26, and the subnet mask to 255.255.255.0. This configuration can temporarily make the port inaccessible to other networks or devices unless the settings are reverted, but these changes are not irreversible in any case. Detailed instructions for this process can be found in Appendix E.1.1. Communication with TwinCAT The drive was connected to TwinCAT by creating a new project and adding an EtherCAT Master object. This object scanned the adapter to which the device was connected, detecting the controller as either a BOX or Drive element in the project. To establish proper communication, the IP address of the slave was changed to 192.168.2.0, and the gateway was set to 192.168.2.26 (the IP assigned to the port). Once the project was reloaded using the Reload Devices option, the drive communicated successfully, indicated by the blinking of both the Ethernet port LED and the RUN LED. This process involved additional steps and complexity, detailed in Appendix E.1.2. To update the drive’s firmware, the latest version was downloaded from [84] and [85] for the EVS-NET-E and EVE-XCR-E, respectively. Firmware files with extensions .lfu and .sfu were used. The update was performed through TwinCAT using the File over EtherCAT (FoE) protocol. The process involved booting the device into Boot mode, loading the firmware file into its memory and restarting it. Specific instructions for updating the firmware of each drive model are provided in Appendix E.1.3. Communication with MotionLab3 Once communication between the computer and the drive was established, it was detected and connected to the MotionLab3 configuration software. This can be done either automatically or manually. When MotionLab3 started, it scanned the computer’s networks to automatically detect connected drives. Detected ones appeared on the program’s home screen, and the connection was established within seconds, after which the drive was ready for configuration. If the controller was not detected automatically or if communication parameters needed adjustment, it could be connected manually by selecting the EtherCAT EoE (using external Master) option and entering the device’s IP address. After a few seconds, the drive was connected and ready for configuration. Detailed instructions are available in Appendix E.2. 8.2.2 Safe Torque Off circuit For the STO to be disabled and allow motor movement, the drive’s STO1 and STO2 inputs need to detect a high voltage (>2.5V) and should not exceed 50mA to ensure device safety. The connections and components were inspected and voltages at various circuit points were analyzed, which revealed unexpected values. The Voltage Monitor circuit was removed by desoldering its two components to isolate the issue. This circuit was a redundant safety measure and not critical for the controller operation. To ensure a voltage close to 5V at the drive inputs, Servo drives implementation for robot’s motor control 43 the circuit resistors were recalculated. The outer circuit was analyzed first. The optocoupler (TCMD1000) required a current of at least 2.5mA but less than 50mA to activate. Since the circuit behaved as the series resistors under steady state conditions, Ohm’s law was applied to determine the requirements: IT CMD =V Rtotal >2.5 mA IT CMD =V Rtotal <50 mA Theinternalcircuit was then analyzed underthe sameconditions, using the simplified schematic in Figure 38. Applying Ohm’s law yielded the following requirements: VST O =IST O ·Rparallel >2.5 V IST O =5 V Rtotal <50 mA Figure 38: Simplified schematic of the STO circuit. Source: author. Finally, the resistors were replaced with the recalculated values and the circuit’s functionality was verified using the MotionLab3’s test. 8.2.3 Feedback circuit The drive continuously monitors the signals received through its pins and stores the values in the corresponding registers. Using MotionLab3, the register values were checked to verify the incremental encoder’s performance. In the Feedback - Incremental Enc. 1 section, the encoder’s current position value was displayed in the upper right corner. The feedback circuit was verified by manually rotating the motor shaft and confirming that the position value updated accordingly. Additionally, the encoder’s resolution was verified by completing one full rotation of the motor shaft and checking that the register value increased as expected. 8.2.4 Controller configuration (servo drive EVS-NET-E) In this final stage, the controller is configured by means of the MotionLab3 software. The configuration process follows the steps outlined in the program’s various sections, as detailed in Section 7.2.2. 50 Report –Allow motor activation and modification of its speed or position at any time. The update frequency should be determined to fulfill the application requirements, but easily adjustable by the user. To achieve this, the final code for implementation in ROS2 was developed iteratively, with successive approximations leading to the final version. Initially, a basic code was created, which was progressively refined over several phases to meet the expected requirements. This process was first conducted on Windows before transitioning to Ubuntu, with necessary adjustments made due to the transfer. The specific processes and codes developed for Windows are as follows: •Analysis of the functions and examples from the ingeniamotion library were followed by the creation of specific purpose codes: –Function for establishing communication with the drive (real or virtual). –Code for saving and loading configuration files. –Code for reading and writing specific registers. –Code for motor movement via velocity and position commands. •Code allowing the user to send velocity commands through the computer keyboard. •Code for connecting to the drive and sending velocity commands to control the motor. The processes and codes developed for Ubuntu are as follows: •Transfer of the final Windows code to Ubuntu to observe its behavior and make necessary adjustments. •Creation of a ROS2 node to read user velocity commands via the computer keyboard. The structure and much of the code from Windows were reused. •Creation of a ROS2 node for controller connection and operation. This node reads the velocity commands sent and applies them to the drive to control the motor. The structure and much of the code from Windows were reused. •Modification of the previous node for implementation in the simulation of the CDEI robot. This node receives the same commands sent to the simulation to move the robot via a joystick controller. The example codes provided in the ingeniamotion library documentation [87] were analyzed and used. These were modified to meet project requirements and commented on for clarity, as the official documentation does not provide usage explanations. These example codes were the starting point for creating the final control code, enabling verification of individual library functionalities. All developed codes follow the same structure, consisting of the following components: module and library imports, global variable definitions, initial user configuration, auxiliary functions, Servo drives implementation for robot’s motor control 51 and the main function. The module and library imports are standard in most Python and ROS2 codes, as they define the function modules used. Global variable definitions were placed at the beginning for easy localization and quicker value modification. The initial user configuration was handled through the setup_command() function, specifying parameters such as the dictionary and the type of drive to use. Auxiliary functions were created to enhance code understanding and modularity. They included functions from the ingeniamotion library and other Python libraries. In simpler codes, this section may be omitted, with all functionalities included in the main function. The main function establishes the code’s execution flow, determining which function to call or which part of the code to execute at any given moment. The description and results of the developed codes are presented in Part III. Creating the ROS2 workspace In ROS2 nodes must be included in a workspace to function correctly. This workspace is created contained within a folder using the Ubuntu terminal commands. It provides the necessary structure for ROS2 to execute nodes, expressing dependencies on other modules, codes, and files, such as drive dictionaries. A ROS2 package named teleop_node was created to include all necessary files and nodes. The following commands were used to create and configure the ROS2 workspace: Listing 2: Commands to create the ROS2 workspace 1mkdir -p ws_Drivers /src 2cd ws_Drivers 3colcon build 4cd src 5ros2 pkg create --build - type ament_python teleop_node 6cd teleop_node 7mkdir -p teleop_node 8touch teleop_node / __init__ . py If working in an environment containing only C/C++ code, the above commands would not be suitable. Refer to the official documentation [88] in such cases. Once the workspace is created, dependencies must be specified in the setup.py file located in the src/teleop_node folder. This file lists all developed nodes under the entry_points section (see Listing 3). Dependencies are also included in the package.xml file in the same folder (see Listing 4). Listing 3: Final structure fragment of setup.py 1entry_points={ 2’console_scripts ’: [ 3’teleop_keyboard = teleop_node . teleop_keyboard :main ’, 4’motor_control = teleop_node . motor_control : main ’, 5’ motor_control_joystick = teleop_node . motor_control_joystick :main ’, 6], 52 Report 7} Listing 4: Final structure fragment of package.xml 1<exec_depend >rclpy </ exec_depend > 2<exec_depend > geometry_msgs </ exec_depend > 3<exec_depend > std_msgs </ exec_depend > 4<exec_depend > pynput </ exec_depend > Finally, the workspace must be compiled when any changes on the files are made, by running the following commands in the terminal: Listing 5: Commands to compile the ROS2 workspace 1cd ~/ ws_Drivers 2colcon build 3source install / setup . bash To execute any of the nodes, use the command ros2 run teleop_node node_name. To run multiple nodes simultaneously, execute the command in separate terminals after running the source command. The final folder and file structure of the workspace is shown in Figure 41. Figure 41: ROS2 workspace structure. Source: author. 9.2.4 Code functionality verification The verification of the codes proper working order and its development were performed simultaneously. The results of the codes are presented and discussed in Part III. Part III Results 54 Report 10 Results of the PCB validation The results obtained in the various phases of the printed circuit board validation process are presented below. It is worth reminding the reader that this initial stage was conducted with the EVS-NET-E drive coupled to the PCB. 10.1 Communication circuit The proper functioning of the PCB’s communication circuit was verified, as communication with the computer was successful. The EVS-NET-E drive was able to connect and communicate through the PCB using both TwinCAT and MotionLab3 programs. Furthermore, the EVS-NETE drive firmware was successfully updated. 10.2 Safe Torque Off circuit The error message obtained in the terminal during the validation of the Safe Torque Off (STO) circuit using the MotionLab3 test is displayed in Figure 42. The voltage measurements at various points in the circuit are shown in Figure 43. Figure 42: Error during STO testing. Source: author. Since the measuredvoltagevalueswerenotcorrect, theoretical currentswere calculated, andthe resistances were adjusted to meet the required specifications. A 5V input voltage was assumed for the calculations. Outer circuit The current flowing through the optocoupler was calculated as follows: IT CMD =V Rtotal =5V 30kΩ= 0.167 mA <2.5mA −→ NO Since the required magnitude was not achieved, the resistance value must fall within the fol- Servo drives implementation for robot’s motor control 55 Figure 43: Measured circuit voltages. Source: author. lowing range: Rmin total =Vmax Imax =36V 50 mA = 720 Ω Rmax total =Vmin Imin =5V 2.5mA = 2 kΩ These calculations were based on the minimum expected voltage (5V) and the circuit’s maximum supported voltage (36V), maintaining the current within a safe range. Two 1kΩresistors, which are standard values, were selected. Inner circuit The theoretical voltage and current values on the STO drive’s pins were calculated as: VST O =I·R=5V 5Ω + 220Ω ·5Ω = 0.111 V<2.5V−→ Low level IST O =0.111V 5Ω = 0.022 A<50 mA −→ OK Since these values were not appropriate, the parallel resistances were adjusted to 10kΩ. With this change, the new theoretical values at the drive inputs were calculated as: VST O =I·Rparallel =5V 5kΩ+0.220kΩ·5kΩ=4.789 V>2.5V−→ High level IST O =4.785V 5kΩ= 0.958 mA <50 mA −→ OK 56 Report With the specifications met and the necessary adjustments made, the circuit passed the MotionLab3 test successfully. All modifications are shown in the schematic in Figure 44 and on the PCB in Figure 45. Figure 44: Modifications to the STO circuit. Source: author. Figure 45: STO circuit modifications on the PCB. Source: author. 10.3 Feedback circuit In the Feedback - Incremental Encoder 1 section of MotionLab3, the current position value of the encoder was verified. As shown in Figure 46, manually moving the free shaft of the motor updates this value in real time. This verification can be performed without properly configuring the Electrical Tuning section, as the drive always receives the information and stores the encoder value in its corresponding register. Servo drives implementation for robot’s motor control 57 Figure 46: Verification of the incremental encoder circuit. Source: author. 10.4 Controller configuration (servo drive EVS-NET-E) 10.4.1 Comprehensive PCB review The results of this analysis were favorable regarding the PCB’s operation, as no components were found damaged. However, deterioration was detected in one of the motor power tracks, specifically in phase A. This deterioration resulted in increased resistance in the trace, preventing the current to flow appropriately. To resolve this, an external jumper was implemented using a wire, as shown in Figure 47. This procedure was carried out for all motor phases to prevent potential future issues in case the other phases also deteriorate. The drive had to be replaced because it stopped working, making it impossible to establish communication through TwinCAT or MotionLab3. Figure 47: Power phase jumpers. Source: author. 10.4.2 Motor configuration test Two configurations were conducted, one for each of the two Infranor motors (BLS072 and BR02). Table 4summarizes the parameter values defined in the Limits and Motor sections of MotionLab3. When the parameter value depends on the motor used, both values are shown separated by a slash. The value on the left corresponds to the BLS072 motor, and the value on the right to the BR02 motor. This analysis was not entirely conclusive, since the electrical identification could not be performed with either motor. The same overvoltage issues were encountered in both cases, con- 58 Report Table 4: Limits and Motor parameters (EVS-NET-E). Source: author. Category Type Parameter Value Limits Temperature User over temperature level 55 °C User under temperature level -20 °C Voltage User over voltage level 30 V User under voltage level 10 V Current Peak current 5 A Peak current time 2000 ms Max. current 5 A Current scaling gain factor Sensor gain 4 Velocity Max. velocity 100 / 66 rev/s Velocity following error window 1.0 rev/s Velocity following error timeout 0 ms Position Min. position 0 Max. position 0 Position following error window 100.0 cnt Position following error timeout 0 ms Motor General Commutation modulation Sinusoidal Rated current 20 / 8 A Motor pole pairs 4 / 10 firming that motor configuration is not the primary cause of the observed errors. 10.4.3 Power Supply circuit analysis This analysis confirmed that the power supply circuit was not responsible for the observed issues. Modifying the circuit did not alter the behavior or resolve the errors during plant identification, nor did removing the reverse polarity protection circuit. All modifications are shown in the schematic in Figure 48 and on the PCB in Figure 49. Figure 48: Modifications to the power supply circuit. Source: author. Servo drives implementation for robot’s motor control 59 Figure 49: Power supply circuit modifications on the PCB. Source: author. 66 Report register will be displayed. In the example, the values of two registers are read and displayed on the terminal. One of the registers is then modified, and the change is verified. The terminal messages generated by this program are shown in Figure 60. Figure 60: Results of the set_get_registers.py program. Source: author. •velocity_motion.py This code demonstrates the method and functions for sending velocity commands to the drive. It generates three different ramps to increase (or decrease) the velocity until reaching the target velocity. The program pauses the execution while waiting for the motor velocity to reach the target value. To move the motor, it is essential to define the required motion mode, in this case, Profile Velocity. Subsequently, for each ramp in the program, the target velocity and maximum allowed accelerations are specified. Finally, the program execution pauses until the velocity is reached. It is interesting to observe the difference in execution times between the real and virtual drives. As shown in the results in Figure 61, the virtual drive has a much shorter execution time compared to the real one. This is because the virtual performs all calculations on the computer, has a different configuration, and does not have real feedback, as is the case with the motor. Therefore, its dynamics can be significantly faster than those of the real one. (a) Real drive. (b) Virtual drive. Figure 61: Results of the velocity_motion.py program. Source: author. Listing 7provides a summarized view of the process followed by this program to perform one of the velocity ramps. Servo drives implementation for robot’s motor control 67 Listing 7: Velocity ramp summarized process code. 1mc. motion . set_operation_mode ( OperationMode . PROFILE_VELOCITY ) 2mc. motion . motor_enable () 3mc. configuration . set_profiler ( acceleration , deceleration ) 4mc. motion . set_velocity ( final_velocity ) 5mc. motion . wait_for_velocity ( final_velocity ) 6mc. motion . motor_disable () •position_motion.py This code demonstrates the motor’s position operation mode. Several target positions are defined for the motor to move to, pausing the execution until the motor reaches the target position. The position value must be specified in pulses, which are determined by the resolution of the configured position sensor. In this project the motor has a 1:80 gearbox and an incremental encoder with a resolution of 8192 pulses. Therefore, the total number of pulses for one full revolutionofthe motor shaft is 8192·80 = 655360. For instance, starting fromposition 0and moving the motor shaft by 30 degrees requires specifying a target position of 54613 (30 ·655360/360). The motion mode is now defined as Profile Position, and at the start of the program, the incremental encoder is assumed to be at position zero. If the actual position is unknown, the drive can be powered off and back on, which resets the incremental encoder register value to start at zero. There are differences in execution times between the real and virtual drive, as happened with the velocity program. The results for both cases are shown in Figure 62. (a) Real drive. (b) Virtual drive. Figure 62: Results of the position_motion.py program. Source: author. Listing 8provides a summarized view of the process followed by this program to perform one of the position changes. Listing 8: Position change summarized process code. 1mc. motion . set_operation_mode ( OperationMode . PROFILE_POSITION ) 2mc. motion . motor_enable () 3mc. motion . move_to_position ( current_target , blocking =True , error =5 , timeout = None , interval =0.2) 4mc. motion . motor_disable () •program_velocity_keys.py 68 Report This code demonstrates an example of using Python’s keyboard library. In this case, numerical keys 1 and 2 are defined to increase and decrease velocity, respectively. To terminate the program, the Q key must be pressed. Additionally, the program displays the current velocity values in the terminal every second. To enable simultaneous processes, listening for keyboard commands and display updates, the threading module is used. This allows the main function loop to execute velocity display commands while a parallel thread listens for keyboard inputs to update the velocity. •program_velocity_keys_drive.py This code represents the Windows version of the final control program. In this case, two threads are defined: one for controlling the target velocity of the drive and another for listening to keyboard inputs. Since the codes were designed with a single controller in mind, only one velocity control is presented. Each thread executes its function associated with its specific task. The keyboard thread maintains the use of keys 1 and 2 for increasing and decreasing velocity, while the Q key terminates the program. The velocity control thread checks for changes in the requested velocity and updates the target velocity using the set_velocity() function if necessary. This prevents unnecessary operations when modifying drive registers with identical values. The terminal displays both the new target velocity and feedback velocity values. The update period is set to 1 second for clarity but can be adjusted for the robot’s implementation. For safety, a secure stop function is also included. When terminating the program, the target velocity is first set to zero, then, the program waits for the motor to come to a complete stop before disconnecting the device. The main function connects the drive, sets the velocity control mode, and enables the motor. Then, the threads are started, each executing its respective function. The program waits until the keyboard thread terminates upon pressing the Q key. Finally, a secure stop is performed, and the controller is disconnected. The terminal output is identical for both the real and virtual drives, and are shown in Figure 63. Figure 63: Results of program_velocity_keys_drive.py. Source: author. Listing 9provides a summarized structure of the code program_velocity_keys_drive.py. Servo drives implementation for robot’s motor control 69 Listing 9: program_velocity_keys_drive.py summarized structure. 1def setup_command (): 2# Dictionary path and virtual drive usage arguments 3 4def keyboard_listener(): 5while running: 6# Conditional structure for key inputs 7# (" if keyboard . is_pressed (’key ’):") 8 9def velocity_control_loop(mc): 10 while running: 11 if current_velocity != target_velocity : 12 mc. motion . set_velocity ( target_velocity ) 13 14 def safe_stop (mc): 15 mc. motion . set_velocity (0) 16 mc. motion . wait_for_velocity (0) 17 18 def main(args): 19 mc = MotionController() 20 driver_connection ( virtual_drive_used , args , mc , user_selection ) 21 mc. motion . set_operation_mode ( OperationMode . PROFILE_VELOCITY ) 22 23 keyboard_thread = threading . Thread ( target = keyboard_listener ) 24 control_thread = threading . Thread ( target = velocity_control_loop ) 25 keyboard_thread . start () 26 control_thread.start() 27 keyboard_thread . join () 28 safe_stop (mc ) 29 30 mc. communication . disconnect () 11.2.2 Ubuntu The last code was ported to Ubuntu and their behavior was verified. First, it was necessary to change the connection method between the drive and the computer. While using Windows, the connection was established directly using the laptop’s Ethernet port. However, it was not possible to access the device through this port due to Ubuntu’s permission handling. An EthernetUSB converter was used instead, as accessing these ports only requires being the system administrator. With this change, the driver_connection() function needed to be modified to set the paths for the dictionary files as global paths so the program could locate them. Another required change was the replacement of the keyboard module for reading keyboard inputs with the pynput module. On Ubuntu, the keyboard module requires special permissions to use devices such as the keyboard, which could not be granted in this case. The need for these changes led to the creation of two new files: driver_connection_ubuntu.py and program_velocity_keys_drive_ubuntu.py. These files have the same functionality as their Windows counterparts but use different function nomenclature. To avoid redundancy, their descriptions are omitted here. 70 Report To implement the codes using ROS2, the last mentioned file was used as a starting point. This requiredcreating twonodes: one to controlthedrive andmotorvelocity, andanother to generate velocity commands by listening to the keyboard. The created nodes are described below. •teleop_keyboard.py The teleop_keyboard node was created to listen for velocity commands and also generate two topics named cmd_vel and teleop_shutdown. The first topic sends velocity commands entered by the user, while the second sends the command to terminate the program and disconnect the drive. The numerical keys 1 and 2 are also used to increase and decrease motor velocity, respectively, while the Q key is reserved for terminating the program. This node also uses the threading module to listen to keyboard inputs while publishing velocity command messages to the specific topic. This node can be launched independently to send velocity commands to the cmd_vel topic. If no other node subscribes to this topic, the commands will neither be registered nor act on any system. However, this node displays the requested velocity in the terminal each time its value is modified. Listing 10 provides a summarized structure of the node teleop_keyboard.py. The messages displayed on the terminal during its execution are shown in Figure 64. Listing 10: teleop_keyboard node summarized structure. 1class TeleopKeyboard(Node): 2def __init__ ( self ): 3self . publisher_ = self . create_publisher ( Twist , ’cmd_vel’, 10) 4self . shutdown_publisher = self . create_publisher (Bool , ’teleop_shutdown ’, 10) 5self . listener_thread = threading . Thread ( target = self . keyboard_listener ) 6self . listener_thread . start () 7 8def keyboard_listener(self): 9# Conditional structure for key inputs 10 # (" if hasattr (key , ’char ’) and key . char == ’key ’:") 11 with keyboard . Listener ( on_press = on_press ) as listener : 12 listener . join () 13 14 def publish_velocity ( self ): 15 self . publisher_ . publish ( target_velocity ) 16 17 def destroy_node(self): 18 self . running = False # stop the main loop 19 if self . listener_thread . is_alive (): 20 self . listener_thread . join () # wait for the thread to finish 21 super ().destroy_node() # close the ROS node 22 23 def main(args=None): 24 rclpy . init ( args = args ) 25 node = TeleopKeyboard() 26 try : 27 while node . running : 28 node . publish_velocity () 29 time . sleep (1) # publish rate 30 finally: 31 node . destroy_node () 32 rclpy . shutdown () Servo drives implementation for robot’s motor control 71 Figure 64: Results of the teleop_keyboard node. Source: author. •motor_control.py The motor_control node was created to handle the velocity control of the motor. This node subscribes to the topics /cmd_vel and /teleop_shutdown to receive their messages. When a velocity command message is received, the cmd_vel_callback() function is automatically triggered, and the target velocity value is stored in the target_velocity variable. When a control termination message is received, the shutdown_callback() function is triggered, and the running variable is set to False. The node then proceeds to shut down. The basic operation of this node is the same as the previously discussed drive control program. The target velocity is updated if modified, and the feedback velocity register values are read for comparison. Additionally, this node also includes a safe motor stop function. Upon receiving the control termination message, the velocity control thread and the motor are stopped, and the controller is disconnected. This node also uses the threading module to simultaneously receive velocity commands and adjust the drive’s velocity. Listing 11 provides a summarized structure of the node motor_control.py. The messages displayed on the terminal during its execution are shown in Figure 65. Listing 11: motot_control node summarized structure. 1class MotorController ( Node ): 2def __init__ ( self , args ): 3self . create_subscription (Twist , ’/ cmd_vel ’, self . cmd_vel_callback , 10) 4self . create_subscription (Bool , ’teleop_shutdown’, self.shutdown_callback , 10) 5 6self .mc = MotionController () 7driver_connection ( virtual_drive_used , args , self .mc , user_selection ) 8self .mc .motion . set_operation_mode ( OperationMode . PROFILE_VELOCITY ) 9 10 self . control_thread = threading . Thread ( target = self . velocity_control_loop ) 11 self . control_thread . start () 12 13 def cmd_vel_callback ( self , msg): 14 self . target_velocity = msg . linear .x 15 16 def shutdown_callback (self , msg): 17 if msg. data : 18 self . running = False 19 self . destroy_node () 20 72 Report 21 def velocity_control_loop(self): 22 while self . running : 23 if self . current_velocity != self . target_velocity : 24 self .mc . motion . set_velocity ( self . target_velocity ) 25 26 def destroy_node(self): 27 if self . control_thread . is_alive (): 28 self . control_thread . join () # wait for the thread to finish 29 30 # Performing safe stop 31 32 self .mc . communication . disconnect () 33 34 super ().destroy_node() 35 36 def setup_command (): 37 # Dictionary path and virtual drive usage arguments 38 39 def main(args=None): 40 rclpy . init ( args = args ) 41 cli_args = setup_command () 42 node = MotorController ( cli_args ) 43 try : 44 rclpy . spin ( node ) 45 finally: 46 node . destroy_node () 47 rclpy . shutdown () Figure 65: Results of the motor_control node. Source: author. •motor_control_joystick.py Finally, the motor_control_joystick node was created to use the drive and motor with the CDEI robot’s navigation package. This package includes a simulation that can be executed to observe the robot’s operation, where its movement can be controlled using the joystick. The motor_control_joystick node was designed to simultaneously observe the robot’s movement in the simulation and the motor’s movement, ensuring they match. This node is identical to the previous one but reads velocity commands from the cmd_vel_joy topic instead of cmd_vel. The cmd_vel_joy topic is created by the navigation package nodes and includes the commands Servo drives implementation for robot’s motor control 73 entered into the system through the joystick. This node must be launched alongside the simulation nodes but no other nodes developed on this project. To perform this experiment, the following commands must be executed in the terminal: Listing 12: Commands to launch the simulation and joystick node. 1ros2 launch agri_bot joy_control . launch . py sim := true world := warehouse 2ros2 run teleop_node motor_control_joystick Once the simulation is running, the joystick can be used to move the robot. The commands will also be transmitted to the drive to move the motor simultaneously. The results obtained from executing this code are shown in Figure 66. Figure 66: Results of the motor_control_joystick node. Source: author. Figure 67: Simulation. Source: author. 74 Report 12 Analysis and discussion 12.1 Discussion of the results First, although the proper functioning of several parts of the printed circuit board has been verified, such as the power supply, communication, and incremental encoder circuits, the issues encountered during the Electrical Tuning configuration phase have not been resolved. These problems, attributed to the power stage of the motor in the PCB, cause oscillations in the supply voltage preventing the full validation of the PCB. Furthermore, the drive was damaged and had to be replaced. Therefore, the results obtained in verifying the functioning of the PCB are unfavorable and do not meet the initially proposed objectives. Second, a guided procedure for programming Ingenia drives using the MotionLab3 software has been established. This procedure is general and applicable to any of the company’s controllers. Additionally, a control program capable of commanding motor movements through these devices has been successfully designed. This has been demonstrated not only with the virtual drive but also in an experimental setup with a real motor and in conjunction with the robot navigation simulation. The codes developed are also modular and general, as they can be used with any Ingenia drive by simply replacing the dictionary file associated with the specific device. All intermediate codes developed have been provided to illustrate the capabilities and behavior of various functions within the ingeniamotion library. These resources can be beneficial for future work with these devices. Therefore, the results obtained in designing the motor control program are highly favorable and meet all proposed objectives. Finally, the impact of this project is positive, as it has been demonstrated that EtherCAT drives can be used at CDEI to control robot motors. This reduces the weight and space occupied by the control system by eliminating the PLC. However, certain limitations remain, such as the lack of a functional, custom PCB that integrates the controller. Nevertheless, it has been shown that once the PCB’s technical issues are solved, implementing Ingenia drives is highly feasible. The following section outlines proposed future work to guide the continuation of this project and complete the improvement of motor controllers for CDEI robots. 12.2 Proposals for future work Regarding the PCB design, the experiments have identified several areas for improvement. For the next iterations of PCB design and manufacturing, the following proposals are suggested: •Reduce the dimensions of the PCB along the outer edges, allowing the connection ports to extend outward, making it easier to place cables. In the current design, the connection and disconnection of cables and connectors are complicated because the ports overlap on the PCB. Ideally, these ports should extend beyond the edges. •Restructure the Inputs/Outputs of the C5 connector. This connector includes both signal inputs and motor brake connections, which are power lines. It is proposed to separate the Servo drives implementation for robot’s motor control 75 power parts into a different connector to avoid potential interferences. •Study the placement of the PCB within the robot to enhance thermal dissipation or explore the possibility of attaching a heatsink to the drive. •Combine multiple drives into a single PCB for multi-axis control systems. This would eliminate the need for some Ethernet ports, reducing space consumption and avoiding the need to connect multiple PCBs with cables, as these connections would be integrated into the PCB itself. Regarding the developed code, the following improvements are proposed: •Optimize the ROS2 code so that velocity command messages are sent to the topic only when a change occurs, rather than at predetermined intervals, to achieve faster controller response times. •Make the code robust against potential failures, such as elevated motor temperatures or instantaneous communication errors. These types of issues currently cause the device to stop operation. A method could be incorporated to inform the user of recoverable errors while allowing the drive to continue functioning normally. •Incorporate the control of multiple drives in series for multi-axis systems. •Include motor brake control by adding the relevant commands. 82 Report 16 Social and gender equality assessment This section provides a brief critical analysis of the project’s impact on gender equality and social discrimination, evaluating whether the work is influenced by discriminatory differences based on gender or social status. Efforts have been made to ensure that both the images and the language used in this work are inclusive and non-sexist so that anyone can read it without feeling discriminated. Additionally, gender considerations have been taken into account in the cited publications throughout this report, with the authors’ full names included to promote equitable treatment and avoid bias. The technology used in this project is equally accessible to both men and women. However, individuals with little or no knowledge in the fields of robotics and electronics may find it challenging to fully understand all the aspects covered and developed in this work due to its high technical level. Social groups with lower economic power may also face difficulties accessing the technology used in this project. In particular the drives, due to their high cost, which can difficult their use by companies or individuals with limited resources. On the other hand, the CDEI team includes both men and women, although men are in the majority. Nevertheless, women are represented in leadership positions; for example, Alba Pérez, the director of CDEI. This gender imbalance is also influenced by the engineering sector, where men predominate among professionals. This trend is similarly observed at UPC, where only 31.85% of students enrolled in engineering and architecture programs during the 2023-2024 academic year were women, as reported in [97]. However, it is worth noting that the percentage of women enrolling in UPC programs increases every year [98]. Servo drives implementation for robot’s motor control 83 Conclusions During the development of this project, the real challenges of validating a printed circuit board were obvious. The components are extremely small, with a high density of elements that complicate inspection. This is especially true for multilayer PCBs, as in this project, where inspecting internal traces is particularly challenging. Additionally, the experience highlighted how communication with entities and their technical support can slow down and delay project processes and activities. This required adjustments to the initial plan to achieve the project’s objectives. At the conclusion of this project, it can be stated that a functional and optimized code has been successfully designed for the control of a robot’s brushless motors using Ingenia servo drives. The developed code is modular, making it easy to modify and adaptable to any controller model of te company. Moreover, example codes have been provided to illustrate the functionalities of the drives and the ingeniamotion library. These serve as a foundation for future code development in this area. On the other hand, several circuits on the PCB were validated, but the board could not be made operational for controlling the robot’s motors. The EtherCAT communications, the STO safety system, and the incremental encoder feedback circuits allow the device to connect to the computer and read the motor’s position value, even though the power stage is not functional and the motor cannot move. To address this, the next steps for fixing the PCB have been outlined, along with a series of improvements proposed for future PCB designs. Lastly, the necessary guides have been created so that anyone can learn to use these controllers and replicate the steps taken during this project, achieving the same results. In summary, although the PCB requires further revision to resolve its issues and make it operational, the developed code is fully functional for motor control. Therefore, the feasibility of using EtherCAT drives in CDEI robots has been confirmed, offering benefits such as reduced weight and simplified connections. 84 Report Acknowledgments I would like to express my deepest gratitude to my advisor, David Caballero, for giving me the opportunity to embark on such a challenging and fascinating project. His continuous support and guidance have been essential to the successful completion of my master’s thesis. I also extend my sincere thanks to Elena Villalba, whose knowledge and assistance have been invaluable throughout this project. Her encouragement and constructive feedback have greatly enriched the quality of this work. I would also like to express special thanks to CDEI for providing access to the resources and facilities necessary for my research, as well as for giving me the opportunity to collaborate with such wonderful professionals and participate in inspiring projects. I am grateful to ETSEIB for providing me with the basic knowledge throughout my academic journey, which enabled me to bring this project to realization. This education has been crucial in overcoming the challenges related to electronics and programming, and it has also helped me gain a better understanding of myself. On a personal note, I want to thank my family and friends for their support, encouragement, and understanding throughout all phases of this challenging project. Their support has been pivotal to the successful outcome of this work. Servo drives implementation for robot’s motor control 85 References [1] Karri Takk - STATZON. 2024 - Global Robotics Market and Industry Overview: Current State and Future Perspectives [Internet]; Dec 17, 2024. [Último acceso el 02-01-2025]. Recuperado de: https://statzon.com/insights/ 2024-global-robotics-market-and-industry-overview-current-state-and-future-perspectives. [2] Mordor Intelligence. ¿Qué es un PLC? ¿Cómo funciona? ¿Para qué sirve? [Internet]; July, 2024. [Último acceso el 02-01-2025]. Recuperado de: https://www. mordorintelligence.com/industry-reports/robotics-market. [3] Al Mahmud, S , Kamarulariffin, A , Ibrahim, A M et al . Advancements and Challenges in Mobile Robot Navigation: A Comprehensive Review of Algorithms and Potential for Self-Learning Approaches. [Internet]; August 17, 2024. [Último acceso el 02-01-2025]. Recuperado de: https://link.springer.com/article/10.1007/s10846-024-02149-5. [4] ColdSceptical - Medium. 10 Biggest Challenges in Robotics [Internet]; October 8, 2023. [Último acceso el 02-01-2025]. Recuperado de: https://medium.com/@faaiz.ul. haq3333/10-biggest-challenges-in-robotics-d83065236422. [5] ROBOTIKKS. Miniaturization of Robots: Precision and Efficiency [Internet];. [Último acceso el 02-01-2025]. Recuperado de: https://www.robotikks.com/en/publication/ miniaturization-of-robots-precision-and-efficiency/. [6] PEKO Precision. The Key Components of a Motion Control System [Internet]; 2024. [Último acceso el 03-01-2025]. Recuperado de: https://www.pekoprecision.com/blog/ key-components-motion-control-system/. [7] SRC. ¿Qué es un PLC? ¿Cómo funciona? ¿Para qué sirve? [Internet];. [Último acceso el 03-01-2025]. Recuperado de: https://srcsl.com/que-es-un-plc/. [8] RS. Guía de PLC (Controladores lógicos programables) [Internet]; agosto 29, 2023. [Último acceso el 03-01-2025]. Recuperado de: https://es.rs-online.com/web/content/ blog-rs/ideas-consejos/guia-plc? [9] Power Electric. What’s the Difference Between a Brushless and a Brushed Motor? [Internet]; 2023. [Último acceso el 03-012025]. Recuperado de: https://www.powerelectric.com/motor-blog/ whats-the-difference-between-a-brushless-and-a-brushed-motor. [10] Motorba. Motores brushless: características, tipos, aplicaciones y comparación [Internet];. [Último acceso el 03-01-2025]. Recuperado de: https://motorba.com.ar/ motor-brushless-caracteristicas/. [11] Renesas. Controlling BLDC Motors [Internet]; 2024. [Último acceso el 03-012025]. Recuperado de: https://www.renesas.com/en/support/engineer-school/ brushless-dc-motor-02-inverter-pmw. [12] Nocturno - MicroPIC. Iniciación al control de motores brushless (BLDC) [Internet]; setiembre 10, 2023. [Último acceso el 03-01-2025]. Recuperado de: https://www. 86 Report micropic.es/iniciacion-al-control-de-motores-brushless-bldc/. [13] Roger Juanpere Tolrà. Técnicas de control para motores Brushless [Internet];. [Último acceso el 03-01-2025]. Recuperado de: https://www.motronic.es/upfiles/taller_img/ files/mantenimiento-y-reparacion-de-servomotores-es_2595.pdf. [14] Motorba. Control de velocidad de un motor brushless: métodos y aplicaciones [Internet];. [Último acceso el 03-01-2025]. Recuperado de: https://motorba.com.ar/ control-de-velocidad-de-un-motor-brushless/. [15] Mitchell - PLC Journal. What is a Servo drive and How does it work? [Internet]; setiembre 10, 2023. [Último acceso el 03-01-2025]. Recuperado de: https://plcjournal.com/ what-is-a-servo-drive-and-how-does-it-work/. [16] Cinselmatic. ¿Qué es un servo drive? [Internet]; abril 08, 2024. [Último acceso el 03-012025]. Recuperado de: https://cinselmatic.com/que-es-un-servodrive/. [17] Servo Motors Adjust. Cuál es la diferencia entre un encoder incremental y absoluto? [Internet]; mayo 24, 2024. [Último acceso el 03-01-2025]. Recuperado de: https://www.servomotorsadjust.com/ cual-es-la-diferencia-entre-un-encoder-incremental-y-absoluto/. [18] Ethan Christison - Control com. Common Servo Motor Feedback Devices [Internet]; junio 14, 2021. [Último acceso el 03-01-2025]. Recuperado de: https://control.com/ technical-articles/common-servo-motor-feedback-devices/. [19] SKYS Motor. What are the different types of feedback devices used with AC servo motors? [Internet]; 2022. [Último acceso el 03-01-2025]. Recuperado de: https://www.skysmotor.co.uk/ article-74-What-are-the-different-types-of-feedback-devices-used-with-AC-servo-motors. html? [20] Phidgets Inc. Encoder Guide [Internet]; julio 13, 2023. [Último acceso el 03-01-2025]. Recuperado de: https://www.phidgets.com/docs/Encoder_Guide. [21] Australian Research Data Commons. Standardised Communications Protocols [Internet]; setiembre 02, 2024. [Último acceso el 20-12-2024]. Recuperado de: https://ardc. edu.au/resource/standardised-communications-protocols/. [22] Helmut Sy Corvo - Lifeder. Protocolos de comunicación [Internet]; diciembre 04, 2020. [Último acceso el 20-12-2024]. Recuperado de: https://www.lifeder.com/ protocolos-de-comunicacion/. [23] Rico Automation. Los 10 principales protocolos de comunicación que debes conocer [Internet]; setiembre 26, 2024. [Último acceso el 20-12-2024]. Recuperado de: https://es.ricoautomation.com/Los-10-principales-protocolos-de-comunicaci% C3%B3n-que-debes-conocer/? [24] Master SI. ¿Cuáles son los 10 protocolos de comunicación más utilizados en automatización industrial? [Internet]; diciembre 19, 2024. [Último acceso Servo drives implementation for robot’s motor control 87 el 20-12-2024]. Recuperado de: https://mastersi.com.pe/mastersi/blog/ 378-cuales-son-los-10-protocolos-de-comunicacion-mas-utilizados-en-automatizacion-industrial. [25] Logicbus. EvoProtocolos de comunicación industriales [Internet]; junio 17, 2019. [Último acceso el 20-12-2024]. Recuperado de: https://www.logicbus.com.mx/blog/ protocolos-de-comunicacion-industriales/. [26] ESA. CANopen or EtherCAT: Discover All Features of ESA EDWU Drive [Internet]; diciembre 19, 2019. [Último acceso el 20-122024]. Recuperado de: https://www.esa-automation.com/en/ canopen-or-ethercat-discover-all-features-of-esa-edwu-drive/. [27] Logicbus. Protocolo de capa de aplicación CAN: CANopen [Internet]; julio 23, 2019. [Último acceso el 20-12-2024]. Recuperado de: https://www.logicbus.com.mx/blog/ canopen/. [28] Rico Automation. ¿Qué es el protocolo EtherCAT y cómo funciona? [Internet]; setiembre 29, 2024. [Último acceso el 20-12-2024]. Recuperado de: https://es.ricoautomation. com/%C2%BFQu%C3%A9-es-el-protocolo-Ethercat-y-c%C3%B3mo-funciona%3F/. [29] EtherCAT Technology Group. EtherCAT - el bus de campo Ethernet [Internet]; Desconocido. [Último acceso el 20-12-2024]. Recuperado de: https://www.ethercat.org/es/ technology.html. [30] La Factoria del Recambio. Módulo electrónico nevera FAGOR-EDESA (FE9L003F3) [Internet]; Desconocido. [Último acceso el 07-01-2025]. Recuperado de: https://www. lafactoriadelrecambio.com/651-modulo-electronico-nevera-fagor-fe9l003f3. html. [31] Samuel Technology. Apple Watch/ Smartwatch por dentro [Internet]; noviembre 28, 2022. [Último acceso el 20-12-2024]. Recuperado de: https://www. lafactoriadelrecambio.com/651-modulo-electronico-nevera-fagor-fe9l003f3. html. [32] Khandpur RS. Printed Circuit Boards Design, Fabrication, and Assembly. McGraw-Hill; 2006. [33] NextPCB. PCB Schematic vs PCB Layout [Internet];. [Último acceso el 07-07-2024]. Recuperado de: https://www.nextpcb.com/blog/pcb-schematic-vs-pcb-layout. [34] PCB HERO. A detailed guide to PCB layout design [Internet]; octubre 31, 2024. [Último acceso el 20-12-2024]. Recuperado de: https://www.pcb-hero.com/blogs/ lickys-column/a-detailed-guide-to-pcb-layout-design. [35] Abiola Ayodele. PCB Layout: A Comprehensive Guide [Internet]; noviembre 07, 2023. [Último acceso el 20-12-2024]. Recuperado de: https://www.wevolver.com/article/ pcb-layout-a-comprehensive-guide. [36] Infranor. XtrapulsEasy 60 VDC [Internet]; 2024. [Último acceso el 20-122024]. Recuperado de: https://infranor.com/en/servo-drives/easy-range/ 88 Report xtrapulseasy-60-vdc/. [37] Baltic Diag. Ixxat USB-to-CAN V2 compact [Internet]; 2024. [Último acceso el 20-12-2024]. Recuperado de: https://www.balticdiag.com/es-es/ usb-to-can-v2-compact-interfaz. [38] Publys. Evolución histórica de los PCB [Internet]; marzo 28, 2019. [Último acceso el 07-01-2025]. Recuperado de: https://publys.cl/2019/03/28/ evolucion-historica-de-los-pcb/. [39] AMMi Technologies. Un repaso a la historia de los circuitos impresos (PCB) [Internet]; septiembre 9, 2023. [Último acceso el 07-01-2025]. Recuperado de: https:// ammitechnologies.com/historia-de-los-circuitos-impresos-pcb/. [40] Juan Damián - Electrogeek. Ventajas y desventajas de componentes PTH frente a SMD [Internet]; abril 19, 2024. [Último acceso el 20-12-2024]. Recuperado de: https://www.electrogeekshop.com/ ventajas-y-y-desventajas-de-componentes-pth-frente-a-smd/?v=2c5f64ab07cc. [41] Hooman Javdan - Circuits Central. Advancements in PCB Manufacturing: New Developments in 2025 and Beyond [Internet]; November 5, 2024. [Último acceso el 05-07-2024]. Recuperado de: https://www.circuits-central.com/blog/ advancements-in-pcb-manufacturing-new-developments-in-2025-and-beyond/. [42] PCBgogo. SMT vs. THT: Which Assembly Method Is Right for Your PCB Design - PCBGOGO [Internet]; Dec 21, 2024. [Último acceso el 05-07-2024]. Recuperado de: https://www.pcbgogo.com/Article/SMT_vs__THT__Which_Assembly_Method_ Is_Right_for_Your_PCB_Design___PCBGOGO.html. [43] Orient Display. Diferentes tipos de PCB [Internet]; Desconocido. [Último acceso el 20-12-2024]. Recuperado de: https://www.orientdisplay.com/es/knowledge-base/ pcb-basics/different-types-of-pcb/. [44] Altium. Understanding the Makeup of a Printed Circuit Board [Internet]; julio 10, 2017. [Último acceso el 20-12-2024]. Recuperado de: https://www.altium.com/ documentation/altium-designer/understanding-printed-circuit-board-makeup? version=18.1&_ga=2.213778644.1726770997.1735886807-1071962320.1735886807. [45] ELPROCUS. Different Types of Printed Circuit Boards [Internet]; Desconocido. [Último acceso el 20-12-2024]. Recuperado de: https://www.elprocus. com/different-types-printed-circuit-boards/?_ga=2.213778644.1726770997. 1735886807-1071962320.1735886807. [46] Solo Motor Controllers. EtherCAT Servo Drives [Internet];. [Último acceso el 05-07-2024]. Recuperado de: https://www.solomotorcontrollers.com/blog/ ethercat-servo-drives/. [47] Zhang J, Xia M, Li H, Li S, Shi J. The Design and Real-Time Optimization of an EtherCAT Master for Multi-Axis Motion Control. Electronics. 2024 08;13:3101. Servo drives implementation for robot’s motor control 89 [48] Yuan L, Guan X, Guan S, Wu B. In: Design of Multi-axis Motion Control System Based on EtherCAT; 2023. p. 321-32. [49] Ingenia. About Ingenia [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://www.ingeniamc.com/about/. [50] Ingenia. Ingenia [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https: //www.ingeniamc.com/. [51] Novanta. Novanta [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://novanta.com/. [52] Novanta. MotionLab3 Home [Internet]; 2024. [Último acceso el 12-01-2025]. Recuperado de: https://drives.novantamotion.com/mot3/. [53] Novanta. Knowledge Base [Internet]; 2024. [Último acceso el 12-01-2025]. Recuperado de: https://drives.novantamotion.com/kb/. [54] Novanta. Summit Support [Internet]; 2024. [Último acceso el 12-01-2025]. Recuperado de: https://drives.novantamotion.com/. [55] Elena Villalba. Diseño de una PCB para incorporar el servo drive EVS-NET-E; 2024. Recuperado de: CDEI. [56] Novanta. Everest S NET - Application Guide - Layout Design [Internet];. [Último acceso el 07-07-2024]. Recuperado de: https://drives.novantamotion.com/evs-net/ layout-design. [57] Novanta. Everest S NET - Application Guide - Schematic Design [Internet];. [Último acceso el 07-07-2024]. Recuperado de: https://drives.novantamotion.com/evs-net/ schematic-design. [58] Ingenia. Everest S NET-E: PCB Mount, EtherCAT Servo Drive [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://www.ingeniamc.com/servo-drives/dc/ ethercat/everest-s-net-e-pcb-mount-ethercat-servo-drive/. [59] Novanta. Everest S NET - Product manual - Product Description [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://drives.novantamotion.com/evs-net/ product-description. [60] Novanta. Everest S NET - Product manual - Pinout [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://drives.novantamotion.com/evs-net/pinout. [61] Ingenia. Everest XCR-E: Panel Mount, EtherCAT Servo Drive [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://www.ingeniamc.com/servo-drives/dc/ ethercat/everest-xcr-30a-80v-panel-mount/. [62] Novanta. Everest XCR - Product manual - Product Description [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://drives.novantamotion.com/eve-xcr/ product-description. 90 Report [63] Novanta. Everest XCR - Product manual - Connectors Guide [Internet]; 2024. [Último acceso el 10-10-2024]. Recuperado de: https://drives.novantamotion.com/eve-xcr/ connectors-guide. [64] Novanta. MotionLab3 - User manual - How to Tune [Internet]; 2024. [Último acceso el 12-10-2024]. Recuperado de: https://drives.novantamotion.com/mot3/how-to-tune. [65] Novanta. Summit - Reference manual - Current modes (CSC, C, CA) [Internet]; 2024. [Último acceso el 12-10-2024]. Recuperado de: https://drives.novantamotion.com/ summit/current-modes-csc-c-ca. [66] Novanta. Summit - Reference manual - Velocity modes (CSV, PV, V) [Internet]; 2024. [Último acceso el 12-10-2024]. Recuperado de: https://drives.novantamotion.com/ summit/velocity-modes-csv-pv-v. [67] Novanta. Summit - Reference manual - Position modes (CSP, PP, IP, P) [Internet]; 2024. [Último acceso el 12-10-2024]. Recuperado de: https://drives.novantamotion.com/ summit/position-modes-csp-pp-ip-p. [68] Electropolis. Estacion Soldadura Advance T245 Jbc connection [Internet]; 2025. [Último acceso el 07-01-2025]. Recuperado de: https://www.electropolis.es/ estacion-soldadura-advance-t245-jbc-cd-2bqf-cd-2bqf-61032-di-826636.html? [69] Diotronic. ESTACION DE ARE CALIENTE PARA SMD XYTRONIC LF-852D-ESD [Internet]; 2025. [Último acceso el 07-01-2025]. Recuperado de: https://diotronic.com/estaciones-multifuncion/ 15741-estacion-de-are-caliente-para-smd-xytronic-lf-852d-esd. [70] Beckhoff. TE1000 | TwinCAT 3 Engineering [Internet]; 2024. [Último acceso el 0907-2024]. Recuperado de: https://www.beckhoff.com/es-es/products/automation/ twincat/texxxx-twincat-3-engineering/te1000.html. [71] Novanta. MOTION LAB 3 [Internet]; 2024. [Último acceso el 09-07-2024]. Recuperado de: https://www.ingeniamc.com/software-suite/. [72] Python Software Foundation. PyPi - keyboard 0.13.5 [Internet]; 2025. [Último acceso el 12-01-2025]. Recuperado de: https://pypi.org/project/keyboard/. [73] Python Software Foundation. PyPi - pynput 1.7.7 [Internet]; 2025. [Último acceso el 1201-2025]. Recuperado de: https://pypi.org/project/pynput/. [74] Python Software Foundation. PyPi - pynput 1.7.7 [Internet]; 2025. [Último acceso el 12-01-2025]. Recuperado de: https://docs.python.org/es/3.8/library/threading. html. [75] Centre de Disseny d’Equips Industrials (CDEI-UPC). GitHub CDEI-Agro [Internet]; 2024. [Último acceso el 12-01-2025]. Recuperado de: https://github.com/CDEI-Agro/ miscellaneous. [76] Python Software Foundation. Python Downloads [Internet]; 2025. [Último acceso el 1001-2025]. Recuperado de: https://www.python.org/downloads/. Servo drives implementation for robot’s motor control 91 [77] Open Robotics.ROS2 Documentation: HUmble -Installation[Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://docs.ros.org/en/humble/Installation/ Ubuntu-Install-Debs.html. [78] Open Robotics. ROS2 Documentation: HUmble - Tutorials [Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://docs.ros.org/en/humble/Tutorials. html. [79] Microsoft. Visual Studio Code [Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://code.visualstudio.com/. [80] Ingenia. GitHub Ingeniamotion [Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://github.com/ingeniamc/ingeniamotion. [81] Ingenia. GitHub Ingenialink-python [Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://github.com/ingeniamc/ingenialink-python. [82] Ingenia. FSoE Master Library [Internet]; 2025. [Último acceso el 10-01-2025]. Recuperado de: https://pypi.org/project/fsoe-master/. [83] LAPP. Intensidad nominal y dimensionado de cables [Internet];. [Último acceso el 18-07-2024]. Recuperado de: https://lappespana.lappgroup.com/know-how/ capacidad-de-carga.html. [84] Novanta. Everest S NET - Downloads [Internet];. [Último acceso el 20-12-2024]. Recuperado de: https://drives.novantamotion.com/evs-net/downloads. [85] Novanta. Everest XCR - Downloads [Internet];. [Último acceso el 20-12-2024]. Recuperado de: https://drives.novantamotion.com/eve-xcr/downloads. [86] Novanta. MotionLab3 - User manual - How to Tune [Internet]; 2024. [Último acceso el 12-01-2025]. Recuperado de: https://drives.novantamotion.com/mot3/how-to-tune. [87] Novanta Technologies Spain S L . Ingeniamotion’s Documentation [Internet]; 2021. [Último acceso el 10-01-2025]. Recuperado de: https://distext.ingeniamc.com/doc/ ingeniamotion/0.8.5/. [88] Open Robotics. Developing a ROS 2 package [Internet]; 2025. [Último acceso el 12-01-2025]. Recuperado de: https://docs.ros.org/en/humble/How-To-Guides/ Developing-a-ROS-2-Package.html. [89] Agencia Tributaria. Manual de actividades económicas. Obligaciones fiscales de empresarios y profesionales residentes en territorio español - 3.5.4 Tabla de amortización simplificada [Internet]; abril 29, 2022. [Último acceso el 20-01-2025]. Recuperado de: https://sede.agenciatributaria. gob.es/Sede/ayuda/manuales-videos-folletos/manuales-practicos/ folleto-actividades-economicas/3-impuesto-sobre-renta-personas-fisicas/ 3_5-estimacion-directa-simplificada/3_5_4-tabla-amortizacion-simplificada. html. [90] Repsol. ¿Cuál es el consumo de un ordenador? [Internet];. [Último ac- 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 D D C C B B A A 11 2 2 C2 10 uF 12 C3 10 uF 12 C4 10 uF 12 C5 10 uF 12 C6 10 uF 12 C7 10 uF DC Bus Input Stage 2 1 D1 SMAT70A Logic Supply 5V 2 1 D3 PTVS5V0S1UR 1 2 L1 220Z/2.5A 1 2 L2 220Z/2.5A GND_D 5V_D 2 1 C10 100 nF 2 1 C11 100 nF 12 C12 10 uF R2 100 k 2 1 D2 PTVS5V0S1UR,115 R5 100 k 1 34 Q1 SUM70101EL-GE3 Inverse Polarity Protection POW_SUP +DC_BUS POW_SUP R14 24 k R23 24 k R15 24 k R24 24 k 12 C19 100 pF 12 C23 100 pF 12 C20 100 pF 12 C24 100 pF GND_D IN1 GPI1 IN3 GND_D GPI3 GND_D GND_D GPI2 GPI4IN4 IN2 Digital Inputs 2 1 D12 1N4148WS 1 3 2 Q3 5V_D GPO1 GND_D OUT1 2 1 D13 1N4148WS 1 3 2 Q4 ZXMS6004FFTA 5V_D GPO2 GND_D OUT2 2 1 D14 1N4148WS 1 3 2 Q5 ZXMS6004FFTA 5V_D GPO3 GND_D OUT3 2 1 D15 1N4148WS 1 3 2 Q6 ZXMS6004FFTA 5V_D GPO4 GND_D OUT4 Digital Outputs R33 1k R34 1k R35 1k R36 1k 5 V Output Supplies 12 C48 1 uF 2 1 C47 100 nF 2 1 C42 100 nF 2 1 D16 PTVS5V0S1UR,115 R61 100 k 5V_D GND_D GND_D +5V_OUT D 1 GND 2 VCC 3 R 4 EN 5 CANL 6 CANH 7 RS 8 U9 SN65HVD234DR 2 1 C59 100 nF 12 R80 10 K R82 0 R81120 CAN Digital Hall 2 1 C8 1 nF Incremental Encoder 1 2 1 C32 100 nF 12 C28 100 pF LED Signaling Absolute Encoder 1 R19 470 R R17 470 R R29 470 R DS1 DS2 GND_D ECAT_CAN_ERR GND_D ECAT_CAN_RUN GND_D FAULT_SIGNAL GND_D 5V_D GPIO Mechanical Standoffs Terminal rating = 11.2 Arms. Power Pluggable Contacts PH_A PH_B PH_C POW_SUP GND_P 1 2 R1 1 R GND_A GND_D GND_D +3.3V_D +3.3V_D CAN_TX CAN_RX +3.3V_D CAN_P CAN_N GND_D HALL_3 HALL_2 HALL_1 2 1 C17 100 nF R4 1k 12 R3 10 K 1A 2A +3.3V_D 2 1 C1 100 nF GND_D 1A GND_D 2 1 C9 1 nF R7 1k 12 R6 10 K 2A GND_D 2 1 C15 1 nF R10 1k 12 R9 10 K 3A GND_D 5V_D -VIN 1 +VIN 2 R.C. 3 N.C._1 5 +VOUT 6 -VOUT 7 N.C._2 8 PS1 SPBW06G-12 IN 1 GND 2 EN 3 OUT 6 ILIM 5 FAULT 4 IC4 AP2553W6-7 GND_D HALL_IN_1 HALL_IN_2 HALL_IN_3 VCC 1 GND 2 RO 3 B4 A5 IC2 MAX3280EAUK+T 1 2 R41 10 R51 2K R45 220 DIG_ENC_1A GND_D +3.3V_D 1 2 R47 10 12 C29 100 pF R52 2K R37 2K GND_D 5V_D 21 C40 100 nF GND_D DIG_ENC_1A_N DIG_ENC_1A_P 2 1 C49 100 nF 12 C43 100 pF VCC 1 GND 2 RO 3 B4 A5 IC5 MAX3280EAUK+T 1 2 R66 10 R76 2K R70 220 DIG_ENC_1B GND_D +3.3V_D 1 2 R72 10 12 C44 100 pF R77 2K R62 2K GND_D 5V_D DIG_ENC_1B_N DIG_ENC_1B_P 2 1 C64 100 nF 12 C60 100 pF VCC 1 GND 2 RO 3 B4 A5 IC7 MAX3280EAUK+T 1 2 R85 10 R91 2K R87 220 DIG_ENC_1Z GND_D +3.3V_D 1 2 R89 10 12 C61 100 pF R92 2K R83 2K GND_D 5V_D DIG_ENC_1Z_N DIG_ENC_1Z_P R 1 RE 2 DE 3D 4 GND 5 A6 B7 VCC 8 U5 SN65HVD75DGKR 2 1 C38 100 nF 1 2 R39 10 12 C34 100 pF 12 C35 100 pF GND_D ABSENC1_CLK_P ABSENC1_CLK_N +3.3V_D 12 R49 10 K 1 2 R43 10 ABSENC1_CLK R 1 RE 2 DE 3D 4 GND 5 A6 B7 VCC 8 U7 SN65HVD75DGKR 2 1 C55 100 nF 1 2 R59 10 12 C51 100 pF 12 C52 100 pF GND_D ABSENC1_DATA_P ABSENC1_DATA_N +3.3V_D 1 2 R68 10 R64 220 R55 2K R56 2K R74 2K 5V_D ABSENC1_DATA 12 D6 CZRU52C3V9 12 D7 CZRU52C3V9 12 D8 CZRU52C3V9 12 D9 CZRU52C3V9 1 2 LED1 TLMG1100-GS08 1 2 LED2 TLMG1100-GS08 HIROSE_DF12(3.0)-60DS-0.5V(86) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Male connector (Pinout mirrored on PCB to mate the female) S2 S1 P3 HIROSE_DF12(3.0)-80DS-0.5V(86) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 Male connector (Pinout mirrored on PCB to mate the female) S2 S1 P2 1.7 mm H1 1.7 mm H2 1.7 mm H5 1.7 mm H4 1.7 mm H3 M1 M2 M3 M4 PE PE i PE PE i PE PE GND_A GND_D GND_D GND_D GND_D GND_A DIG_ENC_1A DIG_ENC_1B DIG_ENC_1Z DIG_ENC_2A DIG_ENC_2B DIG_ENC_2Z ABSENC1_CLK ABSENC1_DATA ABSENC1_MOSI GND_D GND_A GND_D MOTOR_TEMP HALL_1 HALL_2 HALL_3 ABSENC1_TX_EN GND_A GND_D GND_D GND_D GND_D GND_D GND_D GND_D 5V_D +3.3V_REF GPO4 GPI2 ABSENC2_DATA GPO1 GPO3 PWM_BRAKE BOOT CAN_TX CAN_RX ECAT_CAN_RUN ETH0_LED_LINK PHY0_TX_P PHY0_TX_N PHY0_RX_P MAGNETICS_CT STO1 PHY0_RX_N GND_D GND_D GND_D GND_D GND_D GND_D GND_D 5V_D GND_D PHY1_RX_N PHY1_RX_P PHY1_TX_N PHY1_TX_P ETH1_LED_LINK ECAT_CAN_ERR FAULT_SIGNAL STO2 GPI4 GPO2 ABSENC2_CLK GPI3 GPI1 +1.65V_REF +3.3V_D 1A 1 3Y 2 2A 3 GND 4 VCC 8 1Y 7 3A 6 2Y 5 IC1 74LVC3G17DP,125 12 C13 10 uF 2 1 C14 100 nF VIN 3 VOUT 2 VOUT 4 GND 1 U1 LD1117S33CTR 5V_D GND_D Logic Supply 3.3V +3.3V_D R18 1.6 K 1 2 L3 1kZ/0.2A GND_D GND_A MOTOR_TEMP_RET MOTOR_TEMP_IN 5V_D MOTOR_TEMP Motor Temperature 2 1 C22 100 nF 1 2 R20 10 K i PE i PE GND_A & GND_D 2 1 P1 22284020 BOOT 1 2 R8 1.2 K BOOT GND_D Signal Connectors to EVEREST S NET Incremental Encoder 2 2 1 C33 100 nF 12 C30 100 pF VCC 1 GND 2 RO 3 B4 A5 IC3 MAX3280EAUK+T 1 2 R42 10 R53 2K R46 220 DIG_ENC_2A GND_D +3.3V_D 1 2 R48 10 12 C31 100 pF R54 2K R38 2K GND_D 5V_D 21 C41 100 nF GND_D DIG_ENC_2A_N DIG_ENC_2A_P 2 1 C50 100 nF 12 C45 100 pF VCC 1 GND 2 RO 3 B4 A5 IC6 MAX3280EAUK+T 1 2 R67 10 R78 2K R71 220 DIG_ENC_2B GND_D +3.3V_D 1 2 R73 10 12 C46 100 pF R79 2K R63 2K GND_D 5V_D DIG_ENC_2B_N DIG_ENC_2B_P 2 1 C65 100 nF 12 C62 100 pF VCC 1 GND 2 RO 3 B4 A5 IC8 MAX3280EAUK+T 1 2 R86 10 R93 2K R88 220 DIG_ENC_2Z GND_D +3.3V_D 1 2 R90 10 12 C63 100 pF R94 2K R84 2K GND_D 5V_D DIG_ENC_2Z_N DIG_ENC_2Z_P Absolute Encoder 2 R 1 RE 2 DE 3D 4 GND 5 A6 B7 VCC 8 U6 SN65HVD75DGKR 2 1 C39 100 nF 1 2 R40 10 12 C36 100 pF 12 C37 100 pF GND_D ABSENC2_CLK_P ABSENC2_CLK_N +3.3V_D 12 R50 10 K 1 2 R44 10 ABSENC2_CLK R 1 RE 2 DE 3D 4 GND 5 A6 B7 VCC 8 U8 SN65HVD75DGKR 2 1 C56 100 nF 1 2 R60 10 12 C53 100 pF 12 C54 100 pF GND_D ABSENC2_DATA_P ABSENC2_DATA_N +3.3V_D 1 2 R69 10 R65 220 R57 2K R58 2K R75 2K 5V_D ABSENC2_DATA 1 2 R21 10 1 2 R22 10 12 C27 10 uF 12 R11 15 K R16 30 K 12 R12 15 K R13 220 R C18 10 nF 50 v C21 10 nF 50 v 12 D4 SD36C-01FTG 12 D5 BAS16P2T5G 1 2 4 3 U2 TCMD1000 STO1_IN STO_RET STO1 IN 1 GND 2 GND 3 GND 4 PWRGD 5 ON 6 OUT 7 GATE 8 U3 LTC4360ISC8-1#TRMPBF 4 15-6-7-8 2 3 Q2 SIR460DP-T1-GE3 5V_D 1 2 R31 10 1 2 R32 10 12 R25 15 K R28 30 K 12 R26 15 K R27 220 R C25 10 nF 50 v C26 10 nF 50 v 12 D10 SD36C-01FTG 12 D11 BAS16P2T5G 1 2 4 3 U4 TCMD1000 STO2_IN GND_D GND_D STO2 Voltage Monitor Safe Torque Off +1.65V_REF Analog Inputs Connectors 3A Unused digital output should be left unconneted Unused digital inputs should connected to GND_D Unused analog inputs should be connected to 1.65V_REF 12 C16 10 uF R30 1k GND_P GND_P GND_D Absolute Encoders Input/Ouputs A1 A1 A2 A2 A3 A3 A4 A4 A5 A5 A6 A6 A7 A7 A8 A8 A_GREEN_1 A9 K_GREEN_1 A10 A_YELLOW_1 A11 K_YELLOW_1 A12 B1 B1 B2 B2 B3 B3 B4 B4 B5 B5 B6 B6 B7 B7 B8 B8 A_GREEN_2 B9 K_GREEN_2 B10 A_YELLOW_2 B11 K_YELLOW_2 B12 MH1 MH1 MH2 MH2 MH3 MH3 J8 JXD0-2005NL 12 C77 1 nF GND 1 I/O_1 2I/O_2 3 VDD 4 D18 CD143A-SR3.3 IN A1 1 IN A2 3 VCC 5 GND 2 OUT Y1 6 OUT Y2 4 U11 NL27WZ14DFT2G R97 330 PHY0_TX_P 2 1 C69 100 nF 12 C68 1 uF PHY0_TX_N PHY0_RX_P 12 C70 1 uF 2 1 C71 100 nF GND_D PHY0_RX_N CHASSIS PHY1_TX_P 2 1 C67 100 nF 12 C66 1 uF 12 C72 1 uF 2 1 C73 100 nF PHY1_TX_N GND_D GND_D PHY1_RX_P PHY1_RX_N CHASSIS LED_LINK_1_A CHASSIS MAGNETICS_CT PHY1_TX_PPHY1_TX_N GND 1 I/O_1 2I/O_2 3 VDD 4 D19 CD143A-SR3.3 MAGNETICS_CT PHY1_RX_NPHY1_RX_P GND 1 I/O_1 2I/O_2 3 VDD 4 D20 CD143A-SR3.3 MAGNETICS_CT PHY0_TX_PPHY0_TX_N GND 1 I/O_1 2I/O_2 3 VDD 4 D21 CD143A-SR3.3 MAGNETICS_CT PHY0_RX_NPHY0_RX_P 5V_D ETH0_LED_LINK ETH1_LED_LINK R98 330 LED_LINK_1_A MAGNETICS_CT ETHERCAT LED Driving CHASSIS decoupled 12 C78 1 nF CHASSIS GND_D PE POS 1 NEG 2 J7 XT60PW-M +DC_BUS GND_P D_1 1 D_2 2 G 3 S_1 4 D_3 5 D_4 6 D_5 7 S_2 8 Q7 SSM6K361NU,LF 42 U10A SN74LVC1G17DRYR GND 3 VCC 6 NC 1NC 5 U10B SN74LVC1G17DRYR 12 D17 V2PM12HM3_H 2 1 C76 100 nF R95 220 R96 100 k GND_D 5V_D GND_D PWM_BRAKE BRAKE_DIODE_K BRAKE_OUT BRAKE LED_LINK_0_A LED_LINK_0_A GND_D GND_D 11 22 3 3 4 4 55 66 7 7 8 8 J4 1017533 PE PH_B PH_C PH_A 11 22 33 44 55 66 77 88 99 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 J2 1844808 11 22 33 44 55 66 77 88 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 J1 1844785 11 22 33 44 55 66 77 88 9 9 10 10 J6 1821300 DIG_ENC_2Z_N DIG_ENC_2Z_P DIG_ENC_2B_N DIG_ENC_2B_P DIG_ENC_2A_N DIG_ENC_2A_P +5V_OUT GND_D 11 22 33 44 55 66 7 7 8 8 J3 1821287 11 22 33 44 55 66 7 7 8 8 J5 1821287 ABSENC2_CLK_P ABSENC2_CLK_N ABSENC2_DATA_P ABSENC2_DATA_N +5V_OUT GND_D Supply GND_D PEGND_D +5V_OUT IN1 IN2 IN3 IN4 +5V_OUT OUT1 OUT2 CAN_P CAN_N BRAKE_DIODE_K BRAKE_OUT OUT3 OUT4 Motor Phases +5V_OUT GND_D ABSENC1_DATA_P ABSENC1_DATA_N ABSENC1_CLK_P ABSENC1_CLK_N DIG_ENC_1A_P DIG_ENC_1A_N DIG_ENC_1B_P DIG_ENC_1B_N DIG_ENC_1Z_P DIG_ENC_1Z_N HALL_IN_1 HALL_IN_2 HALL_IN_3 MOTOR_TEMP_IN MOTOR_TEMP_RET+5V_OUT GND_D STO2_IN STO_RET STO1_IN MAGNETICS_CT MAGNETICS_CT MAGNETICS_CT Servo drives implementation for robot’s motor control 99 C PCB layouts In the following pages, the layout of the PCB is shown along with the layout of each layer independently, ordered from top to bottom. PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 PAC102 PAC101 COC1 PAC201 PAC202 COC2 PAC302 PAC301 COC3 PAC402 PAC401 COC4 PAC502 PAC501 COC5 PAC602 PAC601 COC6 PAC702 PAC701 COC7 PAC802 PAC801 COC8 PAC902 PAC901 COC9 PAC1002 PAC1001 COC10 PAC1102 PAC1101 COC11 PAC1202 PAC1201 COC12 PAC1301 PAC1302 COC13 PAC1401 PAC1402 COC14 PAC1502 PAC1501 COC15 PAC1602 PAC1601 COC16 PAC1701 PAC1702 COC17 PAC1801 PAC1802 COC18 PAC1902 PAC1901 COC19 PAC2002 PAC2001 COC20 PAC2101 PAC2102 COC21 PAC2202 PAC2201 COC22 PAC2302 PAC2301 COC23 PAC2402 PAC2401 COC24 PAC2501 PAC2502 COC25 PAC2601 PAC2602 COC26 PAC2702 PAC2701 COC27 PAC2801 PAC2802 COC28 PAC2901 PAC2902 COC29 PAC3001 PAC3002 COC30 PAC3101 PAC3102 COC31 PAC3201 PAC3202 COC32 PAC3302 PAC3301 COC33 PAC3402 PAC3401 COC34 PAC3502 PAC3501 COC35 PAC3602 PAC3601 COC36 PAC3702 PAC3701 COC37 PAC3801 PAC3802 COC38 PAC3902 PAC3901 COC39 PAC4001 PAC4002 COC40 PAC4101 PAC4102 COC41 PAC4202 PAC4201 COC42 PAC4301 PAC4302 COC43 PAC4401 PAC4402 COC44 PAC4501 PAC4502 COC45 PAC4601 PAC4602 COC46 PAC4702 PAC4701 COC47 PAC4801 PAC4802 COC48 PAC4902 PAC4901 COC49 PAC5001 PAC5002 COC50 PAC5102 PAC5101 COC51 PAC5202 PAC5201 COC52 PAC5302 PAC5301 COC53 PAC5402 PAC5401 COC54 PAC5501 PAC5502 COC55 PAC5601 PAC5602 COC56 PAC5701 PAC5702 COC57 PAC5801 PAC5802 COC58 PAC5902 PAC5901 COC59 PAC6001 PAC6002 COC60 PAC6101 PAC6102 COC61 PAC6201 PAC6202 COC62 PAC6301 PAC6302 COC63 PAC6402 PAC6401 COC64 PAC6501 PAC6502 COC65 PAC6602 PAC6601 COC66 PAC6701 PAC6702 COC67 PAC6802 PAC6801 COC68 PAC6901 PAC6902 COC69 PAC7002 PAC7001 COC70 PAC7101 PAC7102 COC71 PAC7202 PAC7201 COC72 PAC7301 PAC7302 COC73 PAC7401 PAC7402 COC74 PAC7501 PAC7502 COC75 PAC7601 PAC7602 COC76 PAC7702 PAC7701 COC77 PAC7801 PAC7802 COC78 PAD102 PAD101 COD1 PAD201 PAD202 COD2 PAD301 PAD302 COD3 PAD402 PAD401 COD4 PAD502 PAD501 COD5 PAD601 PAD602 COD6 PAD702 PAD701 COD7 PAD802 PAD801 COD8 PAD902 PAD901 COD9 PAD1002 PAD1001 COD10 PAD1102 PAD1101 COD11 PAD1202 PAD1201 COD12 PAD1302 PAD1301 COD13 PAD1402 PAD1401 COD14 PAD1502 PAD1501 COD15 PAD1601 PAD1602 COD16 PAD1701 PAD1702 COD17 PAD1804 PAD1801 PAD1802 PAD1803 COD18 PAD1901 PAD1904 PAD1903 PAD1902 COD19 PAD2001 PAD2004 PAD2002 PAD2003 COD20 PAD2101 PAD2104 PAD2103 PAD2102 COD21 PADS102 PADS101 CODS1 PADS202 PADS201 CODS2 PAH101 COH1 PAH201 COH2 PAH301 COH3 PAH401 COH4 PAH501 COH5 PAIC101 PAIC103 PAIC106 PAIC108 PAIC104 PAIC107 PAIC105 PAIC102 COIC1 PAIC201 PAIC202 PAIC205 PAIC204 PAIC203 COIC2 PAIC301 PAIC302 PAIC303 PAIC304 PAIC305 COIC3 PAIC402 PAIC401 PAIC403 PAIC406 PAIC405 PAIC404 COIC4 PAIC501 PAIC502 PAIC505 PAIC504 PAIC503 COIC5 PAIC601 PAIC602 PAIC603 PAIC604 PAIC605 COIC6 PAIC702 PAIC701 PAIC705 PAIC704 PAIC703 COIC7 PAIC801 PAIC802 PAIC803 PAIC804 PAIC805 COIC8 PAJ102 PAJ101 PAJ106 PAJ105 PAJ1016 PAJ1015 PAJ104 PAJ103 PAJ107 PAJ108 PAJ109 PAJ1010 PAJ1011 PAJ1012 PAJ1013 PAJ1014 COJ1 PAJ209 PAJ2010 PAJ2011 PAJ2012 PAJ2018 PAJ2020 PAJ202 PAJ2019 PAJ2017 PAJ2016 PAJ2015 PAJ2014 PAJ2013 PAJ208 PAJ207 PAJ206 PAJ205 PAJ204 PAJ203 PAJ201 COJ2 PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306 PAJ308 PAJ307 COJ3 PAJ406 PAJ407 PAJ408 PAJ401 PAJ402 PAJ403 PAJ404 PAJ405 COJ4 PAJ506 PAJ505 PAJ504 PAJ503 PAJ502 PAJ501 PAJ507 PAJ508 COJ5 PAJ601 PAJ602 PAJ603 PAJ604 PAJ605 PAJ606 PAJ607 PAJ608 PAJ6010 PAJ609 COJ6 PAJ702 PAJ701 PAJ70S2 PAJ70S1 COJ7 PAJ80MH2 PAJ80A4 PAJ80MH1 PAJ80A3 PAJ80A2 PAJ80A1 PAJ80B10 PAJ80B6 PAJ80B5 PAJ80B8 PAJ80B4 PAJ80B3 PAJ80B2 PAJ80B1 PAJ80A10 PAJ80A8 PAJ80A6 PAJ80MH3 PAJ80A5 PAJ80A7 PAJ80A9 PAJ80A11 PAJ80A12 PAJ80B7 PAJ80B9 PAJ80B11 PAJ80B12 PAJ80MH4 PAJ80MH5 COJ8 PAL101 PAL102 COL1 PAL201 PAL202 COL2 PAL301 PAL302 COL3 PALED101 PALED102 COLED1 PALED201 PALED202 COLED2 PAM101 COM1 PAM201 COM2 PAM301 COM3 PAM401 COM4 PAP102 PAP101 COP1 PAP20H2 PAP20H1 PAP208 PAP2020 PAP2059 PAP2010 PAP2078 PAP2018 PAP2046 PAP209 PAP2077 PAP2038 PAP207 PAP2076 PAP2035 PAP203 PAP2075 PAP2015 PAP2074 PAP2032 PAP2016 PAP2013 PAP2073 PAP205 PAP2072 PAP2011 PAP2014 PAP2071 PAP2012 PAP206 PAP2069 PAP2070 PAP2019 PAP2079 PAP2033 PAP2080 PAP2034 PAP2060 PAP20S1 PAP20S2 PAP2058 PAP2057 PAP2056 PAP2055 PAP2054 PAP2053 PAP2052 PAP2051 PAP2050 PAP2049 PAP2048 PAP2047 PAP2045 PAP2044 PAP2043 PAP2042 PAP2041 PAP2040 PAP2039 PAP2037 PAP2036 PAP2031 PAP2029 PAP2030 PAP2022 PAP2024 PAP2026 PAP2025 PAP2023 PAP2021 PAP2017 PAP2027 PAP2028 PAP202 PAP201 PAP204 PAP2061 PAP2062 PAP2063 PAP2064 PAP2065 PAP2066 PAP2067 PAP2068 COP2 PAP30H2 PAP30H1 PAP3017 PAP3019 PAP304 PAP3021 PAP306 PAP308 PAP3010 PAP3026 PAP3024 PAP3020 PAP3030 PAP3060 PAP3059 PAP301 PAP3032 PAP3013 PAP3044 PAP3036 PAP302 PAP3034 PAP3022 PAP3015 PAP3028 PAP30S2 PAP30S1 PAP3058 PAP3057 PAP3056 PAP3055 PAP3054 PAP3053 PAP3052 PAP3051 PAP3050 PAP3049 PAP3048 PAP3047 PAP3046 PAP3045 PAP3043 PAP3042 PAP3041 PAP3040 PAP3039 PAP3038 PAP3037 PAP3035 PAP3033 PAP3031 PAP3029 PAP3018 PAP3025 PAP3023 PAP3027 PAP3016 PAP3014 PAP303 PAP305 PAP307 PAP309 PAP3011 PAP3012 COP3 PAPS101 PAPS102 PAPS106 PAPS107 PAPS108 PAPS105 PAPS103 COPS1 PAQ101 PAQ103 PAQ104 COQ1 PAQ201 PAQ202 PAQ203 PAQ205060708 PAQ204 COQ2 PAQ301 PAQ302 PAQ303 COQ3 PAQ403 PAQ402 PAQ401 COQ4 PAQ502 PAQ501 PAQ503 COQ5 PAQ603 PAQ601 PAQ602 COQ6 PAQ708 PAQ707 PAQ706 PAQ705 PAQ704 PAQ702 PAQ701 PAQ703 COQ7 PAR101 PAR102 COR1 PAR202 PAR201 COR2 PAR301 PAR302 COR3 PAR401 PAR402 COR4 PAR502 PAR501 COR5 PAR602 PAR601 COR6 PAR701 PAR702 COR7 PAR801 PAR802 COR8 PAR901 PAR902 COR9 PAR1001 PAR1002 COR10 PAR1102 PAR1101 COR11 PAR1202 PAR1201 COR12 PAR1301 PAR1302 COR13 PAR1402 PAR1401 COR14 PAR1502 PAR1501 COR15 PAR1601 PAR1602 COR16 PAR1702 PAR1701 COR17 PAR1801 PAR1802 COR18 PAR1902 PAR1901 COR19 PAR2002 PAR2001 COR20 PAR2102 PAR2101 COR21 PAR2201 PAR2202 COR22 PAR2302 PAR2301 COR23 PAR2401 PAR2402 COR24 PAR2502 PAR2501 COR25 PAR2602 PAR2601 COR26 PAR2701 PAR2702 COR27 PAR2801 PAR2802 COR28 PAR2902 PAR2901 COR29 PAR3001 PAR3002 COR30 PAR3101 PAR3102 COR31 PAR3202 PAR3201 COR32 PAR3302 PAR3301 COR33 PAR3401 PAR3402 COR34 PAR3501 PAR3502 COR35 PAR3602 PAR3601 COR36 PAR3702 PAR3701 COR37 PAR3802 PAR3801 COR38 PAR3902 PAR3901 COR39 PAR4002 PAR4001 COR40 PAR4102 PAR4101 COR41 PAR4201 PAR4202 COR42 PAR4302 PAR4301 COR43 PAR4402 PAR4401 COR44 PAR4502 PAR4501 COR45 PAR4601 PAR4602 COR46 PAR4702 PAR4701 COR47 PAR4801 PAR4802 COR48 PAR4901 PAR4902 COR49 PAR5001 PAR5002 COR50 PAR5101 PAR5102 COR51 PAR5201 PAR5202 COR52 PAR5301 PAR5302 COR53 PAR5401 PAR5402 COR54 PAR5502 PAR5501 COR55 PAR5601 PAR5602 COR56 PAR5701 PAR5702 COR57 PAR5801 PAR5802 COR58 PAR5902 PAR5901 COR59 PAR6002 PAR6001 COR60 PAR6101 PAR6102 COR61 PAR6202 PAR6201 COR62 PAR6302 PAR6301 COR63 PAR6402 PAR6401 COR64 PAR6502 PAR6501 COR65 PAR6602 PAR6601 COR66 PAR6701 PAR6702 COR67 PAR6802 PAR6801 COR68 PAR6902 PAR6901 COR69 PAR7002 PAR7001 COR70 PAR7101 PAR7102 COR71 PAR7202 PAR7201 COR72 PAR7301 PAR7302 COR73 PAR7402 PAR7401 COR74 PAR7501 PAR7502 COR75 PAR7602 PAR7601 COR76 PAR7701 PAR7702 COR77 PAR7801 PAR7802 COR78 PAR7901 PAR7902 COR79 PAR8001 PAR8002 COR80 PAR8101 PAR8102 COR81 PAR8201 PAR8202 COR82 PAR8302 PAR8301 COR83 PAR8402 PAR8401 COR84 PAR8502 PAR8501 COR85 PAR8601 PAR8602 COR86 PAR8702 PAR8701 COR87 PAR8801 PAR8802 COR88 PAR8902 PAR8901 COR89 PAR9001 PAR9002 COR90 PAR9102 PAR9101 COR91 PAR9201 PAR9202 COR92 PAR9301 PAR9302 COR93 PAR9401 PAR9402 COR94 PAR9501 PAR9502 COR95 PAR9601 PAR9602 COR96 PAR9702 PAR9701 COR97 PAR9802 PAR9801 COR98 PAU101 PAU102 PAU103 PAU104 COU1 PAU201 PAU202 PAU203 PAU204 COU2 PAU307 PAU308 PAU306 PAU304 PAU303 PAU302 PAU301 PAU305 COU3 PAU401 PAU402 PAU403 PAU404 COU4 PAU502 PAU503 PAU504 PAU508 PAU507 PAU506 PAU505 PAU501 COU5 PAU605 PAU606 PAU607 PAU608 PAU604 PAU603 PAU602 PAU601 COU6 PAU701 PAU702 PAU703 PAU704 PAU705 PAU706 PAU707 PAU708 COU7 PAU806 PAU807 PAU808 PAU801 PAU802 PAU803 PAU804 PAU805 COU8 PAU901 PAU903 PAU904 PAU908 PAU907 PAU906 PAU905 PAU902 COU9 PAU1004 PAU1002 PAU1003 PAU1006 PAU1005 PAU1001 COU10 PAU1101 PAU1102 PAU1103 PAU1104 PAU1105 PAU1106 COU11 PAP204 PAP304 PAP306 PAP308 PAP3010 PAC101 PAC1301 PAC1401 PAC3201 PAC3301 PAC3801 PAC3901 PAC4901 PAC5001 PAC5501 PAC5601 PAC5901 PAC6401 PAC6501 PAIC108 PAIC201 PAIC301 PAIC501 PAIC601 PAIC701 PAIC801 PAP2014 PAR8002 PAU102 PAU104 PAU502 PAU503 PAU508 PAU602 PAU603 PAU608 PAU708 PAU808 PAU903 PAU905 PAP201 PAC4701 PAC4801 PAD1601 PAIC406 PAJ1015 PAJ2012 PAJ2020 PAJ305 PAJ505 PAJ607 PAJ701 PAQ104 PAC801 PAIC101 PAR301 PAC901 PAIC103 PAR601 PAC1501 PAIC106 PAR901 PAC1201 PAC1601 PAC1701 PAC4001 PAC4101 PAC4201 PAC5701 PAC5801 PAC7401 PAC7501 PAC7601 PAD1202 PAD1302 PAD1402 PAD1502 PAIC401 PAIC403 PAP207 PAP208 PAP209 PAP2010 PAQ201 PAQ202 PAQ203 PAR402 PAR702 PAR1002 PAR1802 PAR3001 PAR5102 PAR5202 PAR5302 PAR5402 PAR5501 PAR5601 PAR5701 PAR5801 PAR7602 PAR7702 PAR7802 PAR7902 PAR9102 PAR9202 PAR9302 PAR9402 PAU103 PAU301 PAU1006 PAU1105 PAP3038 PAR4901 PAU504 PAC3401 PAJ304 PAR4302 PAC3501 PAJ303 PAR3902 PAP3040 PAU701 PAC5201 PAJ302 PAR5602 PAR6401 PAR6802 PAR7401 PAC5101 PAJ301 PAR5502 PAR5902 PAR6402 PAP3042 PAP3033 PAP2024 PAR5001 PAU604 PAC3601 PAJ502 PAR4402 PAC3701 PAJ501 PAR4002 PAP2025 PAU801 PAC5401 PAJ504 PAR5802 PAR6501 PAR6902 PAR7501 PAC5301 PAJ503 PAR5702 PAR6002 PAR6502 PAP2051 PAR801 PAD1701 PAJ209 PAD1702 PAJ2010 PAQ701 PAQ702 PAQ705 PAQ706 PAQ707 PAJ208 PAR8101 PAU906 PAJ207 PAR8102 PAU907 PAP2057 PAU904 PAP2055 PAR8001 PAU901 PAC7701 PAC7801 PAJ80A8 PAJ80B8 PAJ80MH1 PAJ80MH2 PAJ80MH3 PAIC203 PAP3024 PAC2902 PAJ102 PAR4501 PAR4702 PAR5101 PAC2802 PAJ101 PAR3702 PAR4102 PAR4502 PAR5201 PAIC503 PAP3026 PAC4402 PAJ104 PAR7001 PAR7202 PAR7601 PAC4302 PAJ103 PAR6202 PAR6602 PAR7002 PAR7701 PAIC703 PAP3028 PAC6102 PAJ106 PAR8701 PAR8902 PAR9101 PAC6002 PAJ105 PAR8302 PAR8502 PAR8702 PAR9201 PAIC303 PAP3030 PAC3102 PAJ605 PAR4601 PAR4802 PAR5301 PAC3002 PAJ606 PAR3802 PAR4202 PAR4602 PAR5401 PAIC603 PAP3032 PAC4602 PAJ603 PAR7101 PAR7302 PAR7801 PAC4502 PAJ604 PAR6302 PAR6702 PAR7102 PAR7901 PAIC803 PAP3034 PAC6302 PAJ601 PAR8801 PAR9002 PAR9301 PAC6202 PAJ602 PAR8402 PAR8602 PAR8802 PAR9401 PAP2064 PAR1902 PAP2065 PAR1702 PAP2067 PAU1101 PAP2068 PAU1103 PAP2036 PAR2902 PAC2202 PAP203 PAP301 PAP302 PAP3020 PAR101 PAC102 PAC802 PAC902 PAC1102 PAC1202 PAC1302 PAC1402 PAC1502 PAC1602 PAC1702 PAC1902 PAC2002 PAC2101 PAC2302 PAC2402 PAC2601 PAC2702 PAC2801 PAC2901 PAC3001 PAC3101 PAC3202 PAC3302 PAC3402 PAC3502 PAC3602 PAC3702 PAC3802 PAC3902 PAC4002 PAC4102 PAC4202 PAC4301 PAC4401 PAC4501 PAC4601 PAC4702 PAC4802 PAC4902 PAC5002 PAC5102 PAC5202 PAC5302 PAC5402 PAC5502 PAC5602 PAC5702 PAC5802 PAC5902 PAC6001 PAC6101 PAC6201 PAC6301 PAC6402 PAC6502 PAC6602 PAC6702 PAC6802 PAC6902 PAC7002 PAC7102 PAC7202 PAC7302 PAC7402 PAC7502 PAC7602 PAC7702 PAC7802 PAD602 PAD702 PAD802 PAD902 PAD1602 PAD1801 PAD1901 PAD2001 PAD2101 PADS102 PADS202 PAIC104 PAIC202 PAIC302 PAIC402 PAIC502 PAIC602 PAIC702 PAIC802 PAJ1016 PAJ202 PAJ2011 PAJ306 PAJ506 PAJ608 PAJ80A10 PAJ80B10 PAL202 PAL302 PALED101 PALED201 PAP102 PAP205 PAP206 PAP2011 PAP2012 PAP2015 PAP2016 PAP2035 PAP2038 PAP2046 PAP2059 PAP2060 PAP2069 PAP2070 PAP2079 PAP2080 PAP3015 PAP3022 PAP3036 PAP3044 PAP3059 PAP3060 PAQ303 PAQ403 PAQ503 PAQ603 PAQ704 PAQ708 PAR102 PAR2101 PAR2201 PAR3101 PAR3201 PAR3701 PAR3801 PAR4902 PAR5002 PAR6101 PAR6201 PAR6301 PAR7402 PAR7502 PAR8201 PAR8301 PAR8401 PAR9601 PAU101 PAU302 PAU303 PAU304 PAU306 PAU505 PAU605 PAU702 PAU703 PAU704 PAU705 PAU802 PAU803 PAU804 PAU805 PAU902 PAU1003 PAU1102 PAC202 PAC302 PAC402 PAC502 PAC602 PAC702 PAD102 PAH201 PAJ702 PAPS101 PAR502 PAC1901 PAD601 PAP2018 PAR1402 PAC2001 PAD701 PAP2019 PAR1502 PAC2301 PAD801 PAP2020 PAR2302 PAC2401 PAD901 PAP2032 PAR2402 PAP2029 PAQ301 PAP2030 PAQ401 PAP2031 PAQ501 PAP2017 PAQ601 PAIC107 PAP3017 PAIC105 PAP3019 PAIC102 PAP3021 PAJ109 PAR302 PAR401 PAJ1010 PAR602 PAR701 PAJ1011 PAR902 PAR1001 PAJ2013 PAR1401 PAJ2014 PAR1501 PAJ2015 PAR2301 PAJ2016 PAR2401 PAJ80A9 PAR9702 PAJ80B9 PAR9802 PAC6801 PAC6901 PAD1804 PAD1904 PAD2004 PAD2104 PAJ80A4 PAP2013 PAC2201 PAP3013 PAR2002 PAJ108 PAR1801 PAR2001 PAJ107 PAL301 PAC1001 PAD301 PAL101 PAPS106 PAC1002 PAD302 PAL201 PAPS107 PAC1101 PAL102 PAC1802 PAD501 PAR1201 PAR1602 PAU201 PAC2502 PAD1101 PAR2601 PAR2802 PAU401 PAC2701 PAR2701 PAU307 PAC6601 PAC6701 PAJ80B4 PAC7001 PAC7101 PAJ80A5 PAC7201 PAC7301 PAJ80B5 PAD202 PAQ101 PAR201 PAR501 PAD401 PAR1101 PAR1202 PAD1001 PAR2501 PAR2602 PAD1201 PAR3301 PAD1301 PAR3401 PAD1401 PAR3501 PAD1501 PAR3601 PADS101 PAR1901 PADS201 PAR2901 PAIC204 PAR4101 PAIC205 PAR4701 PAIC304 PAR4201 PAIC305 PAR4801 PAIC405 PAR6102 PAIC504 PAR6601 PAIC505 PAR7201 PAIC604 PAR6701 PAIC605 PAR7301 PAIC704 PAR8501 PAIC705 PAR8901 PAIC804 PAR8601 PAIC805 PAR9001 PALED102 PAR1701 PALED202 PAR3002 PAP101 PAR802 PAQ204 PAU308 PAQ205060708 PAR1301 PAQ703 PAR9501 PAR1302 PAU204 PAR2702 PAU404 PAR3901 PAU506 PAR4001 PAU606 PAR4301 PAU507 PAR4401 PAU607 PAR5901 PAU706 PAR6001 PAU806 PAR6801 PAU707 PAR6901 PAU807 PAR8202 PAU908 PAR9502 PAU1004 PAR9701 PAU1106 PAR9801 PAU1104 PAJ203 PAQ302 PAR3302 PAJ204 PAQ402 PAR3402 PAJ205 PAQ502 PAR3502 PAJ206 PAQ602 PAR3602 PAJ201 PAJ401 PAJ402 PAM101 PAM201 PAM301 PAM401 PAH301 PAJ407 PAJ408 PAH401 PAJ405 PAJ406 PAH501 PAJ403 PAJ404 PAD2103 PAJ80A6 PAP2077 PAD2102 PAJ80A3 PAP2075 PAD2002 PAJ80A2 PAP2073 PAD2003 PAJ80A1 PAP2071 PAD1903 PAJ80B6 PAP2078 PAD1902 PAJ80B3 PAP2076 PAD1802 PAJ80B2 PAP2074 PAD1803 PAJ80B1 PAP2072 PAC201 PAC301 PAC401 PAC501 PAC601 PAC701 PAD101 PAD201 PAH101 PAPS102 PAQ103 PAR202 PAP2041 PAR9602 PAU1002 PAC2102 PAP2033 PAR2102 PAR2202 PAU203 PAJ2019 PAR1102 PAC2602 PAP2034 PAR3102 PAR3202 PAU403 PAJ2017 PAR2502 PAC1801 PAC2501 PAD402 PAD502 PAD1002 PAD1102 PAJ2018 PAR1601 PAR2801 PAU202 PAU402 Servo drives implementation for robot’s motor control 107 D Software Installation Guide D.1 TwinCAT TwinCAT can be downloaded and installed by accessing its official website [70] and following the steps described below: •Once the link [70] is opened, navigate to the Product information section. •Expand the options under the Software and tools menu. •Download the executable file TwinCAT 3 | eXtended Automation Engineering (XAE). •After downloading, run the file and proceed with the installation by following the instructions in the installation wizard. D.2 MotionLab3 MotionLab3canbe downloaded and installedbyaccessing its official website [71]and following the steps explained below: •Once the link [71] is opened, download the executable file. •Finally, run the file and proceed with the installation by following the instructions in the installation wizard. 114 Report Figure 82: Drive firmware update. Source: author. To update the Summit controllers in the EVE series, the process is simpler and is described below [101]: •Connect the controller to TwinCAT as explained earlier. •Double-click on the Drive (or BOX) element and, within the Online tab under State Machine, select Bootstrap. The communication RUN LED will blink rapidly. •In the File Access over EtherCAT section, select Download. Locate the downloaded ‘.sfu‘ file by enabling the option to display all files in the Windows file explorer. •The drive will now be updated. If it is intended to update the firmware for another controller, it is recommended to consult the official documentation. E.2 Drive connection to MotionLab3 Once communication between the computer and the drive has been established, the drive can be detected by the configuration program MotionLab3 and connected to it. There are two ways to do this: Automatic When the program starts, it scans the available networks on the computer to automatically detect connected drives. If any drive is detected, its icon will appear on the program’s home screen. Hovering the mouse over the icon will allow the user to click the Connect button (see Figure 84). Servo drives implementation for robot’s motor control 115 After a few seconds, the drive will be connected and ready for configuration. The refresh button for detected devices can be pressed to have MotionLab3 rescan the network, in case the drive was connected to the computer after the program started. Figure 83: Automatic connection with MotionLab3. Source: author. Manual If the drive has not been automatically detected or if the connection parameters wants to be modified, the drive can be connected manually by following the instructions below: •Start MotionLab3. Select the option to manually connect a slave on the home screen. •Select the EtherCAT EoE option (using external Master). •Specify the IP address associated with the drive, in this project’s case 192.168.2.0, and press the Connect button. •Finally, the drive description will appear on the screen. The drive will be connected and ready for configuration. 116 Report Figure 84: Manual connection with MotionLab3. Source: author. Servo drives implementation for robot’s motor control 117 F Guide on manual tuning through MotionLab3 The detailed process for configuring the velocity and position control loops is explained below. After accessing the Tune section and selecting the desired loop, the workspace will display the signal generator at the top right and the control parameters at the bottom. To configure the PID values successfully, follow these instructions: •Configure the generated signal. For velocity or position, it is recommended to use a low frequency (1 or 0.1 Hz), while the amplitude can be set to various values, such as 2 or 4 rev/s for velocity. The required offset can be assigned as needed; in this project, it has been set to 0. •Set all PID controller parameters for this loop (Kp, Ki, Kd) to 0. •Press the Enable button in the Tune parameter, which should display the graph updating in real time with the demanded velocity values. •Slowly increase the value of Kp until the actual velocity value approaches the demanded value. To apply changes to the parameter value, press the Enter key on the keyboard each time the value is updated. •Gradually increase the value of Ki until the actual velocity matches the demanded value. Overshoot and oscillations may occur if this value is increased excessively. •Adjust the Kp and Ki values until the PID controller’s response achieves the desired behavior and speed. The Kd value should only be used in cases where oscillations or large overshoots occur. When working with a triple cascade control loop, in most cases, the position control loop consists only of a proportional controller. Therefore, it is only necessary to adjust the Kp value, keeping Ki set to zero. The explained process is summarized in Figure 85. 118 Report Figure 85: Manual Tuning process. Source: author. Servo drives implementation for robot’s motor control 119 G Main functions of the ingeniamotion library This appendix provides a summary of the most important functions of the library and those used in the developed codes. These functions are grouped into their corresponding namespaces. For more information, refer to the official documentation [87]. G.1 Communication From the different functions included, only those using the EtherCAT communication protocol can be used for this project. Additionally, those that use the Ethernet over EtherCAT protocol did not work during testing. •connect_servo_ethercat(interface_name, slave_id, dict_path, alias=’default’, servo_status_listener=False, net_status_listener=False) Connects to a real drive via EtherCAT using the specified interface name, alias, and dictionary. The dictionary path must be complete for Python to locate the file. Alternatively, the dictionary can be stored in the same folder as the code, in which case only the filename needs to be specified. •connect_servo_virtual(dict_path=None, alias=’default’, port=1061, connection_timeout=1, servo_status_listener=False, net_status_listener=False) Creates and connects a virtual drive using the specified alias and dictionary. •get_interface_name_list() Scans the computer for available interfaces, returning a list of their names. These names are not the actual interface names as identified by the computer but rather user-friendly names for easier identification (e.g., Realtek Gaming GbE Family Controller). •get_ifname_by_index(index) Returns the actual name of the specified interface used by other functions. This is the name assigned by the computer, which is often unintelligible to users (e.g., \Device\NPF_{E564BE7531C8-4116-BBCB-1DCD7E14AB19}). •scan_servos_ethercat(interface_name) Scans the specified interface adapter to identify all connected EtherCAT slaves. •disconnect(servo=’default’) Disconnects the specified slave from the computer. •get_register(register, servo=’default’, axis=1) / set_register(register, value, servo=’default’, axis=1) Returns or sets the current value of the target register in the specified drive using the alias and axis. The register namemustmatch the onein thedictionaryused (e.g., DRV_PROT_USER_OVER_VOLT – overvoltage protection limit defined by the user). 120 Report •load_firmware_ecat(ifname, fw_file, slave=1, boot_in_app=None, password=None) Allows updating the firmware from a file on the computer. G.2 Configuration •check_configuration(config_path, axis=None, servo=’default’) Checks if the drive configuration matches the specified file by comparing register values. If the axis argument is not defined, the function runs for all connected drives. •load_configuration(config_path, axis=None, servo=’default’) Loads the configuration from the specified file into the volatile memory of the drive. •save_configuration(output_file, axis=None, servo=’default’) Saves the current drive configuration to a file for future use or analysis. •store_configuration(axis=None, servo=’default’) Stores the current configuration in the nonvolatile memory of the drive. •restore_configuration(axis=None, servo=’default’) Restores the factory settings of the specified drive. •set_profiler(acceleration=None, deceleration=None, velocity=None, servo=’default’, axis=1) Sets the maximum speed and acceleration profiles for the drive. •get_position_and_velocity_loop_rate(servo=’default’, axis=1) Gets the update frequency of the position and velocity control loops. •get_current_loop_rate(servo=’default’, axis=1) Gets the update frequency of the current control loop. •is_motor_enabled(servo=’default’, axis=1) Reports the motor status. If the result is False, the motor cannot move. •get_sto_status(servo=’default’, axis=1) Returns the value of the STO register, indicating whether the STO is active or inactive. G.3 Motion •set_operation_mode(operation_mode, servo=’default’, axis=1) Sets the specified operation mode for the drive. This mode must coincide with the commands Servo drives implementation for robot’s motor control 121 to be sent through the control program (current, velocity, or position). •motor_enable(servo=’default’, axis=1) / motor_disable(servo=’default’, axis=1) Enables/disables motor movement. These functions are necessary whenever the motor needs to move, regardless of the motion control type (current, velocity, position). •move_to_position(position, servo=’default’, axis=1, target_latch=True, blocking=False, error=20, timeout=None, interval=None) Sets the target position for the specified servo. Allows blocking program execution until the target position is reached. The position value must be specified in pulses, determined by the configured position sensor resolution. For example, in this project, a motor with a 1:80 gearbox and an incremental encoder with a resolution of 8192 pulses is used. Therefore, the total pulses for one full rotation of the motor shaft is 655360. To move the motor shaft 30 degrees from position 0, the function should specify 54613. •set_velocity(velocity, servo=’default’, axis=1, target_latch=True, blocking=False, error=0.1, timeout=None, interval=None) Sets the target velocity for the specified servo in rev/s. •get_actual_position(servo=’default’, axis=1) Returns the value of the current position register in pulses. •get_actual_velocity(servo=’default’, axis=1) Returns the value of the current velocity register in rev/s. •wait_for_position(position, servo=’default’, axis=1, error=20, timeout=None, interval=None) Pauses program execution until the current position reaches the target position. An acceptable position error in pulses can be defined. •wait_for_velocity(velocity, servo=’default’, axis=1, error=0.1, timeout=None, interval=None) Pauses program execution until the current velocity reaches the target velocity. An acceptable velocity error in rev/s can be defined. •fault_reset(servo=’default’, axis=1) Clears the previous fault detected by the drive to resume normal operation. 122 Report H Created codes H.1 driver_connection Listing 13: driver_connection function 1############################################################### 2# Servo drive communication function 3# 4# This function provides functionalities allows to stablish 5# communication with the servo drive through EtherCAT using the 6# Ingeniamotion library . 7# It allows the user to specify the drive dictionary file and wether 8# to use a virtual or real drive . 9# 10 # Features : 11 # - Print interface list detected on the computer . 12 # - Allow user to select the interface if specified . 13 # - Connect to a servo drive ( real or virtual ). 14 # 15 ############################################################### 16 17 def driver_connection ( virtual_drive_used , args , mc , user_selection ): 18 """ This function establishes the communication with the selected drive . """ 19 20 # Connect to a real drive 21 if not virtual_drive_used: 22 23 # Presenting the detected interface list 24 interface_list = mc. communication . get_interface_name_list () 25 if not interface_list: 26 print ("No interfaces detected . Ensure your network setup is correct.") 27 return 28 print (" List of interfaces :") 29 for index , interface in enumerate (interface_list): 30 print (f"{ index }: { interface }") 31 32 # Choosing an interface 33 if user_selection == 0: 34 interface_index=4 # predefined user selection 35 else: 36 # Asking user to select an interface 37 while True: 38 try: 39 interface_index = int(input (" Enter the number of the interface you want to select : ")) 40 if 0 <= interface_index < len(interface_list): 41 break 42 else: 43 print (" Invalid selection . Please enter a number corresponding to an available interface .") 44 except ValueError : 45 print (" Invalid input . Please choose a valid interface number from the list above .") Servo drives implementation for robot’s motor control 123 46 slave_id =1 47 48 # Selecting the chosen interface 49 interface_selected = mc. communication . get_ifname_by_index ( interface_index) 50 print (" Interface selected :") 51 print (f"- Index interface : { interface_index }") 52 print (f"- Interface identifier : { interface_selected }") 53 print (f"- Interface name : { interface_list [ interface_index ]} ") 54 55 # Scanning interface for slaves 56 slave_id_list = mc . communication . scan_servos_ethercat ( interface_selected) 57 if not slave_id_list : 58 print (f"No slave detected on interface : { interface_list [ interface_index ]}") 59 return 60 else: 61 print (f" Found slaves : { slave_id_list }") 62 63 # Connect slave using selected interface 64 mc. communication . connect_servo_ethercat ( 65 interface_selected , 66 slave_id, 67 args . dictionary_path 68 ) 69 print (" REAL drive is connected .") 70 71 # Connect to a virtual drive 72 else: 73 mc. communication . connect_servo_virtual ( 74 dict_path =’ virtual_drive . xdf ’, 75 alias = ’default’, 76 port =1064 , 77 connection_timeout =1 , 78 servo_status_listener=False, 79 net_status_listener=False 80 ) 81 print (" VIRTUAL drive is connected .") H.2 load_safe_config.py Listing 14: load_safe_config.py 1############################################################### 2# Loading , saving and modifying configurations example 3# 4# This script provides functionalities to connect and communicate with 5# servo drives using the Ingeniamotion library . 6# It allows for configuring , modifying , and retrieving drive settings 7# for both real and virtual drives . 8# Users can specify the drive dictionary path and whether to use a 9# virtual drive through command -line arguments . 10 # 11 # Features : 130 Report 32 33 # Defining demo parameters 34 target_positions = [100000 , 200000 , 0] 35 36 # Set the operation mode 37 mc. motion . set_operation_mode ( OperationMode . PROFILE_POSITION ) 38 print (" Operation mode set : Profile Position .") 39 40 # Enable the motor 41 mc. motion . motor_enable () 42 print (" Starting movements .") 43 44 # Execute position changes 45 for current_target in target_positions: 46 start_time = time .time () # start time for position_demo 47 48 mc. motion . move_to_position ( current_target , blocking =True , error =5 , timeout =None , interval =0.2) 49 actual_position = mc . motion . get_actual_position () 50 51 end_time = time .time () # End time for move position 52 53 print (f" Actual position : { actual_position }") 54 print (f’Time for the position_change : { end_time - start_time :.2f } seconds’)# Print the duration 55 56 # Disable the motor 57 mc. motion . motor_disable () 58 59 def main(args) -> None: 60 """ Main function to demonstrate position motion control . """ 61 62 # Connect Servo with MotionController instance 63 mc = MotionController() 64 virtual_drive_used = args . virtual 65 driver_connection ( virtual_drive_used , args , mc , user_selection =0) 66 67 # Position demo 68 print (’Demo POSITION ’) 69 time . sleep (3) 70 position_demo (mc) 71 72 # Disconnect the drive 73 mc. communication . disconnect () 74 print ("The drive has been disconnected .") 75 76 77 if __name__ == ’__main__ ’: 78 logging . basicConfig ( level = logging . ERROR ) # set the logging level to ERROR 79 args = setup_command () # parse command -line arguments 80 main(args) # execute the main function Servo drives implementation for robot’s motor control 131 H.6 program_velocity_keys.py Listing 18: program_velocity_keys.py 1#################################################################### 2# Velocity commands through the keyboard example 3# 4# This script demonstrates how to set up a thread to listen to user 5# commands through the computer keyboard . 6# 7# Features : 8# - Provide user controls for increasing or decreasing velocity . 9# - Display real - time velocity values . 10 # - Shutdown program on user input . 11 # 12 #################################################################### 13 14 import keyboard 15 import threading 16 import time 17 18 # Global variables 19 current_velocity = 0.0 # current velocity 20 running = True # control variable to manage the program execution 21 22 def keyboard_listener(): 23 """ Listen for keyboard inputs to modify the velocity target . """ 24 25 global current_velocity , running 26 27 # Print control instructions 28 print (" Controlls :\n" 29 "1: Increase velocity (+1 rev /s)\n" 30 "2: Reduce velocity (-1 rev /s)\n" 31 "Q: Stop and shutdown program \n") 32 33 # Continuously listen for key presses 34 while running: 35 try: 36 if keyboard . is_pressed (’1’): 37 current_velocity += 1.0 38 print (f" Increased target velocity : { current_velocity :.2 f } rev/s") 39 time . sleep (0.2) # prevent rapid increments 40 elif keyboard . is_pressed ( ’2’): 41 current_velocity -= 1.0 42 print (f" Reduced target velocity : { current_velocity :.2 f} rev/s") 43 time . sleep (0.2) # prevent rapid increments 44 elif keyboard . is_pressed ( ’q’): 45 print (" Shutting down ... ") 46 running = False 47 except Exception as e: 48 print (f" Keyboard error : {e}") 49 132 Report 50 def main (): 51 """ Main function to demonstrate velocity control via keyboard inputs . """ 52 53 global running 54 55 # Create a thread to listen for keyboard inputs 56 listener_thread = threading . Thread ( target = keyboard_listener ) 57 listener_thread . start () 58 59 # Main loop to display current velocity values 60 try: 61 while running: 62 time . sleep (1) # update display every second 63 print (f" Current velocity : { current_velocity :.2 f}") 64 except KeyboardInterrupt: 65 # Handle manual interruption ( Ctrl +C) 66 running = False 67 print (" Program interrupted manually .") 68 69 # Wait for the listener thread to finish before exiting 70 listener_thread . join () 71 print (" Programa finalizado .") 72 73 if __name__ == " __main__ ": 74 main () H.7 program_velocity_keys_drive.py Listing 19: program_velocity_keys_drive.py 1#################################################################### 2# Motor velocity control through servo drive 3# 4# This script demonstrates real - time velocity control of a servo drive 5# using keyboard inputs . Users can adjust the target velocity 6# dynamically and observe the actual velocity feedback . It ensures safe 7# motor operation and controlled shutdown when terminating program . 8# 9# Features : 10 # - Adjust target velocity using keyboard inputs . 11 # - Real - time feedback on the motor ’s actual velocity . 12 # - Ensure safe motor stop and program termination on user request . 13 # 14 #################################################################### 15 16 import keyboard 17 import threading 18 import time 19 import logging 20 import argparse 21 from ingeniamotion import MotionController 22 from ingeniamotion . enums import OperationMode 23 from ingenialink . exceptions import ILError 24 from driver_connection import driver_connection Servo drives implementation for robot’s motor control 133 25 26 # Variables globales para controlar velocidad 27 current_velocity = 0.0 28 target_velocity = 0.0 29 running = True 30 31 def setup_command (): 32 """ Command - line arguments for the motor control program """ 33 34 parser = argparse . ArgumentParser ( description =’Motor velocity control ’) 35 parser . add_argument (’ -- dictionary_path ’, default=’eve - xcr - e_eoe_1 .8.1. xdf ’,help=’Path to drive dictionary ’) 36 parser . add_argument (’--virtual ’, default = False , action = ’store_true ’, help=’Use virtual drive ’) 37 return parser . parse_args () 38 39 def keyboard_listener(): 40 """ Function to listen for keyboard inputs to modify the velocity target . """ 41 42 global target_velocity , running 43 44 # Print control instructions 45 print (" Controlls :\n" 46 "1: Increase velocity (+1 rev /s)\n" 47 "2: Reduce velocity (-1 rev /s)\n" 48 "Q: Stop and shutdown program \n") 49 50 # Continuously listen for key presses 51 while running: 52 try: 53 if keyboard . is_pressed (’1’): 54 target_velocity += 1.0 55 print (f" Increased target velocity : { target_velocity :.2 f} rev/s") 56 time . sleep (0.2) # prevent rapid increments 57 elif keyboard . is_pressed ( ’2’): 58 target_velocity -= 1.0 59 print (f" Reduced target velocity : { target_velocity :.2 f} rev/s") 60 time . sleep (0.2) # prevent rapid increments 61 elif keyboard . is_pressed ( ’q’): 62 print (" Requesting safe stop ...") 63 running = False 64 except Exception as e: 65 print (f" Keyboard error : {e}") 66 67 def velocity_control_loop(mc): 68 """ Function to update motor velocity based on the target velocity . """ 69 70 global current_velocity , target_velocity , running 71 72 while running: 134 Report 73 try: 74 if current_velocity != target_velocity : 75 mc. motion . set_velocity ( target_velocity ) 76 current_velocity = target_velocity 77 print (f" Set velocity : { current_velocity :.2 f} rev/s") 78 79 # Feedback on the actual velocity 80 fbk_vel = mc . communication . get_register ("CL_VEL_FBK_VALUE") 81 print ("CL_VEL_FBK_VALUE", fbk_vel) 82 fbk_vel = mc . motion . get_actual_velocity ( servo = ’default’, axis =1) 83 print (" Actual velocity " , fbk_vel) 84 time . sleep (1) # update frequency 85 except ILError as e: 86 print (f" Error when adjusting velocity : {e}") 87 88 def safe_stop (mc): 89 """ Ensure the motor stops completely and in a controlled manner before exiting . """ 90 91 global current_velocity 92 93 mc. motion . set_velocity (0) 94 print (" Waiting for the motor to stop ... ") 95 mc. motion . wait_for_velocity (0) 96 print (" Motor stopped .") 97 98 def main(args): 99 """ Main function to set up and execute motor velocity control . """ 100 101 global running 102 103 # Connect Servo with MotionController instance 104 mc = MotionController() 105 user_selection = 1 # allow user to select interface 106 virtual_drive_used = args . virtual 107 driver_connection ( virtual_drive_used , args , mc , user_selection ) 108 109 # Set the operation mode 110 mc. motion . set_operation_mode ( OperationMode . PROFILE_VELOCITY ) 111 112 # Enable the motor 113 mc. motion . motor_enable () 114 print (" Configured operation mode : Profile Velocity .") 115 116 # Start threads for keyboard input and velocity control 117 keyboard_thread = threading . Thread ( target = keyboard_listener ) 118 control_thread = threading . Thread ( target = velocity_control_loop , args =(mc ,)) 119 keyboard_thread . start () 120 control_thread.start() 121 122 # Wait for the keyboard thread to finish (’q’ pressed ) 123 keyboard_thread . join () 124 Servo drives implementation for robot’s motor control 135 125 # Perform safe stop 126 safe_stop (mc ) 127 128 # Disable the motor and disconnect the drive 129 mc. motion . motor_disable () 130 mc. communication . disconnect () 131 print (" Driver disconnected and program terminated .") 132 133 if __name__ == ’__main__ ’: 134 logging . basicConfig ( level = logging . ERROR ) # set the logging level to ERROR 135 args = setup_command () # parse command -line arguments 136 main(args) # execute the main function H.8 driver_connection_ubuntu.py Listing 20: program_velocity_keys_drive_ubuntu.py 1############################################################### 2# Servo drive communication function 3# 4# This function provides functionalities allows to stablish 5# communication with the servo drive through EtherCAT using the 6# Ingeniamotion library . 7# It allows the user to specify the drive dictionary file and wether 8# to use a virtual or real drive . 9# 10 # Features : 11 # - Print interface list detected on the computer . 12 # - Allow user to select the interface if specified . 13 # - Connect to a servo drive ( real or virtual ). 14 # 15 ############################################################### 16 17 import os 18 19 def driver_connection ( virtual_drive_used , args , mc , user_selection ): 20 """ This function establishes the communication with the selected driver . """ 21 22 # Connect to a real drive 23 if not virtual_drive_used: 24 25 # Presenting the detected interface list 26 interface_list = mc. communication . get_interface_name_list () 27 if not interface_list: 28 print ("No interfaces detected . Ensure your network setup is correct.") 29 return 30 print (" List of interfaces :") 31 for index , interface in enumerate (interface_list): 32 print (f"{ index }: { interface }") 33 136 Report 34 # Choosing an interface 35 if user_selection == 0: 36 interface_index=1 37 else: 38 # Asking user to select an interface 39 while True: 40 try: 41 interface_index = int(input (" Enter the number of the interface you want to select : ")) 42 if 0 <= interface_index < len(interface_list): 43 break 44 else: 45 print (" Invalid selection . Please enter a number corresponding to an available interface .") 46 except ValueError : 47 print (" Invalid input . Please enter a valid number .") 48 slave_id =1 49 50 # Selecting the chosen interface 51 interface_selected = mc. communication . get_ifname_by_index ( interface_index) 52 print (" Interface selected :") 53 print (f"- Index interface : { interface_index }") 54 print (f"- Interface identifier : { interface_selected }") 55 print (f"- Interface name : { interface_list [ interface_index ]} ") 56 57 # Scanning interface for slaves 58 slave_id_list = mc . communication . scan_servos_ethercat ( interface_selected) 59 if not slave_id_list : 60 print (f"No slave detected on interface : { interface_list [ interface_index ]}") 61 return 62 else: 63 print (f" Found slaves : { slave_id_list }") 64 65 # Global path to the real drive dictionary file 66 global_path = "/ home / yeray / ws_Drivers / src / teleop_node / teleop_node /eve -xcr - e_eoe_1 .8.1. xdf " 67 68 # Verifying the file exists 69 if not os .path . exists ( global_path ): 70 raise FileNotFoundError(f"{ global_path } file does not exist ! ") 71 72 # Connect slave using selected interface 73 mc. communication . connect_servo_ethercat ( 74 interface_selected , 75 slave_id, 76 global_path 77 ) 78 print (" REAL drive is connected .") 79 80 # Connect to a virtual drive 81 else: Servo drives implementation for robot’s motor control 137 82 # Global path to the virtual drive dictionary file 83 global_path = "/ home / yeray / ws_Drivers / src / teleop_node / teleop_node / virtual_drive . xdf " 84 85 # Verifying the file exists 86 if not os .path . exists ( global_path ): 87 raise FileNotFoundError(f"{ global_path } file does not exist ! ") 88 89 # Connect to virtual slave 90 mc. communication . connect_servo_virtual ( 91 dict_path = global_path , 92 alias = ’default’, 93 port =1061 , 94 connection_timeout =1 , 95 servo_status_listener=False, 96 net_status_listener=False 97 ) 98 print (" VIRTUAL drive is connected .") H.9 program_velocity_keys_drive_ubuntu.py Listing 21: program_velocity_keys_drive_ubuntu.py 1#################################################################### 2# Motor velocity control through servo drive ( Ubuntu version ) 3# 4# This script demonstrates real - time velocity control of a servo drive 5# using keyboard inputs . Users can adjust the target velocity 6# dynamically and observe the actual velocity feedback . It ensures safe 7# motor operation and controlled shutdown when terminating program . 8# 9# Features : 10 # - Adjust target velocity using keyboard inputs . 11 # - Real - time feedback on the motor ’s actual velocity . 12 # - Ensure safe motor stop and program termination on user request . 13 # 14 #################################################################### 15 16 import keyboard 17 import threading 18 import time 19 import logging 20 import argparse 21 from ingeniamotion import MotionController 22 from ingeniamotion . enums import OperationMode 23 from ingenialink . exceptions import ILError 24 from driver_connection import driver_connection 25 26 # Variables globales para controlar velocidad 27 current_velocity = 0.0 28 target_velocity = 0.0 29 running = True 30 31 def setup_command (): 138 Report 32 """ Command - line arguments for the motor control program """ 33 34 parser = argparse . ArgumentParser ( description =’Motor velocity control ’) 35 parser . add_argument (’ -- dictionary_path ’, default=’eve - xcr - e_eoe_1 .8.1. xdf ’,help=’Path to drive dictionary ’) 36 parser . add_argument (’--virtual ’, default = False , action = ’store_true ’, help=’Use virtual drive ’) 37 return parser . parse_args () 38 39 def keyboard_listener(): 40 """ Function to listen for keyboard inputs to modify the velocity target . """ 41 42 global target_velocity , running 43 44 # Print control instructions 45 print (" Controlls :\n" 46 "1: Increase velocity (+1 rev /s)\n" 47 "2: Reduce velocity (-1 rev /s)\n" 48 "Q: Stop and shutdown program \n") 49 50 # Continuously listen for key presses 51 while running: 52 try: 53 if keyboard . is_pressed (’1’): 54 target_velocity += 1.0 55 print (f" Increased target velocity : { target_velocity :.2 f} rev/s") 56 time . sleep (0.2) # prevent rapid increments 57 elif keyboard . is_pressed ( ’2’): 58 target_velocity -= 1.0 59 print (f" Reduced target velocity : { target_velocity :.2 f} rev/s") 60 time . sleep (0.2) # prevent rapid increments 61 elif keyboard . is_pressed ( ’q’): 62 print (" Requesting safe stop ...") 63 running = False 64 except Exception as e: 65 print (f" Keyboard error : {e}") 66 67 def velocity_control_loop(mc): 68 """ Function to update motor velocity based on the target velocity . """ 69 70 global current_velocity , target_velocity , running 71 72 while running: 73 try: 74 if current_velocity != target_velocity : 75 mc. motion . set_velocity ( target_velocity ) 76 current_velocity = target_velocity 77 print (f" Set velocity : { current_velocity :.2 f} rev/s") 78 79 # Feedback on the actual velocity Servo drives implementation for robot’s motor control 139 80 fbk_vel = mc . communication . get_register ("CL_VEL_FBK_VALUE") 81 print ("CL_VEL_FBK_VALUE", fbk_vel) 82 fbk_vel = mc . motion . get_actual_velocity ( servo = ’default’, axis =1) 83 print (" Actual velocity " , fbk_vel) 84 time . sleep (1) # update frequency 85 except ILError as e: 86 print (f" Error when adjusting velocity : {e}") 87 88 def safe_stop (mc): 89 """ Ensure the motor stops completely and in a controlled manner before exiting . """ 90 91 global current_velocity 92 93 mc. motion . set_velocity (0) 94 print (" Waiting for the motor to stop ... ") 95 mc. motion . wait_for_velocity (0) 96 print (" Motor stopped .") 97 98 def main(args): 99 """ Main function to set up and execute motor velocity control . """ 100 101 global running 102 103 # Connect Servo with MotionController instance 104 mc = MotionController() 105 user_selection = 1 # allow user to select interface 106 virtual_drive_used = args . virtual 107 driver_connection ( virtual_drive_used , args , mc , user_selection ) 108 109 # Set the operation mode 110 mc. motion . set_operation_mode ( OperationMode . PROFILE_VELOCITY ) 111 112 # Enable the motor 113 mc. motion . motor_enable () 114 print (" Configured operation mode : Profile Velocity .") 115 116 # Start threads for keyboard input and velocity control 117 keyboard_thread = threading . Thread ( target = keyboard_listener ) 118 control_thread = threading . Thread ( target = velocity_control_loop , args =(mc ,)) 119 keyboard_thread . start () 120 control_thread.start() 121 122 # Wait for the keyboard thread to finish (’q’ pressed ) 123 keyboard_thread . join () 124 125 # Perform safe stop 126 safe_stop (mc ) 127 128 # Disable the motor and disconnect the drive 129 mc. motion . motor_disable () 130 mc. communication . disconnect () 131 print (" Driver disconnected and program terminated .")