14.01.2015 Views

Gemini GV6K and Gemini GT6K Programmer's Guide

Gemini GV6K and Gemini GT6K Programmer's Guide

Gemini GV6K and Gemini GT6K Programmer's Guide

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

p/n 88-019934-01 A<br />

Automation<br />

<strong>Gemini</strong> <strong>GV6K</strong> <strong>and</strong><br />

<strong>Gemini</strong> <strong>GT6K</strong><br />

<strong>Programmer's</strong> <strong>Guide</strong><br />

Effective: October 1, 2001


User Information<br />

WARNING<br />

! !<br />

Gem6K Series products are used to control electrical <strong>and</strong> mechanical<br />

components of motion control systems. You should test your motion<br />

system for safety under all potential conditions. Failure to do so can result<br />

in damage to equipment <strong>and</strong>/or serious injury to personnel.<br />

Gem6K Series products <strong>and</strong> the information in this user guide are the proprietary property of Parker Hannifin Corporation or its licensers, <strong>and</strong><br />

may not be copied, disclosed, or used for any purpose not expressly authorized by the owner thereof.<br />

Since Parker Hannifin constantly strives to improve all of its products, we reserve the right to change this user guide <strong>and</strong> software <strong>and</strong><br />

hardware mentioned therein at any time without notice.<br />

In no event will the provider of the equipment be liable for any incidental, consequential, or special damages of any kind or nature<br />

whatsoever, including but not limited to lost profits arising from or in any way connected with the use of the equipment or this user guide.<br />

© 2001, Parker Hannifin Corporation<br />

All Rights Reserved<br />

Motion Planner <strong>and</strong> Servo Tuner are trademarks of Parker Hannifin Corporation.<br />

Microsoft <strong>and</strong> MS-DOS are registered trademarks, <strong>and</strong> Windows, Visual Basic, <strong>and</strong> Visual C++ are trademarks of Microsoft Corporation.<br />

Technical Assistance Contact your local automation technology center (ATC) or distributor, or ...<br />

North America <strong>and</strong> Asia:<br />

Compumotor Division of Parker Hannifin<br />

5500 Business Park Drive<br />

Rohnert Park, CA 94928<br />

Telephone: (800) 358-9070 or (707) 584-7558<br />

Fax: (707) 584-3793<br />

FaxBack: (800) 936-6939 or (707) 586-8586<br />

e-mail: tech_help@cmotor.com<br />

Internet: http://www.compumotor.com<br />

Europe (non-German speaking):<br />

Parker Digiplan<br />

21 Balena Close<br />

Poole, Dorset<br />

Engl<strong>and</strong> BH17 7DX<br />

Telephone: +44 (0)1202 69 9000<br />

Fax: +44 (0)1202 69 5750<br />

Germany, A ustria, Switzerl<strong>and</strong>:<br />

HAUSER Elektronik GmbH<br />

Postfach: 77607-1720<br />

Robert-Bosch-Str. 22<br />

D-77656 Offenburg<br />

Telephone: +49 (0)781 509-0<br />

Fax: +49 (0)781 509-176<br />

Tech nical<br />

Support<br />

Automation<br />

E-mail: Tech_Help@cmotor.com


CONTENTS<br />

OVERVIEW.................................................................. I<br />

About This Manual......................................................i<br />

Organization of This Manual...................................i<br />

Programming Examples..........................................ii<br />

Reference Documentation.......................................ii<br />

Assumptions of Technical Experience....................ii<br />

Before You Begin......................................................iii<br />

Install <strong>and</strong> Use Motion Planner .............................iii<br />

Technical Support......................................................iii<br />

PROGRAMMING FUNDAMENTALS ..................... 1<br />

Motion Planner Programming Environment............... 2<br />

Wizard-Based Programming................................... 2<br />

Native Code Programming ..................................... 3<br />

Comm<strong>and</strong> Syntax........................................................ 4<br />

Introduction ............................................................ 4<br />

Description of Syntax Letters <strong>and</strong> Symbols............ 5<br />

General <strong>Guide</strong>lines for Syntax................................ 6<br />

Comm<strong>and</strong> Value Substitutions ............................... 7<br />

Assignment <strong>and</strong> Comparison Operators ................. 7<br />

Programmable Inputs <strong>and</strong> Outputs Bit Patterns...... 9<br />

Creating Programs .................................................... 10<br />

Program Example ................................................. 10<br />

Storing Programs ...................................................... 11<br />

Memory Allocation............................................... 11<br />

Checking Memory Status...................................... 12<br />

Executing Programs (options) .................................. 13<br />

Creating <strong>and</strong> Executing a Set-up Program................ 13<br />

Program Security ...................................................... 14<br />

Controlling Execution of Programs <strong>and</strong> the Comm<strong>and</strong><br />

Buffer........................................................................ 14<br />

COMEXC (Continuous Comm<strong>and</strong> Execution)..... 14<br />

COMEXL (Save Comm<strong>and</strong> Buffer on Limit) ...... 15<br />

COMEXR (Effect of Pause/Continue Input) ........ 15<br />

COMEXS (Save Comm<strong>and</strong> Buffer on Stop) ........ 16<br />

Restricted Comm<strong>and</strong>s During Motion...................... 17<br />

Variables................................................................... 18<br />

Converting Between Binary <strong>and</strong> Numeric Variables<br />

.............................................................................. 18<br />

Using Numeric (VAR <strong>and</strong> VARI) Variables.......... 19<br />

Using Binary Variables......................................... 22<br />

Unconditional Looping <strong>and</strong> Branching................. 23<br />

Conditional Looping <strong>and</strong> Branching..................... 25<br />

Program Interrupts (ON Conditions) ........................ 29<br />

Error H<strong>and</strong>ling.......................................................... 30<br />

Enabling Error Checking ...................................... 31<br />

Defining the Error Program .................................. 31<br />

Canceling the Branch to the Error Program.......... 32<br />

Error Program Set-up Example............................. 34<br />

Non-Volatile Memory .............................................. 35<br />

System Performance..................................................35<br />

COMMUNICATION..................................................37<br />

Communication Options ...........................................38<br />

Motion Planner Communication Features.................38<br />

Ethernet Networking .................................................39<br />

Overview...............................................................39<br />

Networking <strong>Guide</strong>lines .........................................42<br />

Configuring the Gem6K for Ethernet<br />

Communication.....................................................43<br />

Networking with Other 6K or Gem6K Products<br />

(Peer-to-Peer) ........................................................46<br />

Networking with OPTO22 SNAP I/O...................48<br />

Networking with a DVT Vision System ...............50<br />

Networking with an Allen-Bradley SLC 5/05 PLC<br />

...............................................................................51<br />

Error Conditions....................................................54<br />

Serial Communication...............................................56<br />

Controlling Multiple Serial Ports ..........................56<br />

RS-232C Daisy-Chaining......................................57<br />

Daisy-Chaining <strong>and</strong> RP240s .................................60<br />

RS-485 Multi-Drop ...............................................60<br />

BASIC OPERATION SETUP....................................63<br />

Before You Begin .....................................................64<br />

Setup Parameters Discussed in this Chapter .........64<br />

Using a Setup Program..........................................65<br />

Resetting the Controller ........................................65<br />

Memory Allocation ...................................................65<br />

Drive Setup ...............................................................66<br />

Drive Stall Detection (stepper only)......................66<br />

Drive Resolution (stepper only) ............................66<br />

Disable Drive On Kill (servo only) .......................66<br />

Scaling.......................................................................67<br />

Units of Measure without Scaling.........................67<br />

What is Scaling....................................................67<br />

When Should I Define Scaling Factors ...............67<br />

Acceleration & Deceleration Scaling (SCLA).......68<br />

Velocity Scaling (SCLV)......Error! Bookmark not<br />

defined.<br />

Distance Scaling (SCLD <strong>and</strong> SCLMAS)......... Error!<br />

Bookmark not defined.<br />

Positioning Modes.....................................................71<br />

Preset Positioning Mode........................................72<br />

Continuous Positioning Mode...............................73<br />

End-of-Travel Limits ................................................77<br />

Homing (Using the Home Inputs) .............................79<br />

Encoder-Based Stepper Operation (stepper only) .....84<br />

Encoder Resolution ...............................................84<br />

Stall Detection & Kill-on-Stall..............................84<br />

Encoder Set Up Example ......................................84


Encoder Count/Capture Referencing.................... 85<br />

Tuning Procedures (servos only) .............................. 85<br />

Entering Load Settings ......................................... 85<br />

Position Mode Tuning .............................................. 85<br />

Position Mode Tuning Procedure ......................... 86<br />

Filter Adjustments .................................................... 87<br />

Target Zone Mode (move completion criteria for<br />

servos only)............................................................... 89<br />

Programmable Inputs <strong>and</strong> Outputs (onboard <strong>and</strong><br />

external inputs & outputs) ........................................ 90<br />

Programmable I/O Bit Patterns............................. 91<br />

Input Functions..................................................... 94<br />

Output Functions ................................................ 105<br />

Variable Arrays (teaching variable data)................ 110<br />

Basics of Teach-Data Applications..................... 110<br />

Summary of Related Gem6K Series Comm<strong>and</strong>s 112<br />

Teach-Data Application Example....................... 112<br />

PRODUCT CONTROL OPTIONS ........................ 115<br />

Safety Features ....................................................... 116<br />

Options Overview................................................... 116<br />

St<strong>and</strong>-Alone Interface Options ........................... 116<br />

Programmable Logic Controller ......................... 117<br />

Host Computer Interface .................................... 117<br />

Custom Graphical User Interfaces (GUIs).......... 117<br />

Programmable I/O Devices..................................... 118<br />

Programmable I/O Functions.............................. 118<br />

Thumbwheels ..................................................... 119<br />

PLCs ................................................................... 119<br />

PLC Scan Mode.................................................. 120<br />

RP240 Remote Operator Panel............................... 123<br />

Configuration...................................................... 123<br />

Operator Interface Features ................................ 124<br />

Using the Default Menus.................................... 125<br />

Joystick Control, Analog Inputs ............................. 130<br />

Joystick Control.................................................. 130<br />

Analog Input Interface......... Error! Bookmark not<br />

defined.<br />

Host Computer Interface ........................................ 133<br />

Graphical User Interface (GUI) Development Tools<br />

................................................................................ 134<br />

CUSTOM PROFILING ........................................... 135<br />

S-Curve Profiling.................................................... 136<br />

S-Curve Programming Requirements................. 136<br />

Determining the S-Curve Characteristics ........... 136<br />

Programming Example ....................................... 137<br />

Calculating Jerk .....Error! Bookmark not defined.<br />

Compiled Motion Profiling..................................... 139<br />

Compiled Following Profiles.............................. 142<br />

Dwells <strong>and</strong> Direction Changes ........................... 144<br />

Compiled Motion Versus On-The-Fly Motion... 145<br />

Related Comm<strong>and</strong>s............................................. 146<br />

Compiled Motion — Sample Application 1 ....... 147<br />

Compiled Motion — Sample Application 2 ....... 148<br />

Compiled Motion — Sample Application 3 ....... 151<br />

Compiled Motion — Sample Application 4 ....... 152<br />

On-the-Fly Motion (pre-emptive GOs).................... 155<br />

OTF Error Conditions......................................... 156<br />

On-The-Fly Motion — Sample Application....... 157<br />

Registration.............................................................159<br />

How to Set up a Registration Move ....................159<br />

Registration Move Accuracy (see also Registration<br />

Move Status below).............................................159<br />

Preventing Unwanted Registration Moves<br />

(methods).............................................................160<br />

Registration Move Status & Error H<strong>and</strong>ling.......160<br />

Registration — Sample Application 1 ................161<br />

Registration — Sample Application 2 .......... Error!<br />

Bookmark not defined.<br />

Registration — Sample Application 3 ................163<br />

Synchronizing Motion (GOWHEN <strong>and</strong> TRGFN<br />

operations)...............................................................163<br />

Conditional “GO”s (GOWHEN)............................163<br />

Trigger Functions (TRGFN) ................................166<br />

FOLLOWING ...........................................................167<br />

Ratio Following – Introduction...............................168<br />

What can be a master ........................................168<br />

Following Status (TFSF, TFS & FS Comm<strong>and</strong>s)<br />

............................................................................169<br />

Implementing Ratio Following ...............................170<br />

Ratio Following Setup Parameters......................170<br />

Follower vs. Master Move Profiles.....................175<br />

Performing Phase Shifts......................................178<br />

Geared Advance Following.................................180<br />

Summary of Ratio Following Comm<strong>and</strong>s...........181<br />

Master Cycle Concept.............................................182<br />

Master Cycle Comm<strong>and</strong>s....................................182<br />

Summary of Master Cycle <strong>and</strong> Wait Comm<strong>and</strong>s 185<br />

Technical Considerations for Following.................186<br />

Performance Considerations ...............................186<br />

Master Position Prediction ..................................187<br />

Master Position Filtering.....................................187<br />

Following Error...................................................188<br />

Maximum Velocity <strong>and</strong> Acceleration (Stepper<br />

Axes Only)..........................................................189<br />

Factors Affecting Following Accuracy...............189<br />

Preset vs. Continuous Following Moves.............191<br />

Master <strong>and</strong> Follower Distance Calculations........192<br />

Using Other Features with Following .................194<br />

Troubleshooting for Following (see also Chapter 8)<br />

................................................................................196<br />

Error Messages....................................................197<br />

Following Comm<strong>and</strong>s.............................................198<br />

MULTI-TASKING ...................................................201<br />

Introduction to Multi-Tasking.................................202<br />

Using Multi-Tasking to Run Programs ...............202<br />

Interaction Between Tasks ..................................206<br />

Tasks ...................................................................208<br />

How a “Kill” Works While Multi-Tasking .........209<br />

Using Gem6K Resources While Multi-Tasking .....210<br />

Associating Axes with Tasks ..............................210<br />

Sharing Common Resources Between Multiple<br />

Tasks ...................................................................211<br />

Locking Resources to a Specific Task ................211<br />

How Multi-tasking <strong>and</strong> the % Prefix Affect<br />

Comm<strong>and</strong>s <strong>and</strong> Responses..................................211<br />

Input <strong>and</strong> Output Functions <strong>and</strong> Multi-tasking ...213


Multi-Tasking Performance Issues ......................... 214<br />

When is a Task Active ...................................... 214<br />

Task Swapping.................................................... 214<br />

Task Execution Speed......................................... 215<br />

TROUBLESHOOTING ........................................... 217<br />

Troubleshooting Basics........................................... 218<br />

Solutions to Common Problems ............................. 218<br />

Program Debug Tools............................................. 221<br />

Status Comm<strong>and</strong>s ............................................... 222<br />

Error Messages ................................................... 229<br />

Trace Mode......................................................... 232<br />

Single-Step Mode ............................................... 234<br />

Break Points........................................................ 235<br />

Simulating I/O Activation................................... 235<br />

Simulating Analog Input Channel Voltages ....... 237<br />

Motion Planner’s Panel Gallery.......................... 237<br />

Technical Support................................................... 238<br />

Operating System Upgrades ................................... 238<br />

Product Return Procedure....................................... 238<br />

INDEX ....................................................................... 239


OVERVIEW<br />

About This Manual<br />

This manual is designed to help you implement the Gem6K Series Product’s features in your<br />

application. Detailed feature descriptions are provided, including application scenarios <strong>and</strong><br />

programming examples. For details on each Gem6K comm<strong>and</strong>, refer to the Gem6K Series<br />

Comm<strong>and</strong> Reference.<br />

Organization of This Manual<br />

Chapter<br />

Chapter 1.<br />

Programming Fundamentals<br />

Chapter 2.<br />

Communication<br />

Chapter 3.<br />

Basic Operation Setup<br />

Chapter 4.<br />

Product Control Options<br />

Chapter 5.<br />

Custom Profiling<br />

Chapter 6.<br />

Following<br />

Chapter 7.<br />

Multi-Tasking<br />

Chapter 8.<br />

Troubleshooting<br />

Information<br />

Discussion of essential programming guidelines <strong>and</strong> st<strong>and</strong>ard<br />

programming features such as branching, variables, interrupts, error<br />

h<strong>and</strong>ling, etc.<br />

Communication considerations, such as using Motion Planner, alert<br />

event h<strong>and</strong>ling, communication server <strong>and</strong> fast status control, RS-232<br />

daisy-chains <strong>and</strong> RS-485 multi-drops, etc.<br />

General operation setup conditions, such as number of axes, scaling<br />

factors, feedback device setup, programmable input <strong>and</strong> output<br />

functions, end-of-travel limits, homing, etc.<br />

Considerations for implementing various product control methods,<br />

such as programmable I/O, a joystick, an RP240, custom GUI, etc.<br />

Descriptions of custom profiling features such as S-Curves, timed<br />

data streaming, compiled profiles, on-the-fly motion profiling,<br />

registration, <strong>and</strong> synchronized motion.<br />

Feature descriptions <strong>and</strong> application examples for using Following<br />

features.<br />

Feature descriptions <strong>and</strong> application examples for using multi-tasking<br />

in your application.<br />

Methods for isolating <strong>and</strong> resolving hardware <strong>and</strong> software problems.


Programming Examples<br />

Reference Documentation<br />

Programming examples are provided in this document to demonstrate how the Gem6K<br />

product's features may be implemented. These examples are somewhat generalized, due to<br />

the diverse nature of the family of Gem6K Series products <strong>and</strong> their application;<br />

consequently, some attributes, such as the I/O bit pattern referenced, may differ from those<br />

available with your particular Gem6K product.<br />

This document is intended to accompany the printed <strong>and</strong> online documents listed below, as<br />

part of the Gem6K product user documentation set.<br />

Reference Document<br />

Description<br />

INTERNET ACCESS:<br />

These documents are<br />

also available to view<br />

<strong>and</strong> print from our web<br />

site (www.compumotor.com).<br />

Gem6K Series Hardware Installation <strong>Guide</strong> Hardware-related information specific to the Gem6K<br />

Series product:<br />

• Product hardware specifications<br />

• Installation instructions<br />

• Troubleshooting procedures<br />

• Servo tuning instructions<br />

Gem6K Series Comm<strong>and</strong> Reference<br />

EVM32 Installation <strong>Guide</strong><br />

COM6SRVR Communications<br />

Motion Planner Online Help<br />

Detailed descriptions of all Gem6K Series Programming<br />

Language comm<strong>and</strong>s. Quick-reference tables are also<br />

provided.<br />

Specifications <strong>and</strong> installation instructions for the EVM32<br />

expansion I/O.<br />

The COM6SRVR is a 32-bit OLE automation server for adding<br />

Gem6K communication capability to your custom applications<br />

created with programming languages such as Visual Basic or<br />

Visual C++. This companion document includes descriptions<br />

of all methods <strong>and</strong> properties, <strong>and</strong> programming examples.<br />

Online instructional aids such as:<br />

• Tutorials<br />

• Introduction <strong>and</strong> tutorial for programming with Wizards<br />

• Context-sensitive help for Wizard-based programming<br />

• Documentation of programmer’s guide<br />

• Step-by-step programming coaches<br />

• Conceptual overviews<br />

• Advanced programming details<br />

• Sample programs<br />

• Documentation of the Gem6K Series comm<strong>and</strong><br />

language,<br />

including all comm<strong>and</strong> descriptions <strong>and</strong> the contents of<br />

the manual you are currently reading<br />

• Documentation of the Communications Server OLE<br />

automation server (facilitates communications between<br />

Gem6K <strong>and</strong> your custom Windows software)<br />

Assumptions of Technical Experience<br />

To effectively use the information in this manual, you should have a fundamental<br />

underst<strong>and</strong>ing of the following:<br />

• Electronics concepts, such as voltage, switches, current, etc.<br />

• Motion control concepts such as motion profiles, torque, velocity, distance, force, etc.<br />

• Programming skills in a high-level language such as C, C++, or BASIC is helpful<br />

• Ethernet communication protocol (if using the Ethernet port)<br />

• If you are new to the Gem6K Series Programming Language, we encourage you to<br />

use the Motion Planner Wizards Editor (version 4.2 or later for Gem6K support).<br />

ii<br />

Gem6K Series Programmer’s <strong>Guide</strong>


Before You Begin<br />

Install <strong>and</strong> Use Motion Planner<br />

Technical Support<br />

Before you begin to implement the Gem6K controller’s features in your application you<br />

should complete all the installation <strong>and</strong> test procedures provided in your Gem6K Series<br />

Hardware Installation <strong>Guide</strong>.<br />

Motion Planner is a Windows-based graphical interface that assists you with programming<br />

<strong>and</strong> tuning your Gem6K Series controller, as well as setting up your Compumotor drives. The<br />

Motion Planner CD-ROM is provided in your ship kit. The Motion Planner interface allows<br />

you to:<br />

• Create, edit, download, <strong>and</strong> upload programs.<br />

• Tune your servo system.<br />

• Test & debug programs <strong>and</strong> controller operation.<br />

Additional details are provided on page 2 <strong>and</strong> in the Motion Planner Help System.<br />

For solutions to your questions about implementing Gem6K product software features, first<br />

look in this manual. Other aspects of the product (comm<strong>and</strong> descriptions, hardware specs, I/O<br />

connections, graphical user interfaces, etc.) are discussed in the respective manuals or Online<br />

Help systems listed above in Reference Documentation (see page ii).<br />

If you cannot find the answer in this documentation, contact your local Automation<br />

Technology Center (ATC) or distributor for assistance.<br />

If you need to talk to our in-house application engineers, please contact us at the numbers<br />

listed on the inside cover of this manual. (The phone numbers are also provided when you<br />

issue the HELP comm<strong>and</strong> to the Gem6K controller.) NOTE: The BBS contains the latest<br />

software upgrades <strong>and</strong> late-breaking product documentation.<br />

FAX number for technical support;<br />

bulletin board service,#see BBS;<br />

software, update from BBS;<br />

BBS;<br />

Email support: tech_help@cmotor.com<br />

Overview<br />

iii


Programming Fundamentals<br />

1C HAPTER ONE<br />

Programming<br />

Fundamentals<br />

IN THIS CHAPTER<br />

This chapter is a guide to general Gem6K programming tasks. It is divided into these main topics:<br />

• Motion Planner programming environment ......................... 2 • Restricted comm<strong>and</strong>s during motion ............................ 17<br />

• Comm<strong>and</strong> syntax.................................................................. 4 • Using Variables ............................................................ 18<br />

• Creating programs................................................................ 10 • Program flow control.................................................... 23<br />

• Storing programs.................................................................. 10 • Program interrupts ........................................................ 29<br />

• Executing programs ............................................................. 13 • Error h<strong>and</strong>ling............................................................... 30<br />

• Creating <strong>and</strong> executing a set-up program ............................. 13 • Non-volatile memory.................................................... 35<br />

• Program Security.................................................................. 14 • System performance considerations.............................. 35<br />

• Controlling execution – programs & comm<strong>and</strong> buffer......... 14


Motion Planner Programming Environment<br />

Wizard-Based Programming<br />

Every Gem6K Series controller is shipped with Motion Planner, a free Windows-based<br />

programming tool designed to simplify your programming efforts. The Motion Planner CD-<br />

ROM is provided in your ship kit. Updates may be downloaded, free of charge, from the<br />

compumotor.com web site.<br />

Motion Planner supports two programming paradigms: Wizard-based programming, <strong>and</strong> Native<br />

Code programming (working directly with the Gem6K programming language).<br />

Motion Planner includes the Wizard Editor, which is intended to be your primary program<br />

development environment for the Gem6K. (version 4.2 or later)<br />

The Wizard Editor makes programming easy, eliminates the need to learn the programming<br />

language <strong>and</strong> frees you from concerning yourself with syntax errors.<br />

• A Start Wizard guides you through creating your program structure <strong>and</strong> configuring your<br />

Gem6K (drives, feedback, I/O, servo tuning, etc.).<br />

• Additional wizards guide you through all other programming tasks, such as creating<br />

motion profiles, I/O h<strong>and</strong>ling, error h<strong>and</strong>ling, program logic <strong>and</strong> branching, adding subprograms,<br />

etc.<br />

NOTE: All programming features that can be implemented with native code (in a textbased<br />

Program Editor) can also be accomplished in the Wizard Editor.<br />

• The Tag Name Dictionary allows you to label variables, axes, <strong>and</strong> I/O so that you can<br />

program in terms that are relevant to your machine.<br />

• If you have existing programs in an Editor, you can easily include them into the Wizard<br />

editor (using the Native Code wizard), so you don’t have to rewrite your code.<br />

• The Wizard Editor also includes interactive debug tools (break points, trace mode) <strong>and</strong> a<br />

status window to help you test <strong>and</strong> debug your application.<br />

• Context-sensitive help is always available – just click the Help button or press the F1 key.<br />

How to get started:<br />

1. Install Motion Planner.<br />

2. Launch Motion Planner <strong>and</strong> select your Gem6K product. Motion Planner opens a new<br />

Wizard Editor file.<br />

3. When prompted to see an introduction <strong>and</strong> tutorial, click Yes. This will help you<br />

underst<strong>and</strong> the basic features of the Wizard Editor <strong>and</strong> the programming process.<br />

2 Gem6K Series Programmer’s <strong>Guide</strong>


Native Code Programming<br />

As an alternative to using the Wizard Editor, you may program directly with the Gem6K<br />

Comm<strong>and</strong> Language (“Native Code”). Motion Planner has several tools to help you:<br />

ACCESSING THE TOOLS: These tools are exposed when you first launch Motion<br />

Planner.<br />

• Program Editor: This is your primary interface for programming with the Gem6K<br />

Comm<strong>and</strong> Language.<br />

• Terminal Emulator: This is your primary communications interface to send comm<strong>and</strong>s<br />

directly to the Gem6K.<br />

• Servo Tuner: This graphical tuning utility helps you visually tune your servo axes. Then<br />

you can copy the resulting gains into your program in the Program Editor. NOTE: Before<br />

attempting motion, be sure to tune your axes. Tuning guidelines are provide on page<br />

• Motion Panel: This feature allows definition of quick comm<strong>and</strong> buttons <strong>and</strong> other useful<br />

debugging <strong>and</strong> functional tools to assist in programming your Gem6K.<br />

• Online Help: While you are programming in Motion Planner’s Editor, Terminal or Servo<br />

Tuner, you have immediate access to all comm<strong>and</strong> descriptions (the contents of the<br />

Gem6K Series Comm<strong>and</strong> Reference, as well as the contents to this Programmer’s <strong>Guide</strong>).<br />

To access the comm<strong>and</strong> descriptions, click on the Help menu <strong>and</strong> select Contents; from<br />

there you can browse the “Gem6K Comm<strong>and</strong> Language” or you can search for the<br />

comm<strong>and</strong> or a topic in the Index tab.<br />

The rest of the contents in this manual are directed toward the native code programmer. If you<br />

are new to the Gem6K Series Programming Language, be sure to read Chapter 1 (Programming<br />

Fundamentals) thoroughly. Then proceed to the relevant chapters for the features you need for<br />

your programs.<br />

NOTE: If you later decide to use the Wizards Editor, you can copy code from the Program<br />

Editor <strong>and</strong> paste it into Native Code objects in the Wizard program tree.<br />

TIP: For complex programming tasks, like setup programming, error programming, Following<br />

profile development, etc., you can use the relevant wizard in the Wizards Editor, then copy the<br />

generated code from the Code Viewer <strong>and</strong> paste it into a Program Editor file.<br />

Chapter 1. Programming Fundamentals 3


Comm<strong>and</strong> Syntax<br />

Introduction<br />

Sample program, as viewed in an editor:<br />

; *********************************************************<br />

; This is a program that executes a trapezoidal motion<br />

; profile on axes 1 <strong>and</strong> 2<br />

; *********************************************************<br />

DEL motion ; (a precaution) Delete program called<br />

"motion"<br />

DEF motion ; Begin definition of program called "motion"<br />

DRIVE1 ; Enable drive<br />

MC0<br />

; Set position mode to preset<br />

A20<br />

; Set accel to 20 units/sec/sec<br />

V8<br />

; Set velocity to 8 units/sec<br />

D100000 ; Set distance to 100,000 counts<br />

; Execute motion on axes 1 <strong>and</strong> 2<br />

END<br />

; End definition of program called "motion"<br />

DEL motion<br />

DRIVE 1<br />

Text field<br />

Comm<strong>and</strong> name<br />

Binary data field<br />

Comm<strong>and</strong> name<br />

The Gem6K programming language accommodates a wide range of needs by providing basic<br />

motion control building blocks, as well as sophisticated motion <strong>and</strong> program flow constructs.<br />

The language comprises simple ASCII mnemonic comm<strong>and</strong>s, with each comm<strong>and</strong> separated<br />

by a comm<strong>and</strong> delimiter (carriage return, colon, or line feed). The comm<strong>and</strong> delimiter signals<br />

the Gem6K product that a comm<strong>and</strong> is ready for processing.<br />

Upon receiving a comm<strong>and</strong> followed by a comm<strong>and</strong> delimiter, the Gem6K controller places<br />

the comm<strong>and</strong> in its internal comm<strong>and</strong> buffer, or queue. Here the comm<strong>and</strong> is executed in the<br />

order in which it is received. To make the comm<strong>and</strong> execute immediately, place an<br />

exclamation point (!) in front of it (e.g., The TAS comm<strong>and</strong> will be executed after all<br />

comm<strong>and</strong>s ahead of it in the comm<strong>and</strong> buffer are executed; but !TAS will execute before any<br />

other comm<strong>and</strong>s in the comm<strong>and</strong> buffer).<br />

Spaces <strong>and</strong> tabs within a comm<strong>and</strong> are processed as neutral characters. Comments can be<br />

specified with the semicolon (;) character — all characters following the semicolon <strong>and</strong><br />

before the comm<strong>and</strong> delimiter are considered program comments.<br />

Some comm<strong>and</strong>s contain one or more data fields in which you enter numeric or binary values<br />

or text:<br />

• Numeric data fields. For example, A20,10 is an acceleration (A) comm<strong>and</strong> that sets the<br />

acceleration to 20 units/sec 2 .<br />

• Binary fields. For example, DRIVE1 is a drive enable (DRIVE) comm<strong>and</strong> that enables<br />

the drive.<br />

• Text fields. For example, STARTPpowrup is a startup program assignment (STARTP)<br />

comm<strong>and</strong> that assigns the program called “powrup” as the startup program to be<br />

executed automatically when the Gem6K product is power up or reset.<br />

• To check what the data field settings are for a particular comm<strong>and</strong>, simply type in the<br />

comm<strong>and</strong> without the data fields. The Gem6K will display the comm<strong>and</strong> settings. For<br />

example, after executing the A20, noted above, you could type in the A comm<strong>and</strong> by<br />

itself <strong>and</strong> the Gem6K controller would respond with A20.<br />

Some comm<strong>and</strong>s contain no data fields:<br />

• Status Comm<strong>and</strong>s. For example, TASF responds by displaying a list of status conditions<br />

for each axis.<br />

• Reset<br />

These are comm<strong>and</strong> line comments, comprising a semi-colon <strong>and</strong> text.<br />

The comments are separated from the comm<strong>and</strong> by a tab.<br />

A carriage return is placed at the end of each comm<strong>and</strong> line.<br />

; *********************************************************<br />

; This is a program that executes a trapezoidal motion<br />

; profile on axes 1 <strong>and</strong> 2<br />

; *********************************************************<br />

DEL motion ; (a precaution) Delete program called "motion"<br />

DEF motion ; Begin definition of program called "motion"<br />

DRIVE1<br />

; Enable drives<br />

MC0<br />

; Set position mode to preset<br />

A20<br />

; Set accel to 20 units/sec/sec<br />

V8<br />

; Set velocity to 8 units/sec<br />

D100000<br />

; Set distance to 100,000 counts<br />

GO<br />

; Execute motion<br />

END<br />

; End definition of program called "motion"<br />

4 Gem6K Series Programmer’s <strong>Guide</strong>


Description of Syntax Letters <strong>and</strong> Symbols<br />

The comm<strong>and</strong> descriptions provided within the Gem6K Series Comm<strong>and</strong> Reference use alphabetic letters <strong>and</strong> ASCII<br />

symbols within the Syntax description to represent different parameter requirements (see INEN example below).<br />

INEN<br />

Input Enable<br />

Type Inputs; Program Debug Tools<br />

Syntax INEN...<br />

Units d = Ø, 1, E, or X<br />

Range Ø = off, 1 = on, E = enable, X = don't change<br />

Default E<br />

Response INEN: *INENEEEE_EEEE_EEEE_EEEE_E<br />

See Also [ IN ], INFNC, INLVL, INPLC, INSTW, TIN, TIO<br />

Product Rev<br />

Gem6K 5.0<br />

Letter/Symbol<br />

Description<br />

a .......... Represents an axis specifier.<br />

B .......... Represents the number of the product's I/O brick. External I/O bricks are represented by numbers 1 through n (to connect<br />

external I/O bricks, refer to your product's Installation <strong>Guide</strong>). On-board I/O are address at brick location zero (Ø). If the<br />

brick identifier is omitted from the comm<strong>and</strong>, the controller assumes the comm<strong>and</strong> is supposed to affect the onboard I/O.<br />

b *......... Represents the values 1, 0, X or x; does not require field separator between values.<br />

c .......... Represents a character (A to Z, or a to z)<br />

d .......... Represents the values 1, 0, X or x, E or e ; does not require field separator between values. E or e enables a specific<br />

comm<strong>and</strong> field. X or x leaves the specific comm<strong>and</strong> field unchanged or ignored. In the ANIEN comm<strong>and</strong>, the “d” symbol<br />

may also represent a real numeric value.<br />

i .......... Represents a numeric value that cannot contain a decimal point (integer values only). The numeric range varies by<br />

comm<strong>and</strong>. Field separator required.<br />

r .......... Represents a numeric value that may contain a decimal point, but is not required to have a decimal point. The numeric<br />

range varies by comm<strong>and</strong>. Field separator required.<br />

t .......... Represents a string of alpha numeric characters from 1 to 6 characters in length. The string must start with a alpha<br />

character.<br />

! .......... Represents an immediate comm<strong>and</strong>. Changes a buffered comm<strong>and</strong> to an immediate comm<strong>and</strong>. Immediate comm<strong>and</strong>s<br />

are processed immediately, even before previously entered buffered comm<strong>and</strong>s.<br />

% .......... (Multitasking Only) Represents a task identifier. To address the comm<strong>and</strong> to a specific task, prefix the comm<strong>and</strong> with “i%”,<br />

where “i” is the task number. For example, the 4%CUT comm<strong>and</strong> uses task #4 to execute the program called “CUT”.<br />

, .......... (comma) Represents a field separator. Comm<strong>and</strong>s with the symbol r or i in their Syntax description require field<br />

separators. Comm<strong>and</strong>s with the symbol b or d in their Syntax description do not require field separators (but they may be<br />

included). See General <strong>Guide</strong>lines table below.<br />

@ .......... Represents a global specifier, where only one field need be entered. Applicable to all comm<strong>and</strong>s with multiple comm<strong>and</strong><br />

fields.<br />

< > ...... Indicates that the item contained within the < > is optional, not required by that comm<strong>and</strong>.<br />

NOTE: Do not confuse with , , <strong>and</strong> , which refer to the ASCII characters corresponding to a carriage<br />

return, space, <strong>and</strong> line feed, respectively.<br />

[ ] ...... Indicates that the comm<strong>and</strong> between the [ ] must be used in conjunction with another comm<strong>and</strong>, <strong>and</strong> cannot be used<br />

by itself.<br />

* The ASCII character b can also be used within a comm<strong>and</strong> to precede a binary number. When the b is used in this context, it is not to be<br />

replaced with a 0, 1, X, or x. Examples are assignments such as VARB1=b10001, <strong>and</strong> comparisons such as IF(3IN=b1001X1).<br />

Order of Precedence for Comm<strong>and</strong> Prefix Characters (from left to right):<br />

<br />

1 st : Immediate<br />

2 nd : Task number<br />

3 rd : Apply to all axes or I/O bricks<br />

3 rd : Axis number<br />

3 rd : I/O brick number<br />

Chapter 1. Programming Fundamentals 5


General <strong>Guide</strong>lines for Syntax<br />

<strong>Guide</strong>line Topic <strong>Guide</strong>line Examples<br />

Neutral Characters<br />

• Space ()<br />

• Tab ()<br />

Comm<strong>and</strong> Delimiters:<br />

• Carriage rtn ()<br />

• Line feed ()<br />

• Colon (:)<br />

Case Sensitivity<br />

Comment Delimiter (;)<br />

Using neutral characters anywhere within a<br />

comm<strong>and</strong> will not affect the comm<strong>and</strong>.<br />

(In the examples on the right, a space is<br />

represented by , a tab is ), <strong>and</strong> a<br />

carriage return is )<br />

All comm<strong>and</strong>s must be separated by a<br />

comm<strong>and</strong> delimiter. A carriage return is the<br />

most commonly used delimiter. To use a line<br />

in a live terminal emulator session, press<br />

ctrl/J. The colon (:) delimiter allows you to<br />

place multiple comm<strong>and</strong>s on one line of code,<br />

but only if you add it in the program editor (not<br />

during a live terminal emulator session).<br />

There is no case sensitivity. Use upper or<br />

lower case letters within comm<strong>and</strong>s.<br />

All text between a comment delimiter <strong>and</strong> a<br />

comm<strong>and</strong> delimiter is considered program<br />

comments.<br />

Set velocity to 10 rps:<br />

V10 <br />

Add a comment to the comm<strong>and</strong>:<br />

V 10 ;set velocity <br />

Set acceleration to 10 rev/sec/sec:<br />

A 10<br />

A 10<br />

A 10: V 25: D 25000: GO<br />

Initiate motion<br />

GO<br />

go<br />

Add a comment to the comm<strong>and</strong>:<br />

V10 ;set velocity<br />

Field Separator (,)<br />

Comm<strong>and</strong>s with the symbol r or i in their<br />

Syntax description require field separators.<br />

INSGLP EXAMPLE<br />

Global Comm<strong>and</strong><br />

Identifier (@)<br />

When you wish to set the comm<strong>and</strong> value<br />

equal on all axes, add the @ symbol at the<br />

beginning of the comm<strong>and</strong> (enter only the<br />

value for one comm<strong>and</strong> field).<br />

Check the status of all digital outputs (onboard, <strong>and</strong><br />

on external I/O bricks):<br />

@OUT<br />

Bit Select Operator (.)<br />

Left-to-right Math<br />

Binary <strong>and</strong> hexadecimal<br />

values<br />

Multi-tasking Task<br />

Identifier (%)<br />

The bit select operator allows you to affect<br />

one or more binary bits without having to enter<br />

all the preceding bits in the comm<strong>and</strong>.<br />

Syntax for setup comm<strong>and</strong>s:<br />

[comm<strong>and</strong> name].[bit #]-[binary value]<br />

Syntax for conditional expressions:<br />

[comm<strong>and</strong> name].[bit #]=[binary value]<br />

All mathematical operations assume<br />

left-to-right precedence.<br />

When making assignments with or<br />

comparisons against binary or hexadecimal<br />

values, you must precede the binary value<br />

with the letter “b” or “B”, <strong>and</strong> the hex value<br />

with “h” or “H”. In the binary syntax, an “x”<br />

simply means the status of that bit is ignored.<br />

Use the % comm<strong>and</strong> prefix to identify the<br />

comm<strong>and</strong> with a specific task.<br />

Enable error-checking bit #9:<br />

ERROR.9-1<br />

Enable error-check bits #9-12:<br />

ERROR.9-1,1,1,1<br />

IF statement based on value of axis status bit #12:<br />

IF(AS.12=b1)<br />

VAR1=5+3*2<br />

Result: Variable 1 is assigned the value of<br />

16 (8*2), not 11 (5+6).<br />

Binary: IF(IN=b1x01)<br />

Hexadecimal: IF(IN=h7F)<br />

Launch the “move1” program in Task 1:<br />

1%move1<br />

Check the error status for Task 3:<br />

3%TER<br />

Check the system status for Task 3:<br />

3%TSS<br />

NOTE: The comm<strong>and</strong> line is limited to 100 characters (excluding spaces).<br />

6 Gem6K Series Programmer’s <strong>Guide</strong>


Comm<strong>and</strong> Value Substitutions<br />

Many comm<strong>and</strong>s can substitute one or more of its comm<strong>and</strong> field values with one of these<br />

substitution items (demonstrated in the programming example below):<br />

VAR..........Places current value of the numeric variable in the corresponding comm<strong>and</strong> field.<br />

VARB .......Uses the value of the binary variable to establish all the comm<strong>and</strong> fields.<br />

VARI .......Places current value of the integer variable in the corresponding comm<strong>and</strong> field.<br />

READ .......Information is requested at the time the comm<strong>and</strong> is executed.<br />

DREAD .....Reads the RP240's numeric keypad into the corresponding comm<strong>and</strong> field.<br />

DREADF...Reads the RP240's function keypad into the corresponding comm<strong>and</strong> field.<br />

TW ............Places the current value set on the thumbwheels in the corresponding comm<strong>and</strong> field.<br />

DAT..........Places the current value of the data program (DATP) in the corresponding comm<strong>and</strong> field.<br />

Programming Example: (NOTE: The substitution item must be enclosed in parentheses.)<br />

VAR1=15 ; Set variable 1 to 15<br />

A5,(VAR1),4,4 ; Set acceleration to 5,15,4,4 for axes 1-4, respectively<br />

VARB1=b1101XX1 ; Set binary variable 1 to 1101XX1 (bits 5 & 6 not affected)<br />

GO(VARB1)<br />

; Initiate motion on axes 1, 2 & 4 (value of binary<br />

; variable 1 makes it equivalent to the GO1101 comm<strong>and</strong>)<br />

OUT(VARB1) ; Turn on outputs 1, 2, 4, <strong>and</strong> 7<br />

VARS1="Enter Velocity" ; Set string variable 1 to the message "Enter Velocity"<br />

V2,(READ1) ; Set the velocity to 2 on axis 1. Read in the velocity for<br />

; axis 2, output variable string 1 as the prompting message<br />

; 1. Operator sees "ENTER VELOCITY" displayed on the screen.<br />

; 2. Operator enters velocity prefixed by !' (e.g., !'20).<br />

HOMV2,1,(TW1) ; Set homing velocity to 2 <strong>and</strong> 1 on axes 1 <strong>and</strong> 2, respectively.<br />

; Read in the home velocity for axis 3 from thumbwheel set 1<br />

HOMV2,1,(DAT1) ; Set homing velocity to 2 <strong>and</strong> 1 on axes 1 <strong>and</strong> 2, respectively.<br />

; Read home velocity for axis 3 from data program 1.<br />

VARI1=2*3 ; Set integer variable 1 to 6 (2 multiplied by 3)<br />

D(VARI2),,(VARI3) ; Set the distance of axis 1 equal to the value of<br />

; integer variable 2, <strong>and</strong> the distance of axis 3 equal to<br />

; the value of integer variable 3.<br />

RULE OF THUMB<br />

Not all of the comm<strong>and</strong>s allow comm<strong>and</strong> field substitutions. In general, comm<strong>and</strong>s with a<br />

binary comm<strong>and</strong> field ( in the comm<strong>and</strong> syntax) will accept the VARB substitution.<br />

Comm<strong>and</strong>s with a real or integer comm<strong>and</strong> field ( or in the comm<strong>and</strong> syntax) will<br />

accept VAR, VARI, READ, DREAD, DREADF, TW or DAT.<br />

Assignment <strong>and</strong> Comparison Operators<br />

Comparison <strong>and</strong> assignment operators are used in comm<strong>and</strong> arguments for various functions<br />

such as variable assignments, conditional branches, wait statements, conditional GOs, etc.<br />

Some examples are listed below:<br />

• Assign to numeric variable #6 the value of the encoder position on axis #3 (uses the PE<br />

operator): VAR6=3PE<br />

• Wait until onboard inputs #3 & #6 become active (uses the IN operator):<br />

WAIT(IN=bxx1xx1)<br />

• Continue until the value of numeric variable #2 is less than 36: UNTIL(VAR2


* denotes operators that<br />

have a correlated status<br />

display comm<strong>and</strong>.<br />

(e.g., To see a full-text<br />

description of each axis<br />

status bit accessed with<br />

the AS operator, send<br />

the TASF comm<strong>and</strong> to<br />

the Gem6K controller.)<br />

See page 222.<br />

A ...................Acceleration<br />

AD.................Deceleration<br />

ANI ..............Voltage at the analog inputs on an expansion I/O brick (see page 91 for bit patterns) *<br />

ANO ..............Voltage at the analog outputs on an expansion I/O brick (see page 91 for bit patterns) *<br />

AS.................Axis status *<br />

ASX ..............Extended axis status (additional axis status items) *<br />

D ...................Distance<br />

DAC ..............Digital-to-analog converter (output voltage) value *<br />

DAT ..............Data program number<br />

DKEY............Value of RP240 Key<br />

DPTR............Data pointer location *<br />

DREAD .........Data from the numeric keypad on the RP240<br />

DREADF .......Data from the function keypad on the RP240<br />

ER.................Error status *<br />

FB.................Position of current selected feedback sources *<br />

FS.................Following status *<br />

IN.................Input status (input bit patterns provided on page 91) *<br />

INO ..............“Other” input status (ENABLE input reported with bit #6) *<br />

LIM ..............Limit status (end-of-travel limits <strong>and</strong> home limits) *<br />

MOV ..............Axis moving status<br />

NMCY............Current master cycle number *<br />

OUT ..............Output status (output bit patterns provided on page 91) *<br />

PANI............Position of analog input, at 205 counts/volts unless otherwise scaled (servo axes) *<br />

PC.................Comm<strong>and</strong>ed position *<br />

PCC ..............Captured comm<strong>and</strong>ed position *<br />

PCE ..............Captured encoder position *<br />

PCME............Captured master encoder position *<br />

PCMS............Captured master cycle position *<br />

PER ..............Position error (servo axes only) *<br />

PME ..............Current master encoder position *<br />

PMAS............Current master cycle position *<br />

PE.................Position of encoder *<br />

PSHF............Net position shift since constant Following ratio *<br />

PSLV............Current comm<strong>and</strong>ed position of the slave axis *<br />

READ............Read a numeric value to a numeric variable (VAR)<br />

SC.................Controller status *<br />

SCAN............Runtime of the last scanned PLC program *<br />

SEG ..............Number of segments available in Compiled Profile memory *<br />

SS.................System status *<br />

SWAP............Current active status of tasks *<br />

TASK............Number of the controlling task *<br />

TIM ..............Timer value *<br />

TRIG............Trigger interrupt status *<br />

TW.................Thumbwheel data read<br />

US.................User status *<br />

V ...................Velocity (programmed)<br />

VAR ..............Numeric variable substitution<br />

VARI............Integer variable substitution<br />

VARB............Binary variable substitution<br />

VEL ..............Velocity (comm<strong>and</strong>ed by the controller) *<br />

VELA............Velocity (actual, as measured by a position feedback device) *<br />

VMAS............Current velocity of the master axis *<br />

8 Gem6K Series Programmer’s <strong>Guide</strong>


Bit Select Operator<br />

Binary <strong>and</strong> Hex<br />

Values<br />

Related Operator<br />

Symbols<br />

The bit select operator (.) makes it easier to base a comm<strong>and</strong> argument on the condition of one<br />

specific status bit. For example, if you wish to base an IF statement on the condition that a<br />

user fault input is activated (error status bit #7 is a binary status bit that is “1” if a user fault<br />

occurred <strong>and</strong> “Ø” if it has not occurred), you could use this comm<strong>and</strong>: IF(ER=bxxxxxx1).<br />

Using a bit select operator, you could instead use this comm<strong>and</strong>: IF(ER.7=b1).<br />

Side Note: You can use a bit select operator to set a particular status bit (e.g., to turn on onboard<br />

programmable output #5, you would type the OUT.5-1 comm<strong>and</strong>; to enable error-checking bit<br />

#4 to check for drive faults, you would type the ERROR.4-1 comm<strong>and</strong>). . You can also check<br />

specific status bits (e.g., to check axis 2’s axis status bit #25 to see if a target zone timeout<br />

occurred, type the 2TAS.25 comm<strong>and</strong> <strong>and</strong> observe the response).<br />

When making assignments with or comparisons against binary or hexadecimal values, you must<br />

precede the binary value with the letter “b” or “B”, <strong>and</strong> the hex value with “h” or “H”.<br />

Examples: IF(IN=b1xØ1) <strong>and</strong> IF(IN=h7F). In the binary syntax, an “x” simply means<br />

the status of that bit is ignored. Refer also to Using Binary Variables (page 19).<br />

Comm<strong>and</strong> arguments include special operator symbols (e.g., +, /, &, ', >=, etc.) to perform<br />

bitwise, mathematical, relational, logical, <strong>and</strong> other special functions. These operators are<br />

described in detail, along with programming examples, at the beginning of the Comm<strong>and</strong><br />

Descriptions section of the Gem6K Series Comm<strong>and</strong> Reference.<br />

Programmable Inputs <strong>and</strong> Outputs Bit Patterns<br />

I/O pin outs,<br />

specifications, <strong>and</strong><br />

circuit drawings are<br />

provided in each<br />

Gem6K Series<br />

Hardware Installation<br />

<strong>Guide</strong>.<br />

The Gem6K product has programmable inputs <strong>and</strong> outputs. The total number of onboard inputs<br />

<strong>and</strong> outputs (trigger inputs, limit inputs, digital outputs) depends on the product. The total<br />

number of expansion inputs <strong>and</strong> outputs (analog inputs, digital inputs <strong>and</strong> digital outputs)<br />

depends on your configuration of expansion I/O bricks connected to the “EXPANSION I/O”<br />

connector.<br />

These programmable I/O are represented by binary bit patterns, <strong>and</strong> it is the bit pattern that you<br />

reference when programming <strong>and</strong> checking the status of specific inputs <strong>and</strong> outputs. The bit<br />

pattern is referenced in comm<strong>and</strong>s like WAIT(IN.4=b1), which means wait until onboard<br />

programmable input #4 (TRG-2B) becomes active. To ascertain your product’s I/O offering<br />

<strong>and</strong> bit patterns, refer to Chapter 3 (page 91).<br />

Chapter 1. Programming Fundamentals 9


Creating Programs<br />

Reminder:<br />

The Motion Planner Wizards interface makes programming easy, eliminates the need to<br />

learn the programming language <strong>and</strong> frees you from concerning yourself with syntax errors.<br />

A Start Wizard guides you through creating your program structure <strong>and</strong> configuring your<br />

Gem6K (drives, feedback, I/O, servo tuning, etc.). Additional wizards guide you through all<br />

other programming tasks, such as creating motion profiles, I/O h<strong>and</strong>ling, error h<strong>and</strong>ling,<br />

program logic <strong>and</strong> branching, etc. The Tag Name Dictionary allows you to label variables,<br />

axes, I/O so that you can program in terms that are relevant to your machine. If you have<br />

existing programs in an Editor, you can easily include them into the Wizard editor, so you<br />

don’t have to rewrite your code. For additional details about the Wizards programming<br />

interface, refer to page 2.<br />

A program is a series of comm<strong>and</strong>s. These comm<strong>and</strong>s are executed in the order in which they<br />

are programmed. Immediate comm<strong>and</strong>s (comm<strong>and</strong>s that begin with an exclamation point [!])<br />

cannot be stored in a program. Only buffered comm<strong>and</strong>s may be used in a program. Refer to<br />

the program example below.<br />

Debugging Programs:<br />

Refer to page 221 for<br />

methods to isolate <strong>and</strong><br />

resolve programming<br />

problems.<br />

A subroutine is defined the same as a program, but it is executed with an unconditional branch<br />

comm<strong>and</strong>, such as GOSUB, GOTO, or JUMP, from another program (see page 23 for details<br />

about unconditional branching). Subroutines can be nested up to 16 levels deep. NOTE: The<br />

Gem6K family does not support recursive calling of subroutines.<br />

Compiled profiles & PLC programs are defined like programs, using the DEF <strong>and</strong> END<br />

comm<strong>and</strong>s, but are compiled with the PCOMP comm<strong>and</strong> <strong>and</strong> executed with the PRUN<br />

comm<strong>and</strong> (PLC programs are usually launched in PLC Scan Mode with the SCANP<br />

comm<strong>and</strong>). Compiled profiles <strong>and</strong> PLC programs also affect a different part of the product's<br />

memory, called compiled memory. A compiled profile is an individual axis profile (a series of<br />

GOBUF comm<strong>and</strong>s). A compiled PLC program is a pre-compiled program that mimics PLC<br />

functionality by scanning through the I/O faster than in normal program execution. For<br />

information on compiled profiles, refer to page 139; <strong>and</strong> for information on PLC programs,<br />

refer to page 120.<br />

Program Example<br />

The illustration below identifies the elements that comprise the general structure of a program.<br />

Use DEF to<br />

begin<br />

defining the<br />

program.<br />

Contents of the<br />

program.<br />

Use END to<br />

finish defining<br />

the program.<br />

Use DEL to<br />

delete the<br />

program (a<br />

precaution).<br />

; *********************************************************<br />

; This is a program that executes a trapezoidal motion<br />

; profile on axes 1 <strong>and</strong> 2<br />

; *********************************************************<br />

DEL motion ; (a precaution) Delete program called "motion"<br />

DEF motion ; Begin definition of program called "motion"<br />

DRIVE1 ; Enable drives on axes 1 <strong>and</strong> 2<br />

MC0<br />

; Set position mode to preset<br />

A20<br />

; Set accel to 20 units/sec/sec<br />

V8<br />

; Set velocity to 8 units/sec, <strong>and</strong><br />

D100000<br />

; Set distance to 100,000 counts on axis 1, <strong>and</strong><br />

GO<br />

; Execute motion<br />

END<br />

; End definition of program called "motion"<br />

These are comm<strong>and</strong> line comments, comprising a semi-colon <strong>and</strong> text.<br />

The comments are separated from the comm<strong>and</strong> by a tab.<br />

A carriage return is placed at the end of each comm<strong>and</strong> line.<br />

10 Gem6K Series Programmer’s <strong>Guide</strong>


Storing Programs<br />

After a program or compiled program/profile is defined (DEF) or downloaded to the Gem6K<br />

controller, it is automatically stored in non-volatile memory (battery-backed RAM).<br />

Information on controlling memory allocation is provided below (see Memory Allocation).<br />

Memory Allocation<br />

Your controller's memory has two partitions: one for storing programs <strong>and</strong> one for storing<br />

compiled profiles & PLC programs. The allocation of memory to these two areas is<br />

controlled with the MEMORY comm<strong>and</strong>.<br />

“Programs” vs. ”Compiled Profiles & PLC Programs”<br />

Programs are defined with the DEF <strong>and</strong> END comm<strong>and</strong>s, as demonstrated in the Program<br />

Example on page 10.<br />

Compiled Profiles & PLC Programs are defined like programs, using the DEF <strong>and</strong> END<br />

comm<strong>and</strong>s, but are compiled with the PCOMP comm<strong>and</strong> <strong>and</strong> executed with the<br />

PRUN comm<strong>and</strong> (PLC programs are usually executed in PLC Scan Mode with the<br />

SCANP). A compiled profile (a series of GOBUF comm<strong>and</strong>s). A PLC program is a<br />

pre-compiled program that mimics PLC functionality by scanning through the I/O<br />

faster than in normal program execution.<br />

Programs intended to be compiled are stored in program memory. After they are<br />

compiled with the PCOMP comm<strong>and</strong>, they remain in program memory <strong>and</strong> the<br />

segments (see diagram below) from the compiled program are stored in compiled<br />

memory. The TDIR report indicates which programs are compiled as compiled<br />

profiles (“COMPILED AS A PATH”) <strong>and</strong> which programs are compiled as PLC<br />

programs (“COMPILED AS A PLC PROGRAM”) .<br />

For information on compiled profiles, refer to Compiled Motion Profiling on page<br />

139; <strong>and</strong> for information on PLC programs, refer to page 120.<br />

MEMORY<br />

comm<strong>and</strong><br />

syntax<br />

(example)<br />

MEMORY150000,150000<br />

Memory allocation for<br />

Programs (bytes).<br />

Storage requirements<br />

depend on the number of<br />

ASCII characters in the<br />

program.<br />

Memory allocation for Compiled Profiles & Programs (bytes).<br />

Storage requirements depend on the number of segments<br />

(1 segment consumes 76 bytes). A segment could be one of<br />

these comm<strong>and</strong>s:<br />

Compiled Motion:<br />

GOBUF *<br />

PLOOP<br />

GOWHEN<br />

TRGFN<br />

POUTA<br />

POUTB<br />

PLC (PLCP) Program:<br />

IF **<br />

ELSE<br />

NIF<br />

L<br />

LN<br />

OUT<br />

ANO<br />

EXE<br />

PEXE<br />

VARI **<br />

VARB **<br />

* GOBUF comm<strong>and</strong>s may require up to 4 segments.<br />

** IF statement require at least 2 segments, each AND or OR<br />

compound requires an additional segment. VARI <strong>and</strong><br />

VARB each require 2 segments.<br />

Chapter 1. Programming Fundamentals 11


The table below identifies memory allocation defaults <strong>and</strong> limits for all Gem6K Series<br />

products. When specifying the memory allocation, use only even numbers. The minimum<br />

storage capacity for one partition area (program or compiled) is 1,000 bytes.<br />

Feature<br />

All Other Products<br />

Total memory (bytes) 300,000<br />

Default allocation (program,compiled) 150000,150000<br />

Maximum allocation for programs 299000,1000<br />

Maximum allocation for compiled profiles 1000,299000<br />

& PLC programs<br />

Max. # of programs 400<br />

Max. # of labels 600<br />

Max. # of compiled profiles & PLC programs 300<br />

Max. # of compiled profile segments 2069<br />

Max. # of numeric variables (VAR) 225<br />

Max. # of integer variables (VARI) 225<br />

Max. # of binary variables (VARB) 125<br />

Max. # of string variables (VARS) 25<br />

When teaching variable data to a data program (DATP), be aware that the memory required<br />

for each data statement of four data points (43 bytes) is taken from the memory allocation for<br />

program storage (see Variable Arrays in Chapter 3, page 110, for details).<br />

CAUTION<br />

Using a memory allocation comm<strong>and</strong> (e.g., MEMORY200000,100000) will erase all existing<br />

programs <strong>and</strong> compiled profile segments & PLC programs. However, issuing the MEMORY<br />

comm<strong>and</strong> without parameters (i.e., type MEMORY to request the status of how the<br />

memory is allocated) will not affect existing programs or compiled segments/programs.<br />

Checking Memory Status<br />

To find out what programs reside in your controller's memory, <strong>and</strong> how much of the available<br />

memory is allocated for programs <strong>and</strong> compiled profile segments, issue the TDIR comm<strong>and</strong><br />

(see example response below). Entering the TMEM comm<strong>and</strong> or the MEMORY comm<strong>and</strong><br />

(without parameters) will also report the available memory for programs <strong>and</strong> compiled profile<br />

segments.<br />

Sample response to<br />

TDIR comm<strong>and</strong><br />

*1 - SETUP USES 345 BYTES<br />

*2 - PIKPRT USES 333 BYTES<br />

*149322 OF 150000 BYTES (98%) PROGRAM MEMORY REMAINING<br />

*1973 OF 1973 SEGMENTS (100%) COMPILED MEMORY REMAINING<br />

Two system status bits (reported with the TSS <strong>and</strong> SS comm<strong>and</strong>s) are available to check when<br />

compiled profile segment storage is 75% full or 100% full. System status bit #29 is set when<br />

segment storage reaches 75% of capacity; bit #30 indicates when segment storage is 100% full.<br />

12 Gem6K Series Programmer’s <strong>Guide</strong>


Executing Programs (options)<br />

Following is a list of the primary options for executing programs stored in your controller:<br />

Method Description See Also<br />

Execute from a terminal Type in the name of the program <strong>and</strong> press enter; or write a -------<br />

emulator<br />

program to prompt the operator to select a program from the<br />

terminal.<br />

Execute as a subroutine<br />

from a “main” program<br />

Execute automatically<br />

when the controller is<br />

powered up<br />

Execute from a PLC<br />

program<br />

Execute a specific<br />

program with BCD<br />

weighted inputs<br />

Execute a specific<br />

program with a<br />

dedicated input<br />

“Call” from a high-level<br />

program<br />

Execute from an RP240<br />

(remote operator<br />

interface)<br />

Execute from your own<br />

custom Windows<br />

program<br />

Use a branch (GOTO, GOSUB, or JUMP) from the main program to<br />

execute another stored program.<br />

Assign a specific program as a startup program with the STARTP<br />

comm<strong>and</strong>. When you RESET or cycle power to the controller, the<br />

startup program is automatically executed.<br />

Write a PLC program that executes a program (using EXE or PEXE)<br />

based on a specific condition (e.g., input state). Use the SCANP<br />

comm<strong>and</strong> to launch the PLC program in the PLC Scan Mode.<br />

Define programmable inputs to function as BCD select inputs, each<br />

with a BCD weight. A specific program (identified by its number) is<br />

executed based on the combination of active BCD inputs. Related<br />

comm<strong>and</strong>s: INSELP <strong>and</strong> INFNCi-B or LIMFNCi-B.<br />

Define a programmable input to execute a specific program (by<br />

number). Related comm<strong>and</strong>s: INSELP <strong>and</strong> INFNCi-iP or<br />

LIMFNCi-P.<br />

Using a programming language such as BASIC or C, write a<br />

program that enables the computer to monitor processes <strong>and</strong><br />

orchestrate motion <strong>and</strong> I/O by executing stored programs (or<br />

individual comm<strong>and</strong>s) in the controller.<br />

Execute a stored program from the RUN menu in the RP240’s<br />

st<strong>and</strong>ard menu system.<br />

Use a programming language (e.g., Visual Basic, Visual C++, etc.)<br />

<strong>and</strong> the Gem6K Communications Server (provided on the Motion<br />

Planner CD) to create your own windows application to control the<br />

Gem6K product. Also included with Motion Planner is PanelMaker,<br />

a Visual Basic scripting tool for developing your own customer user<br />

interfaces.<br />

Page 23<br />

Page 13<br />

Page 120<br />

Page 97<br />

Page 103<br />

Page 133<br />

Page 127<br />

---------<br />

Creating <strong>and</strong> Executing a Set-up Program<br />

Wizards Can Help:<br />

The Motion Planner<br />

Start Wizard helps you<br />

with these setup<br />

programming tasks:<br />

• Create a Setup<br />

program that<br />

configures drives,<br />

feedback devices,<br />

scaling, limits (end of<br />

travel <strong>and</strong> home),<br />

<strong>and</strong> servo tuning.<br />

• Create a Main<br />

program, establish it<br />

as the power-up<br />

(STARTP) program,<br />

<strong>and</strong> include a<br />

GOSUB to the Setup<br />

program.<br />

The intent of the Setup program is to place the Gem6K controller in a ready state for<br />

subsequent motion control. The setup program must be called from the “main” program for<br />

your application; or you can designate (with STARTP) the setup program as the program to be<br />

automatically executed when the Gem6K product is powered up or when the RESET comm<strong>and</strong><br />

is executed. The setup program typically contains elements such as feedback device<br />

configuration, tuning gain selections, programmable I/O definitions, scaling, homing<br />

configuration, variable initialization, etc. (more detail on these “basic” features is provided in<br />

Chapter 3, Basic Operation Setup).<br />

The basic process of creating a setup program is:<br />

1. Create a program to be used as the setup program.<br />

2. Save the program <strong>and</strong> download it to the Gem6K product.<br />

3. Execute the STARTP comm<strong>and</strong> to assign your new program as the “start-up” program<br />

(e.g., STARTP setup assigns the program called “setup” as the start-up program). The<br />

next time the controller is powered up or reset, the assigned STARTP program will be<br />

executed.<br />

Or call the setup program from the main program for your application.<br />

Chapter 1. Programming Fundamentals 13


Program Security<br />

Issuing the INFNCi-Q or LIMFNCi-Q comm<strong>and</strong> enables the Program Security feature <strong>and</strong><br />

assigns the Program Access function to the specified programmable input. The “i” represents<br />

the number of the programmable input to which you wish to assign the function (see page 91<br />

programmable input bit patterns for your product).<br />

The program security feature denies you access to the DEF, DEL, ERASE, MEMORY, INFNC,<br />

<strong>and</strong> LIMFNC comm<strong>and</strong>s until you activate the program access input. Being denied access to<br />

these comm<strong>and</strong>s effectively restricts altering the user memory allocation. If you try to use<br />

these comm<strong>and</strong>s when program security is active (program access input is not activated), you<br />

will receive the error message *ACCESS DENIED.<br />

For example, once you issue the INFNC5-Q comm<strong>and</strong>, onboard input #5 is assigned the<br />

program access function <strong>and</strong> access to the DEF, DEL, ERASE, MEMORY, INFNC, <strong>and</strong><br />

LIMFNC comm<strong>and</strong>s will be denied until you activate onboard input #5.<br />

NOTE: To regain access to these comm<strong>and</strong>s without the use of the program access input, you<br />

must issue the INEN comm<strong>and</strong> to disable the program security input, make the required user<br />

memory changes, <strong>and</strong> then issue the INEN comm<strong>and</strong> to re-enable the input. For example, if<br />

input 3 on I/O brick 2 is assigned as the Program Security input, use 2INEN.3=1 to disable<br />

the input <strong>and</strong> leave it activated, make the necessary user memory changes, <strong>and</strong> then use<br />

2INEN.3=E to re-enable the input.<br />

Controlling Execution of Programs <strong>and</strong> the Comm<strong>and</strong> Buffer<br />

The Gem6K controller comm<strong>and</strong> buffer is capable of storing 2000 characters waiting to be<br />

processed. (This is separate from the memory allocated for program storage – see Memory<br />

Allocation, page 11.) COMEXC affects comm<strong>and</strong> execution. Three additional comm<strong>and</strong>s,<br />

COMEXL, COMEXR <strong>and</strong> COMEXS, affect the execution of programs <strong>and</strong> the comm<strong>and</strong> buffer.<br />

COMEXC (Continuous Comm<strong>and</strong> Execution)<br />

The COMEXC1 comm<strong>and</strong> enables the Continuous Comm<strong>and</strong> Execution Mode (default is<br />

COMEXC0). This mode allows the program to continue to the next comm<strong>and</strong> before motion is<br />

complete. This is useful for:<br />

• Monitoring other processes while motion is occurring<br />

• Performing calculations in advance of motion completion<br />

• Pre-emptive GOs — executing a new profile with new attributes (distance, accel/decel,<br />

velocity, positioning mode, <strong>and</strong> Following ratio ) before motion is complete: The<br />

motion profile underway is pre-empted with a new profile when a new GO is issued.<br />

The new GO both constructs <strong>and</strong> launches the pre-empting profile. Pre-emptive GOs are<br />

appropriate when the desired motion parameters are not known until motion is already<br />

underway. For a detailed description, refer to On-The-Fly Motion on page 155.<br />

• Pre-process the next move while the current move is in progress (see CAUTION note).<br />

This reduces the processing time for the subsequent move to only a few microseconds.<br />

CAUTION: Avoid executing moves prematurely<br />

With continuous comm<strong>and</strong> execution enabled (COMEXC1), if you wish motion to stop before<br />

executing the subsequent move, place a WAIT(AS.1=bØ) statement before the<br />

subsequent GO comm<strong>and</strong>. If you wish to ensure the load settles adequately before the next<br />

move, use the WAIT(AS.24=b1) comm<strong>and</strong> instead (this requires you to define end-ofmove<br />

settling criteria — see Target Zone Mode on page 84 for details).<br />

14 Gem6K Series Programmer’s <strong>Guide</strong>


In the programming example below, by enabling the continuous comm<strong>and</strong> execution mode<br />

(COMEXC1), the controller is able to turn on output #3 after the encoder moves 4000 units of<br />

its 125000-unit move. Normally, with COMEXC disabled (COMEXCØ), comm<strong>and</strong> processing<br />

would be temporarily stopped at the GO1 comm<strong>and</strong> until motion is complete.<br />

Programming Example (portion of program only)<br />

COMEXC1<br />

;Enable continuous comm<strong>and</strong> execution mode<br />

D125000<br />

;Set distance<br />

V2<br />

;Set velocity<br />

A10<br />

;Set acceleration<br />

GO1 ;Initiate motion on axis 1<br />

WAIT(1PE>4000) ;Wait for the encoder position to exceed 4000<br />

OUTXX1 ;Turn on onboard programmable output #3<br />

WAIT(AS.1=b0) ;Wait for motion to complete on axis 1 (AS bit #1 = zero)<br />

OUTXX0 ;Turn off onboard programmable output #3<br />

COMEXL (Save Comm<strong>and</strong> Buffer on Limit)<br />

For more information<br />

on end-of-travel limits,<br />

refer to page 74.<br />

The COMEXL comm<strong>and</strong> enables saving the comm<strong>and</strong> buffer <strong>and</strong> maintaining program<br />

execution when a hardware or software end-of-travel limit is encountered. COMEXL is axis<br />

specific (e.g., COMEXL1xx1xxx1 enables saving the buffer for axes 1, 4, <strong>and</strong> 8).<br />

• COMEXL0: (This is the default setting.) When a limit is hit, every comm<strong>and</strong> in the<br />

comm<strong>and</strong> buffer will be discarded <strong>and</strong> program execution will be terminated.<br />

• COMEXL1: When a limit is hit, all remaining comm<strong>and</strong>s in the comm<strong>and</strong> buffer will<br />

remain in the comm<strong>and</strong> buffer (excluding the comm<strong>and</strong> being executed at the time the<br />

limit is hit).<br />

COMEXR (Effect of Pause/Continue Input)<br />

The COMEXR comm<strong>and</strong> affects whether a “Pause” input (i.e., an input configured as a<br />

pause/continue input with the INFNCi-E comm<strong>and</strong> or the LIMFNCi-E comm<strong>and</strong>) will pause<br />

only program execution or both program execution <strong>and</strong> motion.<br />

COMEXRØ: (This is the default setting.) Upon receiving a pause input, only program execution<br />

will be paused; any motion in progress will continue to its predetermined destination.<br />

Releasing the pause input or issuing a !C comm<strong>and</strong> will resume program execution.<br />

COMEXR1: Upon receiving a pause input, both motion <strong>and</strong> program execution will be paused;<br />

the motion stop function is used to halt motion. After motion has come to a stop<br />

(not during deceleration), you can release the pause input or issue a !C comm<strong>and</strong><br />

to resume motion <strong>and</strong> program execution.<br />

Other Ways to Pause<br />

• Issue the PS comm<strong>and</strong> before entering a series of buffered comm<strong>and</strong>s (to cause motion,<br />

activate outputs, etc.), then issue the !C comm<strong>and</strong> to execute the comm<strong>and</strong>s.<br />

• While program execution is in progress, issuing the !PS comm<strong>and</strong> stops program execution,<br />

but any move currently in progress will be completed. Resume program execution with the !C<br />

comm<strong>and</strong>.<br />

Chapter 1. Programming Fundamentals 15


COMEXS (Save Comm<strong>and</strong> Buffer on Stop)<br />

The COMEXS comm<strong>and</strong> determines the impact on motion, program execution, <strong>and</strong> the<br />

comm<strong>and</strong> buffer when the Gem6K receives a Stop comm<strong>and</strong> (S, !S, S1, or !S1) or an<br />

external Stop input (an input assigned a stop function with INFNCi-D or LIMFNCi-D).<br />

COMEXS0: Under factory default conditions (COMEXS0), when the Gem6K receives a stop<br />

comm<strong>and</strong> (S, !S, S1, or !S1) or a stop input (INFNCi-D or LIMFNCi-D), the<br />

following will happen:<br />

• Motion decelerates to a stop, using the present AD <strong>and</strong> ADA deceleration<br />

values. The motion profile cannot be resumed.<br />

• If S, !S or Stop input:<br />

– All comm<strong>and</strong>s in the Gem6K’s comm<strong>and</strong> buffer are discarded.<br />

– Program execution is terminated <strong>and</strong> cannot be resumed.<br />

• If S1, or !S1 (an axis number is included in the comm<strong>and</strong>):<br />

– All comm<strong>and</strong>s in the Gem6K’s comm<strong>and</strong> buffer are retained.<br />

– Program execution continues.<br />

COMEXS1: Using the COMEXS1 mode, the Gem6K allows more flexibility in responding to<br />

stop conditions, depending on the stop method (see table below).<br />

Stop Method<br />

What Stops<br />

Motion Program<br />

Resume Motion Profile.<br />

(Allow resume with a !C<br />

comm<strong>and</strong> or a resume<br />

input * )<br />

Resume Program.<br />

(Allow resume with a<br />

!C comm<strong>and</strong> or a<br />

resume input * )<br />

!S or S Yes Yes Yes Yes Yes<br />

!S1 or S1 Yes No No No Yes<br />

Stop input Yes Yes No Yes Yes<br />

Pause input * Yes Yes Yes Yes Yes<br />

(if COMEXR1)<br />

Pause input *<br />

(if COMEXR0)<br />

No Yes No Yes Yes<br />

Save Comm<strong>and</strong> Buffer.<br />

(Save the comm<strong>and</strong>s that<br />

were in the comm<strong>and</strong><br />

buffer when the stop was<br />

comm<strong>and</strong>ed)<br />

* A Pause input is an input configured with the INFNCi-E comm<strong>and</strong> or the LIMFNCi-E comm<strong>and</strong>. This is also<br />

the Resume input that can be used to resume motion <strong>and</strong> program execution after motion is stopped.<br />

COMEXS2: Using the COMEXS2 mode, the Gem6K responds as it does in the COMEXS0 mode,<br />

with the exception that you can still use the program-select inputs to select programs<br />

(INSELP value is retained). The program-select input functions are: BCD select<br />

(INFNCi-B or LIMFNCi-B) – see page 97, <strong>and</strong> one-to-one select (INFNCi-P or<br />

LIMFNCi-P) – see page 103.<br />

16 Gem6K Series Programmer’s <strong>Guide</strong>


Restricted Comm<strong>and</strong>s During Motion<br />

When motion is in progress on a given axis (or task), some comm<strong>and</strong>s cannot have their<br />

parameters changed until motion is complete (see table below).<br />

For the comm<strong>and</strong>s identified in the table, if the continuous comm<strong>and</strong> execution mode is<br />

enabled (COMEXC1) <strong>and</strong> you try to enter new comm<strong>and</strong> parameters, you will receive the error<br />

response MOTION IN PROGRESS. If the continuous comm<strong>and</strong> execution mode in disabled<br />

(COMEXCØ), which is the default setting, you will receive the response MOTION IN<br />

PROGRESS only if you precede the comm<strong>and</strong> with the immediate (!) modifier (e.g., !V2Ø);<br />

if you enter a comm<strong>and</strong> without the immediate modifier (e.g., V2Ø), you will not receive an<br />

error response <strong>and</strong> the new parameter will be ignored <strong>and</strong> the old parameter will remain in<br />

effect.<br />

Multi-Tasking<br />

If you are using multi-tasking, the restriction on comm<strong>and</strong>s is applicable only for the task to<br />

which the comm<strong>and</strong> is direct. For example, suppose axes 1 <strong>and</strong> 2 are associated with Task 1<br />

(TSKAX1,2) <strong>and</strong> axes 3 <strong>and</strong> 4 are associate with Task 2 (TSKAX3,4). If motion is in progress<br />

on axes 1 <strong>and</strong> 2, Task 1 is considered “in motion” <strong>and</strong> Task 1 cannot execute a comm<strong>and</strong><br />

from the list below. However, while motion is in progress in Task 1 <strong>and</strong> not Task 2, Task 2<br />

may execute these comm<strong>and</strong>s without encountering an error.<br />

All of the comm<strong>and</strong>s in the table below, except for SCALE, are axis-dependent. That is, if<br />

one axis is moving you can change the parameters on the other axes, provided they are not in<br />

motion.<br />

Comm<strong>and</strong> Description Comm<strong>and</strong> Description<br />

CMDDIR.........Comm<strong>and</strong>ed Direction Polarity JOY............... Joystick Mode Enable<br />

DRES .............Drive Resolution<br />

JOYA............. Joystick Acceleration<br />

DRIVE...........Drive Shutdown<br />

JOYAA .......... Average Joystick Acceleration<br />

ENCPOL.........Encoder Polarity<br />

JOYAD .......... Joystick Deceleration<br />

ERES .............Encoder Resolution<br />

JOYADA ........ Average Joystick Deceleration<br />

FOLEN...........Following Mode Enable<br />

JOYVH .......... Joystick Velocity High<br />

HOM ...............Go Home<br />

JOYVL .......... Joystick Velocity Low<br />

HOMA .............Home Acceleration<br />

LHAD............. Hard Limit Deceleration<br />

HOMAA...........Average Home Acceleration<br />

LHADA .......... Average Hard Limit Deceleration<br />

HOMAD...........Home Deceleration<br />

LSAD............. Soft Limit Deceleration<br />

HOMADA.........Average Home Deceleration<br />

LSADA .......... Average Soft Limit Deceleration<br />

HOMV .............Home Velocity<br />

PSET............. Establish Absolute Position<br />

HOMVF...........Home Final Velocity SCALE .......... Enable/Disable Scale Factors *<br />

JOG ...............Jog Mode Enable<br />

JOGA .............Jog Acceleration<br />

JOGAA...........Average Jog Acceleration<br />

JOGAD...........Jog Deceleration<br />

JOGADA.........Average Jog Deceleration<br />

JOGVH...........Jog Velocity High<br />

JOGVL...........Jog Velocity Low<br />

SCLA............. Acceleration Scale Factor<br />

SCLD............. Distance Scale Factor<br />

SCLV............. Velocity Scale Factor<br />

* If any axis is in motion, you will cause an error if you attempt to change this comm<strong>and</strong>'s parameters.<br />

Chapter 1. Programming Fundamentals 17


Variables<br />

Gem6K Series controllers have four types of variables, each designated with a different<br />

comm<strong>and</strong>. All four types are automatically stored in non-volatile memory.<br />

Type Comm<strong>and</strong> Quantity Function<br />

Numeric<br />

(real)<br />

VAR 225 Store real numeric data (range is ±999,999,999.99999999). Can be<br />

used to perform mathematical (=, +, -, *, /, SQRT), trigonometric<br />

(ATAN, COS, PI, SIN, TAN), <strong>and</strong> Boolean (&, |, ^, ~) operations.<br />

Can also be used to store (“teach”) variable data in variable arrays<br />

(called data programs) <strong>and</strong> later use the stored data as a source for<br />

motion program parameters (see Variable Arrays on page 110 for<br />

details).<br />

Integer VARI 225 Store integer numeric data (range is ±2,147,483,647). Can be used<br />

to perform mathematical (=, +, -, *, /) <strong>and</strong> Boolean (&, |, ^, ~)<br />

operations.<br />

Binary VARB 125 Store 32-bit binary or hexadecimal values. Can also store the binary<br />

status bits from status registers. Frequently used registers are:<br />

inputs (IN), outputs (OUT), limits (LIM), system (SS), Following (FS),<br />

axis (AS & ASX), <strong>and</strong> error (ER). For example, the VARB2=IN.3<br />

comm<strong>and</strong> assigns the binary state of input 12 to binary variable 2.<br />

Also use to perform bitwise operations (&, |, ^, ~, >>,


Using Numeric (VAR <strong>and</strong> VARI) Variables<br />

NOTES<br />

• The examples below show the use of real numeric variables (VAR). Integer variables may<br />

be used in the same operations with these exceptions:<br />

- Values are truncated to nearest integer value<br />

- Operations using square root (SQRT) <strong>and</strong> trigonometric (ATAN, COS, PI, SIN, TAN)<br />

operators are not allowed<br />

• Some numeric variable operations reduce precision. The following operations reduce the<br />

precision of the return value: Division <strong>and</strong> Trigonometric functions yield 5 decimal places;<br />

Square Root yields 3 decimal places; <strong>and</strong> Inverse Trigonometric functions yield 2 decimal<br />

places.<br />

Mathematical<br />

Operations<br />

The following examples demonstrate how to perform math operations with numeric variables.<br />

Operator precedence occurs from left to right (e.g., VAR1=1+1+1∗3 sets VAR1 to 9, not 5).<br />

Addition (+) Example Response<br />

VAR1=5+5+5+5+5+5+5<br />

VAR1<br />

*VAR1=35.0<br />

VAR23=1000.565<br />

VAR11=VAR1+VAR23<br />

VAR11<br />

*VAR11=+1035.565<br />

VAR1=VAR1+5<br />

VAR1<br />

*VAR1=+40.0<br />

Subtraction (-) Example Response<br />

VAR3=20-10<br />

VAR20=15.5<br />

VAR3=VAR3-VAR20<br />

VAR3<br />

*VAR3=-5.5<br />

Multiplication (*) Example Response<br />

VAR3=10<br />

VAR3=VAR3*20<br />

VAR3<br />

*VAR3=+200.0<br />

Division (/) Example Response<br />

VAR3=10<br />

VAR20=15.5<br />

VAR20 *+15.5<br />

VAR3=VAR3/VAR20<br />

VAR3 *+0.64516<br />

VAR30=75<br />

VAR30 *+75.0<br />

VAR19=VAR30/VAR3<br />

VAR19 *+116.25023<br />

Square Root (SQRT) Example Response<br />

VAR3=75<br />

VAR20=25<br />

VAR3=SQRT(VAR3)<br />

VAR3 *+8.660<br />

VAR20=SQRT(VAR20)+SQRT(9)<br />

VAR20 *+8.0<br />

Chapter 1. Programming Fundamentals 19


Trigonometric<br />

Operations<br />

The examples below demonstrate how to perform trigonometric operations with numeric<br />

variables.<br />

Sine Example Response<br />

RADIAN0<br />

VAR1=SIN(0)<br />

VAR1<br />

*VAR1=+0.0<br />

VAR1=SIN(30)<br />

VAR1<br />

*VAR1=+0.5<br />

VAR1=SIN(45)<br />

VAR1<br />

*VAR1=+0.70711<br />

VAR1=SIN(60)<br />

VAR1<br />

*VAR1=+0.86603<br />

VAR1=SIN(90)<br />

VAR1<br />

*VAR1=+1.0<br />

RADIAN1<br />

VAR1=SIN(0)<br />

VAR1<br />

*VAR1=+0.0<br />

VAR1=SIN(PI/6)<br />

VAR1<br />

*VAR1=+0.5<br />

VAR1=SIN(PI/4)<br />

VAR1<br />

*VAR1=+0.70711<br />

VAR1=SIN(PI/3)<br />

VAR1<br />

*VAR1=+0.86603<br />

VAR1=SIN(PI/2)<br />

VAR1<br />

*VAR1=+1.0<br />

Cosine Example Response<br />

RADIAN0<br />

VAR1=COS(0)<br />

VAR1<br />

*VAR1=+1.0<br />

VAR1=COS(30)<br />

VAR1<br />

*VAR1=+0.86603<br />

VAR1=COS(45)<br />

VAR1<br />

*VAR1=+0.70711<br />

VAR1=COS(60)<br />

VAR1<br />

*VAR1=+0.5<br />

VAR1=COS(90)<br />

VAR1<br />

*VAR1=+0.0<br />

RADIAN1<br />

VAR1=COS(0)<br />

VAR1<br />

*VAR1=+1.0<br />

VAR1=COS(PI/6)<br />

VAR1<br />

*VAR1=+0.86603<br />

VAR1=COS(PI/4)<br />

VAR1<br />

*VAR1=+0.70711<br />

VAR1=COS(PI/3)<br />

VAR1<br />

*VAR1=+0.5<br />

VAR1=COS(PI/2)<br />

VAR1<br />

*VAR1=+0.0<br />

20 Gem6K Series Programmer’s <strong>Guide</strong>


Tangent Example Response<br />

RADIAN0<br />

VAR1=TAN(0)<br />

VAR1<br />

*VAR1=+0.0<br />

VAR1=TAN(30)<br />

VAR1<br />

*VAR1=+0.57735<br />

VAR1=TAN(45)<br />

VAR1<br />

*VAR1=+1.0<br />

VAR1=TAN(60)<br />

VAR1<br />

*VAR1=+1.73205<br />

RADIAN1<br />

VAR1=TAN(0)<br />

VAR1<br />

*VAR1=+0.0<br />

VAR1=TAN(PI/6)<br />

VAR1<br />

*VAR1=+0.57735<br />

VAR1=TAN(PI/4)<br />

VAR1<br />

*VAR1=+1.0<br />

VAR1=TAN(PI/3)<br />

VAR1<br />

*VAR1=+1.73205<br />

Inverse Tangent<br />

(Arc Tangent)<br />

Example<br />

RADIAN0<br />

VAR1=SQRT(2)<br />

VAR1=ATAN(VAR1/2)<br />

VAR1<br />

VAR1=ATAN(.57735)<br />

VAR1<br />

Response<br />

*VAR1=+35.26<br />

*VAR1=+30.0<br />

Boolean Operations<br />

Gem6K Series products have the ability to perform Boolean operations with numeric variables.<br />

The following examples illustrate this capability. Refer to the Gem6K Series Comm<strong>and</strong><br />

Reference for more information on each operator (&, |, ^, <strong>and</strong> ~).<br />

Boolean And (&) Example Response<br />

VAR1=5<br />

VAR2=-1<br />

VAR3=VAR1 & VAR2<br />

VAR3<br />

*VAR3=+0.0<br />

Boolean Or (|) Example Response<br />

VAR1=5<br />

VAR2=-1<br />

VAR3=VAR1 | VAR2<br />

VAR3<br />

*VAR3=+1.0<br />

Boolean Exclusive<br />

Or (^)<br />

Example<br />

VAR1=5<br />

VAR2=-1<br />

VAR3=VAR1 ^ VAR2<br />

VAR3<br />

Response<br />

*VAR3=+1.0<br />

Boolean Not (~) Example Response<br />

VAR1=5<br />

VAR3=~(VAR1)<br />

VAR3<br />

*VAR3=+0.0<br />

VAR1=-1<br />

VAR3=~(VAR1)<br />

VAR3<br />

*VAR3=+1.0<br />

Chapter 1. Programming Fundamentals 21


Using Binary Variables<br />

The following examples illustrate the Gem6K Series product's ability to perform bitwise<br />

functions with binary variables.<br />

Storing binary values. The Gem6K Series Language allows you to store binary numbers in<br />

the binary variables (VARB) comm<strong>and</strong>. The binary variables start at the left with the least<br />

significant bit, <strong>and</strong> increase to the right. For example, to set bit 1, 5, <strong>and</strong> 7 you would issue<br />

the comm<strong>and</strong> VARB1=b1xxx1x1. Notice that the letter b is required. When assigning a<br />

binary variable, any bit set to “x” remains “x” until set to “1” or “0”. Any bit that is<br />

unspecified is set to “x”. To change, or check, one bit without affecting the others, use the bitselect<br />

operator (e.g., use VARB1.3-1 to set only bit #3 of VARB1).<br />

Example<br />

VARB1=b1101XX1<br />

Response<br />

*VARB1=1101_XX1X_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX<br />

Storing hexadecimal values. Hexadecimal values can also be stored in binary variables<br />

(VARB). The hexadecimal value must be specified the same as the binary value—left is least<br />

significant byte, right is most significant. For example, to set bit 1, 5, <strong>and</strong> 7 you would issue<br />

the comm<strong>and</strong> VARB1=h15. Notice that the letter h is required. NOTE: When assigning a<br />

hexadecimal value to a binary variable, all unspecified bits are set to zero.<br />

Example<br />

VARB1=h7FAD<br />

VARB1<br />

Response<br />

*VARB1=1110_1111_0101_1011_0000_0000_0000_0000<br />

Bitwise And (&) Example Response<br />

VARB1=b1101<br />

VARB1<br />

*VARB1=1101_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX<br />

VARB1=VARB1 & bXXX1 1101<br />

VARB1<br />

*VARB1=XX01_XX0X_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX<br />

VARB1=h0032 FDA1 & h1234 43E9<br />

VARB1<br />

*VARB1=0000_0000_1100_0000_0010_1000_0101_1000<br />

Bitwise Or (|) Example Response<br />

VARB1=h32FD<br />

VARB1<br />

*VARB1=1100_0100_1111_1011_0000_0000_0000_0000<br />

VARB1=VARB1 | bXXX1 1101<br />

VARB1<br />

*VARB1=11X1_1101_1111_1X11_XXXX_XXXX_XXXX_XXXX<br />

VARB1=h0032 FDA1 | h1234 43E9<br />

VARB1<br />

*VARB1=1000_0100_1100_0110_1111_1111_0111_1001<br />

Bitwise Exclusive<br />

Or (^)<br />

Example<br />

Response<br />

VARB1=h32FD ^ bXXX1 1101<br />

VARB1<br />

*VARB1=XXX1_1001_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX<br />

VARB1=h0032 FDA1 ^ h1234 43E9<br />

VARB1<br />

*VARB1=1000_0100_0000_0110_1101_0111_0010_0001<br />

Bitwise Not (~) Example Response<br />

VARB1=~(h32FD)<br />

VARB1<br />

*VARB1=0011_1011_0000_0100_1111_1111_1111_1111<br />

VARB1=~(b1010 XX11 0101)<br />

VARB1<br />

*VARB1=0101_XX00_1010_XXXX_XXXX_XXXX_XXXX_XXXX<br />

Shift Left to Right<br />

(>>)<br />

Example<br />

Response<br />

VARB1=h32FD >> h4<br />

VARB1<br />

*VARB1=0000_1100_0100_1111_1011_0000_0000_0000<br />

VARB1=b1010 XX11 0101 >> b11<br />

VARB1<br />

*VARB1=0001_010X_X110_101X_XXXX_XXXX_XXXX_XXXX<br />

Shift Right to Left<br />

(


Program flow refers to the order in which comm<strong>and</strong>s will be executed, <strong>and</strong> when or whether<br />

they will be executed at all. In general, comm<strong>and</strong>s are executed in the order in which they are<br />

received. However, certain comm<strong>and</strong>s can redirect the order in which comm<strong>and</strong>s will be<br />

processed.<br />

You can affect program flow with:<br />

• Unconditional Loops <strong>and</strong> Branches<br />

• Conditional Loops <strong>and</strong> Branches<br />

Unconditional Looping <strong>and</strong> Branching<br />

Unconditional<br />

Looping<br />

The Loop (L) comm<strong>and</strong> is an unconditional looping comm<strong>and</strong>. You may use this comm<strong>and</strong> to<br />

repeat the execution of a group of comm<strong>and</strong>s for a predetermined number of iterations. You<br />

can nest Loop comm<strong>and</strong>s up to 16 levels deep. The code sample (portion of a program) below<br />

demonstrates a loop of 5 iterations.<br />

MA0 ; Sets unit to Incremental mode<br />

A50 ; Sets acceleration to 50<br />

V5 ; Sets velocity to 5<br />

L5 ; Loops 5 times<br />

D2000 ; Sets distance to 2,000<br />

GO1 ; Executes the move (Go)<br />

T2 ; Delays 2 seconds after the move<br />

LN ; Ends loop<br />

Unconditional<br />

Branching<br />

When an unconditional branch is processed, the flow of program execution (“control”) passes<br />

to the program or label specified in the branch comm<strong>and</strong>. Depending on the branch comm<strong>and</strong><br />

used, processing may or may not return to the original program (the “calling” program). There<br />

are three ways to branch unconditionally:<br />

GOSUB: The GOSUB comm<strong>and</strong> branches to the program name or label stated in the GOSUB<br />

comm<strong>and</strong>. After the called program or label is executed, processing returns to the<br />

calling program at the next comm<strong>and</strong> line after the GOSUB branch comm<strong>and</strong>.<br />

GOTO:<br />

JUMP:<br />

The GOTO comm<strong>and</strong> branches to the program name or label stated in the GOTO<br />

comm<strong>and</strong>. After the called program or label is executed, processing does not return<br />

to the calling program—instead, the program will end. This holds true unless the<br />

subroutine in which the GOTO resides was called with a GOSUB by another<br />

program; in this case, the END in the GOTO program will initiate a return to the<br />

calling program. For example, if processing flows from a GOSUB in program A to<br />

program B, <strong>and</strong> then a GOTO from program B to program C, when the END<br />

comm<strong>and</strong> is processed in program C, processing returns to program A at the<br />

comm<strong>and</strong> line after the GOSUB.<br />

The JUMP comm<strong>and</strong> branches to the program name or label stated in the JUMP<br />

comm<strong>and</strong>. All nested IFs, WHILEs, <strong>and</strong> REPEATs, loops (L), <strong>and</strong> subroutines are<br />

cleared; thus, the program or label that the JUMP initiates will not return control to<br />

the calling program; instead, the called program will end.<br />

If an invalid program or label name is entered, the branch comm<strong>and</strong> will be ignored <strong>and</strong><br />

processing will continue with the next line in the program.<br />

Gem6K Series products do not support recursive calling of subroutines.<br />

Using labels: Labels, defined with the $ comm<strong>and</strong>, provide a method of branching to specific<br />

locations within the same program. Labels can only be defined within a program <strong>and</strong> executed<br />

with a GOTO, GOSUB, or JUMP comm<strong>and</strong> from within the same program (see Example B below).<br />

Chapter 1. Programming Fundamentals 23


NOTE<br />

Be careful about performing a GOTO within a loop or branch statement area (i.e., between<br />

L & LN, between IF & NIF, between REPEAT & UNTIL, or between WHILE & NWHILE).<br />

Branching to a different location within the same program will cause the next L, IF, REPEAT,<br />

or WHILE statement encountered to be nested within the previous L, IF, REPEAT, or WHILE<br />

statement area, unless an LN, NIF, UNTIL, or NWHILE comm<strong>and</strong> has already been<br />

encountered.<br />

** To avoid this nesting situation, use the JUMP comm<strong>and</strong> instead of the GOTO comm<strong>and</strong>.<br />

Example A<br />

DESCRIPTION: The program cut1 is executed until it gets to the comm<strong>and</strong> GOSUB<br />

prompt. From there it branches unconditionally to the subroutine (actually a program) called<br />

prompt. The subroutine prompt queries the operator for the number of parts to process.<br />

After the part number is entered (e.g., operator enters the !'12 comm<strong>and</strong> to process 12 parts),<br />

the rest of the prompt subroutine is executed <strong>and</strong> control goes back to the cut1 program <strong>and</strong><br />

resumes program execution with the next comm<strong>and</strong> after the GOSUB, which is MAØØ.<br />

DEL cut1<br />

; Delete a program before defining it<br />

DEF cut1<br />

; Begin definition of program cut1<br />

HOM11<br />

; Send axes 1 <strong>and</strong> 2 to the home position<br />

WAIT(1AS=b0XXX1 AND 2AS=b0XXX1) ; Wait for axes 1 <strong>and</strong> 2 to come<br />

; to a halt at home<br />

GOSUB prompt<br />

; Go to subroutine program called prompt<br />

MA00<br />

; Place axes 1 <strong>and</strong> 2 in the incremental mode<br />

A10,30 ; Set acceleration: axis 1 = 10, axis 2 = 30<br />

AD5,12 ; Set deceleration: axis 1 = 5, axis 2 = 12<br />

V5,8 ; Set velocity: axis 1 = 5, axis 2 = 8<br />

D16000,100000 ; Set distance: axis 1 = 16,000; axis 2 = 100,000<br />

OUT.3-1 ; Turn on onboard output number 3<br />

T5<br />

; Wait for 5 seconds<br />

L(VAR2)<br />

; Begin loop (number of loops = value of VAR2)<br />

GO11 ; Initiate moves on axes 1 <strong>and</strong> 2<br />

T3<br />

; Wait for 3 seconds<br />

LN<br />

; End loop<br />

OUT.3-0 ; Turn off onboard output number 3<br />

END<br />

; End definition of program cut1<br />

DEF prompt<br />

; Begin definition of program prompt<br />

VARS1="Enter part count >" ; Place message in string variable #1<br />

VAR2=READ1 ; Prompt operator with string variable #1,<br />

; <strong>and</strong> read data into numeric variable #2<br />

; NOTE: Type !' before the part count number.<br />

END<br />

; End definition of program prompt<br />

Example B DESCRIPTION: This example demonstrates the use of labels ($).<br />

DEL pick<br />

; Delete a program before defining it<br />

DEF pick<br />

; Begin definition of program pick<br />

GO1100 ; Initiate motion <strong>and</strong> axes 1 <strong>and</strong> 2<br />

IF(VAR1=5)<br />

; If variable 1 = 5, then execute comm<strong>and</strong>s<br />

; between IF <strong>and</strong> ELSE. Otherwise, execute<br />

; comm<strong>and</strong>s between ELSE <strong>and</strong> NIF<br />

GOTO pick1<br />

; Goto label pick1<br />

ELSE<br />

; Else part of IF statement<br />

GOTO pick2<br />

; Goto label pick2<br />

NIF<br />

; End of IF statement<br />

$ pick1 ; Define label for pick1<br />

GO0011 ; Initiate motion on axes 3 <strong>and</strong> 4<br />

BREAK<br />

; Break out of current subroutine or program<br />

$ pick2 ; Define label for pick2<br />

GO1001 ; Initiate motion on axes 1 <strong>and</strong> 4<br />

END<br />

; End definition of program pick<br />

24 Gem6K Series Programmer’s <strong>Guide</strong>


Conditional Looping <strong>and</strong> Branching<br />

Flow Control<br />

Expression<br />

Examples<br />

Conditional looping (REPEAT/UNTIL <strong>and</strong> WHILE/NWHILE) entails repeating a set of<br />

comm<strong>and</strong>s until or while a certain condition exists. In conditional branching<br />

(IF/ELSE/NIF), a specific set of comm<strong>and</strong>s is executed based on a certain condition. Both<br />

rely on the fulfillment of a conditional expression, a condition specified in the UNTIL,<br />

WHILE, or IF comm<strong>and</strong>s.<br />

A WAIT comm<strong>and</strong> pauses comm<strong>and</strong> execution until a specific condition exists.<br />

This section provides examples of expressions that can be used in conditional branching <strong>and</strong><br />

looping comm<strong>and</strong>s (UNTIL, WHILE, <strong>and</strong> IF) <strong>and</strong> the WAIT comm<strong>and</strong>. These expressions can<br />

be constructed, in conjunction with relational <strong>and</strong> logical operators, with the following<br />

oper<strong>and</strong>s:<br />

• Numeric variables <strong>and</strong> binary variables<br />

• Inputs <strong>and</strong> outputs<br />

• Current motion parameters <strong>and</strong> status<br />

• Current comm<strong>and</strong>ed <strong>and</strong> actual position<br />

• Error, axis, <strong>and</strong> system status<br />

• Timer value<br />

• Data read from the serial port<br />

• Data read from the RP240<br />

• Following conditions<br />

• Multi-tasking conditions<br />

Numeric <strong>and</strong> Binary<br />

Variables<br />

A numeric variable (VAR or VARI) can be used within an expression if it is compared against<br />

another numeric variable, a value, or one of the comparison comm<strong>and</strong>s (see list on page 7).<br />

When comparing a variable against another value, variable, or comparison comm<strong>and</strong>, the<br />

relational operators (=, >, >=, =, =, , >=,


Expression<br />

(VAR1, >=,


RP240 Data Read<br />

Immediate Mode<br />

The DREADI1 comm<strong>and</strong> allows continual numeric or function key data entry from the RP240<br />

(when used in conjunction with the DREAD <strong>and</strong>/or DREADF comm<strong>and</strong>s). In this immediate<br />

mode, program execution is not paused (waiting for data entry) when a DREAD or DREADF<br />

comm<strong>and</strong> is encountered. Refer to the DREAD <strong>and</strong> DREADF comm<strong>and</strong> descriptions for<br />

programming examples.<br />

NOTES<br />

• While in the Data Read Immediate Mode, data is read into numeric variables only (VAR).<br />

• This feature is not designed to be used in conjunction with the RP240's st<strong>and</strong>ard menus;<br />

the RUN, JOG, <strong>and</strong> DJOG menus will disable the DREADI mode.<br />

• Do not assign the same variable to read numeric data <strong>and</strong> function key data—pick only one.<br />

Following Conditions These Following conditions are available for conditional expressions: Axis status bit #26<br />

(AS.26), Error status bit #14 (ER.14), Following status (FS), NMCY, PCME, PCMS, PMAS,<br />

PME, PSHF, PSLV, <strong>and</strong> VMAS.<br />

Expression<br />

(2AS.26=b1)<br />

(1ER.14=b1)<br />

(3FS.7=b0)<br />

(2NMCY>200)<br />

(1PMAS>12)<br />

(1PSHF>1.5)<br />

(3PSLV>24)<br />

(1VMAS


UNTIL(IN=b1110 OR VAR5>10) ; When inputs 1-4 are 1110, respectively, or<br />

; VAR5 is greater than 10, the loop will stop.<br />

OUT1<br />

; Turn on output 1 when finished with REPEAT loop<br />

END<br />

; End program definition<br />

RUN prog10 ; Initiate program prog10<br />

All comm<strong>and</strong>s between WHILE <strong>and</strong> NWHILE are repeated as long as the WHILE condition is<br />

true. The following example illustrates how a typical WHILE/NWHILE conditional loop<br />

works. In this example, the WHILE loop will execute if the expression is true. If the<br />

expression is false, the WHILE loop will not execute.<br />

VAR5=0 ; Initializes variable 5 to 0<br />

DEL prog10 ; Delete a program before defining it<br />

DEF prog10 ; Defines program prog10<br />

INFNC1-A<br />

; Assign onboard input 1 as g.p. input for use with IN<br />

INFNC2-A<br />

; Assign onboard input 2 as g.p. input for use with IN<br />

INFNC3-A<br />

; Assign onboard input 3 as g.p. input for use with IN<br />

INFNC4-A<br />

; Assign onboard input 4 as g.p. input for use with IN<br />

OUTFNC1-A ; Assign onboard output 1 is a general-purpose output<br />

A50 ; Acceleration is 50<br />

AD50 ; Deceleration is 50<br />

V5 ; Sets velocity to 5<br />

D25000 ; Distance is 25,000<br />

WHILE(IN=b1110 OR VAR5>10) ; While the inputs 1-4 are 1110, respectively<br />

; or VAR5 is greater than 10, the loop will continue.<br />

GO1<br />

; Executes the move (Go)<br />

VAR5=VAR5+1 ; Variable 5 counts up from 0<br />

NWHILE<br />

; End WHILE comm<strong>and</strong><br />

OUT1<br />

; Turn on output 1 when finished with WHILE loop<br />

END<br />

; End program definition<br />

; *****************************************************<br />

; * To run prog10, execute the "RUN prog10" comm<strong>and</strong> *<br />

; *****************************************************<br />

Conditional<br />

Branching<br />

You can use the IF comm<strong>and</strong> for conditional branching. All comm<strong>and</strong>s between IF <strong>and</strong><br />

ELSE are executed if the expression contained within the parentheses of the IF comm<strong>and</strong> is<br />

true. If the expression is false, the comm<strong>and</strong>s between ELSE <strong>and</strong> NIF are executed. If the<br />

ELSE is not needed, it may be omitted. The comm<strong>and</strong>s between IF <strong>and</strong> NIF are executed if<br />

the expression is true. Examples of these comm<strong>and</strong>s are as follows.<br />

DEL prog10 ; Delete a program before defining it<br />

DEF prog10 ; Defines program prog10<br />

INFNC1-A<br />

; Assign onboard input 1 as g.p. input for use with IN<br />

INFNC2-A<br />

; Assign onboard input 2 as g.p. input for use with IN<br />

INFNC3-A<br />

; Assign onboard input 3 as g.p. input for use with IN<br />

INFNC4-A<br />

; Assign onboard input 4 as g.p. input for use with IN<br />

A50 ; Acceleration is 50<br />

AD50 ; Deceleration is 50<br />

V5 ; Sets velocity to 5<br />

IF(VAR1>0) ; IF variable 1 is greater than zero<br />

D25000 ; Distance is 25,000<br />

ELSE<br />

; Else<br />

D50000 ; Distance is 50,000<br />

NIF<br />

; End if comm<strong>and</strong><br />

IF(IN=b1110) ; If onboard inputs 1-4 are 1110, initiate axis 1 move<br />

GO1<br />

; Executes the move (Go)<br />

NIF<br />

; End IF comm<strong>and</strong><br />

END<br />

; End program definition<br />

; *****************************************************<br />

; * To run prog10, execute the "RUN prog10" comm<strong>and</strong> *<br />

; *****************************************************<br />

28 Gem6K Series Programmer’s <strong>Guide</strong>


Program Interrupts (ON Conditions)<br />

Multi-Tasking<br />

Each task has its own<br />

ONP program <strong>and</strong> its<br />

own set of ON<br />

conditions.<br />

While executing a program, the Gem6K controller can interrupt the program based on several<br />

possible ON conditions: programmable input(s) status, user status, or the value of numeric<br />

variables #1 or #2. These ON conditions are enabled with the ONCOND comm<strong>and</strong>, <strong>and</strong> are<br />

defined with the comm<strong>and</strong>s listed below. After the ON conditions are enabled (with the<br />

ONCOND comm<strong>and</strong>), an ON condition interrupt can occur at any point in program execution.<br />

When an ON condition occurs, the controller performs a GOSUB to the program assigned as<br />

the ON program <strong>and</strong> then passes control back to the original program <strong>and</strong> resumes comm<strong>and</strong><br />

execution at the comm<strong>and</strong> line from which the interruption occurred.<br />

Within the ON program, the programmer is responsible for checking which ON condition<br />

caused the branch (if multiple ON conditions are enabled with the ONCOND comm<strong>and</strong>).<br />

Once a branch to the ON program occurs, the ON program will not be called again until after<br />

it has finished executing. After returning from the ON program, the condition that caused the<br />

branch must evaluate false before another branch to the ON program will be allowed.<br />

SETUP FOR PROGRAM INTERRUPT (see programming example below)<br />

1. Define a program to be used as the ON program to which the controller will GOSUB<br />

when an ON condition evaluates true.<br />

2. Use the ONP comm<strong>and</strong> to assign the program as the ON program.<br />

3. Use the ONCOND comm<strong>and</strong> to enable the ON conditions that you are using. The syntax<br />

for the ONCOND comm<strong>and</strong> is ONCOND, where the first is for the ONIN<br />

condition, the second for ONUS, the third for ONVARA, <strong>and</strong> the fourth for ONVARB.<br />

ON conditions:<br />

ONIN<br />

ONUS<br />

ONVARA<br />

ONVARB<br />

Specify an input bit pattern that will cause a GOSUB to the program<br />

assigned as the ON program (see programming example below).<br />

Specify an user status bit pattern that will cause a GOSUB to the ON<br />

program. The user status bits are defined with the INDUST comm<strong>and</strong>.<br />

Specify the range of numeric variable #1 (VAR1) that will cause a GOSUB<br />

to the ON program. For example, ONVARAØ,2Ø establishes the condition<br />

that if the value of VAR1 is ≤0 or ≥20, the ON program will be called.<br />

This is the same function as ONVARA, but for numeric variable #2 (VAR2)<br />

Programming Example: Configures the controller to increment variable #1 when input #1 goes active.<br />

If input #1 does go active, control will be passed (GOSUB) to the ON program (onjump), the comm<strong>and</strong>s<br />

within the ON program will be executed, <strong>and</strong> control will then be passed back to the original program.<br />

DEF onjump ; Begin definition of program onjump<br />

VAR1=VAR1+1 ; Increment variable 1<br />

END<br />

; End definition of program onjump<br />

VAR1=0 ; Initialize variable 1<br />

ONIN1<br />

; When input 1 becomes active, branch to the ON program<br />

ONP onjump ; Assign the onjump program as the ON program<br />

ONCOND1000 ; Enable only the ONIN function. Disable the ONUS,<br />

; ONVARA, <strong>and</strong> ONVARB functions, respectively<br />

Situations in which ON<br />

conditions WILL NOT<br />

interrupt immediately<br />

These are situations in which an ON condition does not immediately interrupt the program in<br />

progress. However, the fact that the ON condition evaluated true is retained, <strong>and</strong> when the<br />

condition listed below is no longer preventing the interrupt, the interrupt will occur.<br />

• While motion is in progress due to GO, GOL, GOWHEN, HOM, JOY, JOG, or PRUN <strong>and</strong> the<br />

continuous comm<strong>and</strong> execution mode is disabled (COMEXCØ).<br />

• While a WAIT statement is in progress<br />

• While a time delay (T) is in progress<br />

• While a program is being defined (DEF)<br />

• While a pause (PS) is in progress<br />

• While a data read (DREAD, DREADI, DREADF, or READ) is in progress<br />

Chapter 1. Programming Fundamentals 29


Error H<strong>and</strong>ling<br />

Wizards can help:<br />

Motion Planner’s Wizard<br />

Editor provides an Error<br />

Program wizard that<br />

creates an Error program,<br />

provides safeguards for<br />

preventing unwanted calls<br />

to the Error program, <strong>and</strong><br />

includes conditional code<br />

to h<strong>and</strong>le the errors you<br />

wish to check.<br />

DEBUG TOOLS<br />

For information on<br />

program debug tools,<br />

refer to page 221.<br />

The Gem6K Series products have the ability to detect <strong>and</strong> recover the following error conditions:<br />

Error bit 1* ........Stall Detected: Functions when stall detection has been enabled (ESTALL or DSTALL)<br />

<strong>and</strong> ESK1 is set.<br />

Error bit 2 ..........Hard Limit Hit: Functions when hard limits are enabled (LH).<br />

Error bit 3 ..........Soft Limit Hit: Functions when soft limits are enabled (LS).<br />

Error bit 4 ..........Drive Fault: Detected only if the drive is enabled (DRIVE1).<br />

Error bit 5 ..........Comm<strong>and</strong> Kill or Comm<strong>and</strong>ed Stop: K, !K,K, S, or !S comm<strong>and</strong> sent.<br />

Error bit 6 ..........Kill Input: When an input is defined as a Kill input (INFNCi-C) <strong>and</strong> that input<br />

becomes active.<br />

Error bit 7 ..........User Fault Input: When an input is defined as a User fault input (INFNCi-F) <strong>and</strong> that<br />

input becomes active.<br />

Error bit 8 ..........Stop Input: When an input is defined as a Stop input (INFNCi-D) <strong>and</strong> that input<br />

becomes active.<br />

Error bit 9 ..........Enable Input is activated (not grounded).<br />

Error bit 10 ........Pre-emptive (on-the-fly) GO or a registration move not possible<br />

Error bit 11** ....Target zone settling timeout period (set with the STRGTT comm<strong>and</strong>) is exceeded.<br />

Error bit 12** ....Maximum position error (set with the SMPER comm<strong>and</strong>) is exceeded.<br />

Error bit 13 ........RESERVED.<br />

Error bit 14 ........GOWHEN condition already true when GO, FSHFC, or FSHFD was executed<br />

Error bit 15 ........RESERVED.<br />

Error bit 16 ........Bad comm<strong>and</strong> detected (bit is cleared with TCMDER comm<strong>and</strong>).<br />

Error bit 17 ........RESERVED.<br />

Error bit 18 ........Cable to expansion I/O brick is disconnected or power to the I/O brick is lost; error is<br />

cleared by reconnecting to I/O brick <strong>and</strong> issuing the ERROR.18-0 comm<strong>and</strong> <strong>and</strong> then<br />

the ERROR.18-1 comm<strong>and</strong>. (Multi-tasking: this condition also kills all tasks.)<br />

Error bits 19-22 .RESERVED.<br />

Error bit 23 ........Error bit 20 RESERVED.<br />

Error bit 23 ........Ethernet Client connection error.<br />

Error bit 24 ........Error bit 24 Ethernet Client polling error.<br />

Error bit 25-32...RESERVED.<br />

* Steppers only<br />

** Servos only<br />

30 Gem6K Series Programmer’s <strong>Guide</strong>


Enabling Error Checking<br />

To detect <strong>and</strong> respond to the error conditions noted above, the corresponding error-checking<br />

bit(s) must be enabled with the ERROR comm<strong>and</strong> (refer to the ERROR Bit # column in the<br />

table below). If an error condition occurs <strong>and</strong> the associated error-checking bit has been<br />

enabled with the ERROR comm<strong>and</strong>, the Gem6K controller will branch to the error program.<br />

For example, if you wish the Gem6K controller to branch to the error program when a<br />

hardware end-of-travel limit is encountered (error bit #2) or when a drive fault occurs (error<br />

bit #4), you would issue the ERRORØ1Ø1 comm<strong>and</strong> to enable error-checking bits #2 <strong>and</strong> #4.<br />

MULTI-TASKING<br />

If you are operating multiple tasks, be aware that you must enable error conditions (ERROR) <strong>and</strong><br />

specify an error program (ERRORP) for each task (e.g., 2%ERROR.2-1 <strong>and</strong> 2%ERRORP FIX for<br />

Task 2). Each task has its own error status register (reported with ER, TER, <strong>and</strong> TERF).<br />

Regarding axis-related error conditions (e.g., drive fault, end-of-travel limit, etc.), only errors on<br />

the task’s associated (TSKAX) axes will cause a branch to the task’s ERRORP program.<br />

☞ Helpful Hint:<br />

Within the structure of your error program, you can use the IF <strong>and</strong> ER<br />

comm<strong>and</strong>s to check which error caused the call to the ERRORP program<br />

<strong>and</strong> respond accordingly.<br />

Defining the Error Program<br />

The purpose of the error program is to provide a programmed response to certain error<br />

conditions (see list above) that may occur during the operation of your system. Programmed<br />

responses typically include actions such as shutting down the drive(s), activating or deactivating<br />

outputs, etc. Refer to the error program set-up example below.<br />

Using the ERRORP comm<strong>and</strong>, you can assign any previously defined program as the error<br />

program. For example, to assign a previously defined program named CRASH as the error<br />

program, enter the ERRORP CRASH comm<strong>and</strong>. To un-assign a program from being the error<br />

program, issue the ERRORP CLR comm<strong>and</strong> (e.g., as in this example, it does not delete the<br />

CRASH program, but merely unlinks it from its assignment as the error program).<br />

Chapter 1. Programming Fundamentals 31


Canceling the Branch to the Error Program<br />

NOTE: In addition to<br />

canceling the branch to<br />

the error program, you<br />

must also remedy the<br />

cause of the error;<br />

otherwise, the error<br />

program will be called<br />

again when you resume<br />

operation. Refer to the<br />

How to Remedy the<br />

Error column in the table<br />

below for details.<br />

If an error condition occurs <strong>and</strong> the associated error-checking bit has been enabled with the<br />

ERROR comm<strong>and</strong>, the Gem6K controller will branch to the error program. The error program<br />

will be continuously called/repeated until you cancel the branch to the error program. (This is<br />

true for all cases except error condition #9, ENABLE input activated, in which case the error<br />

program is called only once.)<br />

There are three options for canceling the branch to the error program:<br />

• Disable the error-checking bit with the ERROR.n-Ø comm<strong>and</strong>, where "n" is the<br />

number of the error-checking bit you wish to disable. For example, to disable error<br />

checking for the kill input activation (bit #6), issue the ERROR.6-Ø comm<strong>and</strong>. To reenable<br />

the error-checking bit, issue the ERROR.n-1 comm<strong>and</strong>.<br />

• Delete the program assigned as the ERRORP program (DEL ).<br />

• Satisfy the How to Remedy the Error requirement identified in the table below.<br />

ERROR<br />

Bit #<br />

Cause of the Error<br />

Branch Type to Error<br />

Program<br />

How to Remedy the Error<br />

1 Steppers only: Stall detected (Stall Detection <strong>and</strong><br />

Kill On Stall must be enabled first—see ESTALL<br />

<strong>and</strong> ESK, respectively).<br />

Gosub<br />

Issue a GO comm<strong>and</strong>.<br />

2 Hard Limit Hit.<br />

(hard limits must be enabled first—see LH)<br />

3 Soft Limit Hit.<br />

(soft limits must be enabled first—see LS)<br />

If COMEXLØ, then Goto;<br />

If COMEXL1, then Gosub<br />

If COMEXLØ, then Goto;<br />

If COMEXL1, then Gosub<br />

Change direction & issue GO comm<strong>and</strong> on the axis<br />

that hit the limit; or issue LHØ.<br />

Change direction & issue GO comm<strong>and</strong> on the axis<br />

that hit the limit; or issue LSØ.<br />

4 Drive Fault (Detected only if you enable drive,<br />

DRIVE1, <strong>and</strong> drive fault input, DRFEN.)<br />

5 Comm<strong>and</strong>ed Stop or Kill (whenever a K, !K,<br />

K, K, or !S comm<strong>and</strong> is sent).<br />

See note below entitled<br />

“Comm<strong>and</strong>ed Kill or Stop”.<br />

Goto<br />

If !K, then Goto;<br />

If !S & COMEXSØ, then<br />

Goto;<br />

If !S & COMEXS1, then<br />

Gosub, but need !C<br />

Clear the fault condition at the drive, & issue a<br />

DRIVE1 comm<strong>and</strong> for the faulted axis.<br />

No fault condition is present—there is no error to<br />

clear.<br />

If you want the program to stop, you must issue<br />

the !HALT comm<strong>and</strong>.<br />

6 Kill Input Activated (see INFNCi-C or LIMFNCi-C) Goto Deactivate the kill input.<br />

7 User Fault Input Activated<br />

(see INFNCi-F or LIMFNCi-F).<br />

8 Stop input activated<br />

(see INFNCi-D or LIMFNCi-C).<br />

Goto<br />

Goto<br />

Deactivate the user fault input, or disable it by<br />

assigning it a different function (INFNC or<br />

LIMFNC).<br />

Deactivate the stop input, or disable it by assigning<br />

it a different function.<br />

9 ENABLE input not grounded. (see “ESTOP” below) Goto Re-ground ENABLE input, <strong>and</strong> issue @DRIVE1.<br />

10 Profile for pre-emptive GO or registration move not<br />

possible at the time of attempted execution.<br />

11 Servos only: Target Zone Timeout (STRGTT value<br />

has been exceeded).<br />

Gosub<br />

Gosub<br />

Issue another GO comm<strong>and</strong>.<br />

Issue these comm<strong>and</strong>s in this order:<br />

STRGTEØ, DØ, GO, STRGTE1<br />

32 Gem6K Series Programmer’s <strong>Guide</strong>


12 Servos only: Exceeded Max. Allowable Position<br />

Error (set with the SMPER comm<strong>and</strong>).<br />

Gosub<br />

Issue a DRIVE1 comm<strong>and</strong> to the axis that<br />

exceeded the allowable position error. Verify that<br />

feedback device is working properly.<br />

14 GOWHEN condition was already true when the<br />

subsequent GO, GOL, FGADV, FSHFC, or FSHFD<br />

comm<strong>and</strong> was executed.<br />

Goto Issue another GOWHEN comm<strong>and</strong>; or issue a !K<br />

comm<strong>and</strong> <strong>and</strong> check the program logic (use the<br />

TRACE <strong>and</strong> STEP features if necessary).<br />

16 Bad comm<strong>and</strong> was detected. Gosub Issue the TCMDER comm<strong>and</strong> to I.D. the comm<strong>and</strong>.<br />

17 Encoder failure detected (EFAIL1 must be<br />

enabled before this error can be detected).<br />

18 Cable to an expansion I/O brick is disconnected,<br />

or power to the I/O brick is lost.<br />

23 Ethernet Client connection error. See the Ethernet<br />

Client section for additional details.<br />

24 Ethernet Client polling error. See the Ethernet<br />

Client section for additional details.<br />

Gosub<br />

Goto<br />

Gosub<br />

Gosub<br />

Reconnect the encoder while the axis is in the<br />

EFAIL1 mode.<br />

Reconnect I/O brick cable. Issue the ERROR.18-0<br />

comm<strong>and</strong> <strong>and</strong> then the ERROR.18-1 comm<strong>and</strong>.<br />

Reserved Bits: Bits 13, 15, 19-22 <strong>and</strong> 25-32.<br />

Branching Types: If the error condition calls for a GOSUB, then after the ERRORP program is executed, program control returns to the point<br />

at which the error occurred. To prevent a return to the point at which the error occurred, use the HALT comm<strong>and</strong> to end program execution or<br />

use the GOTO comm<strong>and</strong> to go to a different program. If the error condition calls for a GOTO, there is no way to return to the point at which the<br />

error occurred.<br />

Comm<strong>and</strong>ed Kill or Stop: When ERROR bit 5 is enabled (ERROR.5-1), a Stop (S or !S) or a Kill (K, !K or K) comm<strong>and</strong> will cause the<br />

controller to branch to the error program. Note, however, that this error condition does not set an error bit (ER), because there is no way to<br />

clear the error condition upon leaving the error program. Therefore, you should use the IF(ER=b00000000000000000000000000000000)<br />

statement in your error program to determine if the cause of the error was a comm<strong>and</strong>ed kill or stop (i.e., if no error bits are set).<br />

If ESTOP (ENABLE input) also cuts power to drives: This note is for systems in which power to the drives (not the Gem6K) is cut if the<br />

ENABLE input is opened. If you enable ERROR bit #9: When the ENABLE input is opened (<strong>and</strong> power is cut to the drives), the ERRORP<br />

program is called. Because the drives have lost power, the Gem6K will detect drive faults, which in turn kills the ERRORP program. If the<br />

ENABLE input is still ungrounded, the ERRORP program will again be called <strong>and</strong> then killed because of the drive fault condition (causing an<br />

endless loop). The resolution is to place the @DRFEN0 comm<strong>and</strong> in the ERRORP program so that it can disable checking the drive fault input<br />

<strong>and</strong> thereby circumvent the endless loop of calling the ERRORP program. Be sure to later re-enable drive fault checking with @DRFEN1 after the<br />

ENABLE input is re-grounded.<br />

Chapter 1. Programming Fundamentals 33


Error Program Set-up Example<br />

The following is an example of how to set up an error program. This particular example is for<br />

h<strong>and</strong>ling the occurrence of a user fault.<br />

Step 1<br />

Create a program file (in Motion Planner’s Editor module) to set up the error program:<br />

; ********************************************************************<br />

; * Assign the user fault input function to onboard trigger input 1. *<br />

; * The purpose of the user fault input is to detect the occurrence *<br />

; * of a fault external to the Gem6K controller <strong>and</strong> the motor/drive. *<br />

; * This input will generate an error condition. *<br />

; ********************************************************************<br />

INFNC1-F<br />

; Define onboard trigger input #1 as a user fault input<br />

; ********************************************************************<br />

; * Define a program to respond to the user fault (call the program *<br />

; * fault), <strong>and</strong> then assign that program as the error program. The *<br />

; * purpose of the fault program is to display a message to inform *<br />

; * the operator that the user fault input has been activated. *<br />

; ********************************************************************<br />

DEL fault ; Delete a program before defining it (a precaution)<br />

DEF fault ; Begin definition of program fault<br />

IF(ER.7=b1) ; Check if error bit 7 equals 1<br />

; (which means the user fault input has been activated)<br />

WRITE"FAULT INPUT\10\13" ; Send the message FAULT INPUT<br />

T3<br />

; Wait 3 seconds<br />

NIF<br />

; End IF comm<strong>and</strong><br />

END<br />

; End definition of program fault<br />

ERRORP fault ; Assign the program called fault as the error program<br />

; ********************************************************************<br />

; * Enable the user fault error-checking bit by putting a “1” in *<br />

; * the seventh bit of the ERROR comm<strong>and</strong>. After enabling this *<br />

; * error-checking bit, the controller will branch to the error *<br />

; * program whenever the user fault input is activated. *<br />

; ********************************************************************<br />

ERROR0000001 ; Branch to error program upon user fault input (As an<br />

; alternative to the ERROR0000001 comm<strong>and</strong>, you could also<br />

; enable bit #7 by issuing the ERROR.7-1 comm<strong>and</strong>.)<br />

Step 2<br />

Step 3<br />

Save the program file in the Editor module. Then, using the Terminal module, download the<br />

program file to the Gem6K controller.<br />

Test the error h<strong>and</strong>ling:<br />

1. While in the terminal emulator, enter these four comm<strong>and</strong>s:<br />

L<br />

; Loop comm<strong>and</strong><br />

WRITE"IN LOOP\10\13" ; Display the message "IN LOOP"<br />

T2<br />

LN<br />

; Wait 2 seconds<br />

; End the loop ("IN LOOP" will be displayed<br />

; once every 2 seconds)<br />

2. While the loop (IN LOOP) is executing in the terminal emulator, enter the !INEN1<br />

comm<strong>and</strong>. The !INEN1 comm<strong>and</strong> disables input #1 <strong>and</strong> forces it on for testing<br />

purposes. This simulates the physical activation of input #1. (Since the error program is<br />

called continuously until the branch to the error program is canceled, the message FAULT<br />

INPUT will be repeatedly displayed once every 3 seconds.)<br />

3. While the FAULT INPUT loop is executing in the terminal emulator, enter the !INENE<br />

comm<strong>and</strong>. The !INENE comm<strong>and</strong> re-enables input #1. The message IN LOOP will not<br />

be displayed again, because the user fault input error is a GOTO branch (not a GOSUB<br />

branch) to the error program.<br />

34 Gem6K Series Programmer’s <strong>Guide</strong>


Non-Volatile Memory<br />

The items listed below are automatically stored in the Gem6K product’s non-volatile memory<br />

(battery-backed RAM). Cycling power or issuing a RESET comm<strong>and</strong> will not affect these<br />

settings.<br />

• Power-up program (STARTP)<br />

• Programs (defined with DEF & END)<br />

• Compiled profiles <strong>and</strong> PLC programs (PCOMP). Compiled profiles <strong>and</strong> PLC programs are<br />

always saved in the Compiled portion of battery-backed RAM. However, compiled<br />

individual axis profiles (GOBUF profiles) are removed from Compiled memory if you run<br />

them with the PRUN comm<strong>and</strong> <strong>and</strong> later cycle power or reset the controller (you will<br />

have to re-compile them with the PCOMP comm<strong>and</strong>).<br />

• Memory allocation (MEMORY)<br />

• Axis type definition (AXSDEF)<br />

• Variables: VAR, VARI, VARB, <strong>and</strong> VARS<br />

• Scaling: SCALE, SCLA, SCLD, SCLV, SCLMAS<br />

• Comm<strong>and</strong>ed direction polarity (CMDDIR)<br />

• Encoder polarity (ENCPOL)<br />

• Device address for RS-232 or RS-485 serial communication (ADDR)<br />

• Baud rate for RS-232 or RS-485 serial communication (BAUD)<br />

• Ethernet IP address (NTADDR<br />

• Ethernet network mask (NTMASK)<br />

• RP240 check <strong>and</strong> serial port functionality (DRPCHK)<br />

• RP240 password (DPASS)<br />

• Servo gain sets (SGSET)<br />

A checksum is calculated for the non-volatile memory area each time you power up or reset<br />

your Gem6K controller. A bad checksum indicates that the user memory has been corrupted<br />

(possibly due to electrical noise) or has been cleared (due to a spent battery). The controller<br />

will clear all user memory when a bad checksum is calculated on power up or reset, <strong>and</strong> bit 22<br />

will be set in the TSS comm<strong>and</strong> response.<br />

System Performance<br />

Several comm<strong>and</strong>s (listed below), when enabled, will slow comm<strong>and</strong> processing. This<br />

degradation in performance will not be noticeable for most applications. But for some, it may<br />

be necessary to disable one or all of these comm<strong>and</strong>s.<br />

• SCALE (enable/disable scaling)<br />

• INDUSE (enable/disable user status updates)<br />

• INFNC (trigger <strong>and</strong> extended input functions; excluding functions “A” <strong>and</strong> “H”)<br />

• LIMFNC (limit input functions; excluding functions “A”, “R”, “S”, <strong>and</strong> “T”)<br />

• OUTFNC (digital output functions; excluding function “A”)<br />

• ONCOND (enable/disable ON conditions)<br />

Chapter 1. Programming Fundamentals 35


Communication<br />

2C HAPTER TWO<br />

Communication<br />

IN THIS CHAPTER<br />

• Communication options (protocols, connections)........................................................ 38<br />

• Motion Planner communication features ................................................................. 38<br />

• Ethernet Networking Overview: ................................................................................. 39<br />

− Networking <strong>Guide</strong>lines.......................................................................................... 56<br />

− Configuring the Gem6K for Ethernet Communications ........................................ 57<br />

− Networking with other 6K or Gem6K Products (peer-to-peer) ............................. 56<br />

− Networking with a DVT Vision System................................................................ 57<br />

− Networking with an Allen-Bradley SLC 5/05 PLC............................................... 56<br />

− Networking with OPTO22 SNAP I/O ................................................................... 56<br />

• Ethernet Client operation ............................................................................................. 39<br />

• Serial Communication:<br />

− Controlling multiple serial ports............................................................................ 56<br />

− RS-232C daisy-chaining........................................................................................ 57<br />

− RS-485 multi-drop................................................................................................. 60


Communication Options<br />

RS-232/485<br />

+24V DC<br />

24V RTN<br />

RELAY COM<br />

RELAY N.O.<br />

WARNING: Hazardous voltage may exist for up to<br />

30 seconds after power is removed.<br />

MOTOR<br />

GV-U3/6/12<br />

COMPUMOTOR<br />

SERVO<br />

U<br />

V<br />

W<br />

VBUS+<br />

VBUS–<br />

L2/N<br />

L1<br />

DRIVE I/O MOTOR FEEDBACK<br />

<strong>GV6K</strong><br />

<strong>Gemini</strong><br />

Servo<br />

RS-232 EXPANSION I/O ETHERNET MASTER ENCODER<br />

RS-232/485 (COM1)<br />

RS-232 (COM2)<br />

Expansion I/O<br />

+24VDC Power Input<br />

Relay<br />

Motor Power<br />

I/O Connections<br />

Ethernet<br />

AC Power<br />

Motor Feedback<br />

Master Encoder<br />

RS-232/485<br />

+ 24V D<br />

24V RT<br />

RELAY CO<br />

RELAY N.O<br />

DRIVE I/O<br />

MOTOR FEEDBACK<br />

<strong>GV6K</strong><br />

<strong>Gemini</strong><br />

Servo<br />

RS-232 EXPANSION I/O ETHERNET MASTER ENCODER<br />

COM1 Port (RS-232/485)<br />

COM2 Port (RS-232)<br />

Ethernet Port<br />

Set up for use as the primary RS-232 or RS-485 port. Configurable for the RP240<br />

(requires external +5VDC supply)<br />

Set up for use as an additional RS-232 port. Configurable for the RP240. Operating<br />

system upgrades via this port only.<br />

Refer to the configuration procedures that follow.<br />

Using multiple ports<br />

Motion Planner Communication Features<br />

You can communicate to either the Ethernet port or COM1 at any given time. Enabling<br />

the Ethernet port (NTFEN1) will disable COM1. COM2 is always enabled for use as<br />

RS232 or with an RP240.<br />

Motion Planner provides easy direct communication links to the product:<br />

• Communicate directly from any Motion Planner utility (Wizard Editor, Program Editor,<br />

Terminal Emulator, <strong>and</strong> Panels).<br />

• Communication setup parameters (Ethernet <strong>and</strong> serial communication).<br />

• Download the Gem6K product’s soft operating system. The operating system is loaded<br />

at the factory, but may use this feature to download upgrades.<br />

• Download motion programs to the controller, <strong>and</strong> upload motion programs from the<br />

controller.<br />

Communications Server: Also available on the Motion Planner CD is a 32-bit OLE<br />

automation server for adding Gem6K communication capability to your custom applications<br />

created with programming languages such as Visual Basic or Visual C++. For details, refer to<br />

the COM6SRVR Programmer’s <strong>Guide</strong> or to the Motion Planner Help System.<br />

38 Gem6K Series Programmer’s <strong>Guide</strong>


Ethernet Networking<br />

Overview<br />

The Gem6K is equipped for Ethernet communication. It includes 10Base-T (10Mbps twisted<br />

pair); TCP/IP protocol. RJ-45 connector. Default IP address is 192.168.10.30. You have these<br />

options for networking the Gem6K over Ethernet:<br />

Setup Wizard Available<br />

The Motion Planner<br />

Wizard Editor provides a<br />

setup wizard, called<br />

“Network”, to help you<br />

establish 6K Client/Server<br />

communication (up to six<br />

servers).<br />

• Gem6K as a client. You can connect the Gem6K via Ethernet to multiple devices,<br />

creating a client/server network. The Gem6K is the client, <strong>and</strong> has the ability to open or<br />

close a connection with another device (server) <strong>and</strong> request information from that<br />

device. The Gem6K supports up to 6 simultaneous server connections. Devices (servers)<br />

that may be connected to the Gem6K include:<br />

− Allen Bradley SLC5-05 PLC (see page 51 for setup procedures)<br />

− OPTO22 SNAP I/O, using Modbus/TCP protocol (see page 48 for setup<br />

procedures)<br />

− DVT vision system cameras (see page 50 for setup procedures)<br />

EXAMPLE — Closed Network:<br />

Ethernet Switch<br />

(255.255.255.0)<br />

out<br />

Ethernet Switch<br />

(255.255.0.0)<br />

out<br />

6K<br />

Client (Server to PC)<br />

IP = 192.168.10.30<br />

Device 1<br />

Server<br />

IP = 192.168.10.120<br />

Device 2<br />

Server<br />

IP = 192.168.10.80<br />

Ethernet<br />

Card<br />

Connection to<br />

company network<br />

Ethernet<br />

Card<br />

PC<br />

Client<br />

IP = 192.168.10.31 IP = 172.20.44.180<br />

EXAMPLE — Direct Connect to One Server:<br />

Crossover Cable<br />

provided in 6K ship kit<br />

(p/n 71-017635-01)<br />

Serial Cable<br />

Device<br />

6K<br />

PC<br />

Chapter 2. Communication 39


• Gem6K as a server. The Gem6K waits for a PC to establish a connection with it <strong>and</strong> then<br />

provides information on a continual or requested basis. The PC communicates with the<br />

Gem6K through the use of the COM6SRVR Communications Server, which is what<br />

Motion Planner uses to communicate with the Gem6K (for details, refer to the<br />

COM6SRVR Communications Server Programmer’s Reference—see<br />

www.compumotor.com for this document). The Gem6K does not support simultaneous<br />

connections with multiple clients (PCs).<br />

EXAMPLE — Closed Network:<br />

Switch or Hub<br />

(255.255.255.0)<br />

Switch or Hub<br />

(255.255.0.0)<br />

6K<br />

Server<br />

IP = 192.168.10.30<br />

Ethernet<br />

Card<br />

Connection to<br />

company network<br />

Ethernet<br />

Card<br />

PC<br />

Client<br />

IP = 192.168.10.31 IP = 172.20.44.180<br />

EXAMPLE — Direct Connect to PC:<br />

Crossover Cable<br />

provided in 6K ship kit<br />

(p/n 71-017635-01)<br />

Switch or Hub<br />

(255.255.0.0)<br />

6K<br />

Server<br />

IP = 172.20.34.30<br />

Ethernet<br />

Card<br />

Connection to<br />

company network<br />

Ethernet<br />

Card<br />

PC<br />

Client<br />

IP = 172.20.34.160 IP = 172.20.44.180<br />

40 Gem6K Series Programmer’s <strong>Guide</strong>


• Combination of server <strong>and</strong> client. For example, the Gem6K could be the client for an<br />

OPTO22 (server) <strong>and</strong> an Allen-Bradley PLC (server). At the same time, a software<br />

program running on a PC could be using the Gem6K as a server.<br />

Ethernet Switch<br />

(255.255.255.0)<br />

out<br />

Ethernet Switch<br />

(255.255.0.0)<br />

out<br />

6K<br />

Client (Server to PC)<br />

IP = 192.168.10.30<br />

Device 1<br />

Server<br />

IP = 192.168.10.120<br />

Device 2<br />

Server<br />

IP = 192.168.10.80<br />

Ethernet<br />

Card<br />

Connection to<br />

company network<br />

Ethernet<br />

Card<br />

PC<br />

Client<br />

IP = 192.168.10.31 IP = 172.20.44.180<br />

Setup Wizard Available<br />

The Motion Planner<br />

Wizard Editor provides a<br />

setup wizard, called<br />

“Network”, to help you<br />

establish 6K peer-to-peer<br />

communication.<br />

• Peer-to-peer network with other 6K or Gem6K units. The 6K may be connected to<br />

other 6K devices (6K Controllers or Gem6K drive/controllers) via Ethernet. Up to eight<br />

6K devices may be networked in this manner. This type of connection uses UDP<br />

broadcasting <strong>and</strong> is not a client/server relationship. (see page 46 for setup procedures)<br />

Ethernet Switch<br />

(255.255.255.0)<br />

out<br />

Ethernet Switch<br />

(255.255.0.0)<br />

out<br />

6K unit 1<br />

IP = 192.168.10.30<br />

Connection to<br />

company network<br />

6K unit 2<br />

IP = 192.168.10.40<br />

Ethernet<br />

Card<br />

Ethernet<br />

Card<br />

PC<br />

IP = 192.168.10.31<br />

IP = 172.20.44.180<br />

Chapter 2. Communication 41


Networking <strong>Guide</strong>lines<br />

• Use a closed network. Because of network broadcasts, it is best to put the Gem6K,<br />

along with any associated server devices, on a closed network with its own subnet. If<br />

you have a PC connected to the Ethernet Client/Server network <strong>and</strong> the PC is also<br />

connect to your company’s network, use one Ethernet card for the Ethernet<br />

Client/Server network <strong>and</strong> another Ethernet card for the company network (refer to the<br />

example below) .<br />

Ethernet Switch<br />

(255.255.255.0)<br />

out<br />

Ethernet Switch<br />

(255.255.0.0)<br />

out<br />

6K<br />

Client (Server to PC)<br />

IP = 192.168.10.30<br />

Device 1<br />

Server<br />

IP = 192.168.10.120<br />

Device 2<br />

Server<br />

IP = 192.168.10.80<br />

Ethernet<br />

Card<br />

Ethernet<br />

Card<br />

PC<br />

Client<br />

IP = 192.168.10.31 IP = 172.20.44.180<br />

• If the Gem6K is placed on an open network, put the Gem6K <strong>and</strong> any associated server<br />

devices on one side of a Ethernet network switch with its own subnet <strong>and</strong> install a<br />

bridge to filter traffic, such that broadcast traffic does not pass in either direction (see<br />

diagram below). This will prevent the Gem6K from broadcasting to the entire network.<br />

Ethernet Switch<br />

(255.255.255.0)<br />

out<br />

Ethernet Switch<br />

(255.255.0.0)<br />

out<br />

Bridge<br />

6K<br />

Client<br />

IP = 192.168.10.30<br />

Device 1<br />

Device 2<br />

Server<br />

IP = 192.168.10.120<br />

Server<br />

IP = 192.168.10.80<br />

Ethernet<br />

Card<br />

IP = 172.20.44.180<br />

PC<br />

• A switch (recommended) or hub must be used if you are making more than one<br />

Ethernet connection with the Gem6K.<br />

• The Gem6K client must have the same subnet address as all of the server devices it will<br />

connect to (PLC, OPTO22, DVT, etc.). For example, if the subnet mask (NTMASK) is<br />

255.255.255.0, <strong>and</strong> the subnet address is 192.168.10.*, then all devices (including the<br />

Gem6K) must have an address starting with 192.168.10.*, where the * number is<br />

unique to the device.<br />

• Fieldbus (DeviceNet or Profibus) versions of the Gem6K (part numbers Gem6Kn-DN<br />

or Gem6Kn-PB) cannot also communicate as an Ethernet Client at the same time. If<br />

you have a Fieldbus unit <strong>and</strong> need to use Ethernet instead, execute the OPTENØ<br />

42 Gem6K Series Programmer’s <strong>Guide</strong>


comm<strong>and</strong>, then the RESET comm<strong>and</strong> (this disables the Fieldbus features), <strong>and</strong> then the<br />

NTFEN1 or NTFEN2 comm<strong>and</strong>. To re-enable Fieldbus communication, execute the<br />

NTFENØ comm<strong>and</strong>, then the RESET comm<strong>and</strong> (this disables Ethernet communication),<br />

<strong>and</strong> then the OPTEN1 comm<strong>and</strong>.<br />

• You cannot communicate to the Gem6K with simultaneous transmissions over both the<br />

“ETHERNET” <strong>and</strong> “RS-232” (PORT1) connections.<br />

• Follow the manufacturer’s setup procedure for each Allen-Bradley PLC, DVT camera<br />

<strong>and</strong> OPTO22 Ethernet I/O rack.<br />

• You should be able to ping every Gem6K, DVT camera, PLC <strong>and</strong> OPTO22 I/O rack<br />

from the PC. Use the ping comm<strong>and</strong> at the DOS prompt:<br />

ping 192.168.10.30<br />

(space)<br />

Device’s IP Address<br />

If your PC responds with “Request Timed Out”,<br />

check your Ethernet wiring <strong>and</strong> IP address setting.<br />

• The following Ethernet setup comm<strong>and</strong>s need only be sent once to the Gem6K,<br />

because they are saved in non-volatile memory <strong>and</strong> are remembered on power-up <strong>and</strong><br />

RESET: NTID, NTIO, NTIP, NTMPRB, NTMPRI, NTMPWB, <strong>and</strong> NTMPWI.<br />

• If a PC is connected to the Gem6K/Device Ethernet network, then the PC should<br />

include all devices in a static mapping table. The static mapping procedure, for the<br />

Gem6K’s address, is found on page 44.<br />

• If the Gem6K is in a peer-to-peer network, enable Ethernet communication with the<br />

NTFEN1 comm<strong>and</strong> (NTFEN2 mode is not compatible with peer-to-peer communication).<br />

Configuring the Gem6K for Ethernet Communication<br />

PC-to-Gem6K<br />

Communication over<br />

RS-232 Only<br />

PC-to-Gem6K<br />

Communication over<br />

Ethernet<br />

If your PC will be communicating to the Gem6K over RS-232 (not Ethernet), follow this<br />

procedure:<br />

1. Connect the Gem6K controller to your network (refer to Networking <strong>Guide</strong>lines on page<br />

42).<br />

2. Establish an RS-232 communication link between the Gem6K <strong>and</strong> your computer (connect to<br />

the Gem6K’s “RS-232” connector according to the instructions in the Gem6K Installation<br />

<strong>Guide</strong>).<br />

3. Install Motion Planner on your computer, <strong>and</strong> launch Motion Planner. Click on the Terminal<br />

tab to view the terminal emulator.<br />

4. In the Terminal window, click on the button to view the Communications Settings dialog.<br />

Select the Port tab <strong>and</strong> select the COM port that is connected to the Gem6K’s “RS-232”<br />

connector (see Step 2 above). Click OK.<br />

5. In the Terminal window, enable Ethernet communication with the appropriate NTFEN<br />

comm<strong>and</strong>:<br />

a. If you are using the Gem6K as a server or client, type the NTFEN2 comm<strong>and</strong> <strong>and</strong> press<br />

ENTER, then type the RESET comm<strong>and</strong> <strong>and</strong> press ENTER.<br />

b. If you are using the 6K in a peer-to-peer connection with another 6K or Gem6K, type the<br />

NTFEN1 comm<strong>and</strong> <strong>and</strong> press ENTER, then type the RESET comm<strong>and</strong> <strong>and</strong> press ENTER.<br />

If your PC will be communicating to the Gem6K over Ethernet, follow this procedure:<br />

1. Connect the Gem6K controller to your network (refer to Networking <strong>Guide</strong>lines on page<br />

42).<br />

Chapter 2. Communication 43


Changing the Gem6K’s<br />

IP Address or Subnet<br />

Mask<br />

The factory default Gem6K<br />

IP address is<br />

192.168.10.30; the default<br />

mask is 255.255.255.0.<br />

If the default address <strong>and</strong><br />

mask are not compatible<br />

with your network, you<br />

may change them with the<br />

NTADDR <strong>and</strong> NTMASK<br />

comm<strong>and</strong>s, respectively<br />

(see Gem6K Series<br />

Comm<strong>and</strong> Reference for<br />

details on the NTADDR <strong>and</strong><br />

NTMASK comm<strong>and</strong>s). To<br />

ascertain the Gem6K’s<br />

Mac address, use the<br />

TNTMAC comm<strong>and</strong>. The<br />

NTADDR, NTMASK <strong>and</strong><br />

TNTMAC comm<strong>and</strong>s may<br />

be sent to the 6K controller<br />

over an RS-232 interface<br />

(see Steps 4-6). NOTE: If<br />

you change the 6K’s IP<br />

address or mask, the<br />

changes will not take affect<br />

until you cycle power or<br />

issue a RESET comm<strong>and</strong>.<br />

2. Install your Ethernet card <strong>and</strong> configure it for TCP/IP protocol. Refer to your Ethernet card’s<br />

user documentation for instructions. (If you need to change the 6K’s IP address or subnet mask,<br />

refer to the note on the left.)<br />

3. (see illustration below) Configure your Ethernet card’s TCP/IP properties so that your<br />

computer can communicate with the 6K controller.<br />

a. Access the Control Panels directory.<br />

b. Open the Network control panel.<br />

c. In the Network control dialog, select the Configuration tab (95/98) or the Protocols tab<br />

(NT) <strong>and</strong> double-click the TCP/IP network item to view the TCP/IP Properties dialog.<br />

d. In the TCP/IP Properties dialog, select the IP Address tab, select “Specify an IP Address”,<br />

type in 192.168.10.31 in the “IP Address” field, <strong>and</strong> type in 255.255.255.0 in the “Subnet<br />

Mask” field.<br />

e. Click the OK buttons in both dialogs to finish setting up your computer’s IP address.<br />

If you are using<br />

Windows NT, select<br />

the “Protocols” tab.<br />

Make sure this number is different<br />

from the one in the 6K’s IP address.<br />

If the 6K’s default IP address is<br />

unchanged (192.168.10.30), then<br />

select a number other than 30.<br />

NOTE<br />

If you are using a computer (Ethernet card) that is<br />

normally connected to a network, you should write<br />

down the existing IP Address <strong>and</strong> Subnet Mask<br />

values, so that you may restore them later.<br />

3. Establish an RS-232 communication link between the Gem6K <strong>and</strong> your computer (connect to<br />

the Gem6K’s “RS-232” connector according to the instructions in the Gem6K Installation<br />

<strong>Guide</strong>).<br />

4. Install Motion Planner on your computer, <strong>and</strong> launch Motion Planner. Click on the Terminal<br />

tab to view the terminal emulator.<br />

5. In the Terminal window, click on the button to view the Communications Settings dialog.<br />

Select the Port tab <strong>and</strong> select the COM port that is connected to the Gem6K’s “RS-232”<br />

connector (see Step 4 above). Click OK.<br />

6. In the Terminal window, enable Ethernet communication with the appropriate NTFEN<br />

comm<strong>and</strong>:<br />

a. If you are using the Gem6K as a server or client, type the NTFEN2 comm<strong>and</strong> <strong>and</strong> press<br />

ENTER, then type the RESET comm<strong>and</strong> <strong>and</strong> press ENTER.<br />

b. If you are using the 6K in a peer-to-peer connection with another 6K or Gem6K, type the<br />

NTFEN1 comm<strong>and</strong> <strong>and</strong> press ENTER, then type the RESET comm<strong>and</strong> <strong>and</strong> press ENTER.<br />

7. Use the following sub-procedure to statically map the Gem6K’s Ethernet MAC address to<br />

IP address of the Ethernet card in your PC. Static mapping eliminates the need for the PC<br />

44 Gem6K Series Programmer’s <strong>Guide</strong>


to ARP the Gem6K controller, thereby reducing communication overhead.<br />

a. In Motion Planner’s Terminal window, type TNT <strong>and</strong> press ENTER. The response<br />

includes the Gem6K IP address, <strong>and</strong> the Gem6K Ethernet address value in hex (this is<br />

also known as the “MAC” address). Write down the IP address <strong>and</strong> the Ethernet<br />

address (hex value) for later use in the procedure below.<br />

b. Start a DOS window. The typical method to start a DOS window is to select MS-DOS<br />

Prompt from the Start/Programs menu (see illustration below).<br />

c. At the DOS prompt, type the arp –s comm<strong>and</strong> (see example below) <strong>and</strong> press ENTER.<br />

arp –s 192.168.10.30 0-90-55-0-0-1 192.168.10.31<br />

Spaces<br />

(press the space bar)<br />

6K’s IP Address<br />

(from TNT report)<br />

6K’s Ethernet Address<br />

(from TNT report)<br />

IP Address of Ethernet Card<br />

d. To verify the mapped addresses, type the arp –a comm<strong>and</strong> <strong>and</strong> press ENTER.<br />

If you receive the response “No ARP Entries Found”:<br />

1) Switch to the Motion Planner Terminal window, type NTFEN2 (or NTFEN1 if using a<br />

peer-to-peer network) <strong>and</strong> press ENTER, then type RESET <strong>and</strong> press ENTER.<br />

2) Switch to the DOS window, type the ping comm<strong>and</strong> <strong>and</strong> press ENTER:<br />

ping 192.168.10.30<br />

(space)<br />

6K’s IP Address (from TNT report)<br />

3) Repeat the arp –s comm<strong>and</strong> as instructed above. Use arp –a to verify.<br />

If your PC responds with “Request<br />

Timed Out”, check your Ethernet<br />

wiring <strong>and</strong> IP address setting.<br />

4) Switch to the Motion Planner Terminal window, type NTFEN2 (or NTFEN1 if using a<br />

peer-to-peer network) <strong>and</strong> press ENTER, then type RESET <strong>and</strong> press ENTER.<br />

e. (OPTIONAL) Automate the arp –s static mapping comm<strong>and</strong>. This allows your PC<br />

to automatically perform the static mapping when it is booted; otherwise, you will<br />

have to manually perform static mapping every time you boot your PC.<br />

• Windows 95/98: Add the arp –s comm<strong>and</strong> to the Autoexec.bat file.<br />

• Windows NT: Create a batch file that contains the arp –s comm<strong>and</strong>. Save the file<br />

(name the file “GEM6KARP.BAT”) to the root directory on the C drive. Using<br />

Windows Explorer, locate the Gem6KARP.BAT file, create a shortcut, then cut <strong>and</strong><br />

paste the shortcut into the StartUp directory. Windows NT has several StartUp<br />

directories to accommodate various user configurations. We recommend using the<br />

Administrators or All Users locations. For example, you can paste the shortcut into the<br />

WinNt\Profiles\AllUsers\StartMenu\Programs\StartUp directory, allowing all users to<br />

statically map the IP <strong>and</strong> Mac addresses whenever the PC is booted.<br />

Chapter 2. Communication 45


Ethernet Connection Status<br />

LEDs (located on the RJ-45<br />

“ETHERNET” connector):<br />

• Green LED turns on to<br />

indicate the Ethernet<br />

physical connection is OK.<br />

• Yellow LED flashes to<br />

indicate the Gem6K is<br />

transmitting over the<br />

Ethernet interface.<br />

f. Connect the Gem6K Controller to your computer using a cross-over 10Base-T cable (5-foot<br />

cable provided in ship kit).<br />

g. In Motion Planner’s Terminal window, click on the button to view the Communications<br />

Settings dialog. Select the Port tab, select “Network” <strong>and</strong> type the IP address (192.168.10.30)<br />

in the text field. Click OK.<br />

h. You may now communicate to the Gem6K controller over the Ethernet interface. Reminder:<br />

You cannot communicate to the Gem6K with simultaneous transmissions over both the<br />

“ETHERNET” <strong>and</strong> “RS-232” (PORT1) connections.<br />

8. Connect the Gem6K Controller to your computer using a cross-over 10Base-T cable (5-foot<br />

cable provided in ship kit).<br />

9. In Motion Planner’s Terminal window, click on the button to view the Communications<br />

Settings dialog. Select the Port tab, select “Network” <strong>and</strong> type the IP address (192.168.10.30)<br />

in the text field. Click OK.<br />

10. You may now communicate to the Gem6K controller over the Ethernet interface.<br />

Reminder: You cannot communicate to the Gem6K with simultaneous transmissions over both<br />

the “ETHERNET” <strong>and</strong> “RS-232” (PORT1) connections.<br />

Ethernet Connection Status LEDs (located on the RJ-45 “ETHERNET” connector):<br />

• Green LED turns on to indicate the Ethernet physical connection is OK.<br />

• Yellow LED flashes to indicate the Gem6K is transmitting over the Ethernet interface.<br />

Networking with Other 6K or Gem6K Products (Peer-to-Peer)<br />

This feature is used to communicate information between 6Ks <strong>and</strong> Gem6Ks over Ethernet.<br />

This is not a client or server; this feature uses UDP broadcasting over the subnet to transfer<br />

data, so no client/server connection is needed.<br />

There can be up to 8 different 6K or Gem6K devices sharing information, with each device<br />

having access to each shared data from the 7 other device. Each device can broadcast 8 pieces<br />

of information by way of “shared output” variables (VARSHO1 through VARSHO8). These<br />

variables can share with other devices the values of its motion attributes, controller status,<br />

variables, etc. (see list below).<br />

A..........Acceleration NMCY... Master cycle number SS..........System status<br />

AD........Deceleration OUT..... Output status SWAP......Task swap assignment<br />

ANI .....Analog input voltage PANI... Analog input position TASK......Task number<br />

ANO .....Analog output voltage PC....... Comm<strong>and</strong>ed position TIM........Timer value<br />

AS........Axis status PCC..... Captured comm<strong>and</strong> pos. TRIG......Trigger interrupt status<br />

ASX .....Extended axis status PCE..... Captured encoder pos. US..........User-defined status<br />

D..........Distance PCME... Captured master enc. pos. V............Velocity<br />

DAC .....DAC output value PE....... Encoder position VARI......Integer variable<br />

DKEY ...RP240 keypad value PER..... Position error VARB......Binary variable<br />

ER........Error status PMAS... Position of Master VEL........Comm<strong>and</strong>ed velocity<br />

FB........Feedback device pos. PME..... Master encoder pos. VELA......Actual velocity<br />

FS........Following status PSHF... Net position shift VMAS......Velocity of the master<br />

IN........Input status PSLV... Follower pos. comm<strong>and</strong> VARSHI .Shared input variable<br />

INO .....Enable input status SC....... Controller status<br />

LIM .....Limit input status SCAN... PLC scan time<br />

MOV .....Axis moving status SEG..... Free segment buffers<br />

The type of data can be either binary, as in the AS (axis status) oper<strong>and</strong>, or a 32-bit unscaled<br />

integer, as in PE (encoder position) oper<strong>and</strong>. The data stored in the VARSHO is not scaled.<br />

46 Gem6K Series Programmer’s <strong>Guide</strong>


Each unit will re-broadcast its updated VARSHO data at a rate set with the NTRATE comm<strong>and</strong>.<br />

RECOMMENDATION: Set all devices to broadcast at the same NTRATE rate of 50<br />

milliseconds.<br />

Setup<br />

Example<br />

For 6K or Gem6K sending <strong>and</strong>/or receiving information via the Peer to Peer feature:<br />

1. Connect the 6K/Gem6K products to the network <strong>and</strong> configure each 6K/Gem6K for<br />

Ethernet communication according to the procedures on page 43.<br />

2. Set the broadcasting rate with NTRATE comm<strong>and</strong>, preferably the same for each unit.<br />

3. If the unit is to receive data only (not send) you are finished with the setup for that unit.<br />

If the unit is to send also, complete steps 4 <strong>and</strong> 5.<br />

4. Assign a unique unit number (1-8) with the NTID comm<strong>and</strong>.<br />

5. Assign data to the eight broadcast variables with the VARSHO comm<strong>and</strong>.<br />

6. Repeat steps 2-5 for each unit in the peer-to-peer network.<br />

First 6K or Gem6K:<br />

NTID1 ; Assign this unit a peer-to-peer unit number of 1<br />

VARSHO1 = 1A ; Shared variable #1 contains axis 1's acceleration<br />

VARSHO2 = 1PE ; Shared variable #2 contains axis 1's encoder<br />

;position<br />

; ******************************************************************<br />

; * Use this space to define shared output variables VARSHO3 – ;VARSHO7. *<br />

; ******************************************************************<br />

VARSHO8 = VARI1 ; Shared variable #8 contains the value of VARI1<br />

NTRATE50<br />

; Set the broadcasting rate to 50 milliseconds<br />

Second 6K or Gem6K:<br />

NTID2 ; Assign this unit an ID of 2<br />

VARSHO1 = 1D ; Shared variable #1 contains axis 1's programmed<br />

;distance<br />

VARSHO2 = 3PE ; Shared variable #2 contains axis 3's encoder<br />

position<br />

; ******************************************************************<br />

; * Use this space to define shared output variables VARSHO3 – VARSHO7. *<br />

; ******************************************************************<br />

VARSHO8 = 1ANI.1 ; Shared variable #8 contains the voltage value at<br />

;analog<br />

; input 1 on I/O brick 1<br />

NTRATE50 ; Set the broadcasting rate to 50 milliseconds<br />

Third 6K or Gem6K:<br />

NTRATE50 ; Set the broadcasting rate to 50 milliseconds<br />

; This third unit will receive data only. Therefore, it does not<br />

;require<br />

; a unit ID number or VARSHO data assignment<br />

Chapter 2. Communication 47


Program<br />

Interaction<br />

Each Unit can read the broadcast variables of each other unit with the nVARSHIi comm<strong>and</strong>.<br />

The “n” specifies the ID number (NTID) of the unit you want to read from, the “i” is the<br />

VARSHO number of that unit to be read. For example, if you want unit 1 to read unit 2’s<br />

VARSHO8 data, then use 2VARSHI8.<br />

Using the VARSHI comm<strong>and</strong>, you can process data from the VARSHO variable of another peerto-peer<br />

unit in these ways:<br />

• Assign the VARSHO data to a VAR (numeric), VARI (integer), or VARB (binary) variable.<br />

For example, the comm<strong>and</strong> VARI1=2VARSHI8 assigns the value of VARSHO8 on unit 2<br />

to the VARI1 integer variable.<br />

• Assign the VARSHO data to a virtual input (IN). For example, 3IN=2VARSHI3 assigns<br />

the binary value of VARSHO3 from unit 2 to virtual input brick 3.<br />

• Use the VARSHO data in a conditional expression for an IF, WAIT, WHILE, or UNTIL<br />

statement. For example, if VARSHO5 on unit 2 is assigned is assigned the status of<br />

onboard trigger input 3 (VARSHO5=IN.3), then you could use this comm<strong>and</strong> to make<br />

unit 1 wait until trigger input 3 on unit 2 was on: WAIT(2VARSHI5=b1).<br />

Example First 6K or Gem6K (unit 1):<br />

VARI1 = 2VARSHI8; Assign Unit 2's VARSHO8 (which is the voltage<br />

; value at analog input 1 on I/O brick 1) to VARI1.<br />

Second 6K or Gem6K (unit 2):<br />

VARI100 = 1VARSHI2; Assign Unit 1's VARSHO2 (which is the encoder<br />

;position of axis 1) to VARI100.<br />

Third 6K or Gem6K (reading data only):<br />

VARI90 = 1VARSHI1; Assign Unit 1's VARSHO1 (which is the<br />

;acceleration of axis 1) to VARI90.<br />

Networking with OPTO22 SNAP I/O<br />

The Gem6K client can communicate with the OPTO22 SNAP I/O server to read digital <strong>and</strong><br />

analog inputs <strong>and</strong> outputs, <strong>and</strong> write digital <strong>and</strong> analog outputs. The Gem6K supports up to<br />

eight modules per OPTO22.<br />

Setup 1. Follow the manufacturer’s setup procedure for the OPTO22 Ethernet I/O rack.<br />

2. Connect the Gem6K <strong>and</strong> OPTO22 products in a network <strong>and</strong> configure the Gem6K for<br />

Ethernet communication according to the procedures on page 43.<br />

3. Choose a Server Connection Number for this device. The Gem6K can support up to 6<br />

simultaneous server connections. Pick a number (1-6) that has not been used already for<br />

another connection. This will be used to reference the OPTO22 unit from now on.<br />

4. Enter the IP address of the OPTO22 <strong>and</strong> specify a 2 for connection type with the NTIP<br />

comm<strong>and</strong>. For example, if the OPTO22 is Server #3 <strong>and</strong> its IP address is 172.20.34.170,<br />

then the comm<strong>and</strong> would be 3NTIP2,172,20,34,170.<br />

5. Attempt a connection to the device with NTCONN. For example, if the server number is 3,<br />

the comm<strong>and</strong> would be 3NTCONN1. If the connection is successful, Network Status bit #1<br />

is set (see NTS, TNTS, TNTSF). If the connection is unsuccessful, Error Status bit #23 is<br />

set (see ER, TER, TERF).<br />

6. Inform the Gem6K of the configuration of the OPTO22. For each module position, use<br />

the NTIO comm<strong>and</strong> to specify the type of module in that position.<br />

48 Gem6K Series Programmer’s <strong>Guide</strong>


n \ m NTIO <br />

Example<br />

Program<br />

Interaction<br />

Network Server #<br />

Range: 1-6<br />

Module # on Server “n”<br />

Range: 0-7<br />

Module Type. Options are:<br />

1 = Digital/Discrete Inputs<br />

2 = Digital/Discrete Outputs<br />

3 = Analog Inputs<br />

4 = Analog Outputs<br />

For example, if there is a digital input module in slot 0, then the comm<strong>and</strong> would be<br />

3\0NTIO1. If there is an Analog Input module in slot 7, then the comm<strong>and</strong> would be<br />

3\7NTIO3.<br />

7. Set the polling rate with the NTPOLL comm<strong>and</strong>. 50 milliseconds is recommended. For<br />

example, to set the polling rate to 50 ms on server #3, use the 3NTPOLL50 comm<strong>and</strong>. If<br />

there is an error during polling, then Error Status bit #24 will be set.<br />

NTADDR172,34,54,123 ; Set the IP address of the Gem6K<br />

OPTEN0<br />

; Disable the option card (for Fieldbus units only)<br />

RESET<br />

NTFEN2<br />

; Enable network function on Gem6K<br />

RESET<br />

DEL OPTOSU<br />

DEF OPTOSU<br />

2NTIP2,172,34,54,124; Identify an OPTO22 device as Server #2, which is<br />

; located at IP address 172.34.54.124<br />

2NTCONN1<br />

; Attempt connection to Server #2 (OPTO22)<br />

2\1NTIO2<br />

; Configure OPTO22 module 1 as digital output<br />

2\2NTIO2<br />

; Configure OPTO22 module 2 as digital output<br />

2\3NTIO1<br />

; Configure OPTO22 module 3 as digital input<br />

2\4NTIO3<br />

; Configure OPTO22 module 4 as analog input<br />

2NTPOLL50<br />

; Begin polling, set polling interval to 50 ms<br />

END<br />

Once the OPTO22 is configured <strong>and</strong> a connection is made, you can then set outputs <strong>and</strong> check<br />

inputs.<br />

How the Gem6K addresses OPTO22 I/O locations:<br />

The Gem6K addresses each I/O bit by its location on a specific module. (NOTE: I/O<br />

points are not addressed by an absolute 32-bit location on the OPTO22.) Digital input <strong>and</strong><br />

output modules have four I/O points, or channels, <strong>and</strong> are numbered 1-4. Analog input <strong>and</strong><br />

output modules have two I/O points, or channels, <strong>and</strong> are numbered 1-2.<br />

EXAMPLE: OPTO22 is Network Server #3<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Digital<br />

Input<br />

Module<br />

Digital<br />

Input<br />

Module<br />

Digital<br />

Output<br />

Module<br />

Digital<br />

Output<br />

Module<br />

Analog<br />

Output<br />

Module<br />

Analog<br />

Output<br />

Module<br />

Analog<br />

Input<br />

Module<br />

Analog<br />

Input<br />

Module<br />

Input<br />

1<br />

Input<br />

2<br />

Input<br />

3<br />

Input<br />

4<br />

Input<br />

1<br />

Input<br />

2<br />

Input<br />

3<br />

Input<br />

4<br />

Output<br />

1<br />

Output<br />

2<br />

Output<br />

3<br />

Output<br />

4<br />

Output<br />

1<br />

Output<br />

2<br />

Output<br />

3<br />

Output<br />

4<br />

Output<br />

1<br />

Output<br />

2<br />

Output<br />

1<br />

Output<br />

2<br />

Input<br />

1<br />

Input<br />

2<br />

Input<br />

1<br />

Input<br />

2<br />

3\0IN.3 3\3OUT.2 3\5ANO.1 3\7ANI.2<br />

• To verify the I/O configuration (as per NTIO) <strong>and</strong> to check the status of each module’s<br />

inputs <strong>and</strong> outputs, type n\TIO, where “n” is the server number.<br />

• To set a digital output, type n\mOUT.i-b, where “n” is the server number, “m” is the<br />

Chapter 2. Communication 49


module number, “i” is the point number on that module <strong>and</strong> “b” is the state (1 = on,<br />

0 = off). To set multiple digital outputs on the same module, type n\mOUTbbbb:<br />

Output #1<br />

Output #2<br />

Output #3<br />

Output #4<br />

Network Server #<br />

Range: 1-6<br />

Module # on Server “n”<br />

Range: 0-7<br />

n \ m OUT b b b b<br />

Options for “b” are:<br />

1 = Turn on<br />

0 = Turn off<br />

x = Don’t Change<br />

For example (Server #3), to turn on outputs #1 <strong>and</strong> #4 <strong>and</strong> leave outputs #2 <strong>and</strong> #3 unchanged<br />

on module #2, type 3\2OUT1XX1. To turn off only output #4, type 3\2OUT.4-0.<br />

• To set an analog output voltage, type n\mANO.i-r, where “n” is the server number, “m” is<br />

the module number, “i” is the output number on that module <strong>and</strong> “r” is the voltage. For<br />

example, to set analog output #1 on module #5 of Server #3 to 6.4V, type 3\5ANO.1=6.4.<br />

• To read a digital input or output module, use the assignment/comparison oper<strong>and</strong>s (n\mIN<br />

or n\mOUT) or the transfer comm<strong>and</strong>s (n\mTIN or n\mTOUT). Examples are:<br />

- IF(3\0IN=b1100) is an IF condition that reads all four digital inputs on module #0.<br />

IF(3\0IN.2=b1) is an IF condition that reads only digital input #2 on module #0.<br />

- IF(3\2OUT=b1100) is an IF condition that reads all four outputs on module #2.<br />

IF(3\2OUT.3=b1) is an IF condition that reads only digital output #3 on module #2.<br />

- 3\0TIN transfers the binary status of all four digital inputs on module #0.<br />

3\0TIN.2 transfers the binary status of only digital input #2 on module #0.<br />

- 3\2TOUT transfers the binary status of all four digital outputs on module #2.<br />

3\2TOUT.3 transfers the binary status of only digital output #3 on module #2.<br />

• To read an analog input or output module, use the assignment/comparison oper<strong>and</strong>s<br />

(n\mANI or n\mANO) or the transfer comm<strong>and</strong>s (n\mTANI or n\mTANO). Examples are:<br />

- WAIT(3\7ANI.2=1.0) is an IF condition that reads analog output #1 on module #5.<br />

- 3\6TANI transfers the voltage status of both analog inputs on module #6.<br />

3\6TANI.2 transfers the voltage status of only analog input #2 on module #6.<br />

- 3\4TANO transfers the voltage status of both analog outputs on module #4.<br />

3\4TANO.1 transfers the voltage status of only analog output #1 on module #4.<br />

Networking with a DVT Vision System<br />

The DVT client can send trigger comm<strong>and</strong>s to the camera. The camera should send back<br />

ASCII strings of the form VARn = 123.456, VARm = 234.567. The strings will be VAR<br />

assignments delineated by commas. These values will then be written to the Gem6K’s VARs.<br />

This data can represent anything, such as an x-y coordinate.<br />

Setup 1. Follow the manufacturer’s setup procedure for the DVT camera.<br />

2. Connect the Gem6K <strong>and</strong> DVT camera in a network <strong>and</strong> configure the Gem6K for<br />

Ethernet communication according to the procedures on page 43.<br />

3. Choose a Server Connection Number for this device. The Gem6K can support up to 6<br />

simultaneous client connections. Pick a number (1-6) that has not been used already for<br />

another server connection. This will be used to reference the device from now on.<br />

4. Enter the IP address of the camera <strong>and</strong> specify a 3 for connection type with the NTIP<br />

comm<strong>and</strong>. For example, if the DVT camera is Server #6 <strong>and</strong> its IP address is<br />

50 Gem6K Series Programmer’s <strong>Guide</strong>


Example<br />

172.20.34.150, then the comm<strong>and</strong> would be 6NTIP3,172,20,34,150.<br />

5. Attempt a connection to the device with NTCONN. For example, if the server number is 6,<br />

the comm<strong>and</strong> would be 6NTCONN1. If the connection is successful, Network Status bit<br />

#1 is set (see NTS, TNTS, TNTSF). If the connection is unsuccessful, Error Status bit #23<br />

is set (see ER, TER, TERF).<br />

6NTIP3,172,34,54,150 ; Identify a DVT camera as Server #6, located at<br />

; IP address 172.34.54.150.<br />

6NTCONN1 ; Attempt the connection to Server #6<br />

Program<br />

Interaction<br />

Example<br />

Once a connection has been established, you can write trigger comm<strong>and</strong>s to the camera using<br />

the NTWRIT comm<strong>and</strong>.<br />

DEL DVT<br />

DEF DVT<br />

6NTCONN1<br />

; Attempt connection to DVT camera<br />

6NTWRIT"DVT comm<strong>and</strong>s" ; Write the text "DVT comm<strong>and</strong>s" to camera<br />

END<br />

Networking with an Allen-Bradley SLC 5/05 PLC<br />

The Allen-Bradley SLC 5/05 exchanges integer <strong>and</strong> binary data with the Gem6K. The data<br />

exchange is accomplished by mapping integer variables (VARI) <strong>and</strong> binary variables (VARB) in<br />

the Gem6K with data elements in the PLC’s integer <strong>and</strong> binary data files. The Gem6K limits<br />

the amount of variable mapping to 100 binary variables (50 write, 50 read) <strong>and</strong> 100 integer<br />

variables (50 write, 50 read).<br />

Setup 1. Follow the manufacturer’s setup procedure for each Allen-Bradley PLC, DVT camera<br />

<strong>and</strong> OPTO22 Ethernet I/O rack.<br />

2. Connect the Gem6K <strong>and</strong> Allen-Bradley PLC in a network <strong>and</strong> configure the Gem6K for<br />

Ethernet communication according to the procedures on page 43.<br />

3. Choose a connection number for this device. The Gem6K can support up to 6<br />

simultaneous client connections. Pick a number (1-6) that has not been used already for<br />

another client connection. This will be used to reference the device from now on.<br />

4. Enter the IP address of the PLC <strong>and</strong> specify a 1 for connection type with the NTIP<br />

comm<strong>and</strong>. For example, if the PLC is Server #5 <strong>and</strong> its IP address is 172.20.34.124, then<br />

the comm<strong>and</strong> would be 3NTIP1,172,20,34,124.<br />

5. Attempt a connection to the device with NTCONN. For example, if the server number is 5,<br />

the comm<strong>and</strong> would be 5NTCONN1. If the connection is successful, Network Status bit<br />

#1 is set (see NTS, TNTS, TNTSF). If the connection is unsuccessful, Error Status bit #23<br />

is set (see ER, TER, TERF).<br />

6. Map the required integer <strong>and</strong> binary variables between the Gem6K <strong>and</strong> the data files in<br />

the Allen-Bradley PLC. There are four mappings possible (a programming example is<br />

provided below).<br />

• Use the NTMPRB comm<strong>and</strong> to read up to 50 binary elements from a PLC’s binary file<br />

<strong>and</strong> write them to VARB variables in the Gem6K.<br />

Chapter 2. Communication 51


Network Server #<br />

Range: 1-6<br />

n NTMPRB i, i, i, i<br />

# of Allen-Bradley data file<br />

# of first element in AB data file<br />

(beginning of range)<br />

# of elements in range<br />

# of first binary variable (VARB) in 6K<br />

(beginning of range, max value is 125)<br />

EXAMPLE:<br />

IF:<br />

• Allen-Bradley PLC is server #5<br />

• The PLC’s binary data file 3 has 30<br />

elements. Use data elements 15-29<br />

(15 elements total) for binary data<br />

that is to be shared with the 6K.<br />

• Use the 6K’s binary variables 35-49<br />

(15 variables total) to store the data<br />

from the PLC.<br />

The required mapping comm<strong>and</strong> is:<br />

5NTMPRB3,15,15,35<br />

• Use the NTMPRI comm<strong>and</strong> to read up to 50 integers elements from a PLC’s Integer<br />

file <strong>and</strong> write them to VARI variables in the Gem6K.<br />

Network Server #<br />

Range: 1-6<br />

n NTMPRI i, i, i, i<br />

# of Allen-Bradley data file<br />

# of first element in AB data file<br />

(beginning of range)<br />

# of elements in range<br />

# of first integer variable (VARI) in 6K<br />

(beginning of range, max value is 225)<br />

EXAMPLE:<br />

IF:<br />

• Allen-Bradley PLC is server #5<br />

• The PLC’s integer data file 9 has 30<br />

elements. Use data elements 15-29<br />

(15 elements total) for integer data<br />

that is to be shared with the 6K.<br />

• Use the 6K’s integer variables 35-49<br />

(15 variables total) to store the data<br />

from the PLC.<br />

The required mapping comm<strong>and</strong> is:<br />

5NTMPRI9,15,15,35<br />

• Use the NTMPWB comm<strong>and</strong> to write up to 50 binary values from VARB variables in the<br />

Gem6K to binary elements in a PLC’s binary file.<br />

Network Server #<br />

Range: 1-6<br />

n NTMPWB i, i, i, i<br />

# of Allen-Bradley data file<br />

# of first element in AB data file<br />

(beginning of range)<br />

# of elements in range<br />

# of first binary variable (VARB) in 6K<br />

(beginning of range, max value is 125)<br />

EXAMPLE:<br />

IF:<br />

• Allen-Bradley PLC is server #5<br />

• In the PLC’s binary data file 3, use<br />

data elements 0-14 (15 elements<br />

total) for binary data that is to be<br />

transmitted from the 6K.<br />

• Use the 6K’s binary variables 20-34<br />

(15 variables total) to store the data<br />

to be transmitted to the PLC.<br />

The required mapping comm<strong>and</strong> is:<br />

5NTMPWB3,0,15,20<br />

• Use the NTMPWI comm<strong>and</strong> to write up to 50 integers values from VARI variables in<br />

the Gem6K to a integer elements in a PLC’s integer file.<br />

Network Server #<br />

Range: 1-6<br />

n NTMPWI i, i, i, i<br />

# of Allen-Bradley data file<br />

# of first element in AB data file<br />

(beginning of range)<br />

# of elements in range<br />

# of first integer variable (VARI) in 6K<br />

(beginning of range, max value is 225)<br />

EXAMPLE:<br />

IF:<br />

• Allen-Bradley PLC is server #5<br />

• The PLC’s integer data file 9 has 30<br />

elements. Use data elements 0-14<br />

(15 elements total) for integer data<br />

to be transmitted from the 6K.<br />

• Use the 6K’s integer variables 20-34<br />

(15 variables total) to store the data<br />

to be transmitted to the PLC.<br />

The required mapping comm<strong>and</strong> is:<br />

5NTMPWI9,0,15,20<br />

7. Set the polling rate with the NTPOLL comm<strong>and</strong>. 50 milliseconds is recommended. For<br />

example, to set the polling rate to 50 ms on Server #5, use the 5NTPOLL50 comm<strong>and</strong>. If<br />

there is an error during polling, Error Status bit #24 will be set (see ER, TER or TERF).<br />

52 Gem6K Series Programmer’s <strong>Guide</strong>


Example<br />

NTADDR172,34,54,123 ; Set the IP address of the Gem6K<br />

OPTEN0<br />

; Disable the option card (for Fieldbus units<br />

only)<br />

RESET<br />

NTFEN2<br />

; Enable network function on Gem6K<br />

RESET<br />

5NTIP1,172,34,54,124 ; Identify network server #5 as an Allen Bradley<br />

PLC<br />

; at IP address 172.34.54.124<br />

5NTCONN1 ; Connect to network server #5<br />

5NTMPRB11,7,1,106 ; File 11, element 7 in the AB PLC is mapped to<br />

the Gem6K's<br />

; binary variable VARB106<br />

5NTMPRI20,5,2,128 ; File 20, elements 5-6 in the AB PLC are mapped<br />

to<br />

; the Gem6K's integer variables VARI128-VARI129,<br />

respectively<br />

5NTMPWB11,3,4,100 ; File 11, elements 3-6, in the AB PLC are<br />

mapped to<br />

; the Gem6K's binary variables VARB100-VARB103<br />

5NTMPWI20,3,2,120 ; File 20, elements 3-4, in the AB PLC are<br />

mapped to<br />

; the Gem6K's integer variables VARI120-VARB121<br />

5NTPOLL50<br />

; Start polling network server #5, set interval<br />

to 50 ms.<br />

;<br />

*********************************************<br />

************************<br />

; The Gem6K's VARB106 will read from the PLC's File 11, element 7.<br />

; The Gem6K's VARI128-VARI129 will read from the PLC's File 20,<br />

elements 5-6.<br />

; The PLC's File 11, elements 3-6 will read from the Gem6K's<br />

VARB100-VARB103.<br />

; The PLC's File 20, elements 3-4 will read from the Gem6K's<br />

VARI120-VARB121.<br />

;<br />

*********************************************<br />

************************<br />

Program<br />

Interaction<br />

After the connection is established, mapping has been set up, <strong>and</strong> polling enabled, the Gem6K<br />

starts exchanging data automatically with the PLC. Here is how to:<br />

• Write a binary variable to the PLC: Simply write a value to one of the VARB variables in<br />

the NTMPWB mapping. The new data will be written to the binary file during the next poll.<br />

• Write an integer variable to the PLC: Simply write a value to one of the VARI variables in<br />

the NTMPWI mapping. The new data will be written to the integer file during the next poll.<br />

• Read a binary variable from the PLC: The VARB variables in the NTMPRB mapping<br />

correspond to the values in the binary file in the PLC.<br />

• Read an integer variable from the PLC: The VARI variables in the NTMPRI mapping<br />

correspond to the values in the integer file in the PLC.<br />

Chapter 2. Communication 53


Example VARB100 = HAB79 ; Element 3 in file 10 of the AB PLC will be<br />

equal to VARB100<br />

if(VARB106 = B1111111111111111) ; VARB106 will be equal to<br />

variable 7 in<br />

; file 10 of the AB PLC<br />

if(VARI129 = 17) ; Element 6 in file 20 of the AB PLC will be<br />

equal to VARI129<br />

VARI121 = 17<br />

; Element 4 in file 20 of the AB PLC will be<br />

equal to VARI121<br />

Error Conditions<br />

Error Messages<br />

The 6K will transmit error message to alert you of certain error conditions. Below is a list of<br />

the error messages related to Ethernet networking.<br />

Error Response<br />

CONNECTION COULD NOT BE CLOSED OR<br />

ALREADY CLOSED<br />

CONNECTION COULD NOT BE OPENED<br />

CONNECTION ERROR, CONNECTION IS<br />

NOW BEING CLOSED<br />

CONNECTION IS NOT OPEN<br />

CONNECTION IS OPEN - MUST CLOSE<br />

FIRST<br />

ERROR, INVALID FILE TYPE, NUMBER<br />

OR SIZE. SETTING NTMP COMMANDS<br />

TO 0 ELEMENTS. CHECK MAPPING.<br />

ERROR, INVALID STRING<br />

ETHERNET CAN NOT BE USED WITH<br />

OPTION CARD - SEE OPTEN<br />

ETHERNET COMMUNICATION MUST BE<br />

ENABLED BEFORE MAKING<br />

CONNECTION - SEE NTFEN<br />

INVALID CONNECTION NUMBER<br />

INVALID I/O POINT<br />

INVALID POINT TYPE OR NUMBER,<br />

Possible Cause<br />

Tried to close the network server connection (nNTCONNØ)<br />

when the connection was already closed.<br />

Tried NTCONN1 <strong>and</strong> failed. Problem could be invalid IP<br />

address or it refused a connection.<br />

Connection error or timeout with server. When polling <strong>and</strong><br />

get timeout or message aborted. This condition also sets<br />

Error Status bit #23 (see ER, TER, TERF).<br />

Tried a NTWRIT when connection is not open; or tried a<br />

\TANI or \TANO or \TIN or \TOUT or \TIO when<br />

connection is not open.<br />

Tried to open a network server connection (nNTCONN1)<br />

when the connection was already open.<br />

Tried to read the wrong Allen-Bradley PLC file type, there<br />

are not enough elements in the file, or the file doesn’t exist.<br />

The 6K automatically stop polling all mapped binary <strong>and</strong><br />

integer variables (equivalent to executing the<br />

NTMPRBi,i,0,i, NTMPWBi,i,0,i, NTMPRIi,i,0,i,<br />

<strong>and</strong> NTMPWIi,i,0,i, comm<strong>and</strong>s).<br />

The DVT camera sent an invalid string response.<br />

Tried to enable Ethernet communication (NTFEN) on a<br />

Fieldbus version of the 6K (part number is 6Kn-PB for<br />

PROFIBUS units, 6Kn-DN for DeviceNet units). You must<br />

disable the internal option card with OPTENØ before<br />

enabling Ethernet communication. The 6K cannot<br />

communicate over a Fieldbus connection <strong>and</strong> Ethernet<br />

connection simultaneously.<br />

Tried to connect to an Ethernet server (nNTCONN1) before<br />

you enabled Ethernet communication in the 6K with the<br />

NTFEN comm<strong>and</strong>.<br />

Tried to make an NTS assignment or comparison using an<br />

invalid server number (e.g., VARB1 = 7NTS).Tried to<br />

address an Ethernet comm<strong>and</strong> to a server connection<br />

number outside of the range 1-6. What’s the difference<br />

between this <strong>and</strong> the “INVALID SERVER TYPE” error<br />

Tried to read or write an OPTO22 I/O point that is not<br />

configured according to the NTIO comm<strong>and</strong>.<br />

Tried to set or read an I/O point (with an \IN, \OUT, \ANI,<br />

54 Gem6K Series Programmer’s <strong>Guide</strong>


Error Response<br />

SEE NTIO<br />

INVALID SERVER TYPE<br />

NETWORK INPUTS AND OUTPUTS CANNOT<br />

BE ASSIGNED TO A VARSHO<br />

NETWORK IP ADDRESS CANNOT BE<br />

CHANGED WHILE CONNECTION IS<br />

OPEN, SEE NTCONN<br />

NO NETWORK IP ADDRESS SPECIFIED<br />

FOR CONNECTION, SEE NTIP<br />

NTFEN MUST BE 1 TO USE THIS<br />

COMMAND<br />

NTRATE MUST BE 0 TO CHANGE NTFEN<br />

NTSELP ALREADY ENABLED ON THIS<br />

TASK<br />

OPTION CARD CAN NOT BE USED WITH<br />

ETHERNET - SEE NTFEN<br />

VARB USED BY OPTION CARD<br />

VARIABLE MAPPING CONFLICT, SEE<br />

NTMPRB, NTMPRI, NTMPWI, NTMPWB<br />

MAPPINGS<br />

Possible Cause<br />

\ANO, \TANI, \TANO, \TIN, or \TOUT comm<strong>and</strong>), but that<br />

I/O point was configured with the NTIO comm<strong>and</strong> to be<br />

different I/O type.<br />

Tried an OPTO22-related comm<strong>and</strong> (\TANI, \TANO, \TIN,<br />

\TOUT, \TIO, \IN, \OUT, \ANI, \ANO, etc.) for a non-<br />

OPTO22 connection.<br />

Tried to assign the status of OPTO22 I/O to a VARSHO<br />

variable.<br />

Tried to execute an NTIP comm<strong>and</strong> while the connection is<br />

open.<br />

Tried to connect (nNTCONN1) to a server # that has not yet<br />

been established with the NTIP comm<strong>and</strong>, or tried to<br />

connect to a server in an incompatible subnet.<br />

(Peer-to-peer connection only) Tried to execute an NTRATE<br />

comm<strong>and</strong> while NTFEN is set to a value other than NTFEN1.<br />

(Peer-to-peer connection only) Tried to execute an NTFEN<br />

comm<strong>and</strong> while NTRATE is set to a non-zero value.<br />

NTSELP, which enables program selection via OPTO22<br />

inputs, has already been enabled (if multitasking, it has<br />

been enabled for this specific Task).<br />

Tried to enable the internal Fieldbus Option card for<br />

PROFIBUS or DeviceNet communication (6Kn-PB <strong>and</strong> 6Kn-<br />

DN products only) with the OPTEN1 comm<strong>and</strong>. You must<br />

disable Ethernet communications with the NTFENØ<br />

comm<strong>and</strong> before enabling the Option card. The 6K cannot<br />

communicate over a Fieldbus connection <strong>and</strong> Ethernet<br />

connection simultaneously.<br />

Tried to map a binary variable to read from or write to an<br />

Allen-Bradley data file, but the variable is already used for<br />

Fieldbus (PROFIBUS or DeviceNet) data transfer functions.<br />

Tried to map the same 6K VARB or VARI variables for read<br />

<strong>and</strong> write functions. Or tried to map the same 6K VARB or<br />

VARI variables to another PLC.<br />

Error H<strong>and</strong>ling<br />

The 6K has a Error Status register for logging certain error conditions. If you enable checking<br />

for an error condition (see ERROR comm<strong>and</strong>), the 6K will branch to the designated error<br />

program (see ERRORP comm<strong>and</strong>) when it detects the error condition. The Ethernet networking<br />

related Error Status register bits are noted below.<br />

ERROR<br />

Bit #<br />

Cause of the Error<br />

23 Ethernet Client<br />

Connection Error.<br />

(Can’t connect.)<br />

Gosub<br />

24 Ethernet Client Polling Gosub<br />

Error. (After connect <strong>and</strong><br />

polling device for data,<br />

polling timeout occurred.<br />

Cause could be<br />

disconnect, client lost<br />

power, etc.)<br />

Branch Type How to Remedy the Error<br />

to ERRORP<br />

Clear the error bit (ERROR.23-0), reestablish<br />

the Ethernet connection<br />

(nNTCONN1), <strong>and</strong> then issue ERROR.23-1.<br />

Clear the error bit (ERROR.24-0), reestablish<br />

the Ethernet connection<br />

(nNTCONN1), <strong>and</strong> then issue ERROR.24-1.<br />

Chapter 2. Communication 55


Serial Communication<br />

Controlling Multiple Serial Ports<br />

In this section:<br />

• Controlling Multiple Serial Ports<br />

• RS-232 Daisy Chaining<br />

• RS-485 Multi-Drop<br />

Every Gem6K Series product has two serial ports. The “RS-232” connector is referenced as the<br />

“COM2” serial port, <strong>and</strong> the “RS-232/485” connector is referenced as the “COM1” serial port.<br />

XON/XOFF<br />

The XONOFF comm<strong>and</strong> was created to enable or disable XON/XOFF ASCII h<strong>and</strong>shaking.<br />

(XONOFF1 enables XON/XOFF, XONOFFØ disables XON/XOFF) Defaults: XONOFF1 for the<br />

COM1 port, XONOFF1 for the COM2 port.<br />

Controllers on a multi-drop do not support XON/XOFF; to ensure that XON/XOFF is disabled<br />

for COM1, send the PORT1 comm<strong>and</strong> followed by the XONOFFØ comm<strong>and</strong>.<br />

Configuring the<br />

COM Port<br />

To control the applicable port for setting up serial communication <strong>and</strong> transmitting ASCII text<br />

strings, use the PORT comm<strong>and</strong>. PORT1 selects COM1 <strong>and</strong> PORT2 selects COM2.<br />

• Serial communication setup comm<strong>and</strong>s (see list below) affect the COM port selected<br />

with the last PORT comm<strong>and</strong>. For example, to configure the COM1 port for Gem6K<br />

language comm<strong>and</strong>s only (e.g., to communicate to the Gem6K product over an RS-485<br />

interface), execute the PORT1 comm<strong>and</strong>, then execute the DRPCHKØ comm<strong>and</strong>. (refer<br />

to the Gem6K Series Comm<strong>and</strong> Reference to details on each comm<strong>and</strong>)<br />

DRPCHK........ RP240 Check<br />

E.................... Enable Serial Communication<br />

ECHO............. Enable Communication Echo<br />

BOT............... Beginning of Transmission Characters<br />

BAUD............. Serial Communication Baud Rate<br />

EOT............... End of Transmission Characters<br />

EOL............... End of Line Terminating Characters<br />

ERRBAD........ Error Prompt<br />

ERRDEF........ Program Definition Prompt<br />

ERRLVL........ Error Detection Level<br />

ERRORK........ Good Prompt<br />

XONOFF........ Enable or disable XON/XOFF<br />

• The PORT comm<strong>and</strong> also selects the COM port through which the WRITE <strong>and</strong> READ<br />

comm<strong>and</strong>s transmit ASCII text strings. If an RP240 is connected, the DWRITE<br />

comm<strong>and</strong> (<strong>and</strong> all other RP240 comm<strong>and</strong>s) will affect the RP240 regardless of the<br />

PORT comm<strong>and</strong> setting. If no RP240 is detected, the comm<strong>and</strong>s are sent to the COM2<br />

port. DWRITE text strings are always terminated with a carriage return.<br />

56 Gem6K Series Programmer’s <strong>Guide</strong>


Setup for Gem6K<br />

Language or RP240<br />

Selecting a<br />

Destination Port for<br />

Transmitting from<br />

the Controller<br />

To configure the COM ports for use with Gem6K language comm<strong>and</strong>s or an RP240, use the<br />

DRPCHK comm<strong>and</strong>. The DRPCHK comm<strong>and</strong> affects the COM port selected with the last PORT<br />

comm<strong>and</strong>. The default for COM1 is DRPCHKØ; the default for COM2 is DRPCHKØ. The<br />

DRPCHK setting is automatically saved in non-volatile memory. NOTE: Only one COM port<br />

may be set to DRPCHK2 or DRPCHK3 at any given time.<br />

DRPCHKØ......Use the COM port for Gem6K language comm<strong>and</strong>s only. This is the default<br />

setting for COM1 <strong>and</strong> COM2, <strong>and</strong> if using RS-485 half duplex on COM1.<br />

Power-up messages appear on all ports set to DRPCHKØ.<br />

DRPCHK1......Check for the presence of an RP240 at power-up/reset. If an RP240 is<br />

present, initialize the RP240. If an RP240 is not present, use the port only<br />

for Gem6K language comm<strong>and</strong>s. NOTE: RP240 comm<strong>and</strong>s will be sent at<br />

power-up <strong>and</strong> reset.<br />

DRPCHK2......Check for the presence of an RP240 every 5-6 seconds. If an RP240 is<br />

plugged in, initialize the RP240.<br />

DRPCHK3......Check for the presence of an RP240 at power-up/reset. If an RP240 is<br />

present, the initialize the RP240. If an RP240 is not present, use the COM<br />

port for DWRITE comm<strong>and</strong>s only, <strong>and</strong> ignore received characters.<br />

To define the port (COM port) through which the Gem6K product sends its responses, you<br />

have 3 options:<br />

• Do nothing different. The response will be sent to the COM port through which the<br />

request was made. If the comm<strong>and</strong> is in a stored program, the report will be sent to the<br />

COM port selected by the most recent PORT comm<strong>and</strong>.<br />

• Prefix the comm<strong>and</strong> with [. This causes the response to be sent to both COM ports.<br />

(e.g., the [TFS comm<strong>and</strong> response will be sent through both COM ports)<br />

• Prefix the comm<strong>and</strong> with ]. This causes the response to be sent to the alternative COM<br />

port. For example, if a report back (e.g., ]TAS) is requested from COM1, the response<br />

is sent through COM2. If the comm<strong>and</strong> is in a stored program, the report will be sent<br />

out the alternate port from the one selected by the most recent PORT comm<strong>and</strong>.<br />

RS-232C Daisy-Chaining<br />

Up to ninety-nine st<strong>and</strong>-alone Gem6K Series products may be daisy-chained. There are two<br />

methods of daisy-chaining: one uses a computer or terminal as the controller in the chain; the<br />

other uses one Gem6K product as the master controller. Refer to you product’s Installation<br />

<strong>Guide</strong> for daisy-chain connections.<br />

Step 1<br />

Follow these steps to implement daisy-chaining:<br />

To enable <strong>and</strong> disable communications on a particular controller unit in the chain, you must use<br />

the Daisy-Chain Address (ADDR) comm<strong>and</strong> to establish a unique device address for each the<br />

unit. The ADDR comm<strong>and</strong> automatically configures unit addresses for daisy chaining. This<br />

comm<strong>and</strong> allows up to 99 units on a daisy chain to be uniquely addressed.<br />

Sending ADDRi to the first unit in the daisy chain sets its address to be (i). The first unit in turn<br />

transmits ADDR(i + 1) to the next unit to set its address to (i + 1). This continues down<br />

the daisy chain until the last unit of (n) daisy-chained units has its address set to (i + n).<br />

Note that a controller with the default device address of zero (0) will send an initial power-up<br />

start message similar to the following:<br />

*PARKER Gem6K MOTION CONTROLLER<br />

*NO REMOTE PANEL<br />

NOTE: For daisy chaining , you can use either PORT1 (COM1 RS232/484 connector), or<br />

PORT2 (COM1 RS 232 connector).<br />

Chapter 2. Communication 57


Step 2<br />

Connect the daisy-chain with a terminal as the master (see diagram in the product’s Installation<br />

<strong>Guide</strong>).<br />

It is necessary to have the error level set to 1 for all units on the daisy-chain (ERRLVL1).<br />

When the error level is not set to 1, the controller sends ERROK or ERRBAD prompts after<br />

each comm<strong>and</strong>, which makes daisy-chaining impossible. Send the ERRLVL1 comm<strong>and</strong> to<br />

each unit in the chain. (NOTE: To send a the ERRLVL1 comm<strong>and</strong> to one specific unit on the<br />

chain, prefix the comm<strong>and</strong> with the appropriate unit's device address <strong>and</strong> an underline.)<br />

Comm<strong>and</strong>s PORT1 (or PORT2 if that port is being used):<br />

0_ERRLVL1 ; set error level to Ø for unit #Ø<br />

1_ERRLVL1 ; Set error level to 1 for unit #1<br />

2_ERRLVL1 ; Set error level to 1 for unit #2<br />

3_ERRLVL1 ; Set error level to 1 for unit #3<br />

After this has been accomplished, a carriage return sent from the terminal will not cause any<br />

controller to send a prompt. Verify this. Instructions below (step 3) show how to set the error<br />

level to 1 automatically on power-up by using the controller's power-up start program (highly<br />

recommended).<br />

After the error level for all units has been set to ERRLVL1, send a Gem6K series comm<strong>and</strong> to<br />

all units on the daisy-chain by entering that comm<strong>and</strong> from the master terminal.<br />

Comm<strong>and</strong>s:<br />

OUT1111<br />

A50<br />

; Turn on onboard outputs 1-4 on all units<br />

; Set accel to 50 (all units)<br />

To send a Gem6K series comm<strong>and</strong> to one particular unit on the chain, prefix the comm<strong>and</strong><br />

with the appropriate unit's device address <strong>and</strong> an underline:<br />

Comm<strong>and</strong>s:<br />

2_OUT0 ; Turn off onboard output 1 on unit #2<br />

4_OUT0 ; Turn off onboard output 1 on unit #4<br />

To receive data from a particular controller on the chain, you must prefix the comm<strong>and</strong> with<br />

the appropriate unit's device address <strong>and</strong> an underline:<br />

Comm<strong>and</strong>s:<br />

1_A ; Request acceleration information from unit #1<br />

*A50 ; Response from unit #1<br />

Use the E comm<strong>and</strong> to enable/disable RS-232C communications for an individual unit. If all<br />

Gem6K controller units on the daisy chain are enabled, comm<strong>and</strong>s without a device address<br />

identifier will be executed by all units. Because of the daisy-chain's serial nature, the<br />

comm<strong>and</strong>s will be executed approximately 1 ms per character later on each successive unit in<br />

the chain (assuming 9600 baud).<br />

Units with the RS-232C disabled (EØ) will not respond to any comm<strong>and</strong>s, except E1;<br />

however, characters are still echoed to the next device in the daisy chain.<br />

Comm<strong>and</strong>s:<br />

3_E0 ; Disable RS-232C on unit #3<br />

VAR1=1 ; Set variable #1 to 1 on all other units<br />

3_E1 ; Enable RS-232C on unit #3<br />

3_VAR1=5 ; Set variable #1 to 5 on unit #3<br />

Verify communication to all units by using the techniques described above.<br />

Step 3<br />

Now that communication is established, programming of the units can begin (alternatively,<br />

units can be programmed individually by connecting the master terminal to one unit at a time).<br />

To allow daisy-chaining between multiple controllers, the ERRLVL1 comm<strong>and</strong> must be used<br />

to prevent units from sending error messages <strong>and</strong> comm<strong>and</strong> prompts. In every daisy-chained<br />

58 Gem6K Series Programmer’s <strong>Guide</strong>


unit, the ERRLVL1 comm<strong>and</strong> should be placed in the program that is defined as the STARTP<br />

program:<br />

Program:<br />

DEF chain ; Begin definition of program chain<br />

ERRLVL1 ; Set error level to 1<br />

GOTO main ; Go to program main<br />

END<br />

; End definition of program chain<br />

STARTP chain ; Designates program chain as the power-up program<br />

To define program main for unit #0:<br />

Program:<br />

0_DEF main ; Begin definition of program main on unit #0<br />

0_GO<br />

; Start motion<br />

0_END ; End definition of program main on unit #0<br />

Step 4<br />

After all programming is completed, program execution may be controlled by either a master<br />

terminal, or by a Gem6K Series controller used as a master.<br />

Daisy-Chaining<br />

from a Computer or<br />

Terminal<br />

Controlling the daisy-chain from a master computer or terminal follows the examples above:<br />

Comm<strong>and</strong>s:<br />

0_RUN main ; Run program main on unit #0<br />

1_RUN main ; Run program main on unit #1<br />

2_GO1 ; Start motion on unit #2<br />

3_A ; Get A comm<strong>and</strong> response from unit #3<br />

Daisy-Chaining<br />

from a Master<br />

Gem6K Controller<br />

Controlling the daisy-chain from a master Gem6K controller (the first unit on the daisy-chain)<br />

requires the programs stored in the master controller to control program <strong>and</strong> comm<strong>and</strong><br />

execution on the slave controllers. The example below demonstrates the use of the WRITE<br />

comm<strong>and</strong> to send comm<strong>and</strong>s to other units on the daisy chain.<br />

NOTE<br />

The last unit on the daisy-chain must have RS-232C echo disabled (ECHOØ comm<strong>and</strong>).<br />

Master controller's main program:<br />

Program:<br />

DEF main<br />

L<br />

WHILE (IN.1 = b0)<br />

NWHILE<br />

GO<br />

WHILE (IN.1 = b1)<br />

NWHILE<br />

WRITE"2_D2000"<br />

WRITE"2_ACK"<br />

LN<br />

END<br />

Controller unit #2 ack program:<br />

Program:<br />

DEF ack<br />

GO1<br />

END<br />

; Program main<br />

; Indefinite loop<br />

; Wait for input #1 to go active<br />

; Initiate move<br />

; Wait for input #1 to go inactive<br />

; Send message "2_D2000" down daisy chain<br />

; Send message "2_ACK" down the daisy chain<br />

; End of loop<br />

; End of program main<br />

; Program ack<br />

; Start motion<br />

; End of program ack<br />

Chapter 2. Communication 59


Daisy-Chaining <strong>and</strong> RP240s<br />

RS-485 Multi-Drop<br />

RP240s cannot be placed in the drive/controller daisy chain; RP240s can only be connected to<br />

the designated RP240 port on a drive/controller. It is possible to use only one RP240 with a<br />

drive/controller daisy-chain to input data for multiple units on the chain. The example below<br />

(for the drive/controller master with an RP240 connected) reads data from the RP240 into<br />

variables #1 (data1) & #2 (data2), then sends the messages 3_Ddata1,data2 <strong>and</strong><br />

3_GO.<br />

Sample portion of code:<br />

L<br />

; Indefinite loop<br />

VAR1=DREAD ; Read RP240 data into variable #1<br />

VAR2=DREAD ; Read RP240 data into variable #2<br />

EOT0,0,0,0<br />

; Turn off <br />

WRITE"3_D"<br />

; Send message "3_D" down the daisy chain<br />

WRVAR1<br />

; Send variable #1 data down the daisy chain<br />

WRITE","<br />

; Send message "," down the daisy chain<br />

EOT13,0,0,0<br />

; Turn on <br />

WRVAR2<br />

; Send variable #2 data down the daisy chain<br />

WRITE"3_GO"<br />

; Send message "3_GO" down the daisy chain<br />

LN<br />

; End of loop<br />

Up to 99 Gem6K Series products may be multi-dropped. Refer to your product's Installation<br />

<strong>Guide</strong> for multi-drop connections.<br />

To establish device addresses, using the ADDR comm<strong>and</strong>:<br />

The ADDR comm<strong>and</strong> allows you to establish up to 99 unique addresses. To use the ADDR<br />

comm<strong>and</strong>, you must address each unit individually before it is connected on the multi drop.<br />

For example, given that each product is shipped configured with address zero, you could set<br />

up a 4-unit multi-drop with the comm<strong>and</strong>s below, <strong>and</strong> then connect them in a multi drop:<br />

1. Connect the unit that is to be unit #1 <strong>and</strong> transmit the Ø_ADDR1 comm<strong>and</strong> to it.<br />

2. Connect the unit that is to be unit #2 <strong>and</strong> transmit the Ø_ADDR2 comm<strong>and</strong> to it.<br />

3. Connect the unit that is to be unit #3 <strong>and</strong> transmit the Ø_ADDR3 comm<strong>and</strong> to it.<br />

4. Connect the unit that is to be unit #4 <strong>and</strong> transmit the Ø_ADDR4 comm<strong>and</strong> to it.<br />

If you need to replace a unit in the multi drop, send the Ø_ADDRi comm<strong>and</strong> to it, where<br />

"i" is the address you wish the new unit to have.<br />

To send a Gem6K comm<strong>and</strong> from the master to a specific unit in the multi-drop, prefix the<br />

comm<strong>and</strong> with the unit address <strong>and</strong> an underscore (e.g., 3_OUTØ turns off output #1 on unit<br />

#3). The master unit (if it is not a Gem6K product) may receive data from a multi-drop unit.<br />

The ECHO comm<strong>and</strong> was enhanced with options 2 <strong>and</strong> 3. The purpose is to accommodate an<br />

RS-485 multi-drop configuration in which a host computer communicates to the “master”<br />

Gem6K controller over RS-232 (COM2 port) <strong>and</strong> the master Gem6K controller communicates<br />

over RS-485 (COM1 port) to the rest of the units on the multi-drop. For this configuration,<br />

the echo setup should be configured by sending to the master the following comm<strong>and</strong>s<br />

executed in the order shown. In this example, it is assumed that the master's device address is<br />

set to 1. Hence, each comm<strong>and</strong> is prefixed with “1_” to address only the master unit.<br />

60 Gem6K Series Programmer’s <strong>Guide</strong>


1_PORT2........... Subsequent comm<strong>and</strong> affects COM1, the RS-485 port<br />

1_ECHO2........... Echo characters back through the other port, COM2<br />

1_PORT1........... Subsequent comm<strong>and</strong> affects COM2, the RS-232 port<br />

1_ECHO3........... Echo characters back through both ports, COM1 <strong>and</strong> COM2<br />

NOTES<br />

Controllers on a multi-drop do not support XON/XOFF. To ensure that XON/XOFF is disabled<br />

for COM1, send the PORT1 comm<strong>and</strong> followed by the XONOFFØ comm<strong>and</strong>.<br />

Only ECHOØ or ECHO2 can be used.<br />

Chapter 2. Communication 61


Basic Operation Setup<br />

3C HAPTER THREE<br />

Basic Operation<br />

Setup<br />

IN THIS CHAPTER<br />

This chapter will enable you to underst<strong>and</strong> <strong>and</strong> implement these basic operation features:<br />

• Before You Begin (setup programs, Motion Planner, resetting, etc.).................64<br />

• Memory Allocation (CAUTION: Do not place in “setup” program)........................ 65<br />

• Drive Setup (fault level, resolution, disable drive on kill)......................................... 66<br />

• Scaling ................................................................................................................ 67<br />

• Positioning Modes .............................................................................................. 71<br />

• End-of-Travel Limits.......................................................................................... 74<br />

• Homing............................................................................................................... 79<br />

• Encoder-Based Stepper Operation (stepper axes only).......................................84<br />

• Tuning Procedures (servos only) ........................................................................ 85<br />

• Target Zone Mode (servo axes only)..................................................................84<br />

• Programmable Inputs <strong>and</strong> Outputs (incl. triggers <strong>and</strong> auxiliary outputs) ...........90<br />

• Variable Arrays (teaching variable data)........................................................... 110


Before You Begin<br />

WARNING<br />

The Gem6K Product is used to control your system's electrical <strong>and</strong> mechanical components.<br />

Therefore, you should test your system for safety under all potential conditions. Failure to do so<br />

can result in damage to equipment <strong>and</strong>/or serious injury to personnel.<br />

Setup Parameters Discussed in this Chapter<br />

Below is a list of the setup parameters discussed in this chapter. You can check the status of each parameter setting by<br />

entering the respective setup comm<strong>and</strong> without any comm<strong>and</strong> fields (e.g., typing LIMFNC displays the current<br />

function <strong>and</strong> state of each limit input). Some setup parameters are also reported with the TSTAT <strong>and</strong> TASF status<br />

comm<strong>and</strong>s (these <strong>and</strong> other status comm<strong>and</strong>s are described on page 222).<br />

Setup Parameter Comm<strong>and</strong> See Pg. Setup Parameter Comm<strong>and</strong> See Pg.<br />

Memory (status with TDIR & TMEM) ...........MEMORY.............11 & 65<br />

Drive Setup............................................................................66<br />

Drive resolution (stepper only) ..............DRES<br />

Drive disable on kill................................KDRIVE<br />

Drive stall detection ...............................DSTALL<br />

Scaling...................................................................................67<br />

Enable scaling factor .............................SCALE<br />

Acceleration scaling factor.....................SCLA<br />

Distance scaling factor ..........................SCLD<br />

Velocity scaling factor............................SCLV<br />

Positioning Mode...................................................................71<br />

Continuous or preset .............................MC<br />

Preset: absolute or incremental.............MA<br />

Encoder Based Stepper Operation (stepper only) ................84<br />

Encoder resolution.................................ERES<br />

Encoder capture/counting enable..........ENCCNT<br />

Use encoder as counter ........................ENCSND ((keep))<br />

Stall detection........................................ESTALL<br />

Kill when stall is detected ......................ESK<br />

Stall deadb<strong>and</strong>.......................................ESDB<br />

Tuning Procedures (servos only) ..........................................85<br />

Current loop b<strong>and</strong>width .........................DIBW<br />

Torque/force limit...................................DMTLIM<br />

Velocity limit...........................................DMVLIM<br />

Notch filter A depth................................DNOTAD<br />

Notch filter A frequency .........................DNOTAF<br />

Notch filter A quality factor.....................DNOTAQ<br />

Notch filter B depth................................DNOTBF<br />

Notch filter B quality factor.....................DNOTBQ<br />

Notch filter B frequency ........................DNOTBF<br />

Notch lead filter break frequency ..........DNOTLD<br />

Notch lag filter break frequency ............DNOTLG<br />

Position loop b<strong>and</strong>width ........................DPBW<br />

Velocity loop b<strong>and</strong>width ........................DVBW<br />

Load damping .......................................LDAMP<br />

Load-to-rotor inertia ratio<br />

or load-to-force mass ratio ....................LJRAT<br />

Acceleration feed forward gain .............DNOTBF<br />

Servo control signal offset .....................SGAF<br />

Integrator enable ..................................SGINTE<br />

Current damping ratio ...........................SGIRAT<br />

Target Zone end-of-move settling criteria (servo axes)........ 84<br />

Target zone mode enable..................................................... STRGTE<br />

Target distance zone ...................................................... STRGTD<br />

Target velocity zone........................................................ STRGTV<br />

Target settling timeout period ......................................... STRGTT<br />

Programmable Input Functions ............................................ 90<br />

Define input functions ........................... INFNC & LIMFNC<br />

Input active level................................... INLVL & LIMLVL<br />

Input debounce ..................................... INDEB<br />

Trigger interrupt - special functions ...... TRGFN<br />

Trigger interrupt - lockout time.............. TRGLOT<br />

Virtual Inputs......................................... IN<br />

Programmable Output Functions.......................................... 90<br />

Define output functions......................... OUTFNC<br />

Output active level ................................ OUTLVL<br />

End-of-travel limits................................................................ 74<br />

Limit function assignments ................... LIMFNC & INFNC<br />

Hardware – enabled ............................. LH<br />

Hardware – deceleration....................... LHAD<br />

Hardware – s-curve decel..................... LHADA<br />

Hardware – active level of input............ LIMLVL<br />

Software – enabled............................... LS<br />

Software – deceleration........................ LSAD<br />

Software – s-curve decel ...................... LSADA<br />

Software – negative direction limit ....... LSNEG<br />

Software – positive direction limit ........ LSPOS<br />

Homing ................................................................................. 79<br />

Limit function assignments ................... LIMFNC & INFNC<br />

Acceleration.......................................... HOMA<br />

S-curve acceleration............................. HOMAA<br />

Deceleration.......................................... HOMAD<br />

S-curve deceleration............................. HOMADA<br />

Backup to home.................................... HOMBAC<br />

Final approach direction ....................... HOMDF<br />

Stopping edge of switch........................ HOMEDG<br />

Home switch active level ...................... LIMLVL<br />

Velocity ................................................ HOMV<br />

Velocity of final approach...................... HOMVF<br />

Home to Z channel input....................... HOMZ<br />

Variable Arrays (teaching variable data) .............................. 110<br />

Initialize numeric variable for data ........ VAR or VARI<br />

Define data program <strong>and</strong> program size DATSIZ<br />

Set data pointer & establish increment. DATPTR<br />

Reset data pointer to specific location.. DATRST<br />

64 Gem6K Series Programmer’s <strong>Guide</strong>


Position loop ratio .................................SGPRAT<br />

Velocity/position b<strong>and</strong>width ratio ..........SGPSIG<br />

Velocity feed forward gain ....................SGVP<br />

Velocity damping ratio ..........................SGVRAT<br />

Using a Setup Program<br />

The features described in this chapter are configured with certain Gem6K Series comm<strong>and</strong>s,<br />

commonly referred to as “setup comm<strong>and</strong>s.” We recommend placing these comm<strong>and</strong>s (except<br />

MEMORY) into a special “setup program” that is executed to prepare the Gem6K Series<br />

product for subsequent controller operations. Further details about setup programming are<br />

provided in the Creating <strong>and</strong> Executing a Setup Program section, page 13.<br />

USE THE START WIZARD IN MOTION PLANNER<br />

The easiest way to get started with your setup program is to use the Start Wizard in Motion<br />

Planner’s Wizard Editor. After the Start wizard is finished, you can include additional setup<br />

code according to your programming needs. The Start wizard also defines which program is<br />

your start-up (STARTP) program. If you do not wish to program you entire application with<br />

the Wizards, you can use the Start wizard to get the basic setup accomplished, <strong>and</strong> then<br />

copy the generated code into the Program Editor. (Wizard version 4.2 or later required)<br />

Resetting the Controller<br />

There are two primary ways to reset the Gem6K controller (listed below).<br />

• Cycle power.<br />

• Execute the RESET comm<strong>and</strong>.<br />

When the controller is reset, most of the previously entered comm<strong>and</strong> parameters are returned<br />

to their original factory default values. All programs <strong>and</strong> variables, as well as certain<br />

comm<strong>and</strong> values, are retained in non-volatile memory (see page 35). If a start-up program is<br />

assigned with the STARTP comm<strong>and</strong>, resetting the controller will automatically execute that<br />

program. If you are using an RP240, the RESET function is available if you use the default<br />

menu system (see page 130).<br />

Memory Allocation<br />

For details about memory allocation, refer to Storing Programs on page 11.<br />

CAUTION<br />

Issuing a new MEMORY comm<strong>and</strong> (e.g., MEMORY200000,100000) will erase all existing<br />

programs <strong>and</strong> compiled profiles residing in the Gem6K product’s memory. To determine the<br />

status of memory allocation, use the TMEM comm<strong>and</strong>.<br />

Do not place the MEMORY comm<strong>and</strong> in the program assigned as the startup (STARTP)<br />

program. Doing so would erase all programs <strong>and</strong> segments upon cycling power or issuing<br />

the RESET comm<strong>and</strong>.<br />

Chapter 3. Basic Operation Setup 65


Drive Setup<br />

Drive Stall Detection (stepper only)<br />

The DSTALL comm<strong>and</strong> determines if the encoderless stall feature will be checked as Drive<br />

Stall indicator.<br />

The state of the encoderless stall feature can be monitored at all times with Extended Axis<br />

Status bit #17 (reported with TASX, TASF, <strong>and</strong> the ASX assignment/comparison oper<strong>and</strong>).<br />

When a Drive Stall is detected, the Gem6K responds as follows: (this response is the same as<br />

that for Encoder Stall Detection, which is enabled with the ESTALL comm<strong>and</strong>)<br />

• The stall is reported with Axis Status bit #12 (reported with TAS, TASF, <strong>and</strong> AS).<br />

• If ERROR error-checking bit #1 is enabled (ERROR.1-1):<br />

- The stall is reported with Error Status bit #1 (reported with TER, TERF, <strong>and</strong> ER).<br />

- The Gem6K branches to the assigned ERRORP program.<br />

• If the Kill-on-Stall feature is enabled (ESK1), the Gem6K immediately kills motion.<br />

Drive Resolution (stepper only)<br />

The drive resolution controls the number of steps the Gem6K controller considers as a full<br />

revolution for the motor drive. The drive’s resolution is set with the DRES comm<strong>and</strong> (default<br />

is 25,000 steps/rev).<br />

Disable Drive On Kill (servo only)<br />

Normally, when you issue a Kill comm<strong>and</strong> (K, !K, or K) or activate an input<br />

configured as a kill input (see INFNCi-C or LIMFNCi-C comm<strong>and</strong>), motion is stopped at<br />

the hard limit (LHAD/LHADA) deceleration setting <strong>and</strong> the drives are left in the enabled state<br />

(DRIVE1).<br />

However, your application may require you to disable (shut down or de-energize) the drives in<br />

a Kill situation to, for example, prevent damage to the motors or other system mechanical<br />

components. If so, set the controller to the Disable Drive on Kill mode with the KDRIVE1<br />

comm<strong>and</strong>. In this mode, a kill comm<strong>and</strong> or kill input will shut down the drives immediately,<br />

letting the motors free wheel (without control from the drives) to a stop.<br />

66 Gem6K Series Programmer’s <strong>Guide</strong>


Scaling<br />

Units of Measure without Scaling<br />

Scaling is disabled (SCALEØ) as the factory default condition:<br />

• Steppers: When scaling is disabled, all distance values entered are in comm<strong>and</strong>ed counts<br />

(sometimes referred to as motor steps), <strong>and</strong> all acceleration, deceleration <strong>and</strong> velocity<br />

values entered are internally multiplied by the DRES comm<strong>and</strong> value.<br />

• Servos:<br />

Units of Measure (per feedback source)<br />

Motion Attribute Encoder Resolver<br />

Accel/Decel Revs/sec/sec * revs/sec/sec<br />

Velocity Revs/sec * revs/sec<br />

Distance Counts (steps) ** Counts (steps) **<br />

* All accel/decel & velocity values are internally multiplied by the ERES value.<br />

** Distance is measured in the counts received from the feedback device.<br />

What is Scaling<br />

Scaling allows you to program acceleration, deceleration, velocity, <strong>and</strong> position values in<br />

units of measure that are appropriate for your application. The SCALE comm<strong>and</strong> is used to<br />

enable or disable scaling (SCALE1 to enable, SCALEØ to disable). The motion type(s) you are<br />

using in your application determines which scale factor comm<strong>and</strong>s you need to configure:<br />

Type of Motion<br />

Accel/Decel<br />

Scaling<br />

Velocity<br />

Scaling<br />

Distance<br />

Scaling<br />

St<strong>and</strong>ard Point-to-Point Motion SCLA SCLV SCLD<br />

Following SCLA SCLV SCLD for follower distances<br />

SCLMAS for master distances<br />

* A separate description of implementing scaling for Following is provided on page 70.<br />

When Should I Define Scaling Factors<br />

Scaling calculations are performed when a program is defined or downloaded. Consequently,<br />

you must enable scaling (SCALE1) <strong>and</strong> define the scaling factors (SCLD, SCLA, SCLV,<br />

SCLMAS) prior to defining (DEF), uploading (TPROG), or running (RUN) the program.<br />

NOTE<br />

All scaling parameters<br />

are saved in batterybacked<br />

RAM<br />

RECOMMENDATION: Place the scaling comm<strong>and</strong>s at the beginning of your program file,<br />

before the location of any defined programs. This ensures that the motion parameters in<br />

subsequent programs in your program file are scaled correctly. When you use Motion Planner’s<br />

Setup Generator wizard, the scaling comm<strong>and</strong>s are automatically placed in the appropriate<br />

location in your program file.<br />

ALTERNATIVE: Scaling factors could be defined via a terminal emulator just before defining<br />

or downloading a program. Because scaling comm<strong>and</strong> values are saved in battery-backed<br />

RAM (remembered after you cycle power or issue a RESET comm<strong>and</strong>), all subsequent program<br />

definitions <strong>and</strong> downloads will be scaled correctly.<br />

NOTES<br />

• Scaling comm<strong>and</strong>s are not allowed in a program. If there are scaling comm<strong>and</strong>s in a<br />

program, the controller will report an error message (“COMMAND NOT ALLOWED IN<br />

PROGRAM”) when the program is downloaded.<br />

• If you intend to upload a program with scaled motion parameters, be sure to use<br />

Motion Planner. Motion Planner automatically uploads the scaling parameters <strong>and</strong><br />

places them at the beginning of the program file containing the uploaded program from<br />

the controller. This ensures correct scaling when the program file is later downloaded.<br />

Chapter 3. Basic Operation Setup 67


Acceleration & Deceleration Scaling (SCLA)<br />

Steppers:<br />

Servos:<br />

If scaling is enabled (SCALE1), all accel/decel values entered are internally<br />

multiplied by the acceleration scaling factor to convert user units/sec/sec to<br />

comm<strong>and</strong>ed counts/sec/sec. The scaled values are always in reference in<br />

comm<strong>and</strong>ed counts, regardless of the existence of an encoder.<br />

If scaling is enabled (SCALE1), all accel/decel values entered are internally<br />

multiplied by the acceleration scaling factor to convert user units/sec/sec to<br />

encoder or analog input counts/sec/sec.<br />

All accel/decel comm<strong>and</strong>s for point-to-point motion (e.g., A, AA, AD, HOMA, HOMAD, JOGA,<br />

etc.) are multiplied by the SCLA comm<strong>and</strong> value.<br />

As the accel/decel scaling factor (SCLA) changes, the<br />

resolution of the accel <strong>and</strong> decel values <strong>and</strong> the<br />

number of positions to the right of the decimal point<br />

also change (see table at right). An accel/decel value<br />

with greater resolution than allowed will be truncated<br />

(e.g., if scaling is set to SCLA10, the A9.9999<br />

comm<strong>and</strong> would be truncated to A9.9).<br />

SCLA value<br />

(steps/unit 2 )<br />

1 - 9<br />

10 - 99<br />

100 - 999<br />

1000 - 9999<br />

10000 - 99999<br />

100000 - 999999<br />

Decimal<br />

Places<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Use the following equations to determine the range of acceleration <strong>and</strong> deceleration values for<br />

your product.<br />

Axis Type Min. Accel or Decel (resolution)<br />

Stepper 0.001 ∗ DRES<br />

SCLA<br />

Servo<br />

0.001 ∗ ERES<br />

Encoder feedback:<br />

SCLA<br />

Resolver<br />

Max. Accel or Decel<br />

999.9999 ∗ DRES<br />

SCLA<br />

999.9999 ∗ ERES<br />

Encoder feedback:<br />

SCLA<br />

Resolver<br />

Velocity Scaling (SCLV)<br />

Steppers:<br />

Servos:<br />

If scaling is enabled (SCALE1), all velocity values entered are internally<br />

multiplied by the velocity scaling factor to convert user units/sec to<br />

comm<strong>and</strong>ed counts/sec. The scaled values are always in reference to<br />

comm<strong>and</strong>ed counts (sometimes referred to as “motor steps”).<br />

If scaling is enabled (SCALE1), all velocity values entered are internally<br />

multiplied by the velocity scaling factor to convert user units/sec to encoder or<br />

analog input counts/sec.<br />

All velocity comm<strong>and</strong>s for point-to-point motion (e.g., V, HOMV, HOMVF, JOGVH, JOGVL,<br />

etc.) are multiplied by the SCLV comm<strong>and</strong> value.<br />

As the velocity scaling factor (SCLV) changes, the velocity comm<strong>and</strong>'s range <strong>and</strong> its decimal<br />

places also change (see table below). A velocity value with greater resolution than allowed<br />

will be truncated. For example, if scaling is set to SCLV10, the V9.9999 comm<strong>and</strong> would<br />

be truncated to V9.9.<br />

SCLV Value<br />

(counts/unit)<br />

1 - 9<br />

10 - 99<br />

100 - 999<br />

1000 - 9999<br />

10000 - 99999<br />

100000 - 999999<br />

Velocity Resolution<br />

(units/sec)<br />

1<br />

0.1<br />

0.01<br />

0.001<br />

0.0001<br />

0.00001<br />

Decimal Places<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

68 Gem6K Series Programmer’s <strong>Guide</strong>


Use the following equations to determine the maximum velocity range for your product type.<br />

Max. Velocity for Steppers<br />

6,5000,000<br />

SCLV<br />

n = maximum velocity as set<br />

by the PULSE comm<strong>and</strong>.<br />

Max. Velocity for Servos<br />

(determined by feedback source selected for axis #1)<br />

Encoder Feedback: 6,5000,000<br />

SCLV<br />

Resolver<br />

Distance Scaling (SCLD <strong>and</strong> SCLMAS)<br />

Steppers:<br />

Servos:<br />

If scaling is enabled (SCALE1), all distance values entered are internally<br />

multiplied by the distance scaling factor to convert user units to comm<strong>and</strong>ed<br />

counts (“motor steps”).<br />

If scaling is enabled (SCALE1), all distance values entered are internally<br />

multiplied by the distance scaling factor to convert user units to encoder or<br />

analog input counts.<br />

All distance comm<strong>and</strong>s for point-to-point motion (e.g., D, PSET, REG, SMPER) are multiplied<br />

by the SCLD comm<strong>and</strong> value.<br />

Scaling for Following Motion: The SCLD comm<strong>and</strong> defines the follower’s distance scale factor, <strong>and</strong><br />

the SCLMAS comm<strong>and</strong> defines the master's distance scale factor. The Following-related comm<strong>and</strong>s that<br />

are affected by SCLD <strong>and</strong> SCLMAS are listed in the table below.<br />

Comm<strong>and</strong>s Affected by Master Scaling (SCLMAS)<br />

FMCLEN: Master Cycle Length<br />

FMCP: Master Cycle Position Offset<br />

FOLMD: Master Distance<br />

FOLRD: Follower-to-Master Ratio (Denominator)<br />

GOWHEN: Conditional GO (left-h<strong>and</strong> variable is PMAS)<br />

TPMAS & [ PMAS ]: Position of Master Axis<br />

TVMAS & [ VMAS ]: Velocity of Master Axis<br />

Comm<strong>and</strong>s Affected by Follower Scaling (SCLD)<br />

FOLRN: Follower-to-Master Ratio (Numerator)<br />

FSHFD: Preset Phase Shift<br />

GOWHEN: Conditional GO (left-h<strong>and</strong> variable ≠ PMAS)<br />

TPSHF & [ PSHF ]: Net Position Shift of Follower<br />

TPSLV & [ PSLV ]: Position of Follower Axis<br />

Fractional Step Truncation<br />

If you are operating in the<br />

incremental mode (MAØ), or<br />

specifying master distance<br />

values with FOLMD, when the<br />

distance scaling factor (SCLD or<br />

SCLMAS) <strong>and</strong> the distance value<br />

are multiplied, a fraction of one<br />

step may be left over. This<br />

fraction is truncated when the<br />

distance value is used in the<br />

move algorithm. This truncation<br />

error can accumulate over a<br />

period of time, when performing<br />

incremental moves continuously<br />

in the same direction. To<br />

eliminate this truncation<br />

problem, set SCLD or SCLMAS to<br />

1, or a multiple of 10.<br />

As the SCLD or SCLMAS scaling factor changes, the distance comm<strong>and</strong>'s range <strong>and</strong> its<br />

decimal places also change (see table below). A distance value with greater resolution than<br />

allowed will be truncated. For example, if scaling is set to SCLD400, the D105.2776<br />

comm<strong>and</strong> would be truncated to D105.277.<br />

SCLD or SCLMAS Value<br />

(counts/unit)<br />

Distance Resolution<br />

(units)<br />

Distance Range<br />

(units)<br />

1 - 9 1.0 0 - ±999999999 0<br />

10 - 99 0.10 0.0 - ±99999999.9 1<br />

100 - 999 0.010 0.00 - ±9999999.99 2<br />

1000 - 9999 0.0010 0.000 - ±999999.999 3<br />

10000 - 99999 0.00010 0.0000 - ±99999.9999 4<br />

100000 - 999999 0.00001 0.00000 - ±9999.99999 5<br />

Decimal<br />

Places<br />

Chapter 3. Basic Operation Setup 69


Scaling Example —<br />

Steppers<br />

User has a 25,000 step/rev motor/drive attached to 5-pitch leadscrew. The user wants to program motion<br />

parameters in inches; therefore the scale factor calculation is: 25,000 steps/rev x 5 revs/inch = 125,000<br />

steps/inch. For instance, with a scale factor of 125,000, the operator could enter a move distance value of<br />

2.000 <strong>and</strong> the controller would send out 250,000 pulses, corresponding to two inches of travel.<br />

SCALE1<br />

DRES25000<br />

SCLD125000<br />

SCLV125000<br />

SCLA125000<br />

; Enable scaling<br />

; Set drive resolution to 25,000 steps/rev<br />

; Allow entering distance in inches<br />

; Allow entering velocity in inches/sec<br />

; Allow entering accel/decel in inches/sec/sec<br />

Scaling Example —<br />

Servos<br />

User has a 4,000 count/rev servo motor/drive system (using a 1000-line encoder) attached to a 5-pitch<br />

leadscrew. The user wants to position in inches; therefore, the scale factor calculation is 4,000 counts/rev<br />

x 5 revs/inch = 20,000 counts/inch.<br />

ERES4000<br />

SCALE1<br />

SCLD20000<br />

SCLV20000<br />

SCLA20000<br />

; Set encoder resolution to 4000 steps/rev (post quadrature)<br />

; Enable scaling<br />

; Allow entering distance values in inches<br />

; Allow entering velocity values in inches/sec<br />

; Allow entering accel/decel values in inches/sec/sec<br />

; Select ANI feedback for axis #1<br />

; Enable scaling<br />

; Allow entering distance values in volts<br />

; Allow entering velocity values in volts/sec<br />

; Allow entering accel/decel values in volts/sec/sec<br />

; Select encoder feedback for both axes (prepare for motion)<br />

Scaling Example —<br />

Following<br />

Typically, the master <strong>and</strong> follower scale factors are programmed so that master <strong>and</strong> follower units are the<br />

same, but this is not required. Consider the scenario below as an example.<br />

The master is a 1000-line encoder (4000 counts/rev post-quadrature) mounted to a 50 teeth/rev pulley<br />

attached to a 10 teeth/inch conveyor belt, resulting in 80 counts/tooth (4000 counts/50 teeth = 80<br />

counts/tooth). To program in inches, you would set up the master scaling factor with the SCLMAS800<br />

comm<strong>and</strong> (80 counts/tooth ∗ 10 teeth/inch = 800 counts/inch).<br />

The follower axis is a servo motor with position feedback from a 1000-line encoder (4000 counts/rev).<br />

The motor is mounted to a 4-pitch (4 revs/inch) leadscrew. Thus, to program in inches, you would set<br />

up the follower scaling factor with the SCLD16000 comm<strong>and</strong> (4000 counts/rev ∗ 4 revs/inch = 16000<br />

counts/inch).<br />

SCALE1<br />

; Enable scaling<br />

SCLMAS800<br />

; Master scaling:<br />

; (80 counts/tooth * 10 teeth/inch = 800 counts/inch)<br />

SCLD16000<br />

; Follower scaling:<br />

; (4000 counts/rev ∗ 4 revs/inch = 16000 counts/inch)<br />

70 Gem6K Series Programmer’s <strong>Guide</strong>


Positioning Modes<br />

The Gem6K controller can be programmed to position in either the preset (incremental or<br />

absolute) mode or the continuous mode. You should select the mode that will be most<br />

convenient for your application. For example, a repetitive cut-to-length application requires<br />

incremental positioning. X-Y positioning, on the other h<strong>and</strong>, is better served in the absolute<br />

mode. Continuous mode is useful for applications that require constant movement of the load<br />

based on internal conditions or inputs, not distance.<br />

Refer also to the<br />

Scaling section on<br />

page 67.<br />

Positioning modes require acceleration, deceleration, velocity, <strong>and</strong> distance comm<strong>and</strong>s<br />

(continuous mode does not require distance). The table below identifies these comm<strong>and</strong>s <strong>and</strong><br />

their units of measure, <strong>and</strong> which scaling comm<strong>and</strong> affects them.<br />

Parameter Units (Unscaled), Stepper Units (Unscaled), Servo Unit Scaling Comm<strong>and</strong> *<br />

Acceleration revs/sec 2 encoder/resolver: revs/sec 2 SCLA<br />

Deceleration revs/sec 2 encoder/resolver: revs/sec 2 SCLA<br />

Velocity revs/sec encoder/resolver: revs/sec SCLV<br />

Distance steps counts SCLD ***<br />

* Scaling must first be enabled with the SCALE1 comm<strong>and</strong>. For details on scaling, refer to page 67.<br />

*** An axis assigned as a master (for Following) is scaled by the SCLMAS comm<strong>and</strong>.<br />

On-The-Fly (Pre-emptive Go) Motion Profiling<br />

While motion is in progress (regardless of the positioning mode), you can change these<br />

motion parameters to affect a new profile:<br />

• Acceleration (A) — s-curve acceleration not allowed during on-the-fly changes<br />

• Deceleration (AD) — s-curve deceleration not allowed during on-the-fly changes<br />

• Velocity (V)<br />

• Distance (D)<br />

• Preset or Continuous Positioning Mode Selection (MC)<br />

• Incremental or Absolute Positioning Mode Selection (MA)<br />

• Following Ratio Numerator <strong>and</strong> Denominator (FOLRN <strong>and</strong> FOLRD, respectively)<br />

The motion parameters can be changed by sending the respective comm<strong>and</strong> (e.g., A, V, D,<br />

MC, etc.) followed by the GO comm<strong>and</strong>. If the continuous comm<strong>and</strong> execution mode is<br />

enabled (COMEXC1), you can execute buffered comm<strong>and</strong>s; otherwise, you must prefix each<br />

comm<strong>and</strong> with an immediate comm<strong>and</strong> identifier (e.g., !A, !V, !D, !MC, etc., followed by<br />

!GO). The new GO comm<strong>and</strong> pre-empts the motion profile in progress with a new profile<br />

based on the new motion parameter(s).<br />

For more information, see On-The-Fly Motion Profiling on page 155.<br />

Chapter 3. Basic Operation Setup 71


Preset Positioning Mode<br />

Incremental Mode<br />

Moves<br />

Example<br />

A preset move is a point-to-point move of a specified distance. You can select preset moves by<br />

putting the Gem6K controller into preset mode (canceling continuous mode) using the MCØ<br />

comm<strong>and</strong>. Preset moves allow you to position the motor/load in relation to the previous stopped<br />

position (incremental mode—enabled with the MAØ comm<strong>and</strong>) or in relation to a defined zero<br />

reference position (absolute mode—enabled with the MA1 comm<strong>and</strong>).<br />

The incremental mode is the controller's default power-up mode. When using the Incremental<br />

Mode (MAØ), a preset move moves the motor/load the specified distance from its starting<br />

position. For example, if you start at position N, executing the D6ØØØ comm<strong>and</strong> in the MAØ<br />

mode will move the motor/load 6,000 units from the N position. Executing the D6ØØØ<br />

comm<strong>and</strong> again will move the motor/load an additional 6,000 units, ending the move 12,000<br />

units from position N.<br />

You can specify the direction of the move by using the optional sign + or - (e.g., D+6ØØØ or<br />

D-6ØØØ). Whenever you do not specify the direction (e.g., D6ØØØ), the unit defaults to the<br />

positive (+) direction.<br />

SCALE0 ; Disable scaling<br />

MA0 ; Set to Incremental Position Mode<br />

A2 ; Set acceleration to 2 units/sec/sec<br />

V5 ; Set velocity to 5 units/sec<br />

D4000 ; Set distance to 4,000 positive units<br />

GO ; Initiate motion on (move 4,000 positive units)<br />

GO ; Repeat the move<br />

D-8000 ; Set distance to 8,000 negative units<br />

; (return to original position)<br />

GO ; Initiate motion on (move 8,000 units in the negative<br />

; direction <strong>and</strong> end at its original starting position)<br />

Absolute Mode<br />

Moves<br />

A preset move in the Absolute Mode (MA1) moves the motor/load the distance that you specify<br />

from the absolute zero position.<br />

Establishing a Zero Position<br />

One way to establish the zero position is to issue the PSET comm<strong>and</strong> when the load is at the<br />

location you would like to reference as absolute position zero (e.g., PSETØ defines the current<br />

position as absolute position zero). Steppers with encoder feedback can use the PESET comm<strong>and</strong><br />

set the absolute encoder position in ENCCNT1 mode.<br />

The zero position is also established when the Go Home (HOM) comm<strong>and</strong> is issued, the absolute<br />

position register is automatically set to zero after reaching the home position, thus designating the<br />

home position as position zero.<br />

Example<br />

The direction of an absolute preset move depends upon the motor's/load's position at the<br />

beginning of the move <strong>and</strong> the position you comm<strong>and</strong> it to move to. For example, if the<br />

motor/load is at absolute position +12,500, <strong>and</strong> you instruct it to move to position +5,000<br />

(e.g., with the D5ØØØ comm<strong>and</strong>), it will move in the negative direction a distance of 7,500<br />

steps to reach the absolute position of +5,000.<br />

The Gem6K controller retains the absolute position, even while the unit is in the incremental<br />

mode. To ascertain the absolute position, use the TPC <strong>and</strong> PC comm<strong>and</strong>s.<br />

SCALE0 ; Disable scaling<br />

MA1 ; Set the controller to the absolute positioning mode<br />

PSET0 ; Set current absolute position to zero<br />

A5 ; Set acceleration to 5 units/sec/sec<br />

V3 ; Set velocity to 3 units/sec<br />

D4000 ; Set move to absolute position 4,000 units<br />

GO ; Initiate move (move to absolute position +4,000)<br />

D8000 ; Set move to absolute position +8,000<br />

GO ; Initiate move (starting from position +4,000, move 4,000<br />

; additional units in the positive direction to position +8,000)<br />

D0 ; Set move to absolute position zero<br />

GO ; Initiate move (starting at absolute position +8,000,<br />

; move 8,000 units in the negative direction to position zero)<br />

72 Gem6K Series Programmer’s <strong>Guide</strong>


Continuous Positioning Mode<br />

The Continuous Mode (MC1) is useful in these situations:<br />

• Applications that require constant movement of the load<br />

• Synchronize the motor to external events such as trigger input signals<br />

• Changing the motion profile after a specified distance or after a specified time period<br />

(T comm<strong>and</strong>) has elapsed<br />

You can manipulate the motor movement with either buffered or immediate comm<strong>and</strong>s. After<br />

you issue the GO comm<strong>and</strong>, buffered comm<strong>and</strong>s are not executed unless the continuous<br />

comm<strong>and</strong> execution mode (COMEXC1 comm<strong>and</strong>) is enabled. Once COMEXC1 is enabled,<br />

buffered comm<strong>and</strong>s are executed in the order in which they were programmed. More<br />

information on the COMEXC mode is provided on page 14.<br />

The comm<strong>and</strong> can be specified as immediate by placing an exclamation mark (!) in front of<br />

the comm<strong>and</strong>. When a comm<strong>and</strong> is specified as immediate, it is placed at the front of the<br />

comm<strong>and</strong> queue <strong>and</strong> is executed immediately.<br />

Example A COMEXC1 ; Enable continuous comm<strong>and</strong> processing mode<br />

COMEXS1<br />

; Allow comm<strong>and</strong> execution to continue after stop<br />

MC1<br />

; Sets mode to continuous<br />

A10 ; Sets acceleration to 10<br />

V1 ; Sets velocity to 1<br />

GO<br />

; Initiates move (Go)<br />

WAIT(VEL=1) ; Wait to reach continuous velocity<br />

T5<br />

; Time delay of 5 seconds<br />

S1<br />

; Initiate stop<br />

WAIT(MOV=b0) ; Wait for motion to completely stop<br />

COMEXC0<br />

; Disable continuous comm<strong>and</strong> processing mode<br />

; When the move is executed, the load will accelerate to 1 unit/sec,<br />

; continue at that rate for 5 seconds, <strong>and</strong> then decelerate to a stop.<br />

Example B DEF prog1 ; Begin definition of program prog1<br />

COMEXC1<br />

; Enable continuous comm<strong>and</strong> processing mode<br />

COMEXS1<br />

; Allow comm<strong>and</strong> execution to continue after stop<br />

MC1<br />

; Set to continuous positioning mode<br />

A10 ; Set acceleration to 10<br />

V1 ; Set velocity to 1<br />

GO<br />

; Initiate move (Go)<br />

WAIT(VEL=1) ; Wait for motor to reach continuous velocity<br />

T3<br />

; Time delay of 3 seconds<br />

A50 ; Set acceleration to 50<br />

V10 ; Set velocity to 10<br />

GO<br />

; Initiate acceleration <strong>and</strong> velocity changes<br />

T5<br />

; Time delay of 5 seconds<br />

S1<br />

; Initiate stop<br />

WAIT(MOV=b0) ; Wait for motion to completely stop<br />

COMEXC0<br />

; Disable continuous comm<strong>and</strong> processing mode<br />

END<br />

; End definition of program prog1<br />

While in continuous mode, motion can be stopped if:<br />

• You issue an immediate Stop (!S) or Kill (!K or ctrl/K) comm<strong>and</strong>.<br />

• The load trips an end-of-travel limit switch or encounters a software end-of-travel limit.<br />

• The load trips a registration input (a trigger input configured with the INFNCi-H<br />

comm<strong>and</strong> to function as a registration input).<br />

• The load trips an input configured as a kill input (INFNCi-C or LIMFNCi-C) or a<br />

stop input (INFNCi-D or LIMFNCi-D).<br />

NOTE<br />

While the axis is moving, you cannot change the parameters of some comm<strong>and</strong>s (such as DRIVE<br />

<strong>and</strong> HOM). This rule applies during the COMEXC1 mode <strong>and</strong> even if you prefix the comm<strong>and</strong> with an<br />

immediate comm<strong>and</strong> identifier (!). For more information, refer to Restricted Comm<strong>and</strong>s During<br />

Motion on page 17.<br />

Chapter 3. Basic Operation Setup 73


Linear Motion<br />

All <strong>Gemini</strong> drives operate internally in rotary units. If you use a linear motor,<br />

you must convert some of the motion parameters to their rotary equivalents:<br />

A .................... Acceleration<br />

AA .................. Acceleration (S-Curve)<br />

AD .................. Deceleration<br />

ADA ................ Deceleration (S-Curve)<br />

D .................... Distance/Position<br />

HOMA .............. Home Acceleration<br />

HOMV .............. Home Velocity<br />

HOMVF ............ Home Final Velocity<br />

LHAD .............. Hardware EOT Limit Decel<br />

LHADA ............ Hardware EOT Limit Decel (S-Curve)<br />

LSAD .............. Software EOT Limit Decel<br />

LSADA ............ Software EOT Limit Decel (S-Curve)<br />

PSET .............. Absolute Position Reference<br />

REG ................ Registration Distance<br />

REGLOD .......... Registration Lockout Distance<br />

STRGTD .......... Target Zone Distance<br />

STRGTV .......... Target Zone Velocity<br />

V .................... Velocity<br />

NOTE: Motor setup is h<strong>and</strong>led differently. If you use the Motion Planner<br />

setup wizard, you may enter the motor data in linear units <strong>and</strong> the software<br />

converts them to rotary units before they are downloaded to the drive.<br />

To make the conversion from linear to rotary <strong>and</strong> vice versa, the motor electrical<br />

pitch, or DMEPIT, must be known. The electrical pitch relates the linear distance<br />

required for the equivalent of one rotary motor revolution. Mechanically, the<br />

definition of the electrical pitch is the linear distance between two magnets<br />

comprising a full magnetic cycle. The illustration (below) shows an example of<br />

an electrical pitch of 42mm (DMEPIT42). NOTE: Parker linear motors have an<br />

electrical pitch of 42mm.<br />

Linear motor track<br />

;N S;N ;;N<br />

S<br />

S<br />

;N S<br />

;<br />

;;;<br />

42 mm<br />

Definition of DMEPIT (Electrical Pitch)<br />

The feedback resolution (ERES) value must be set to the number of counts for<br />

the electrical pitch (1 rev).<br />

# counts 1 m DMEPIT(<br />

mm)<br />

# counts<br />

ERES = × ×<br />

=<br />

1 m 1000 mm 1 ( rev)<br />

1 ( rev)<br />

14243<br />

14243 144<br />

2443<br />

from encoder<br />

conversion<br />

from motor<br />

Most linear encoders are metric, <strong>and</strong> most of those are 1 micron (1 µm):<br />

1 count 1,000,000 counts<br />

1 micron encoder = =<br />

1 µ m m<br />

Use the following formulas to convert from linear to rotary units. An sample<br />

conversion for position, acceleration, <strong>and</strong> velocity is provided on page 76.<br />

74 Gem6K Series Programmer’s <strong>Guide</strong>


Linear Position<br />

• D (distance)<br />

• PSET (absolute<br />

position reference)<br />

• REG (registration<br />

distance)<br />

• REGLOD (registration<br />

lockout distance)<br />

• STRGTD (target zone<br />

distance)<br />

Metric:<br />

English:<br />

Position<br />

Position<br />

# counts<br />

( counts)<br />

=<br />

( m)<br />

14243<br />

rotary ×<br />

from encoder<br />

Position<br />

# counts .0254 ( m)<br />

( counts)<br />

= ×<br />

( m)<br />

1 ( in)<br />

14243<br />

from encoder<br />

linear<br />

rotary ×<br />

( m)<br />

Position<br />

linear<br />

( in)<br />

Position<br />

# counts .0254 ( m)<br />

12 ( in)<br />

( counts)<br />

= × ×<br />

( m)<br />

1 ( in)<br />

1 ( ft)<br />

14243<br />

rotary ×<br />

from encoder<br />

Position<br />

linear<br />

( ft)<br />

Linear Velocity<br />

• V (velocity)<br />

• HOMV (home velocity)<br />

• HOMVF (home final<br />

velocity)<br />

• STRGTV (target<br />

velocity)<br />

Metric:<br />

English:<br />

Velocity<br />

Velocity<br />

1 1000 ( mm)<br />

( rps)<br />

=<br />

×<br />

Velocitylinear<br />

( m / s)<br />

DMEPIT(<br />

mm)<br />

1 ( m)<br />

rotary ×<br />

1 25.4 ( mm)<br />

( rps)<br />

=<br />

×<br />

Velocitylinear<br />

( in / s)<br />

DMEPIT(<br />

mm)<br />

1 ( in)<br />

rotary ×<br />

Velocity<br />

1 25.4 ( mm)<br />

12 ( in)<br />

( rps)<br />

=<br />

× × Velocitylinear<br />

( ft / s)<br />

DMEPIT(<br />

mm)<br />

1 ( in)<br />

1 ( ft)<br />

rotary ×<br />

Linear Acceleration<br />

• A (acceleration)<br />

• AA (s-curve accel)<br />

• AD (deceleration)<br />

• AD (s-curve decel)<br />

• HOMA (home accel)<br />

• LHAD (hard limit decel)<br />

• LHADA (hard limit<br />

s-curve decel)<br />

• LSAD (soft limit decel)<br />

• LSADA (soft limit<br />

s-curve decel)<br />

Metric:<br />

Accel<br />

English:<br />

Accel<br />

Accel<br />

1 1000 ( mm)<br />

( rpss)<br />

=<br />

×<br />

DMEPIT(<br />

mm)<br />

1 ( m)<br />

rotary ×<br />

1 25.4 ( mm)<br />

( rpss)<br />

=<br />

×<br />

DMEPIT(<br />

mm)<br />

1 ( in)<br />

rotary ×<br />

Accel<br />

Accel<br />

1 25.4 ( mm)<br />

12 ( in)<br />

( rpss)<br />

=<br />

× ×<br />

DMEPIT(<br />

mm)<br />

1 ( in)<br />

1 ( ft)<br />

linear<br />

linear<br />

rotary ×<br />

( m / s<br />

( in / s<br />

Accel<br />

2<br />

2<br />

)<br />

)<br />

linear<br />

( ft / s<br />

2<br />

)<br />

Chapter 3. Basic Operation Setup 75


Conversion<br />

Example<br />

Using a Parker 406-LXR-M-D15-E2 linear motor, the electrical pitch is 42mm<br />

(DMEPIT42) <strong>and</strong> the encoder is 1 micron. Here, we will convert an acceleration of<br />

10 inches/sec 2 , a velocity of 5 inches/sec, <strong>and</strong> a distance of 20 inches:<br />

1. Calculate ERES in counts/rev (result is ERES42000):<br />

1000 000 counts 1 ( m)<br />

42 ( mm)<br />

42 000 counts<br />

ERES =<br />

× × =<br />

1 ( m)<br />

1000 ( mm)<br />

( rev)<br />

1 ( rev)<br />

144244<br />

3 14243 14243<br />

from encoder<br />

conversion<br />

from motor<br />

2. Convert an acceleration of 10 inches/sec 2 to its rotary equivalent in revs/sec 2 :<br />

1 25.4 ( mm)<br />

Accel rotary ( rpss)<br />

= × × 10 ( in / s<br />

2 ) = 6. 0476 rpss<br />

42( mm)<br />

1 ( in)<br />

3. Convert a velocity of 5 inches/sec to its rotary equivalent in revs/sec:<br />

1 25.4 ( mm)<br />

Velocity rotary ( rps)<br />

= × × 5 ( in / s)<br />

= 3. 0238 rps<br />

42 ( mm)<br />

1 ( in)<br />

4. Convert a distance of 20 inches to its rotary equivalent in counts:<br />

1000000 counts .0254 ( m)<br />

Position rotary ( counts)<br />

= × × 20.0 ( in)<br />

= 508000<br />

1 ( m)<br />

1 ( in)<br />

144244<br />

3<br />

from encoder<br />

The program values resulting from these conversions are:<br />

ERES42000 ; Set encoder resolution to 42000 counts/rev<br />

A6.0476 ; Set acceleration to 6.0476 revs/sec/sec<br />

; (10 inches/sec/sec)<br />

V3.0238 ; Set velocity to 3.0238 revs/sec (5 inches/sec)<br />

D508000 ; Set distance to 508,000 counts (20 inches)<br />

76 Gem6K Series Programmer’s <strong>Guide</strong>


End-of-Travel Limits<br />

Related Comm<strong>and</strong>s:<br />

LH .............Hard limit enable<br />

LHAD .........Hard limit decel<br />

LHADA .......Hard limit decel (s)<br />

LIMLVL.....Limit switch polarity<br />

LS .............Soft limit enable<br />

LSAD .........Soft limit decel<br />

LSADA .......Soft limit decel (s)<br />

LSNEG .......Soft limit (negative)<br />

LSPOS .......Soft limit (positive)<br />

TLIM .........Hard limit status<br />

TASF .........Bits 15-18 indicate if<br />

..................hard or soft limit<br />

..................was encountered<br />

TERF .........Bit 2: hard limit hit<br />

..................Bit 3: soft limit hit<br />

..................(must enable ERROR<br />

..................checking bits 2 & 3)<br />

ERROR .......Bit 2 or 3 is enabled,<br />

..................the Gem6K will<br />

branch to<br />

..................the ERRORP program<br />

..................if a hard or soft limit<br />

..................is encountered<br />

The Gem6K controller can respond to both hardware <strong>and</strong> software end-of-travel limits. The<br />

purpose of hardware <strong>and</strong> software end-of-travel limits is to prevent the motor’s load from<br />

traveling past defined limits. Software <strong>and</strong> hardware limits are typically positioned in such a<br />

way that when the software limit is reached, the motor/load will start to decelerate toward the<br />

hardware limit, thus allowing for a much smoother stop at the hardware limit. Software limits<br />

can be used regardless of incremental or absolute positioning. When a hardware or software<br />

end-of-travel limit is reached, the Gem6K controller stops that axis using the respective<br />

hardware deceleration rate (set with LHAD & LHADA) or software limit deceleration rate (set<br />

with LSAD & LSADA).<br />

How to set up hardware end-of-travel limits (for each axis):<br />

1. Connect the end-of-travel limit inputs according to the instructions in your Gem6K<br />

product’s Installation <strong>Guide</strong>. To help assure safety, connect normally-closed switches<br />

<strong>and</strong> leave the active level at default “active low” setting (set with the LIMLVL<br />

comm<strong>and</strong>).<br />

2. (Optional) Define the inputs to be used as end-of-travel inputs for the respective axes.<br />

NOTE: When the Gem6K product is shipped from the factory, the inputs on the<br />

“LIMITS/HOME” connectors are factory-configured with the LIMFNC comm<strong>and</strong> to<br />

function as end-of-travel <strong>and</strong> home limits for their respective axes. If you intend to use<br />

digital inputs on an external I/O brick as limit inputs:<br />

a. Assign the limit function to the external input with the INFNC comm<strong>and</strong>.<br />

For example, 1INFNC9-1R assigns the “axis 1 positive end-of-travel limit”<br />

function to the 1 st input on SIM2 (I/O point 9) of I/O brick 1.<br />

b. Reassign the respective “LIMITS/HOME” input to a non-limit function with the<br />

LIMFNC comm<strong>and</strong>. For example, LIMFNC1-A assigns the “general-purpose<br />

input” function to limit input 1 (normally assigned the “axis 1 positive end-oftravel<br />

limit” function).<br />

3. Set the hard limit deceleration rate (LHAD & LHADA) to be used when the limit switch<br />

is activated. The LHADA comm<strong>and</strong> allows you to define an s-curve deceleration.<br />

Steppers: If your system is moving heavy loads or operating at high velocities, you may<br />

need to decrease the LHAD comm<strong>and</strong> value (deceleration rate) to prevent the motor<br />

from stalling.<br />

NOTES ON HARDWARE LIMITS<br />

• Gem6K controllers are shipped from the factory with the hardware end-of-travel limits<br />

enabled, but not connected. Therefore, motion will not be allowed until you do<br />

one of the following:<br />

- Install limit switches or jumper the end-of-travel limit terminals to the GND terminal<br />

(refer to your product's Installation <strong>Guide</strong> for wiring instructions).<br />

- Disable the limits with the LH comm<strong>and</strong> (recommended only if the load is not<br />

coupled).<br />

- Reverse the active level of the limits by executing the LIMLVL0 comm<strong>and</strong> for the<br />

respective axis.<br />

Chapter 3. Basic Operation Setup 77


How to set up software end-of-travel limits (for each axis):<br />

1. Use the LS comm<strong>and</strong> to enable the software end-of-travel limits/<br />

2. Define the positive-direction limit with the LSPOS comm<strong>and</strong>, <strong>and</strong> define the negativedirection<br />

limit with the LSNEG comm<strong>and</strong>. If you have scaling enabled (SCALE1), these<br />

limit values are scaled by the SCLD comm<strong>and</strong>. Both software limits may be defined<br />

with positive values.<br />

NOTES ON SOFTWARE LIMITS<br />

• The software limits (LSPOS & LSNEG) are referenced from a position of absolute<br />

zero. or negative values. Care must be taken when performing incremental moves<br />

because the software limits are always defined in absolute terms. They must be<br />

large enough to accommodate the moves, or a new zero reference position must be<br />

defined (using the PSET comm<strong>and</strong>) before each move.<br />

• To ensure proper motion when using soft end-of-travel limits, be sure to set the<br />

LSPOS value to an absolute value greater than the LSNEG value.<br />

Programming<br />

Example<br />

In this sample of code (not a complete program), the hardware <strong>and</strong> software limits are enabled.<br />

The distance scaling comm<strong>and</strong> (SCLD) is used to define software limit locations in revolutions<br />

from the absolute zero position (assumes a 4000 step/rev resolution). Deceleration rates are<br />

specified for both software <strong>and</strong> hardware limits. If a limit is encountered, the motor will<br />

decelerate to a stop.<br />

; *********************************************************<br />

; These scaling setup comm<strong>and</strong>s are downloaded before the<br />

; limit setup comm<strong>and</strong>s are executed:<br />

SCALE1 ; Enable scaling<br />

SCLD4000 ; Program soft limit distance in revs<br />

SCLA4000 ; Program soft limit accel/decel in revs/sec/sec<br />

ERES4000 ; Set encoder resolution to 4000 steps/rev<br />

; *********************************************************<br />

LH3 ; Enable limits 1 <strong>and</strong> 2, disable limits 3 <strong>and</strong> 4<br />

LHAD10 ; Set hard limit deceleration<br />

LSAD5 ; Set soft limit deceleration<br />

LSNEG0 ; Set negative direction soft limit<br />

; (0 revs)<br />

LSPOS10 ; Establish positive soft limit<br />

; (10 revs)<br />

LS3<br />

; Enable soft limits<br />

78 Gem6K Series Programmer’s <strong>Guide</strong>


Homing (Using the Home Inputs)<br />

Refer to the product's<br />

Installation <strong>Guide</strong> for<br />

instructions to wire a<br />

hardware home limit<br />

switch.<br />

The homing operation is a sequence of moves that position an axis using the Home Limit input<br />

<strong>and</strong>/or the Z Channel input of an incremental encoder. The goal of the homing operation is to<br />

return the load to a repeatable initial starting location.<br />

Zero Reference After Homing: As soon as the homing operation is successfully completed,<br />

the absolute position register is reset to zero, thus establishing a zero reference position.<br />

The homing operation has several potential homing functions you can customize to suit the<br />

needs of your application (illustrations of the effects of these comm<strong>and</strong>s are presented below):<br />

Comm<strong>and</strong> Homing Function (see respective comm<strong>and</strong> descriptions for further details) Default<br />

Homing Status:<br />

Status of homing moves<br />

is stored in bit #5 of the<br />

axis status register<br />

(indicates whether or not<br />

the home operation was<br />

successful). To display<br />

the status, use the TASF<br />

comm<strong>and</strong> or the TAS<br />

comm<strong>and</strong>. To use the<br />

status in a conditional<br />

expression (e.g., for an<br />

IF statement), use the<br />

AS assignment/comparison<br />

operator.<br />

HOM ...............Initiate the homing move. To start the homing move in the positive<br />

direction, use HOMØ; to home in the negative direction, use HOM1.<br />

HOMA.............Acceleration while homing.<br />

HOMAA...........S-curve acceleration while homing.<br />

HOMAD...........Deceleration while homing.<br />

HOMADA.........S-curve deceleration while homing.<br />

HOMBAC.........Back up to home. The load will decelerate to a stop after encountering<br />

the active edge of the home region, <strong>and</strong> then will move in the opposite<br />

direction at the HOMVF velocity until the active edge of the home region<br />

is encountered. Allows the use of HOMEDG <strong>and</strong> HOMDF.<br />

HOMDF...........Final approach direction —during backup to home (HOMBAC) or during<br />

homing to the Z channel input of an incremental encoder (HOMZ).<br />

HOMEDG.........Specify the side of the home switch on which to stop (either the<br />

positive-travel side or the negative-travel side).<br />

LIMLVL.........Define the home limit input active level (i.e., the state, high or low,<br />

which is to be considered an activation of the input). To use a normallyopen<br />

switch, select active low (LIMLVL0); to use a normally-closed<br />

switch, select active high (LIMLVL1).<br />

HOMV.............Velocity while seeking the home position (see also HOMVF).<br />

HOMVF...........Velocity while in final approach to home position—during backup to<br />

home (HOMBAC) or during homing to the Z channel input of an<br />

incremental encoder (HOMZ).<br />

HOMZ.............Home to the Z channel input from an incremental encoder. NOTE: The<br />

home limit input must be active prior to homing to the Z channel.<br />

HOMx<br />

(do not home)<br />

HOMA1Ø<br />

(10 units/sec 2 )<br />

HOMAA10<br />

(10 units/sec 2 )<br />

HOMAD10<br />

(10 units/sec 2 )<br />

HOMADA10<br />

(10 units/sec 2 )<br />

HOMBAC0<br />

(function disabled)<br />

HOMDF0<br />

(positive direction)<br />

HOMEGD0<br />

(positive-travel<br />

side of switch)<br />

LIMLVL0<br />

(active-low, use a<br />

normally-open<br />

switch)<br />

HOMV1<br />

(1 unit/sec)<br />

HOMVF.1<br />

(0.1 unit/sec)<br />

HOMZ0<br />

(function disabled)<br />

NOTES ABOUT HOMING<br />

• Avoid using pause <strong>and</strong> resume functions during the homing operation. A pause comm<strong>and</strong><br />

(PS or !PS) or pause/resume input (input configured with the INFNCi-E or LIMFNCi-E<br />

comm<strong>and</strong>) will pause the homing motion. However, when the subsequent resume<br />

comm<strong>and</strong> (C or !C) or pause/resume input occurs, motion will resume at the beginning of<br />

the homing motion sequence.<br />

• Relevance of positive <strong>and</strong> negative direction:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

• If an end-of-travel limit is encountered during the homing operation, the motion will be<br />

reversed <strong>and</strong> the home switch will be sought in the opposite direction. If a second limit is<br />

encountered, the homing operation will be terminated, stopping motion at the second limit.<br />

Chapter 3. Basic Operation Setup 79


Figures A <strong>and</strong> B show the homing operation when HOMBAC is not enabled. “CW” refers to<br />

the positive direction <strong>and</strong> “CCW” refers to the negative direction.<br />

Figure A:<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in positive<br />

direction (HOM0)<br />

• Backup To Home disabled<br />

(HOMBAC0)<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Figure B:<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in negative<br />

direction (HOM1)<br />

• Backup To Home disabled<br />

(HOMBAC0)<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Positive Homing,<br />

Backup to Home<br />

Enabled<br />

The seven steps below describe a sample homing operation when HOMBAC is enabled (see<br />

Figure C). The final approach direction (HOMDF) is CW <strong>and</strong> the home edge (HOMEDG) is the<br />

CW edge. “CW” refers to the positive direction <strong>and</strong> “CCW” refers to the negative direction.<br />

NOTE<br />

To better illustrate the direction changes in the backup-to-home operation, the illustrations in<br />

the remainder of this section show the backup-to-home movements with varied velocities. In<br />

reality, the backup-to-home movements are performed at the same velocity (HOMVF value).<br />

Step 1<br />

Step 2<br />

Step 3<br />

Step 4<br />

Step 5<br />

Step 6<br />

Step 7<br />

A CW home move is started with the HOMØ comm<strong>and</strong> at the HOMA <strong>and</strong> HOMAA<br />

accelerations. Default HOMA is 10 revs (or inches) per sec 2 .<br />

The HOMV velocity is reached (move continues at that velocity until home input goes<br />

active).<br />

The CCW edge of the home input is detected, this means the home input is active.<br />

At this time the move is decelerated at the HOMAD <strong>and</strong> HOMADA comm<strong>and</strong> values. It<br />

does not matter if the home input becomes inactive during this deceleration.<br />

After stopping, the direction is reversed <strong>and</strong> a second move with a peak velocity<br />

specified by the HOMVF value is started.<br />

This move continues until the CCW edge of the home input is reached.<br />

Upon reaching the CCW edge, the move is decelerated at the HOMAD <strong>and</strong> HOMADA<br />

comm<strong>and</strong> values, the direction is reversed, <strong>and</strong> another move is started in the CW<br />

direction at the HOMVF velocity.<br />

As soon as the home input CW edge is reached, this last move is immediately<br />

terminated. The load is at home <strong>and</strong> the absolute position register is reset to zero.<br />

80 Gem6K Series Programmer’s <strong>Guide</strong>


Figure C:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in positive<br />

direction (HOM0)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is<br />

positive (HOMDF0)<br />

• Stop on the positive-travel side<br />

of the home switch active region<br />

(HOMEDG0)<br />

Figures D through F show the homing operation for different values of HOMDF <strong>and</strong> HOMEDG,<br />

when HOMBAC is enabled. “CW” refers to the positive direction <strong>and</strong> “CCW” refers to the<br />

negative direction.<br />

Figure D:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in positive<br />

direction (HOM0)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is<br />

positive (HOMDF0)<br />

• Stop on the negative-travel side<br />

of the home switch active region<br />

(HOMEDG1)<br />

Figure E:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in positive<br />

direction (HOM0)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is<br />

negative (HOMDF1)<br />

• Stop on the positive-travel side<br />

of the home switch active region<br />

(HOMEDG0)<br />

Figure F:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in positive<br />

direction (HOM0)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is<br />

negative (HOMDF1)<br />

• Stop on the negative-travel side<br />

of the home switch active region<br />

(HOMEDG1)<br />

Chapter 3. Basic Operation Setup 81


Negative Homing,<br />

Backup to Home<br />

Enabled<br />

Figures G through J show the homing operation for different values of HOMDF <strong>and</strong> HOMEDG,<br />

when HOMBAC is enabled. “CW” refers to the positive direction <strong>and</strong> “CCW” refers to the<br />

negative direction.<br />

Figure G:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in negative<br />

direction (HOM1)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is negative<br />

(HOMDF1)<br />

• Stop on the negative-travel side of<br />

the home switch active region<br />

(HOMEDG1)<br />

Figure H:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in negative<br />

direction (HOM1)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is negative<br />

(HOMDF1)<br />

• Stop on the positive-travel side of<br />

the home switch active region<br />

(HOMEDG0)<br />

Figure I:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in negative<br />

direction (HOM1)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the negative-travel side of<br />

the home switch active region<br />

(HOMEDG1)<br />

Figure J:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Start home move in negative<br />

direction (HOM1)<br />

• Backup To Home enabled<br />

(HOMBAC1)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the positive-travel side of<br />

the home switch active region<br />

(HOMEDG0)<br />

82 Gem6K Series Programmer’s <strong>Guide</strong>


Homing Using<br />

The Z-Channel<br />

Figures K through O show the homing operation when homing to an encoder index pulse, or Z<br />

channel, is enabled (HOMZ1). The Z-channel will only be recognized after the home input is<br />

activated. It is desirable to position the Z channel within the home active region; this reduces<br />

the time required to search for the Z channel. “CW” refers to the positive direction <strong>and</strong><br />

“CCW” refers to the negative direction.<br />

Figure K:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Z-Channel homing enabled (HOMZ1)<br />

• Start home move in negative direction<br />

(HOM1)<br />

• Backup To Home enabled (HOMBAC1)<br />

• Final approach direction is negative<br />

(HOMDF1)<br />

• Stop on the negative-travel side of the<br />

z-channel active region (HOMEDG1)<br />

Figure L:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Z-Channel homing enabled (HOMZ1)<br />

• Start home move in negative direction<br />

(HOM1)<br />

• Backup To Home enabled (HOMBAC1)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the positive-travel side of the<br />

z-channel active region (HOMEDG0)<br />

Figure M:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Z-Channel homing enabled (HOMZ1)<br />

• Start home move in negative direction<br />

(HOM1)<br />

• Backup To Home enabled (HOMBAC1)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the positive-travel side of the<br />

z-channel active region (HOMEDG0)<br />

Figure N:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Z-Channel homing enabled (HOMZ1)<br />

• Start home move in positive direction<br />

(HOM0)<br />

• Backup To Home disabled (HOMBAC0)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the positive-travel side of the<br />

z-channel active region (HOMEDG0)<br />

Figure O:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Home Profile Attributes (comm<strong>and</strong>s):<br />

• Z-Channel homing enabled (HOMZ1)<br />

• Start home move in positive direction<br />

(HOM0)<br />

• Backup To Home enabled (HOMBAC1)<br />

• Final approach direction is positive<br />

(HOMDF0)<br />

• Stop on the positive-travel side of the<br />

z-channel active region (HOMEDG0)<br />

Chapter 3. Basic Operation Setup 83


Encoder-Based Stepper Operation (stepper only)<br />

Encoder Resolution<br />

When using an encoder in a stepper application, you may configure the following:<br />

• Encoder resolution<br />

• Stall Detection & Kill-on-Stall, Stall Deadb<strong>and</strong><br />

• Encoder-based position reference <strong>and</strong> position capture<br />

You must specify the encoder resolution with the ERES comm<strong>and</strong>.<br />

Stall Detection & Kill-on-Stall<br />

To detect stalls without<br />

an encoder, refer to<br />

Drive Stall Detection on<br />

page 66.<br />

The ESTALL1 comm<strong>and</strong> enables the drive to detect encoder-based stall conditions.<br />

NOTE: Encoder count reference must be enabled (ENCCNT1) before stall detect (ESTALL)<br />

can be used.<br />

If used with Kill-on-Stall enabled (ESK1 comm<strong>and</strong>), the move in progress will be aborted upon<br />

detecting a stall. If queried with the ER or the AS comm<strong>and</strong>s, the user may branch to any other<br />

section of program when a stall is detected. Refer to the ER, <strong>and</strong> AS comm<strong>and</strong> descriptions in<br />

the Gem6K Series Comm<strong>and</strong> Reference for more information.<br />

Kill-on-Stall functions only if the stall detection is enabled (ESTALL1).<br />

WARNING<br />

Disabling the Kill-on-Stall function with the ESKØ comm<strong>and</strong> will allow the controller to finish<br />

the move regardless of a stall detection, even if the load is jammed. This can potentially<br />

damage user equipment <strong>and</strong> injure personnel.<br />

Stall Deadb<strong>and</strong><br />

Another encoder set-up parameter is the Stall Backlash Deadb<strong>and</strong> (ESDB) comm<strong>and</strong>. This<br />

comm<strong>and</strong> sets the number of comm<strong>and</strong>ed counts of error allowed, after a change in direction,<br />

before a stall will be detected. This is useful for situations in which backlash in a system can<br />

cause false stall situations.<br />

Encoder Set Up Example<br />

Examples for 4 Axes<br />

(comm<strong>and</strong> line samples)<br />

The example below illustrates the features discussed in the previous paragraphs. The DRES<br />

statement defines the motor resolutions. The ERES statement defines the number of encoder<br />

steps per encoder revolution. A st<strong>and</strong>ard 1000-line encoder is used that produces 4000<br />

quadrature steps/rev. Encoder counting (ENCCNT), stall detect (ESTALL) <strong>and</strong> kill-on-stall<br />

(ESK1) are enabled. If a stall is detected (more than 10 steps out without an encoder step<br />

back), the motor's movement is killed. The ESDB statement defines the stall deadb<strong>and</strong>.<br />

DRES25000<br />

ERES4000<br />

ESK1<br />

ENCCNT1<br />

ESTALL1<br />

ESDB0<br />

; Set drive resolution<br />

; Set encoder resolution<br />

; Enable kill motion on stall<br />

; Enable encoder counting (this is<br />

; required for ESTALL to work)<br />

; Enable stall detection<br />

; Set stall deadb<strong>and</strong><br />

84 Gem6K Series Programmer’s <strong>Guide</strong>


Encoder Count/Capture Referencing<br />

Use ENCCNT to configure steppers to reference either the encoder position or the comm<strong>and</strong>ed<br />

position when capturing the position (see INFNCi-H) <strong>and</strong> checking the encoder position (PE<br />

<strong>and</strong> TPE). When checking the actual velocity (VELA <strong>and</strong> TVELA), ENCCNT determines whether<br />

the velocity, in units of revs/sec, is derived with the encoder resolution (ERES) or the drive<br />

resolution (DRES). The default setting (ENCCNT0) references the comm<strong>and</strong>ed position.<br />

Example INFNC1-H ; Configure trigger 1A as position capture input<br />

ENCCNT10 ; Capture encoder position when trigger 1A is activated<br />

Tuning Procedures (servos only)<br />

During the Express Setup procedure shown in the Hardware Installation <strong>Guide</strong>, Chapter 2<br />

Installation, the drive uses default values for tuning parameters, based upon the motor<br />

information you entered. That procedure assumes that the motor is unloaded. In the following<br />

tuning procedures, you will enter in system information that will characterize the load on the<br />

motor. Before you continue with the tuning procedures you must have first configured<br />

your drive for the motor being used. See the Express Setup section in the Hardware<br />

Installation <strong>Guide</strong>, Chapter 2: Installation.<br />

Entering Load Settings<br />

Position Mode Tuning<br />

The main load setting you will adjust is LJRAT, which is the load-to-rotor inertia value for<br />

your system. The more accurately you know this value, the closer your tuning b<strong>and</strong>width<br />

settings will correspond to the actual dynamic performance of your system. If you only know<br />

this value approximately, you can adjust this value until you achieve the system performance<br />

you desire. The total system inertia is given by the following formula:<br />

Total system inertia = motor rotor inertia*(1 + LJRAT)<br />

If your system has significant mechanical damping, you will also want to adjust the LDAMP<br />

setting which specifies system damping provided by the load. If you know that you have<br />

significant damping in your system from your load but do not know its exact value, you can<br />

adjust this value until you achieve the system performance that you desire.<br />

Both the LJRAT <strong>and</strong> the LDAMP values can be set in the Full Setup section of the <strong>GV6K</strong><br />

wizard in Motion Planner. These values can also be set in the terminal mode of Motion<br />

Planner. During the tuning process you may want to use the terminal emulator to establish<br />

appropriate values for these parameters <strong>and</strong> then upload <strong>and</strong> save the drive’s full configuration<br />

settings for use with other units.<br />

For most applications, the default tuning parameters for position mode are set to provide<br />

good, stiff motor shaft performance for a given load setting. With the default tuning<br />

parameters set in the Express Setup procedure, you need only set the system load-to-rotor<br />

inertia ratio <strong>and</strong> your system will be tuned. If your system has significant mechanical<br />

damping, you may need to set the system damping as well. Should you wish to modify the<br />

default values <strong>and</strong> fine tune your system for position mode, use the following procedures:<br />

WARNING<br />

This procedure causes the motor shaft to move. Make sure that shaft motion will not damage<br />

equipment or injure personnel.<br />

Chapter 3. Basic Operation Setup 85


Position Mode Tuning Procedure<br />

Primary Tuning Procedure<br />

1. Disable the drive.<br />

2. Configure the drive for position tuning mode (DMODE17). In this mode, the drive<br />

comm<strong>and</strong>s an alternating 1/4 revolution step change in position at a one second<br />

repetition rate.<br />

3. Enable the drive <strong>and</strong> observe your system’s response. (If necessary, you can connect an<br />

oscilloscope as described in Advanced Tuning below.)<br />

Ringing or an oscillating response indicates that the position loop b<strong>and</strong>width is too<br />

high. To eliminate oscillations:<br />

• decrease b<strong>and</strong>width using the DPBW comm<strong>and</strong>.<br />

A sluggish response indicates that position loop b<strong>and</strong>width is too low. To improve the<br />

response:<br />

• increase b<strong>and</strong>width by using the DPBW comm<strong>and</strong>.<br />

NOTE: Ringing, oscillations, or a sluggish response can also indicate inaccurate drive<br />

settings for LJRAT or LDAMP.<br />

4. After you achieve a satisfactory system response, reconfigure the drive for position<br />

mode (DMODE12). This completes the primary tuning procedure.<br />

If you are unable to achieve a satisfactory response, proceed to the advanced tuning<br />

procedure below.<br />

Advanced Tuning Procedure<br />

1. Disable the drive.<br />

2. Configure the drive for position tuning mode (DMODE17). In this mode, the drive<br />

comm<strong>and</strong>s an alternating 1/4 revolution step change in position at a one second<br />

repetition rate.<br />

(In some applications a different move profile may give better results. Choose a move<br />

similar to that required by your application, but using fast acceleration <strong>and</strong> deceleration<br />

rates. Be sure the maximum velocity of your move is well below the rated speed of<br />

your drive/motor combination.<br />

3. Configure ANALOG MONITOR A to show position error (DMONAV3).<br />

4. Connect one channel of your oscilloscope to the drive’s ANALOG MONITOR A (pin<br />

21). Connect your oscilloscope’s ground to the drive’s ANALOG GROUND (pin 25).<br />

5. Adjust your oscilloscope to display position error. (The analog monitor can be scaled,<br />

in percent, with the DMONAS comm<strong>and</strong>.)<br />

6. Enable the drive <strong>and</strong> observe your system’s response. Position error will increase<br />

during acceleration, but should decay smoothly to near zero without significant ringing<br />

or instability.<br />

Ringing or an oscillating response indicates that the position loop b<strong>and</strong>width is too<br />

high, or the position loop damping is too low. To eliminate ringing or oscillations:<br />

• decrease b<strong>and</strong>width using the DPBW comm<strong>and</strong>; then, if necessary:<br />

• adjust damping by using the SGPRAT comm<strong>and</strong>. Use the value that gives the best<br />

performance.<br />

• in applications with backlash or high static friction, disabling the velocity integrator<br />

(SGINTE0) can help improve stability.<br />

• NOTE: In position mode, the velocity loop b<strong>and</strong>width tracks changes in position loop<br />

b<strong>and</strong>width by a ratio set by the SGPSIG comm<strong>and</strong>.<br />

A sluggish response indicates that position loop b<strong>and</strong>width is too low, or position loop<br />

damping is too high. To improve the response:<br />

• increase b<strong>and</strong>width by using the DPBW comm<strong>and</strong>; then, if necessary:<br />

• adjust damping by using the SGPRAT comm<strong>and</strong>. Use the value that gives the best<br />

performance.<br />

NOTE: Ringing or a sluggish response can also indicate inaccurate drive settings for<br />

LJRAT or LDAMP.<br />

7. After you achieve a satisfactory system response, reconfigure the drive for position<br />

mode (DMODE12). This completes the advanced tuning procedure.<br />

If ringing or oscillations persist, <strong>and</strong> do not seem to be affected by the above adjustments, you<br />

may need to use notch filters or lead/lag filters. See the Filter Adjustments procedure below.<br />

86 Gem6K Series Programmer’s <strong>Guide</strong>


Filter Adjustments<br />

If the previous tuning procedures did not eliminate ringing or oscillations, then mechanical<br />

resonances may be causing problems with your system’s response.<br />

Before trying the procedure below, we recommend that you check your mechanical system,<br />

especially the mechanical stiffness <strong>and</strong> mounting rigidity of your system. Use bellows or disk<br />

style couplers, not helical couplers. Once you have optimized your mechanical system, filters<br />

may allow increased performance, without causing system instability.<br />

Filters can improve response by reducing system gain over the same frequencies that contain<br />

resonances. You can then increase the gain for frequencies outside this range, without exciting<br />

the resonance <strong>and</strong> causing instability.<br />

The first procedure below describes how to set the drive’s two notch filters, to reduce<br />

resonance <strong>and</strong> improve your system’s response. The second <strong>and</strong> third procedures describe<br />

how to set the drive’s lead <strong>and</strong> lag filters.<br />

WARNING<br />

These procedures cause the motor shaft to move. Make sure that shaft motion will not damage<br />

equipment or injure personnel.<br />

Notch Filter Adjustment Procedure<br />

1. Configure the analog monitor to show q-axis current (DMONAV19).<br />

2. Configure the drive for position tuning mode (DMODE17).<br />

3. Configure DMTLIM to approximately 1/3 of the default value for your Compumotor<br />

motor.<br />

4. Connect one channel of your oscilloscope to the drive’s ANALOG MONITOR A (pin<br />

21). Connect your oscilloscope’s ground to the drive’s ANALOG GROUND (pin 25).<br />

5. From the oscilloscope display, observe the system’s response to the tuning mode’s step<br />

input. Note the frequency of the oscillatory current waveform that is superimposed on<br />

the 1 Hz step comm<strong>and</strong> signal.<br />

6. Using the DNOTAF comm<strong>and</strong>, set the notch filter to the frequency noted in Step 5.<br />

7. Using the DNOTAD comm<strong>and</strong>, slowly increase the depth of the notch filter from 0.0 to<br />

1.0 until the ringing decreases.<br />

8. Continue to observe the response to step comm<strong>and</strong> signal. Ringing should be reduced<br />

or eliminated.<br />

9. Adjust the Q of the filter (DNOTAQ comm<strong>and</strong>). Use the following guidelines:<br />

• Set Q as low as possible. Resonances change with load; therefore, your system<br />

will be more robust with a lower Q value. (Default = 1)<br />

• If Q is too low, system stiffness will be reduced outside the resonant range.<br />

• If Q is too high, the response peak may shift in frequency.<br />

10. After reducing the resonance, you may notice a second resonance. Use the second<br />

notch filter (DNOTBF, DNOTBD <strong>and</strong> DNOTBQ) to reduce the second resonance.<br />

Follow the same procedure as outlined in steps 1 – 9 above.<br />

11. If you are done adjusting filters, reconfigure DMTLIM to its default value.<br />

Otherwise, proceed to the Lag Filter Adjustment procedure below.<br />

Chapter 3. Basic Operation Setup 87


Lag Filter Adjustment Procedure<br />

The lag filter can act as a low pass filter, <strong>and</strong> reduce the effects of electrical noise on the<br />

comm<strong>and</strong>ed torque. (It can also reduce the effects of resonance at low frequencies—<br />

below 60 Hz—where the notch filters are not effective.)<br />

1. As described in Steps 2 – 3 in the Notch Filter Adjustment procedure above, reduce<br />

DMTLIM <strong>and</strong> connect an oscilloscope.<br />

2. Verify that the lead filter is turned off (DNOTLDØ).<br />

3. Configure the drive for position tuning mode. Observe the system’s response to the<br />

tuning mode’s step input.<br />

4. Choose a value for the lag filter (DNOTLG) that reduces low frequency resonance <strong>and</strong><br />

provides satisfactory system performance.<br />

5. If you are done adjusting filters, reconfigure DMTLIM to its default value. Otherwise,<br />

proceed to the Lead /Lag Filter Adjustment procedure below.<br />

Lead/Lag Filter Adjustment Procedure<br />

The lead filter can counteract the effects of the lag filter at higher frequencies. Do not use<br />

the lead filter by itself—if you use the lead filter, you must also use the lag filter.<br />

1. As described in Steps 2 – 3 in the Notch Filter Adjustment procedure above, reduce<br />

DMTLIM <strong>and</strong> connect an oscilloscope.<br />

2. Set the lag filter (DNOTLG) as described above.<br />

3. Configure the drive for position tuning mode. Observe the system’s response to the<br />

tuning mode’s step input.<br />

4. Choose a value for the lead filter (DNOTLD) that improves system performance. This<br />

value will typically be higher in frequency than the lag filter setting.<br />

5. You must choose a value for the lead filter that is higher in frequency than the lag filter<br />

value. However, do not set the lead filter higher than four times the lag filter frequency,<br />

or a drive configuration warning will result, <strong>and</strong> the drive will use the previous filter<br />

settings.<br />

6. If you are done adjusting filters, reconfigure DMTLIM to its default value.<br />

88 Gem6K Series Programmer’s <strong>Guide</strong>


Target Zone Mode (move completion criteria for servos only)<br />

Under default operation (Target Zone Mode<br />

not enabled), the Gem6K product's move<br />

completion criteria is simply derived from the<br />

move trajectory. The Gem6K product<br />

considers the current preset move to be<br />

complete when the comm<strong>and</strong>ed trajectory has<br />

reached the desired target position; after that,<br />

subsequent comm<strong>and</strong>s/moves can be executed.<br />

Consequently, the next move or external<br />

operation can begin before the actual position<br />

has settled to the comm<strong>and</strong>ed position (see<br />

diagram).<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

To prevent premature comm<strong>and</strong> execution before the actual position settles into the<br />

comm<strong>and</strong>ed position, use the Target Zone Mode. In this mode, enabled with the STRGTE<br />

comm<strong>and</strong>, the move cannot be considered complete until the actual position <strong>and</strong> actual<br />

velocity are within the target zone (that is, within the distance zone defined by STRGTD <strong>and</strong><br />

less than or equal to the velocity defined by STRGTV). If the load does not settle into the<br />

target zone before the timeout period set with the STRGTT comm<strong>and</strong>, the Gem6K product<br />

detects a timeout error (see illustration below).<br />

If the timeout error occurs, you can prevent subsequent comm<strong>and</strong>/move execution only if you<br />

enable the ERROR comm<strong>and</strong> to continually check for this error condition, <strong>and</strong> when it occurs<br />

to branch to a programmed response you can define in the ERRORP program. (Refer to the<br />

Error H<strong>and</strong>ling section, page 30, for error program examples.)<br />

As an example, setting the distance zone to ±5 counts (STRGTD5), the velocity zone to ≤0.5<br />

revs/sec (STRGTV0.5), <strong>and</strong> the timeout period to 1/2 second (STRGTT500), a move with a<br />

distance of 8,000 counts (D8000) must end up between position 7,995 <strong>and</strong> 8,005 <strong>and</strong> settle<br />

down to ≤0.5 rps within 500 ms (1/2 second) after the comm<strong>and</strong>ed profile is complete.<br />

Damping is critical<br />

To ensure that a move settles within the distance zone, it must be damped to the point that it<br />

will not move out of the zone in an oscillatory manner. This helps ensure the actual velocity<br />

falls within the target velocity zone set with the STRGTV comm<strong>and</strong> (see illustration below).<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Checking the<br />

Settling Time<br />

Checking the Actual Settling Time: Using the TSTLT comm<strong>and</strong>, you can display the actual<br />

time it took the last move to settle into the target zone (that is, within the distance zone defined<br />

by STRGTD <strong>and</strong> less than or equal to the velocity defined by STRGTV). The reported value<br />

represents milliseconds. The TSTLT comm<strong>and</strong> is usable whether or not the Target Zone<br />

Settling Mode is enabled with the STRGTE comm<strong>and</strong>.<br />

Chapter 3. Basic Operation Setup 89


Programmable Inputs <strong>and</strong> Outputs (onboard <strong>and</strong> external inputs & outputs)<br />

Programmable inputs <strong>and</strong> outputs allow the controller to detect <strong>and</strong> respond to the state of<br />

switches, thumbwheels, electronic sensors, <strong>and</strong> outputs of other equipment such as drives <strong>and</strong><br />

PLCs. The I/O that may be used as programmable inputs <strong>and</strong> outputs are:<br />

• Onboard I/O:<br />

− Limit inputs on the Drive I/O connector (pins 28, 29, <strong>and</strong> 31)<br />

− Trigger inputs on the Drive I/O connector (pins 37 <strong>and</strong> 38). A “master trigger” is<br />

also available on the Drive I/O connector (pin 35). These are general purpose on<br />

board digital inputs but can be redefined as trigger inputs.<br />

− Digital outputs on the Drive I/O connector (pins 41, 43, 45, 46, 48, <strong>and</strong> 49)<br />

− Relay output on the +24VDC power input connector (screw terminals)<br />

• Expansion I/O located on I/O bricks connected to the Gem6K controller’s “EXPANSION<br />

I/O” connector. Each I/O brick can hold from 1 to 4 of these I/O SIM modules in any<br />

combination (each SIM module provides 8 inputs or outputs, for a total of 32 I/O points<br />

per I/O brick):<br />

− Digital inputs<br />

− Digital outputs<br />

− Analog inputs<br />

− Analog outputs<br />

USING THE STATE OF I/O TO CONTROL PROGRAMMED EVENTS: Based on the<br />

binary state of the inputs <strong>and</strong> outputs (binary status can be used in assignment/comparison<br />

operations using the LIM, IN <strong>and</strong> OUT operators), the controller can make program flow<br />

decisions <strong>and</strong> assign values to binary variables for subsequent mathematical operations. These<br />

operations <strong>and</strong> the associated program flow, branching, <strong>and</strong> variable comm<strong>and</strong>s are listed below.<br />

Operation based on I/O State Associated Comm<strong>and</strong>s See Also*<br />

I/O state assigned to a binary variable LIM, [IN], [OUT], VARB Variables (page 18)<br />

I/O state used as a basis for<br />

comparison in conditional branching &<br />

looping statements<br />

Input state used as a basis for a<br />

conditional GO<br />

I/O state used as a basis for a<br />

program interrupt (GOSUB)<br />

conditional statement<br />

Mimic PLC functionality by scanning<br />

I/O states with a compiled program<br />

LIM, [IN], [OUT], IF,<br />

ELSE, NIF, REPEAT,<br />

UNTIL, WAIT, WHILE,<br />

NWHILE<br />

Program Flow Control (page 23)<br />

[IN], GOWHEN, LIM Synchronizing Motion (page 163)<br />

ONIN Program Interrupts (page 29)<br />

PLCP, SCANP PLC Scan Mode (page 120)<br />

* Refer also to the respective comm<strong>and</strong> descriptions in the Gem6K Series Comm<strong>and</strong> Reference.<br />

I/O UPDATE RATE: The programmable inputs <strong>and</strong> outputs are sampled at the “system<br />

update rate,” which is every 2 ms.<br />

EXPANSION I/O BRICKS: If the I/O brick is disconnected or if it loses power, the<br />

controller will perform a kill (all tasks) <strong>and</strong> set error bit #18 (see ERROR). (If you disable the<br />

“Kill on I/O Disconnect” mode with KIOENØ, the Gem6K will not perform the kill.) The<br />

controller will remember the brick configuration (volatile memory) in effect at the time the<br />

disconnection occurred. When you reconnect the I/O brick, the controller checks to see if<br />

anything changed (SIM by SIM) from the state when it was disconnected. If an existing SIM<br />

slot is changed (different SIM, vacant SIM slot, or jumper setting), the controller will set the<br />

SIM to factory default INEN <strong>and</strong> OUTLVL settings. If a new SIM is installed where there was<br />

none before, the new SIM is auto-configured to factory defaults.<br />

90 Gem6K Series Programmer’s <strong>Guide</strong>


Programmable I/O Bit Patterns<br />

The Gem6K has programmable inputs <strong>and</strong> outputs. The total number of onboard inputs <strong>and</strong> outputs (analog inputs, digital<br />

inputs, <strong>and</strong> digital outputs) is fixed. The total number of expansion inputs <strong>and</strong> outputs (analog inputs, analog outputs,<br />

digital inputs <strong>and</strong> digital outputs) depends on your configuration of expansion I/O bricks.<br />

These programmable I/O are represented by binary bit patterns, <strong>and</strong> it is the bit pattern that you reference when<br />

programming <strong>and</strong> checking the status of specific inputs <strong>and</strong> outputs. The bit pattern is referenced 1 to n, from left to right.<br />

• Onboard I/O. For example, the status comm<strong>and</strong> to check all onboard digital inputs is TIN.<br />

An example response is: *TIN0100_0.<br />

• Expansion I/O. For example, the status comm<strong>and</strong> to check all digital inputs on I/O brick 2 is 2TIN.<br />

An example response is: *2TIN0010_0110_1100_0000_XXXX_XXXX_XXXX_XXXX.<br />

I/O Brick 2<br />

Bit 1<br />

Bit 1<br />

Bit 5<br />

Bit 32<br />

Onboard Programmable I/O<br />

I/O Location Programming Status Report, Assignment<br />

Limit Inputs “DRIVE I/O” connector LIMFNC, LIMEN, LIMLVL TLIM, LIM<br />

Digital Inputs “DRIVE I/O” connector INFNC, INLVL, INEN, ONIN,<br />

INPLC, INSTW<br />

Outputs (digital) “DRIVE I/O” connector OUT, OUTFNC, OUTLVL,<br />

OUTEN, OUTALL, OUTPLC,<br />

OUTTW, POUT<br />

Analog Input “DRIVE I/O” connector JOYAXH, JOYCDB,<br />

JOYCTR, JOYEDB,<br />

ANIRNG, ANIMAS<br />

TIN, IN<br />

TOUT, [OUT]<br />

TANI, [ANI]<br />

Limit Inputs (“DRIVE I/O” connector)<br />

Input bit pattern for LIM, TLIM, LIMEN, LIMFNC, <strong>and</strong> LIMLVL:<br />

Bit # Pin # Function *<br />

1 28 Positive end-of-travel limit<br />

2 29 Negative end-of-travel limit<br />

3 31 Home limit<br />

* The functions listed are the factory default functions; other<br />

functions may be assigned with the LIMFNC comm<strong>and</strong>.<br />

Sample response to TLIM (limit inputs status) comm<strong>and</strong>:<br />

*TLIM110<br />

Chapter 3. Basic Operation Setup 91


Digital Inputs (“DRIVE I/O” connector)<br />

Input bit pattern for TIN, IN, INFNC, INLVL, INEN, INPLC, INSTW, ONIN:<br />

Bit # Pin # Function *<br />

1 37 Input 1 (if assigned, TRIG-A)<br />

2 38 Input 2 (if assigned, TRIG-B)<br />

3 39 Input 3<br />

4 34 Input 4<br />

5 35 Input 5 (if assigned, TRIG-M)<br />

* If the input is assigned the “trigger interrupt” function with the INFNCi-H<br />

comm<strong>and</strong>:<br />

TRIG-A must be on Input 1<br />

TRIG-B must be on Input 2<br />

TRIG-M must be on input 5<br />

Sample response to TIN (input status) comm<strong>and</strong>:<br />

*TIN0010_1<br />

Digital Outputs (“DRIVE I/O” connector)<br />

Output bit pattern for TOUT, [OUT], OUT, OUTFNC, OUTLVL, OUTEN, OUTALL,<br />

OUTPLC, OUTTW, POUT:<br />

Bit # Pin # Function<br />

1 41 Output 1.<br />

2 43 Output 2.<br />

3 45 Output 3.<br />

4 46 Output 4.<br />

5 48 Output 5.<br />

6 49 Output 6.<br />

7 Relay Output 7.<br />

Sample response to TOUT<br />

(onboard outputs status) comm<strong>and</strong>:<br />

*TOUT0000_000<br />

92 Gem6K Series Programmer’s <strong>Guide</strong>


Expansion I/O Bricks<br />

The Gem6K product allows you to exp<strong>and</strong> your system I/O by connecting up to 8 I/O bricks (see Installation <strong>Guide</strong> for<br />

connections). Expansion I/O bricks may be ordered separately (referred to as the “EVM32”). Each I/O brick can hold from<br />

1 to 4 of these I/O SIM modules in any combination:<br />

SIM Type Programming Status Report, Assignment<br />

Digital Inputs SIM (8 inputs) INFNC, INLVL, INEN, ONIN, INPLC, INSTW TIN, IN, TIO<br />

Digital Outputs SIM (8 outputs)<br />

Analog Inputs SIM (8 inputs)<br />

OUT, OUTFNC, OUTLVL, OUTEN, OUTALL,<br />

OUTPLC, OUTTW, POUT<br />

• Enable/Disable: ANIEN.<br />

• Voltage range: ANIRNG.<br />

• Joystick setup: JOYAXH, JOYAXL, JOYCDB,<br />

JOYCTR, JOYEDB, JOYZ.<br />

• Following master source: ANIMAS, FOLMAS<br />

TOUT, [OUT], TIO<br />

• Voltage: TANI, ANI, TIO<br />

• Servo position: TPANI, PANI,<br />

FB, TFB<br />

Analog Outputs SIM (8 outputs) ANO TANO, [ANO], TIO<br />

Each I/O brick has a unique “brick address”, denoted with the “” symbol in the comm<strong>and</strong> syntax. The I/O bricks are<br />

connected in series to the “EXPANSION I/O” connector on the Gem6K. The 1 st I/O brick has address #1, the next brick has<br />

address #2, <strong>and</strong> so on. (NOTE: If you leave out the brick address in the comm<strong>and</strong>, the Gem6K product assumes you are<br />

addressing the comm<strong>and</strong> to the onboard I/O.) Each I/O brick has 32 I/O addresses, referenced as absolute I/O point<br />

locations:<br />

• SIM slot 1 = I/O points 1-8<br />

• SIM slot 2 = I/O points 9-16<br />

• SIM slot 3 = I/O points 17-24<br />

• SIM slot 4 = I/O points 25-32<br />

Example:<br />

Gem6K<br />

Controller<br />

I/O Brick #1<br />

Slot #1 (I/O points 1-8)<br />

Digital Inputs SIM<br />

Slot #2 (I/O points 9-16)<br />

Digital Inputs SIM<br />

Slot #3 (I/O points 17-24)<br />

Digital Inputs SIM<br />

Slot #4 (I/O points 25-32)<br />

Analog Inputs SIM<br />

I/O Brick #2<br />

Slot #1 (I/O points 1-8)<br />

Digital Outputs SIM<br />

Slot #2 (I/O points 9-16)<br />

Digital Inputs SIM<br />

Slot #3 (I/O points 17-24)<br />

No SIMM installed<br />

Slot #4 (I/O points 25-32)<br />

Digital Outputs SIM<br />

Sample response to 1TIN (digital inputs status) comm<strong>and</strong>:<br />

*1TIN0000_0010_1100_0000_0100_0001_XXXX_XXXX<br />

Sample response to 2TOUT (digital outputs status) comm<strong>and</strong>:<br />

*2TOUT0000_0000_XXXX_XXXX_XXXX_XXXX_0000_0000<br />

The TIO comm<strong>and</strong> identifies the connected I/O bricks (<strong>and</strong> installed SIMs), including the status of each I/O point:<br />

*BRICK 1: SIM Type Status Function<br />

1-8: DIGITAL INPUTS 0000_0000 AAAA_AAAA<br />

9-16: DIGITAL INPUTS 0000_0000 AAAA_AAAA<br />

17-24: DIGITAL INPUTS 0000_0000 AAAA_AAAA<br />

25-32: ANALOG INPUTS 0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000<br />

*BRICK 2: SIM Type Status Function<br />

1-8: DIGITAL OUTPUTS 0000_0000 AAAA_AAAA -- SINKING<br />

9-16: DIGITAL INPUTS 0000_0000 AAAA_AAAA<br />

17-24: NO SIM PRESENT<br />

25-32: DIGITAL OUTPUTS 0000_0000 AAAA_AAAA -- SOURCING<br />

Chapter 3. Basic Operation Setup 93


Input Functions<br />

Programmable input functions may be assigned to the digital inputs on the Gem6K, as well as<br />

to digital inputs on an expansion I/O brick connected to the Gem6K product. The appropriate<br />

input function comm<strong>and</strong> (LIMFNC or INFNC) depends on which input you are configuring:<br />

• Onboard limit inputs — use LIMFNC:<br />

Syntax:<br />

LIMFNCi-c<br />

Number of the input.<br />

(see page 141 for input bit assignments)<br />

Letter that selects the desired<br />

function (see list below).<br />

• Onboard digital inputs <strong>and</strong> digital inputs installed on an expansion I/O brick — use<br />

INFNC:<br />

Syntax:<br />

INFNCi-c<br />

I/O Brick number.<br />

Trigger inputs are considered<br />

collectively as I/O brick 0 (zero),<br />

<strong>and</strong> are addressed of the I/O brick<br />

number is left off the comm<strong>and</strong>.<br />

Letter that selects the desired<br />

function (see list below).<br />

Number of the input.<br />

(see page 143 for input bit assignments)<br />

Virtual Inputs<br />

Virtual Inputs provide programming input functionality for data or external events that are<br />

not ordinarily represented by inputs. The Virtual Input Override (IN) comm<strong>and</strong> allows you<br />

to substitute almost any 32-bit data oper<strong>and</strong> as a virtual input brick of 32 inputs (integer<br />

values are converted to binary). Page 8 provides a list of the data oper<strong>and</strong>s; the only data<br />

oper<strong>and</strong>s that are not allowed are: SIN, COS, TAN, ATAN, VCVT, SQRT, VAR, TW, READ,<br />

DREAD, DREADF, DAT, DPTR, <strong>and</strong> PI.<br />

The virtual inputs behave similar to real inputs in that they are affected by INEN <strong>and</strong><br />

INLVL, <strong>and</strong> they affect INFNC, INPLC, INSTW, INDUST, ONIN, <strong>and</strong> GOWHEN(IN=b)<br />

comm<strong>and</strong>s. Unlike real inputs, virtual inputs are not affected by the INDEB debounce<br />

setting.<br />

NOTE: A virtual input can only be defined for expansion I/O bricks that are not connected<br />

on the serial I/O network (remember that up to 8 I/O bricks are allowed). For example, if<br />

your Gem6K unit has two I/O bricks, you can designate I/O bricks 3-8 as virtual I/O bricks.<br />

EXAMPLE: Suppose a PLC is sending binary data via the VARB1 comm<strong>and</strong> to the Gem6K.<br />

If the binary state of VARB1 is assigned to input brick 2 (2IN=VARB1), the Gem6K can<br />

respond based on programmable input functions set up with the INFNC comm<strong>and</strong>.<br />

2TIN<br />

; Brick 2 is not connected; therefore, the Gem6K will<br />

; respond with an error message: "*INCORRECT I/O BRICK"<br />

2IN=VARB1 ; Map the binary state of VARB1 to be the input state<br />

; of "virtual" input brick 2 (2IN)<br />

VARB1=b10100000 ; Change "virtual" input brick 2IN to a new VARB1 value<br />

2TIN<br />

; Check the input status. The response will be:<br />

; "*2IN1010_0000_0000_0000_0000_0000_0000_0000"<br />

94 Gem6K Series Programmer’s <strong>Guide</strong>


Letter Designator<br />

Function<br />

A .................General-purpose input (default function for onboard <strong>and</strong> expansion digital inputs<br />

on I/O bricks)<br />

B .................BCD program select<br />

C .................Kill<br />

D .................Stop<br />

E .................Pause/Continue<br />

F .................User fault<br />

G .................<br />

H .................Trigger Interrupt for position capture or registration (trigger inputs only). Special<br />

trigger functions can be assigned with the TRGFN comm<strong>and</strong> (see page 166).<br />

I .................Cause an “Alarm Event” over the Ethernet interface<br />

J .................Jog in the positive-counting direction<br />

K .................Jog in the negative-counting direction<br />

L .................Jog velocity select<br />

M .................Joystick release<br />

O .................Joystick velocity select<br />

P .................One-to-one program select<br />

Q .................Program security<br />

R .................End-of-travel limit for positive-counting direction *<br />

S .................End-of-travel limit for negative-counting direction *<br />

T .................Home limit *<br />

* Limit inputs are factory-set to their respective end-of-travel or home limit function (see page 74).<br />

NOTES<br />

• Multi-tasking: If the LIMFNC or INFNC comm<strong>and</strong> does not include the task identifier (%) prefix,<br />

the function affects the task that executes the LIMFNC or INFNC comm<strong>and</strong>. The only functions<br />

that may be directed to a task with % are: C, D, E, F, <strong>and</strong> P (e.g., 2%INFNC3-F assigns onboard<br />

input 3 as a user fault input for task 2). Multiple tasks may share the same input, but the input<br />

may only be assigned one function.<br />

Input Status<br />

* The purpose of the IN<br />

<strong>and</strong> LIM operators is to<br />

use the state of the inputs<br />

as a basis for conditional<br />

statements (IF, REPEAT,<br />

WHILE, GOWHEN, etc.) or<br />

for binary variable<br />

assignments (VARB). For<br />

examples, refer to the<br />

Conditional Looping <strong>and</strong><br />

Branching section on<br />

page 25.<br />

Below is a list of the status comm<strong>and</strong>s you may use to ascertain the current state <strong>and</strong>/or defined<br />

function of the limit inputs (LIMFNC) <strong>and</strong> trigger <strong>and</strong> I/O brick inputs (INFNC).<br />

Limit inputs (LIMFNC):<br />

• Status display comm<strong>and</strong>s:<br />

- LIMFNC.............. Active state <strong>and</strong> programmed function of all limit inputs<br />

- LIMFNCi............ Same as LIMFNC display, but only for the input number (“i”)<br />

- TLIM................... Hardware state of all limit inputs (binary report);<br />

use TLIM.i to check the state of only one input (“i”)<br />

• Status assignment/comparison operator: *<br />

- LIM ..................... Hardware state (binary) of all limit inputs;<br />

use LIM.i to check the state of only one input (“i”)<br />

Trigger inputs <strong>and</strong> digital inputs on expansion I/O bricks (INFNC):<br />

• Status display comm<strong>and</strong>s:<br />

- TIO ..................... I/O brick configuration (which SIMs are present)<br />

- INFNC ................ Active state <strong>and</strong> programmed function of all trigger inputs<br />

- INFNCi.............. Same as INFNC display, but only for the trigger input number (“i”)<br />

- INFNC ......... Active state <strong>and</strong> programmed function of all inputs on I/O brick B<br />

- INFNCi....... Same as INFNC display, but only for the input number (“i”) on brick B<br />

- TIN ..................... Hardware state of all onboard trigger inputs (binary report);<br />

use TIN.i to check the state of only one input (“i”)<br />

- TIN.............. Hardware state of all digital inputs on I/O brick B (binary report) ;<br />

use TIN.i to check the state of only one input (“i”) on brick B<br />

• Status assignment/comparison operator: *<br />

- IN ................ Hardware state (binary) of triggers <strong>and</strong> expansion digital inputs;<br />

use IN.i to check the state of only one input (“i”) on brick B<br />

Chapter 3. Basic Operation Setup 95


Input Active Levels<br />

Many people refer to a voltage level when referencing the state of programmable inputs <strong>and</strong><br />

outputs. Using LIMLVL (for limit inputs) <strong>and</strong> INLVL (for triggers <strong>and</strong> I/O brick inputs), you<br />

can define the logic levels of the programmable inputs as positive or negative. The Gem6K<br />

product defaults to an input level of zero volts as its active level (referred to as “active low”);<br />

thus, a “1” will appear in a status comm<strong>and</strong> (TLIM & LIM, or TIN & IN) referencing an input<br />

state when the voltage level is zero volts.<br />

Active Level Setting State LIM/TLIM or IN/TIN Report<br />

Active Low, the default setting<br />

• LIMLVL0 for limits<br />

• INLVL0 for triggers/I/O bricks<br />

Active High<br />

• LIMLVL1 for limits<br />

• INLVL1 for triggers/I/O bricks<br />

Grounded — sinking current<br />

(device drive the input is on)<br />

------------------------------------------------<br />

Not Grounded — not sinking current<br />

(device drive the input is off)<br />

Grounded — sinking current<br />

(device drive the input is on)<br />

------------------------------------------------<br />

Not Grounded — not sinking current<br />

(device drive the input is off)<br />

1 (active)<br />

--------------------------------------<br />

-<br />

0 (inactive)<br />

0 (inactive)<br />

--------------------------------------<br />

-<br />

1 (active)<br />

Input Debounce<br />

Time<br />

Using the INDEB comm<strong>and</strong>, you can change the input debounce time for programmable<br />

inputs. The debounce is the period of time that the input must be held in a certain state before<br />

the controller recognizes it. This directly affects the rate at which the inputs can change state<br />

<strong>and</strong> be recognized. The default setting is 4 ms. For example, to set the debounce for all digital<br />

inputs on I/O brick 2 to 5 ms, use the 2INDEB6 comm<strong>and</strong>.<br />

Exception for Trigger Inputs: For trigger inputs that are assigned the “Trigger Interrupt”<br />

function (INFNCi-H), the debounce is instead governed by the TRGLOT setting. The TRGLOT<br />

setting applies to all trigger inputs defined as “Trigger Interrupt” inputs. The TRGLOT debounce<br />

time is the time required between a trigger’s initial active transition <strong>and</strong> its secondary active<br />

transition. This allows rapid recognition of a trigger, but prevents subsequent bouncing of the<br />

input from causing a false position capture. The default TRGLOT setting is 24 ms.<br />

Limit Inputs. The limit inputs found on the connectors are not normally debounced; however,<br />

if a limit is assigned a different function with the LIMFNC comm<strong>and</strong> (other than LIMFNCi-R,<br />

LIMFNCi-S, or LIMFNCi-T), the input is debounced using the INDEB setting for the on-board<br />

trigger inputs (I/O brick 0). If a I/O brick input or an onboard trigger input is assigned a limit<br />

input function (INFNCi-R, INFNCi-S, or INFNCi-T), the input will not be debounced.<br />

“General Purpose”<br />

• LIMFNCi-A<br />

• INFNCi-A<br />

This is the default function for INFNC inputs (onboard digital inputs <strong>and</strong> I/O brick inputs).<br />

When an input is defined as a General Purpose input, the input is used as a st<strong>and</strong>ard input.<br />

You can then use this input to synchronize or trigger program events, through the use of the<br />

LIM or IN operator.<br />

Example DEL prog1 ; Precaution: Delete a program before defining it<br />

DEF prog1 ; Begin definition of program prog1<br />

INFNC1-A ; No function (general purpose) for input 1<br />

INFNC2-A ; No function (general purpose) for input 2<br />

INFNC3-D ; Input 3 is a stop input<br />

A10<br />

; Set acceleration<br />

V10<br />

; Set velocity<br />

D5<br />

; Set distance<br />

WAIT(IN=b1XX) ; Wait for onboard input 1<br />

GO<br />

; Initiate motion<br />

IF(IN=bX1) ; If onboard input 2<br />

TFB<br />

; Transfer feedback device position<br />

NIF<br />

; End IF statement<br />

END<br />

; End definition of program prog1<br />

96 Gem6K Series Programmer’s <strong>Guide</strong>


BCD Program Select<br />

• LIMFNCi-B<br />

• INFNCi-B<br />

The BCD program select function allows you to execute defined<br />

programs by activating the program select inputs.<br />

BCD program select inputs are assigned BCD weights, with the least<br />

weight on the smallest numbered input. The next BCD weight is<br />

assigned to the next input defined as a BCD input. For example, the<br />

table to the right shows the BCD weights if inputs 1-8 are configured<br />

as program select inputs.<br />

Input #<br />

Input 1<br />

Input 2<br />

Input 3<br />

Input 4<br />

Input 5<br />

Input 6<br />

Input 7<br />

Input 8<br />

BCD Weight<br />

To execute a particular program, you activate the combination of inputs to achieve the BCD<br />

weight that corresponds to the number of the program (see note below). For example, if inputs<br />

1-8 are defined as BCD inputs (as in the example above), activating inputs 4 <strong>and</strong> 6 would<br />

execute program #28, activating inputs 1 <strong>and</strong> 4 would execute program #9, <strong>and</strong> so on.<br />

1<br />

2<br />

4<br />

8<br />

10<br />

20<br />

40<br />

80<br />

Program Numbers<br />

A program's number is determined by the order in which the program was downloaded to<br />

the controller. The number of each program stored in the controller's memory can be<br />

obtained through the TDIR comm<strong>and</strong> — refer to the number reported in front of each<br />

program name. When selecting programs with BCD Program Select inputs, a program is<br />

executed when the total BCD weight of the active BCD inputs equals the program's number.<br />

Before you can execute programs using the BCD program select inputs, you must first enable<br />

scanning with the INSELP1 comm<strong>and</strong>. Once enabled, the controller will continuously scan<br />

the BCD inputs <strong>and</strong> execute the program (by number) according to the weight of the currently<br />

active BCD inputs. After executing <strong>and</strong> completing the selected program, the controller will<br />

scan the inputs again. NOTE: To disable scanning, enter !INSELPØ or place INSELPØ in a<br />

program that can be selected.<br />

The INSELP comm<strong>and</strong> also determines how long the BCD program select input level must<br />

be maintained before the controller executes the program. This delay is referred to as<br />

debounce time (but is not affected by the INDEB setting).<br />

Example<br />

☞<br />

The number in front of<br />

each program name is<br />

the BCD weight required<br />

to execute the program.<br />

RESET ; Return controller to power-up conditions<br />

ERASE ; Erase all programs<br />

DEF PROG1 ; Begin definition of program PROG1<br />

TPE<br />

; Transfer position of encoder<br />

END<br />

; End program<br />

DEF PROG2 ; Begin definition of program PROG2<br />

TREV ; Transfer software revision<br />

END<br />

; End program<br />

DEF PROG3 ; Begin definition of program PROG3<br />

TSTAT ; Transfer statistics<br />

END<br />

; End program<br />

INFNC1-B ; Assign onboard input 1 as a BCD program select input<br />

INFNC2-B ; Assign onboard input 2 as a BCD program select input<br />

INSELP1,50 ; Enable scanning inputs, levels must be maintained for 50ms<br />

TDIR ; Display number <strong>and</strong> name of programs stored in memory<br />

; response from TDIR should be similar to following:<br />

; *1 - PROG1 USES 6 BYTES<br />

; *2 - PROG2 USES 18 BYTES<br />

; *3 - PROG3 USES 99 BYTES<br />

; *32877 OF 33000 BYTES (98%) PROGRAM MEMORY REMAINING<br />

; *500 OF 500 SEGMENTS (100%) COMPILED MEMORY REMAINING<br />

You can now execute the programs by activating the correct combination of inputs:<br />

• Activate digital input 1 (BCD weight of 1) to execute program #1 (PROG1)<br />

• Activate digital input 2 (BCD weight of 2) to execute program #2 (PROG2)<br />

• Activate digital inputs 1 & 2 (BCD weight of 3) to execute program #3 (PROG3)<br />

Chapter 3. Basic Operation Setup 97


Kill<br />

• LIMFNCi-C<br />

• INFNCi-C<br />

When an input defined as a Kill input goes active:<br />

• Motion stops (using the LHAD <strong>and</strong> LHADA decel rate).<br />

• Program currently in progress is terminated.<br />

• Comm<strong>and</strong>s currently in the comm<strong>and</strong> buffer are eliminated.<br />

• Drive is left in the enabled state (@DRIVE1), unless the “disable drive on kill” function<br />

is enabled with the KDRIVE comm<strong>and</strong> (see description on page 66).<br />

• If error-checking bit 6 is enabled (e.g., ERROR.6-1), the error status is reported by bit<br />

6 of the TERF, TER <strong>and</strong> ER comm<strong>and</strong>s <strong>and</strong> the error program (assigned with the<br />

ERRORP comm<strong>and</strong>) will be executed to respond to the error condition.<br />

NOTE: Kill is not intended as a means to temporarily inhibit motion; use the Pause/Continue<br />

input function instead (LIMFNCi-E or INFNCi-E).<br />

Stop<br />

• LIMFNCi-D<br />

• INFNCi-D<br />

An input defined as a Stop input will stop motion (see examples below). Deceleration is<br />

controlled by the programmed AD/ADA deceleration ramp. If error-checking bit 8 is enabled<br />

(e.g., ERROR.8-1), the error status is reported by bit 8 of the TERF, TER <strong>and</strong> ER comm<strong>and</strong>s<br />

<strong>and</strong> the error program (assigned with the ERRORP comm<strong>and</strong>) will be executed to respond to<br />

the error condition.<br />

After the Stop input is received, further program execution is dependent upon the COMEXS<br />

comm<strong>and</strong> setting:<br />

COMEXSØ: (default setting) Upon receiving a stop input, motion will stop, program<br />

execution will be terminated <strong>and</strong> cannot be resumed, <strong>and</strong> every comm<strong>and</strong> in the<br />

buffer will be discarded.<br />

COMEXS1: Upon receiving a stop input, motion will stop, program execution will pause, <strong>and</strong><br />

all comm<strong>and</strong>s following the comm<strong>and</strong> currently being executed will remain in<br />

the comm<strong>and</strong> buffer (but the move in progress will not be saved).<br />

You can resume program execution (but not the move in progress) by issuing an<br />

immediate Continue (!C) comm<strong>and</strong> or by activating a pause/resume input (i.e., a<br />

general-purpose input configured as a pause/continue input with the INFNCi-E<br />

comm<strong>and</strong>—see below). You cannot resume program execution while the move<br />

in progress is decelerating.<br />

COMEXS2: Upon receiving a stop input, the Gem6K responds as it does in the COMEXS0<br />

mode, with the exception that you can still use the program-select inputs to<br />

select programs (INSELP value is retained). The program-select input functions<br />

are: BCD select (INFNCi-B or LIMFNCi-B; see page 97), <strong>and</strong> one-to-one select<br />

(INFNCi-P or LIMFNCi-P; see page 103). For further details on program<br />

selection with inputs, refer to INFNC (or LIMFNC) <strong>and</strong> INSELP.<br />

Example: The 3INFNC2-D comm<strong>and</strong> assigns the “stop” function to the 2 nd input on SIM1 of<br />

I/O brick #3. When this input is activated, motion will stop.<br />

98 Gem6K Series Programmer’s <strong>Guide</strong>


Pause/Continue<br />

• LIMFNCi-E<br />

• INFNCi-E<br />

An input defined as a Pause/Continue input will affect motion <strong>and</strong> program execution<br />

depending on the COMEXR comm<strong>and</strong> setting, as described below. In both cases, when the<br />

input is activated, the current comm<strong>and</strong> being processed will be allowed to finish executing<br />

before the program is paused.<br />

COMEXRØ: Upon receiving a pause input, only program execution will be paused; any motion<br />

in progress will continue to its predetermined destination. Releasing the pause<br />

input or issuing a !C comm<strong>and</strong> will resume program execution.<br />

COMEXR1: Upon receiving a pause input, both motion <strong>and</strong> program execution will be paused;<br />

the motion stop function is used to halt motion. Releasing the pause input or<br />

issuing a !C comm<strong>and</strong> will resume motion <strong>and</strong> program execution. You cannot<br />

resume program execution while the move in progress is decelerating.<br />

User Fault<br />

• LIMFNCi-F<br />

• INFNCi-F<br />

An input defined as a User Fault input acts as an immediate Kill (!K) comm<strong>and</strong>, stopping<br />

motion <strong>and</strong> terminating program execution. Motion is stopped at the rate set with the hard limit<br />

(LHAD & LHADA) comm<strong>and</strong>s.<br />

If error-checking bit #7 is enabled (e.g., ERROR.7-1), then a user fault input will cause a<br />

branch to the ERRORP error program (for more information, see Error H<strong>and</strong>ling on page 30)<br />

<strong>and</strong> the occurrence of a user fault input will be reported by error bit #7 (see TERF, TER <strong>and</strong> ER<br />

comm<strong>and</strong>s).<br />

Trigger Interrupt<br />

(INFNCi-H)<br />

This function is available only for onboard trigger inputs. Any trigger input may be defined<br />

as a Trigger Interrupt input <strong>and</strong> can be used for these functions:<br />

• Position Capture (see below)<br />

• Special trigger functions assigned with the TRGFN comm<strong>and</strong> (see below)<br />

• Registration (see discussion on page 159)<br />

Notes About Trigger Interrupt Inputs<br />

• The trigger interrupt input is debounced for 24 ms (default) before another input on the<br />

same trigger is recognized. If your application requires a different debounce time, you can<br />

change it with the TRGLOT comm<strong>and</strong> (refer to Input Debounce Time on page 96).<br />

• When configured as Trigger Interrupts, the triggers cannot be affected by the input enable<br />

(INEN) comm<strong>and</strong>.<br />

• Status: Use the TTRIG <strong>and</strong> TRIG comm<strong>and</strong>s to ascertain if a trigger interrupt input has<br />

been activated. TTRIG displays the status as a binary report, <strong>and</strong> TRIG is an<br />

assignment/comparison operator for using the status information in a conditional<br />

expression (e.g., in an IF statement). Each TTRIG/TRIG bit is cleared when the<br />

respective captured position value is read with the PCC, PCE, PCME, PCMS, TPCC, TPCE,<br />

TPCME, or TPCMS comm<strong>and</strong>s, but the position information is still available from the<br />

respective register until it is overwritten by a subsequent position capture by the same<br />

trigger input.<br />

Position Capture<br />

The Gem6K has two dedicated trigger inputs, referred to as “TRIG-A” <strong>and</strong> “TRIG-B.” These<br />

trigger inputs are located on the DRIVE/10 connector. When either trigger input (TRIG-A or<br />

TRIG-B) is assigned the Trigger Interrupt function, activating the input performs a hardware<br />

capture of the position. If the Gem6K is used as a follower in Following, activating the trigger<br />

also performs an interpolated capture of the associated master axis position.<br />

An additional trigger, labeled “TRIG-M”, may be used to perform a hardware capture of the<br />

Master Encoder (the encoder connected to the “MASTER ENCODER” connector), as well as the<br />

motor position (encoder position on servo axes; comm<strong>and</strong>ed or encoder position for steppers,<br />

depending on the ENCCNT setting). To assign TRIG-M as a trigger interrupt input, use the<br />

Chapter 3. Basic Operation Setup 99


INFNC17-H comm<strong>and</strong>.<br />

When a Trigger Interrupt input is activated, the controller captures the relevant positions <strong>and</strong><br />

stores them in registers that are available at the next system update (2 ms) through the use of<br />

these transfer <strong>and</strong> assignment/comparison comm<strong>and</strong>s:<br />

Captured Information Transfer Assignment/Comparison Offset * Scale Factor **<br />

Comm<strong>and</strong>ed position TPCC PCC PSET SCLD<br />

Encoder position TPCE PCE PSET SCLD<br />

Master encoder position TPCME PCME PMESET SCLMAS<br />

Master cycle position TPCMS PCMS PSET SCLMAS<br />

* Captured values are offset by any existing PSET or PMESET offset.<br />

** If scaling is enabled, the captured position is scaled by SCLD or SCLMAS.<br />

Notes About Position Capture<br />

• Hardware Capture: The encoder position is captured within ± 1 encoder count. The<br />

comm<strong>and</strong>ed position capture accuracy is ± 1 count.<br />

• Interpolated Capture: There is a time delay of up to 50 µs between activating the trigger<br />

interrupt input <strong>and</strong> capturing the position; therefore, the accuracy of the captured position<br />

is equal to 50 µs multiplied by the velocity at the time the input was activated.<br />

• Servo vs. Stepper. The nature of the position captured with a Trigger Interrupt input may<br />

be different, depending on whether the drive is a servo or stepper. For servos, both the<br />

comm<strong>and</strong>ed <strong>and</strong> encoder positions are captured. Analog input feedback cannot be<br />

captured. For steppers, if the ENCCNT comm<strong>and</strong> is set to ENCCNT0 (default condition),<br />

only the comm<strong>and</strong>ed position is captured. If ENCCNT1 mode is enabled, only the encoder<br />

position is captured.<br />

Trigger Functions<br />

The Trigger Functions comm<strong>and</strong> (TRGFN) allows you to assign additional functions to trigger<br />

inputs that have been defined as trigger interrupt inputs with the INFNCi-H comm<strong>and</strong>. These<br />

trigger functions are cleared once the function is triggered. Comm<strong>and</strong> syntax is:<br />

TRGFNcbb<br />

Start New Master Cycle (FMCNEW) function<br />

Conditional GO (GOWHEN) function<br />

Trigger letter. Two triggers are available (A or B).<br />

The “Master Trigger” (letter M) may also be used.<br />

• “Conditional GO” Function (TRGFNc1x): Suspend execution of the next start-motion<br />

comm<strong>and</strong> until the specified trigger input goes active. Start-motion comm<strong>and</strong>s are:<br />

- GO (st<strong>and</strong>ard comm<strong>and</strong> to begin motion)<br />

- FSHFC (begin continuous shift – for Following motion)<br />

- FSHFD (begin preset shift – for Following motion)<br />

Axis status bit #26 (reported with TASF, TAS, or AS) is set to one (1) when there is a<br />

pending “Conditional GO” condition initiated by a TRGFN comm<strong>and</strong>; this bit is cleared<br />

when the trigger is activated or when a stop comm<strong>and</strong> or a kill comm<strong>and</strong> is issued. If you<br />

need execution to be triggered by other factors (e.g., input state, master position, encoder<br />

position, etc.) use the GOWHEN comm<strong>and</strong>; refer to GOWHEN comm<strong>and</strong> or page 163 for<br />

details.<br />

• “New Master Cycle” Function (TRGFNcx1): This is equivalent to executing the<br />

FMCNEW comm<strong>and</strong>. When the specified trigger input goes active, the controller begins<br />

a new Following master cycle. Refer to the FMCNEW comm<strong>and</strong> or to page 183 for<br />

more on master cycles.<br />

100 Gem6K Series Programmer’s <strong>Guide</strong>


Code Examples INFNC1-H ; Assign trigger A (onboard input 1) to function as<br />

; a trigger interrupt input.<br />

INFNC2-H ; Assign trigger B (onboard input 2) to function as<br />

; a trigger interrupt input.<br />

TRGFNAx1 ; When trigger A goes active, begin a new master cycle<br />

TRGFNB1<br />

; When trigger B goes active, execute the move comm<strong>and</strong>ed<br />

; with the GO comm<strong>and</strong>.<br />

GO<br />

; The move is comm<strong>and</strong>ed, but will not execute until<br />

; trigger B becomes active.<br />

Registration<br />

If registration is enabled (with the RE comm<strong>and</strong>), activating a trigger interrupt input will<br />

initiate a registration move defined with the REG comm<strong>and</strong>. Refer to page 159 for details on<br />

the Registration feature.<br />

Alarm Event<br />

• LIMFNCi-I<br />

• INFNCi-I<br />

An input specified as an Alarm Event input will cause the Gem6K controller to set an Alarm<br />

Event in the Communications Server over the Ethernet interface. You must first enable the<br />

Alarm checking bit for this input-driven alarm (INTHW.23-1). For details on using alarms<br />

<strong>and</strong> other Communications Server features, refer to the COM6SRVR Programmer’s <strong>Guide</strong> or to<br />

the Motion Planner help system.<br />

Jogging the Motor<br />

• LIMFNCi-J<br />

• LIMFNCi-K<br />

• LIMFNCi-L<br />

• INFNCi-J<br />

• INFNCi-K<br />

• INFNCi-L<br />

In some applications, you may want to manually move (jog) the load. You can configure these<br />

jog-related input functions:<br />

“J” ....Jog in the positive counting direction when the input is active, stop when the input is<br />

inactive.<br />

“K” ....Jog in the negative counting direction when the input is active, stop when the input is<br />

inactive.<br />

“L” ....Select the high (JOGVH) or low (JOGVL) velocity setting for jog motion. Activating<br />

the input selects high velocity, deactivating the input selects low velocity.<br />

The jog profile is defined with these comm<strong>and</strong>s listed below. NOTE: If scaling is enabled<br />

(SCALE1) the velocity is scaled by SCLV <strong>and</strong> accel/decel is scaled by SCLA.<br />

JOGVH....... High velocity range for jogging. The high velocity is used when the jogging<br />

speed-select input (configured with INFNCi-L) is active.<br />

JOGVL....... Low velocity range for jogging. The low velocity is used when the jogging<br />

speed-select input (configured with INFNCi-L) is inactive.<br />

JOGA......... Jog acceleration<br />

JOGAA....... Jog acceleration (s-curve profile)<br />

JOGAD....... Jog deceleration<br />

JOGADA .... Jog deceleration (s-curve profile)<br />

Once you set up the jog functions <strong>and</strong> move profile, you can attach a switch to the designated<br />

jog inputs <strong>and</strong> perform jogging. (Jog motion will not occur unless Jog Mode is enabled with<br />

the JOG comm<strong>and</strong>.) The example below shows you how to define a program to set up jogging.<br />

Chapter 3. Basic Operation Setup 101


Example Step 1 Define program for jog setup:<br />

Step 2<br />

Step 3<br />

Step 4<br />

Step 5<br />

Step 6<br />

DEF prog1 ; Begin definition of program prog1<br />

JOGA25 ; Jog acceleration to 25 units/sec/sec<br />

JOGAD25 ; Jog deceleration to 25 units/sec/sec<br />

JOGVL.5 ; Low-speed jog velocity to 0.5 units/sec<br />

JOGVH5 ; High-speed jog velocity to 5 units/sec<br />

INFNC1-J ; Trigger input 1 is a positive-direction jog input, axis 1<br />

INFNC2-K ; Trigger input 2 is a negative-direction jog input, axis 1<br />

INFNC3-L ; Trigger input 3 is a speed-select input, axis 1<br />

JOG1 ; Enable Jog function for axis 1<br />

END<br />

; End program definition<br />

Download <strong>and</strong> run the prog1 program.<br />

Activate input 1 to move the load in the positive direction at a velocity of 0.5 units/sec (until<br />

trigger input 1 is released). Deactivate the input to stop the axis.<br />

Activate input 2 to move the load in the negative direction at a velocity of 0.5 units/sec (until<br />

input 2 is released). Deactivate the input to stop the axis.<br />

Activate input 3 to switch to high-speed jogging.<br />

Repeat steps 3 <strong>and</strong> 4 to perform high-speed jogging at the JOGVH value (5 rps).<br />

Joystick Functions<br />

• LIMFNCi-M<br />

• LIMFNCi-N<br />

• LIMFNCi-O<br />

• INFNCi-M<br />

• INFNCi-N<br />

• INFNCi-O<br />

As part of the joystick setup process, you can configure programmable inputs to serve the<br />

joystick input functions listed below. Full details on joystick setup <strong>and</strong> operation are provided<br />

on page 130.<br />

“M” ....The Joystick Release input signals the controller to end joystick operation <strong>and</strong> resume<br />

program execution with the next statement in your program. When the input is open<br />

(high, sinking current), the joystick mode is disabled (joystick mode can be enabled<br />

only if the input is closed, <strong>and</strong> only with the JOY comm<strong>and</strong>). When the input is closed<br />

(low, not sinking current), joystick mode can be enabled with the JOY comm<strong>and</strong>. The<br />

general process of using Joystick mode is:<br />

1. Assign the “Joystick Release” input function to a programmable input.<br />

2. At the appropriate place in the program, enable joystick control of motion (with the JOY<br />

comm<strong>and</strong>). (Joystick mode cannot be enabled unless the "Joystick Release" input is<br />

closed.) When the JOY comm<strong>and</strong> enables joystick mode, program execution stops<br />

(assuming the Continuous Comm<strong>and</strong> Execution Mode is disabled with the COMEXCØ<br />

comm<strong>and</strong>).<br />

3. Use the joystick to move as required.<br />

4. When you are finished using the joystick, open the “Joystick Release” input to disable the<br />

joystick mode. This allows program execution to resume with the next statement after the<br />

initial JOY comm<strong>and</strong> that started the joystick mode.<br />

“O” ...The Joystick Velocity Select input allows you to select the velocity for joystick<br />

motion. The JOYVH <strong>and</strong> JOYVL comm<strong>and</strong>s establish the high-speed velocity <strong>and</strong> the<br />

low-speed velocity, respectively. Opening the Velocity Select input (input is high,<br />

sinking current) selects the JOYVH configuration. Closing the Velocity Select input<br />

(input is low, not sinking current) selects the JOYVL configuration. The high range<br />

could be used to quickly move to a location, the low range could be used for accurate<br />

positioning. NOTE: When this input is not connected, joystick motion always uses<br />

the JOYVL velocity setting.<br />

102 Gem6K Series Programmer’s <strong>Guide</strong>


One-to-One<br />

Program Select<br />

• LIMFNCi-iP<br />

• INFNCi-iP<br />

An input defined as a One-to-One Program Select input is assigned to execute one specific<br />

program. The targeted program is reference by its number (see note).<br />

Program Numbers<br />

A program’s number is determined by the order in which the program was downloaded to the<br />

controller. The number of each program stored in the controller's memory can be obtained<br />

through the TDIR comm<strong>and</strong> — refer to the number reported in front of each program name.<br />

When selecting programs with One-to-One Program Select inputs, the program number is<br />

assigned to one specific input <strong>and</strong> is executed when the input is activated (see example<br />

below).<br />

Before you can execute programs using the One-to-One program select inputs, you must first<br />

enable scanning with the INSELP2 comm<strong>and</strong>. Once enabled, the controller will continuously<br />

scan the inputs <strong>and</strong> execute the program (by number) according to the program number<br />

assigned to the input. After executing <strong>and</strong> completing the selected program, the controller will<br />

scan the inputs again. NOTE: To disable scanning, enter !INSELPØ or place INSELPØ in a<br />

program that can be selected.<br />

The INSELP comm<strong>and</strong> also determines how long the program select input level must be<br />

maintained before the controller executes the program. This delay is referred to as debounce<br />

time (but is not affected by the INDEB setting).<br />

Example RESET ; Return controller to power-up default conditions<br />

DEF proga ; Begin definition of program proga<br />

TFB<br />

; Transfer position of feedback devices<br />

END<br />

; End program<br />

DEF progb ; Begin definition of program progb<br />

TREV ; Transfer software revision<br />

END<br />

; End program<br />

DEF progc ; Begin definition of program progc<br />

TSTAT ; Transfer statistics<br />

END<br />

; End program<br />

TDIR ; Response should show: *1 - PROGA USES 36 BYTES<br />

; *2 - PROGB USES 70 BYTES<br />

; *3 - PROGC USES 133 BYTES<br />

INFNC4-1P ; input 4 will select proga<br />

INFNC5-2P ; input 5 will select progb<br />

INFNC6-3P ; input 6 will select progc<br />

INSELP2,50 ; Enable scanning of inputs with a strobe time of 50 ms<br />

You can now execute programs by making a contact closure from an input to ground to<br />

activate the input:<br />

• Activate input #4 to execute program #1 (proga)<br />

• Activate input #5 to execute program #2 (progb)<br />

• Activate input #6 to execute program #3 (progc)<br />

Chapter 3. Basic Operation Setup 103


Program Security<br />

• LIMFNCi-Q<br />

• INFNCi-Q<br />

Once an input is assigned the Program Security function, the Program Security feature is<br />

enabled. The program security feature denies you access to the DEF, DEL, ERASE, MEMORY,<br />

LIMFNC <strong>and</strong> INFNC comm<strong>and</strong>s until you activate the Program Security input. Being denied<br />

access to these comm<strong>and</strong>s effectively restricts altering the user memory allocation. If you try<br />

to use these comm<strong>and</strong>s when program security is active (program security input is not<br />

activated), you will receive the error message *ACCESS DENIED.<br />

For example, once you issue the 2INFNC7-Q comm<strong>and</strong>, input #7 on I/O brick #2 (2IN.7) is<br />

assigned the program security function <strong>and</strong> access to the DEF, DEL, ERASE, MEMORY,<br />

LIMFNC <strong>and</strong> INFNC comm<strong>and</strong>s will be denied until you activate 2IN.7.<br />

To regain access to the DEF, DEL, ERASE, MEMORY, LIMFNC or INFNC comm<strong>and</strong>s without<br />

the use of the program security input, you must issue the INEN comm<strong>and</strong> to disable the<br />

program security input, make the required user memory changes, <strong>and</strong> then issue the INEN<br />

comm<strong>and</strong> to re-enable the input. For example, if input 3 on brick 2 is assigned as the Program<br />

Security input, use 2INEN.3=1 to disable the input <strong>and</strong> leave it activated, make the necessary<br />

user memory changes, <strong>and</strong> then use 2INEN.3=E to re-enable the input.<br />

NOTE: If you wish the Program Security feature to be enabled on power-up, place the<br />

INFNCi-Q or LIMFNCi-Q comm<strong>and</strong> in the start-up program (STARTP).<br />

Limit Functions<br />

• LIMFNCi-aR<br />

• LIMFNCi-aS<br />

• LIMFNCi-aT<br />

• INFNCi-aR<br />

• INFNCi-aS<br />

• INFNCi-aT<br />

Input numbers are factory-configured with the LIMFNC comm<strong>and</strong> to function as end-of-travel<br />

<strong>and</strong> home limits (see illustration on page 91). The limit functions are:<br />

“R” .... Positive-Direction End-of-Travel Limit input, axis specific.<br />

“S” .... Negative-Direction End-of-Travel Limit input, axis specific.<br />

“T” .... Home Limit input, axis specific.<br />

If you intend to use digital inputs on an external I/O brick as limit inputs:<br />

1. Assign the limit function to the external input with the INFNC comm<strong>and</strong>. For example,<br />

1INFNC9-1R assigns the “axis 1 positive end-of-travel limit” function to the 1 st input<br />

on SIM2 (I/O point 9) of I/O brick 1.<br />

2. Reassign the respective “LIMITS” input to a non-limit function with the LIMFNC<br />

comm<strong>and</strong>. For example, LIMFNC1-A assigns the “general-purpose input” function to<br />

limit input 1 (normally assigned the “axis 1 positive end-of-travel limit” function).<br />

NOTE: Once an input or I/O brick input is assigned a limit function, it is no longer debounced<br />

(INDEB has no effect), <strong>and</strong> it must be enabled/disabled with the LH comm<strong>and</strong> instead of the<br />

INEN comm<strong>and</strong>.<br />

104 Gem6K Series Programmer’s <strong>Guide</strong>


Output Functions<br />

The Gem6K product provides programmable digital outputs, found on the drive I/O connect.<br />

Additional digital outputs may be installed on expansion I/O bricks (see example on page 93).<br />

You can turn the controller's programmable outputs on <strong>and</strong> off with the Output (OUT, POUT<br />

or OUTALL) comm<strong>and</strong>s, or you can use the Output Function (OUTFNC) comm<strong>and</strong> to<br />

configure them to activate based on seven different situations. The OUTFNC syntax is as<br />

follows:<br />

OUTFNCi-c<br />

I/O Brick number.<br />

Onboard outputs are considered<br />

collectively as I/O brick 0 (zero), <strong>and</strong><br />

are addressed of the I/O brick<br />

number is left off the comm<strong>and</strong>.<br />

Letter that selects the desired<br />

function (see list below).<br />

Number of the output.<br />

(see page 78-79 for output bit assignments)<br />

Letter Designator Function<br />

A .................General-purpose output (default function)<br />

B .................Moving/not moving<br />

C .................Program in progress<br />

D .................Hardware or software end-of-travel limit encountered<br />

E .................Stall indicator — stepper only<br />

F .................Fault indicator (indicates drive fault input or user fault input is active)<br />

G .................Position error exceeds max. limit set with SMPER — servo only<br />

H .................Output on position<br />

NOTES<br />

• Multi-tasking: If the OUTFNC comm<strong>and</strong> does not include the task identifier (%) prefix, the<br />

function affects the task that executes the OUTFNC comm<strong>and</strong>. “Program in progress”<br />

(function C) is only function that may be directed to a specific task with %. Multiple tasks<br />

may share the same output, but the output may only be assigned one function.<br />

• Limit of 32 output functions: You may assign a maximum of 32 OUTFNC functions. This<br />

excludes function A (“general-purpose”).<br />

Chapter 3. Basic Operation Setup 105


Output Status<br />

Below is a list of the status comm<strong>and</strong>s you may use to ascertain the current state <strong>and</strong>/or defined<br />

function of the outputs.<br />

• Status display comm<strong>and</strong>s:<br />

- TIO........................I/O brick configuration (which SIMs are present, including sinking/sourcing)<br />

- OUTFNC.................Active state <strong>and</strong> programmed function of all onboard outputs<br />

- OUTFNCi ..............Same as OUTFNC display, but only for the output number (“i”)<br />

- OUTFNC..........Active state <strong>and</strong> programmed function of all outputs on I/O brick B<br />

- OUTFNCi .......Same as OUTFNC display, but only for the output number (“i”) on I/O brick B<br />

- TOUT .....................Hardware state of all onboard outputs (binary report);<br />

use TOUT.i to check the state of only one output (“i”)<br />

- TOUT ..............Hardware state of all outputs (binary report) on I/O brick B;<br />

use TOUT.i to check the state of only one output (“i”) on brick B<br />

• Status assignment/comparison operator: *<br />

- OUT........................Hardware state (binary) of all onboard outputs;<br />

use OUT.i to check the state of only one output (“i”)<br />

- OUT.................Hardware state (binary) of all outputs on I/O brick B;<br />

use OUT.i to check the state of only one output (“i”) on I/O brick B<br />

* The purpose of the OUT operator is to use the state of the outputs as a basis for conditional<br />

statements (IF, REPEAT, WHILE, GOWHEN, etc.) or for binary variable assignments (VARB).<br />

Output Active<br />

Levels<br />

Using OUTLVL, you can define the logic levels of the programmable outputs as positive or<br />

negative. OUTLVL0 selects active low (default setting); OUTLVL1 selects active high.<br />

Onboard Digital Outputs<br />

OUTLVL Setting OUT State * Current TOUT Status<br />

OUTLVL0 (default) OUT1 Sinking current 1<br />

OUTLVL0 (default) OUT0 No current flow 0<br />

OUTLVL1 OUT1 No current flow 1<br />

OUTLVL1 OUT0 Sinking current 0<br />

* The output is “active” when it is comm<strong>and</strong>ed by the OUT, OUTPA, or POUTA comm<strong>and</strong>s<br />

(for example, OUTxx1 activates output #3).<br />

Outputs on Expansion I/O Bricks:<br />

• Sinking vs. Sourcing Outputs. On power up, the Gem6K controller auto-detects the type<br />

of output SIM installed on each external I/O brick, <strong>and</strong> automatically changes the OUTLVL<br />

setting accordingly. If sinking (NPN) outputs are detected, OUTLVL is set to active low<br />

(OUTLVL0); if sourcing (PNP) outputs are detected, OUTLVL is set to active high<br />

(OUTLVL1).<br />

• Disconnect I/O Brick. If the I/O brick is disconnected (or if it loses power), the controller<br />

will perform a kill (all tasks) <strong>and</strong> set error bit #18. (If you disable the “Kill on I/O<br />

Disconnect” mode with KIOENØ, the Gem6K will not perform the kill.) The controller<br />

will remember the brick configuration (volatile memory) in effect at the time the<br />

disconnection occurred. When you reconnect the I/O brick, the controller checks to see if<br />

anything changed (SIM by SIM) from the state when it was disconnected. If an existing<br />

SIM slot is changed (different SIM, vacant SIM slot, or jumper setting), the controller<br />

will set the SIM to factory default INEN <strong>and</strong> OUTLVL settings. If a new SIM is installed<br />

where there was none before, the new SIM is auto-configured to factory defaults.<br />

106 Gem6K Series Programmer’s <strong>Guide</strong>


• Relationships:<br />

Output Type OUTLVL Setting OUT State * Current OUT/TOUT status LED<br />

NPN (sinking) OUTLVL0 (default) OUT1 Sinking current 1 ON<br />

NPN OUTLVL0 (default) OUT0 No current flow 0 OFF<br />

NPN OUTLVL1 OUT1 No current flow 1 OFF<br />

NPN OUTLVL1 OUT0 Sinking current 0 ON<br />

PNP (sourcing) OUTLVL0 OUT1 No current flow 1 OFF<br />

PNP OUTLVL0 OUT0 Sourcing current 0 ON<br />

PNP OUTLVL1 (default) OUT1 Sourcing current 1 ON<br />

PNP OUTLVL1 (default) OUT0 No current flow 0 OFF<br />

* The output is “active” when it is comm<strong>and</strong>ed by the OUT, OUTP, or POUT comm<strong>and</strong><br />

(for example, OUTxx1 activates output #3).<br />

“General Purpose”<br />

(OUTFNCi-A)<br />

The default function for the outputs is General Purpose. As such, the output is used as a<br />

st<strong>and</strong>ard output, turning it on or off with the OUT, OUTP or OUTALL comm<strong>and</strong>s to affect<br />

processes external to the controller. To view the state of the outputs, use the TOUT comm<strong>and</strong>.<br />

To use the state of the outputs as a basis for conditional branching or looping statements (IF,<br />

REPEAT, WHILE, etc.), use the [ OUT ] comm<strong>and</strong>.<br />

Moving/Not Moving<br />

(In Position)<br />

(OUTFNCi-B)<br />

Example<br />

When assigned the Moving/Not Moving function, the output will activate when motion is<br />

comm<strong>and</strong>ed. As soon as the move is completed, the output will change to the opposite state.<br />

Servos: If the target zone mode is enabled (STRGTE1), the output will not change state until<br />

the move completion criteria set with the STRGTD <strong>and</strong> STRGTV comm<strong>and</strong>s has been met.<br />

(For more information, refer to the Target Zone section on page 84.) In this manner, the<br />

Moving/Not Moving output functions as an In Position output.<br />

The code example below defines onboard outputs 1 <strong>and</strong> 2 as General Purpose outputs <strong>and</strong><br />

output 3 as a Moving/Not Moving output. Before the motor moves 4,000 steps, output 1 turns<br />

on <strong>and</strong> output 2 turns off. These outputs remain in this state until the move is completed, then<br />

output 1 turns off <strong>and</strong> output 2 turns on. While the motor/load is moving, output 3 remains on.<br />

SCALE0 ; Disable scaling<br />

MC0<br />

; Set axis 1 to preset positioning mode<br />

MA0<br />

; Select incremental positioning mode<br />

A10 ; Set axis 1 acceleration to 10<br />

V5 ; Set axis 1 velocity to 5<br />

D4000<br />

; Set axis 1 distance to 4,000 counts<br />

OUTFNC1-A ; Set onboard output 1 as a general purpose output<br />

OUTFNC2-A ; Set onboard output 2 as a general purpose output<br />

OUTFNC3-B ; Set onboard output 3 as axis 1 Moving/Not Moving output<br />

OUT10<br />

; Turn onboard output 1 on <strong>and</strong> output 2 off<br />

GO<br />

; Initiates axis 1 move<br />

OUT01<br />

; Turn onboard output 1 off <strong>and</strong> output 2 on<br />

Program in<br />

Progress<br />

(OUTFNCi-C)<br />

When assigned the Program in Progress function, the output will activate when a program is<br />

being executed. After the program is finished, the output's state is reversed. The action of<br />

executing a program is also reported with system status bit 3 (see TSSF, TSS <strong>and</strong> SS<br />

comm<strong>and</strong>s).<br />

Chapter 3. Basic Operation Setup 107


Limit Encountered<br />

(OUTFNCi-D)<br />

When assigned the Limit Encountered function, the output will activate when a hard or soft<br />

end-of-travel limit has been encountered.<br />

If a hard or soft limit is encountered, you will not be able to move the motor/load in that same<br />

direction until you clear the limit by changing direction (D) <strong>and</strong> issuing a GO comm<strong>and</strong>. (An<br />

alternative is to disable the limits with the LHØ comm<strong>and</strong>, but this is recommended only if the<br />

motor is not coupled to the load.) The event of encountering an end-of-travel limit is also<br />

reported with axis status bits 15-18 (see TASF, TAS <strong>and</strong> AS comm<strong>and</strong>s, summary on page 222).<br />

Stall Indicator<br />

(OUTFNCi-E)<br />

Stepper Axis Only<br />

When assigned the Stall Indicator function, the output will activate when a stall is detected. To<br />

detect a stall, you must first connect an encoder <strong>and</strong> enable stall detection with the ESTALL1<br />

comm<strong>and</strong>. Refer to Encoder-Based Stepper Operation on page 84 for further discussion on<br />

stall detection.<br />

Fault Output<br />

(OUTFNCi-F)<br />

When assigned the Fault Output function, the output will activate when either the user fault<br />

input or the drive fault input becomes active. The user fault input is a general-purpose input<br />

defined as a user fault input with the LIMFNCi-F or INFNCi-F comm<strong>and</strong> (see page 99).<br />

Maximum Position<br />

Error Exceeded<br />

(OUTFNCi-G)<br />

Servos Only<br />

When assigned the Max. Position Error Exceeded function, the output will activate when the<br />

maximum allowable position error, as defined with the SMPER comm<strong>and</strong>, is exceeded.<br />

The position error (TPER) is defined as the difference between the comm<strong>and</strong>ed position (TPC)<br />

<strong>and</strong> the actual position as measured by the feedback device (TFB). When the maximum<br />

position error is exceeded (usually due to lagging load, instability, or loss of position<br />

feedback), the controller shuts down the drive <strong>and</strong> sets error status bit #12 (reported by the<br />

TERF, TER <strong>and</strong> ER comm<strong>and</strong>s if bit #12 of the ERROR comm<strong>and</strong> is enabled).<br />

NOTE<br />

If the SMPER comm<strong>and</strong> is set to zero (SMPERØ — the default value), the position error will not<br />

be monitored; thus, the Maximum Position Error Exceeded function will not be usable.<br />

108 Gem6K Series Programmer’s <strong>Guide</strong>


Output on Position<br />

(OUTFNCi-H)<br />

The Output on Position feature activates the designated output when the motor or load has<br />

reached a specified position. To use this feature, you must first assign the Output on Position<br />

function to output #1, <strong>and</strong> define the Output on Position characteristics with the OUTP<br />

comm<strong>and</strong>. Note: this is a firmware feature (not hardware) <strong>and</strong> the output on position is<br />

only updated every 1msec.<br />

OUTPA<br />

, , , <br />

Enable Bit:<br />

1 ... Enable the output-on-position function<br />

0 ... Disable the output-on-position function<br />

Servo Axes: If an SFB comm<strong>and</strong> is executed,<br />

the function is disabled.<br />

Increment or Absolute Position Comparison:<br />

1 ... Set position comparison to incremental<br />

...... (measured from the last start-motion<br />

...... comm<strong>and</strong>, such as GO, GOWHEN, etc.)<br />

0 ... Set position comparison to absolute<br />

Time (milliseconds):<br />

Time (milliseconds) the output is to stay active.<br />

The output activates when the specified<br />

position () is reached or exceeded, <strong>and</strong><br />

stays active for the specified time.<br />

If this field is set to zero, the output will stay<br />

active for as long as the actual distance equals<br />

or exceeds the position comparison distance<br />

(this is possible only for an absolute position<br />

comparison).<br />

Position:<br />

Scalable distance (distance is either<br />

incremental or absolute, depending on the<br />

second data field).<br />

Servos: Only the encoder position can be used.<br />

Steppers:<br />

If ENCCNT0, comm<strong>and</strong>ed position is used.<br />

If ENCCNT1, encoder position is used.<br />

Sample Code<br />

for Setup<br />

In this example, the user wants to turn on output when the motor (servo) reaches encoder<br />

position 50,000. The output must remain on for 50 milliseconds.<br />

; Define axis 1 as servo, axis 2 as stepper<br />

; Select encoder feedback for axis 1<br />

OUTFNC1-H<br />

; Define onboard output #1 as an "output on<br />

; position" output<br />

; Define onboard output #2 as an "output on<br />

; position" output<br />

OUTP1,0,+50000,50 ; Turn on onboard output #1 for 50 ms when the<br />

; encoder position is > or =<br />

; absolute position +50,000<br />

Notes about Output On Position<br />

• On servos, this feature can be used only with encoder feedback <strong>and</strong> is not operational with<br />

ANI (analog input) feedback.<br />

On steppers, this feature can be based on comm<strong>and</strong>ed position or encoder position,<br />

depending on the ENCCNT setting (default is ENCCNT0, which uses the comm<strong>and</strong>ed<br />

position).<br />

• The output activates only during motion; thus, issuing a PSET comm<strong>and</strong> to set the<br />

absolute position counter to activate the output on position will not turn on the output until<br />

the next motion occurs.<br />

Chapter 3. Basic Operation Setup 109


Variable Arrays (teaching variable data)<br />

More on variables:<br />

see page 18.<br />

Variable data arrays provide a method of storing (teaching) variable data <strong>and</strong> later using the<br />

stored data as a source for motion program parameters. The variable data can be any value that<br />

can be stored in a numeric (VAR or VARI) variable (e.g., position, acceleration, velocity, etc.).<br />

The variable data is stored into a data program, which is an array of data elements that have a<br />

specific address from which to write <strong>and</strong> read the variable data. Data programs do not contain<br />

Gem6K Series comm<strong>and</strong>s.<br />

The information below describes the principles of using the data program in a teach-type<br />

application. Following that is an application example in which the joystick is used to teach<br />

position data to be used in a motion program.<br />

Basics of Teach-Data Applications<br />

The basic process of using a data program for data teaching applications is as follows:<br />

1. Initialize a data program.<br />

2. Teach (store/write) variable data into the data program.<br />

3. Read the data elements from the data program into a motion program.<br />

1. Initialize a<br />

Data Program<br />

This is accomplished with the DATSIZ comm<strong>and</strong>. The DATSIZ comm<strong>and</strong> syntax is<br />

DATSIZi. The first integer (i) represents the number of the data program (1 - 50). You<br />

can create up to 50 separate data programs. The data program is automatically given a specific<br />

program name (DATPi). The second integer represents the total number of data elements (up<br />

to 6,500) you want in the data program. Upon issuing the DATSIZ comm<strong>and</strong>, the data program<br />

is created with all the data elements initialized with a value of zero.<br />

The data program has a tabular structure, where the data elements are stored 4 to a line. Each<br />

line of data elements is called a data statement. Each element is numbered in sequential order<br />

from left to right (1 - 4) <strong>and</strong> top to bottom (1 - 4, 5 - 8, 9 - 12, etc.). You can use the TPROG<br />

DATPi comm<strong>and</strong> (“i” represents the number of the data program) to display all the data<br />

elements of the data program.<br />

For example, if you issue the DATSIZ1,13 comm<strong>and</strong>, data program #1 (called DATP1) is<br />

created with 13 data elements initialized to zero. The response to the TPROG DATP1<br />

comm<strong>and</strong> is depicted below. Each line (data statement) begins with DATA=, <strong>and</strong> each data<br />

element is separated with a comma.<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø<br />

Each data statement, comprising four data elements, uses 43 bytes of memory. The memory<br />

for each data statement is subtracted from the memory allocated for user programs (see<br />

MEMORY comm<strong>and</strong>).<br />

110 Gem6K Series Programmer’s <strong>Guide</strong>


2. Teach the Data<br />

to the Data<br />

Program<br />

The data that you wish to write to the data elements in the data program must first be placed<br />

into numeric variables (VAR). Once the data is stored into numeric variables, the data elements<br />

in the data program can be edited by using the Data Pointer (DATPTR) comm<strong>and</strong> to move the<br />

data pointer to that element, <strong>and</strong> then using the Data Teach (DATTCH) comm<strong>and</strong> to write the<br />

datum from the numeric variable into the element.<br />

When the DATSIZ comm<strong>and</strong> is issued, the internal data pointer is automatically positioned to<br />

data element #1. Using the default settings for the DATPTR comm<strong>and</strong>, the numberic variable<br />

data is written to the data elements in sequential order, incrementing one by one. When the<br />

last data element in the data program is written, the data pointer is automatically set to data<br />

element #1 <strong>and</strong> a warning message (*WARNING: POINTER HAS WRAPPED AROUND<br />

TO DATA POINT 1) is displayed. The warning message does not interrupt program<br />

execution.<br />

The DATPTR comm<strong>and</strong> syntax is DATPTRi,i,i. The first integer (i) represents the data<br />

program number (1 through 50). The second integer represents the number of the data element<br />

to point to (1 through 6500). The third integer represents the number of data elements by<br />

which the pointer will increment after writing each data element from the DATTCH comm<strong>and</strong>,<br />

or after recalling a data element with the DAT comm<strong>and</strong>.<br />

The DATTCH comm<strong>and</strong> syntax is DATTCHi. Each integer (i) represents the<br />

number of a numeric variable. The value of the numeric variable will be stored into the data<br />

element(s) of the currently active data program (i.e., the program last specified with the last<br />

DATSIZ or DATPTR comm<strong>and</strong>). As indicated by the number of integers in the syntax, the<br />

maximum number of variable values that can be stored in the data program per DATTCH<br />

comm<strong>and</strong> is 4. Each successive value from the DATTCH comm<strong>and</strong> is stored to the data<br />

program according to the pattern established by the third integer of the DATPTR comm<strong>and</strong>.<br />

As an example, suppose data program #1 is configured to hold 13 data elements<br />

(DATSIZ1,13), the data pointer is configured to start at data element #1 <strong>and</strong> increment 1<br />

data element after every value stored from the DATTCH comm<strong>and</strong> (DATPTR1,1,1), <strong>and</strong> the<br />

values of numeric variables #1 through #3 are already assigned (VAR1=2, VAR2=4,<br />

VAR3=8). If you then enter the DATTCH1,2,3 comm<strong>and</strong>, the values of VAR1 through VAR3<br />

will be assigned respectively to the first three data elements in the data program, leaving the<br />

pointer pointing to data element #4. The response to the TPROG DATP1 comm<strong>and</strong> would be<br />

as follows (the text is highlighted to illustrate the final location of the data pointer after the<br />

DATTCH1,2,3 comm<strong>and</strong> is executed):<br />

*DATA=+2.Ø,+4.Ø,+8.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø<br />

If you had set the DATPTR comm<strong>and</strong> to increment 2 data elements after every value from the<br />

DATTCH comm<strong>and</strong> (DATPTR1,1,2), the data program would be filled differently <strong>and</strong> the<br />

data pointer would end up pointing to data element #7:<br />

*DATA=+2.Ø,+Ø.Ø,+4.Ø,+Ø.Ø<br />

*DATA=+8.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø,+Ø.Ø,+Ø.Ø,+Ø.Ø<br />

*DATA=+Ø.Ø<br />

3. Recall the Data<br />

from the Data<br />

Program<br />

After storing (teaching) your variables to the data program, you can use the DATPTR comm<strong>and</strong><br />

to point to the data elements <strong>and</strong> the DATi (“i” = data program number) data assignment<br />

comm<strong>and</strong> to read the stored variables to your motion program. You cannot recall more than<br />

one data element at a time; therefore, if you want to recall the data in a one-by-one sequence,<br />

the third integer of the DATPTR comm<strong>and</strong> must be a 1 (this is the default setting).<br />

Chapter 3. Basic Operation Setup 111


Summary of Related Gem6K Series Comm<strong>and</strong>s<br />

DATSIZ ..... Establishes the number of data elements a specific data program is to contain. A<br />

new DATPi program name is automatically generated according to the number<br />

of the data program (i = 1 through 50). The memory required for the data<br />

program is subtracted from the memory allocated for user programs (see<br />

MEMORY comm<strong>and</strong>).<br />

DATPTR ..... Moves the data pointer to a specific data element in any data program. This<br />

comm<strong>and</strong> also establishes the number of data elements by which the pointer<br />

increments after writing each data element from the DATTCH comm<strong>and</strong> <strong>and</strong><br />

after recalling each data element with the DAT comm<strong>and</strong>.<br />

DATTCH ..... Stores the variable data into the data program specified with the last DATSIZ or<br />

DATPTR comm<strong>and</strong>. After the data is stored, the data pointer is incremented the<br />

number of times entered in the third integer of the DATPTR comm<strong>and</strong>. The data<br />

must first be assigned to a numeric variable before it can be taught to the data<br />

program.<br />

TDPTR ....... Responds with a 3-integer status report (i,i,i): First integer is the number of<br />

the active data program (the program # specified with the last DATSIZ or<br />

DATPTR comm<strong>and</strong>); Second integer is the location number of the data element<br />

to which the data pointer is currently pointing; Third integer is the increment set<br />

with the last DATPTR comm<strong>and</strong>.<br />

[ DPTR ] ... From the currently active data program, uses the number of the data pointer's<br />

location in a numeric variable assignment operation or a conditional statement<br />

operation.<br />

[ DATPi ] . The name of the data program created after issuing the DATSIZ comm<strong>and</strong>. The<br />

integer (i) represents the number of the data program. Data programs can be<br />

deleted just like any other user program (e.g., DEL DATP1).<br />

[ DATi ] ... From the data program specified with i, assigns the numeric value of the data<br />

element (currently pointed to by the data pointer) to a specified variable<br />

parameter in a Gem6K series comm<strong>and</strong> (e.g., D(DAT3),(DAT3)).<br />

Teach-Data Application Example<br />

Step 1<br />

For the sake of brevity, this example is limited to teaching 10 position data points; however,<br />

in a typical application, many more points would be taught. Also, it is assumed that end-oftravel<br />

<strong>and</strong> home limits are wired <strong>and</strong> a homing move has been programmed.<br />

What follows is a suggested method of programming the controller to teach I/O data points.<br />

To accomplish the teach application, a program called MAIN is created, comprising three<br />

subroutines: SETUP (to set up for teaching data to the data program), TEACH (to teach the<br />

positions), <strong>and</strong> DOPATH (to implement a motion program based on the positions taught).<br />

The joystick operation in this example is based on using an analog inputs (ANI) SIM on an<br />

expansion I/O brick. The ANI SIM is in slot 2 of I/O brick 1 <strong>and</strong> inputs 1 <strong>and</strong> 2 are used to<br />

control axes 1 <strong>and</strong> 2, respectively. A digital input SIM is installed in slot 1 of I/O brick 1, <strong>and</strong><br />

input 1 on that SIM is assigned the Joystick Release function to trigger the position teach<br />

operation.<br />

Initialize a Data Program.<br />

DEL DATP1<br />

DATSIZ1,1Ø<br />

; Delete data program #1 (DATP1) in preparation for<br />

; creating a new data program #1<br />

; Create data program #1 (named DATP1) with an<br />

; allocation of 10 data elements. Each element is<br />

; initialized to zero.<br />

112 Gem6K Series Programmer’s <strong>Guide</strong>


Step 2<br />

Define the SETUP Subroutine. The SETUP subroutine need only run once.<br />

DEF SETUP<br />

1INFNC1-M<br />

JOYVH3<br />

JOYAXH1-9<br />

VAR1=Ø<br />

VAR2=Ø<br />

DRIVE1<br />

MA1<br />

END<br />

; Begin definition of the subroutine called SETUP<br />

; Assign digital input 1 on SIM 2 (I/O point #1) of<br />

; I/O brick 1 to function as a "Joystick Release" input.<br />

; Set the maximum velocity (3 units/sec)<br />

; achievable when the joystick is at full<br />

; deflection<br />

; Assign ANI input 1 on SIM 2 (I/O point #9) of I/O<br />

; brick 1<br />

; Initialize variable #1 equal to zero<br />

; Initialize variable #2 equal to zero<br />

; Enable the drive<br />

; Enable the absolute positioning mode<br />

; End definition of the subroutine called SETUP<br />

Step 3<br />

Define the TEACH Subroutine.<br />

DEF TEACH ; Begin definition of the subroutine called TEACH<br />

HOM1<br />

; Home the axis (absolute position counter is set to<br />

; zero after the homing move)<br />

DATPTR1,1,1 ; Select data program #1 (DATP1) as the current active<br />

; data program, <strong>and</strong> move the data pointer to the first<br />

; data element. After each DATTCH value is stored to<br />

; DATP1, increment the data pointer by 1 data element.<br />

REPEAT<br />

; Set up a repeat/until loop<br />

JOY1<br />

; Enable joystick mode. At this point,<br />

; you can start moving into position with the<br />

; joystick. WHILE USING THE JOYSTICK, COMMAND PROCESSING<br />

; IS STOPPED HERE UNTIL YOU ACTIVATE THE JOYSTICK<br />

; RELEASE INPUT. Activating the joystick release input<br />

; disables the joystick mode <strong>and</strong> allows the subsequent<br />

; comm<strong>and</strong>s to be executed (assign the current positions<br />

; to the variables <strong>and</strong> then store the positions in the<br />

; data program).<br />

VAR1=1PM ; Set variable #1 equal to the position of motor 1<br />

DATTCH1 ; Store variable #1. (The first time through the<br />

; repeat/until loop, variable #1 is stored into data ;<br />

;element #1. The data pointer is automatically<br />

; incremented once after each data element <strong>and</strong> ends up<br />

;pointing to the third data element in anticipation of<br />

;the next DATTCH comm<strong>and</strong>.)<br />

WAIT(1IN.1=b1) ; Wait for the joystick release input to be de-activated<br />

UNTIL(DPTR=1) ; Repeat the loop until the data pointer wraps around<br />

; to data element #1 (data program full)<br />

END<br />

; End definition of the subroutine called TEACH<br />

Chapter 3. Basic Operation Setup 113


Step 4<br />

Define the DOPATH Subroutine.<br />

DEF DOPATH ; Begin definition of the subroutine called DOPATH<br />

HOM1<br />

; Move to the home position<br />

; (absolute counters set to zero)<br />

A5Ø<br />

; Set up the acceleration<br />

V3<br />

; Set up the velocity<br />

DATPTR1,1,1 ; Select data program #1 (DATP1) as the current active<br />

; data program, <strong>and</strong> set the data pointer to the first<br />

; data element. Increment the data pointer one element<br />

; after every data assignment with the DAT comm<strong>and</strong>.<br />

REPEAT<br />

; Set up a repeat/until loop<br />

D(DAT1) ; The position is recalled into<br />

; the distance comm<strong>and</strong><br />

GO<br />

; Move to the position<br />

T.5 ; Wait for 0.5 seconds<br />

UNTIL(DPTR=1) ; Repeat the loop until the data pointer wraps around<br />

; to data element #1 (all data elements have been read)<br />

HOM1<br />

; Move back to the home position<br />

END<br />

; End definition of the subroutine called DOPATH<br />

Step 5<br />

Define the MAIN Program (Include SETUP, TEACH, <strong>and</strong> DOPATH).<br />

DEF MAIN ; Begin definition of the program called MAIN<br />

SETUP<br />

; Execute the subroutine called SETUP<br />

TEACH<br />

; Execute the subroutine called TEACH<br />

DOPATH<br />

; Execute the subroutine called DOPATH<br />

END<br />

; End definition of the program called MAIN<br />

Step 6<br />

Run the MAIN Program <strong>and</strong> Teach the Positions with the Joystick.<br />

1. Enter the MAIN comm<strong>and</strong> to execute the teach application program.<br />

2. 2. Use the joystick to move to the position to be taught.<br />

3. Once in position, activate the joystick release input to teach the positions.<br />

4. Repeat steps 2 <strong>and</strong> 3 for the remaining nine teach locations. After triggering the<br />

joystick release input the tenth time, the controller will home the motor, repeat the<br />

path that was taught, <strong>and</strong> then return to the home position.<br />

114 Gem6K Series Programmer’s <strong>Guide</strong>


Product Control Options<br />

4<br />

CHAPTER FOUR<br />

Product Control<br />

Options<br />

IN THIS CHAPTER<br />

This chapter explains various options for controlling your Gem6K product:<br />

• Safety features.................................................................................................... 116<br />

• Overview of product control options.................................................................. 116<br />

• Programmable I/O (switches, thumbwheels, PLCs, PLC Scan Mode, etc.) ................ 118<br />

• RP240 remote operator panel............................................................................. 123<br />

• Joystick <strong>and</strong> analog input interface (requires ANI SIM on expansion I/O brick)...... 130<br />

• Host computer interface ..................................................................................... 133


Safety Features<br />

WARNING<br />

The Gem6K Product is used to control your system's electrical <strong>and</strong> mechanical components.<br />

Therefore, you should test your system for safety under all potential conditions. Failure to do<br />

so can result in damage to equipment <strong>and</strong>/or serious injury to personnel.<br />

To help ensure a safe operating environment, you should take advantage of the safety features<br />

listed below. These features must not be construed as the only methods of ensuring safety.<br />

See Also refers you to where you can find more in-depth information about the feature (system<br />

connections <strong>and</strong>/or programming instructions)<br />

Feature Description See Also<br />

Enable Input<br />

End-of-travel<br />

Limit Inputs<br />

User Fault<br />

Input<br />

Maximum<br />

Allowable<br />

Position Error<br />

(servos only)<br />

The ENABLE input, found on the product’s drive I/O connector, is<br />

provided as an emergency stop input to the controller.<br />

If the ENABLE input is opened (disconnected from GND), output to<br />

the motors is inhibited.<br />

End-of-travel limits prevent the load from crashing through<br />

mechanical stops, an incident that can damage equipment <strong>and</strong> injure<br />

personnel. Use hardware or software limits, as your application<br />

requires.<br />

Using the INFNCi-F comm<strong>and</strong> or the LIMFNCi-F comm<strong>and</strong>, you<br />

can assign the user fault function to any of the programmable inputs.<br />

You can then wire the input to activate when an external event,<br />

considered a fault by the user, occurs.<br />

A position error (TPER) is defined as the difference between the<br />

comm<strong>and</strong>ed position (TPC) <strong>and</strong> the actual position as measured by<br />

the feedback device (TFB). The maximum allowable position error is<br />

set with the SMPER comm<strong>and</strong>. When the maximum allowable position<br />

error is exceeded (usually due to instability or loss of position<br />

feedback), the controller shuts down the drive <strong>and</strong> sets error status bit<br />

#12 (reported by the TER comm<strong>and</strong>).<br />

If SMPER is set to zero (SMPERØ), position error will not be monitored.<br />

Product’s<br />

hardware<br />

Installation <strong>Guide</strong><br />

End-of-Travel<br />

Limits<br />

(page 74)<br />

Input Functions<br />

(page 99)<br />

Servo Setup<br />

(page 85)<br />

☞<br />

Programmed Error-<br />

H<strong>and</strong>ling Responses<br />

When any of the safety features listed above are exercised (e.g., DFT input is activated, etc.),<br />

the controller considers it an error condition. With the exception of the shutdown output<br />

activation, you can enable the ERROR comm<strong>and</strong> to check for the error condition, <strong>and</strong> when it<br />

occurs to branch to an assigned ERRORP program. Refer to Error H<strong>and</strong>ling (page 30) for<br />

further information.<br />

Options Overview<br />

St<strong>and</strong>-Alone Interface Options<br />

After defining <strong>and</strong> storing controller programs, the controller can operate in a st<strong>and</strong>-alone<br />

fashion. A program stored in the controller may interactively prompt the user for input as part<br />

of the program (input via I/O switches, thumbwheels, RP240, joystick). A joystick can be use<br />

for situations requiring manual manipulation of the load.<br />

Option<br />

Application Example<br />

116 Gem6K Series Programmer’s <strong>Guide</strong>


RP240<br />

(see page 123)<br />

Joystick<br />

(see page 130)<br />

ANI Analog Inputs<br />

(see page Error! Bookmark not<br />

defined.)<br />

Programmable inputs scanned<br />

in PLC Scan Mode<br />

(see page 120)<br />

Grinding: Program the RP240 function keys to select certain part types,<br />

<strong>and</strong> program one function key as a GO button. Select the part you want<br />

to grind, then put the part in the grinding machine <strong>and</strong> press the GO<br />

function key. The controller will then move the machine according to the<br />

predefined program assigned to the function key selected.<br />

X-Y scanning/calibration: Enter the joystick mode <strong>and</strong> use the 2-axis<br />

joystick to position an X-Y table under a microscope to arbitrarily scan<br />

different parts of the work piece (e.g., semi-conductor wafer). You can<br />

record certain locations to be used later in a motion process (e.g., for<br />

drilling, cutting, or photographing the work piece). Refer to page 112 an<br />

example using the joystick to teach positions.<br />

Injection Molding: Use for feedback from a pressure sensor to maintain<br />

constant, programmable force. (Note: ANI control requires that you install<br />

an analog input SIM on an expansion I/O brick.)<br />

The PLC Scan feature allows you to create a pre-compiled program that<br />

mimics PLC functionality by scanning through the I/O faster than in a<br />

normal program run. Because the functions of PLC programs are precompiled,<br />

delays associated with comm<strong>and</strong> processing are eliminated<br />

during profile execution, allowing more rapid sequencing of actions than<br />

would be possible with programs which are not compiled. Comm<strong>and</strong><br />

processing is then free to monitor other activities.<br />

Programmable Logic Controller<br />

The controller's programmable I/O may be connected to most PLCs. After defining <strong>and</strong><br />

storing controller programs, the PLC typically executes programs, loads data, <strong>and</strong> manipulates<br />

inputs to the controller. The PLC instructs the controller to perform the motion segment of a<br />

total machine process.<br />

EXAMPLE (X-Y point-to-point): A PLC controls several tools to stack <strong>and</strong> bore several<br />

steel plates at once. The controller is programmed to move an X-Y table in a pre-programmed<br />

sequence. The controller moves the load when the inputs are properly configured, signals the<br />

PLC when the load is in position, <strong>and</strong> waits for the signal to continue to the next position.<br />

Host Computer Interface<br />

A computer may be used to control a motion or machine process. A PC can monitor<br />

processes <strong>and</strong> orchestrate motion by sending motion comm<strong>and</strong>s to the controller or by<br />

executing motion programs already stored in the controller. This control might come from a<br />

BASIC or C program. A BASIC program example is provided on page 117.Custom<br />

Graphical User Interfaces (GUIs)<br />

Compumotor offers tools you can use to create your own custom graphical user interfaces<br />

(GUIs). More detailed descriptions are provided on page 144.<br />

• ActiveX Control: A Gem6K product communication control for custom 32-bit<br />

applications (e.g., developed with VisualBasic). Provided with Motion Planner.<br />

• PanelMaker: A VBScript-based operator interface tool. This is an add-on to Motion<br />

Planner, sold separately.<br />

Chapter 5. Custom Profiling 117


Programmable I/O Devices<br />

Programmable I/O Functions<br />

Programmable inputs <strong>and</strong> outputs are provided to allow the controller to detect <strong>and</strong> respond to<br />

the state of switches, thumbwheels, electronic sensors, <strong>and</strong> outputs of other equipment such as<br />

drives <strong>and</strong> PLCs. Listed below are the programmable functions that may be assigned to the<br />

programmable I/O.<br />

Programmable I/O offering differs by product. The total number of onboard inputs <strong>and</strong><br />

outputs (trigger inputs, limit inputs, digital outputs) depends on the product. The total number<br />

of expansion inputs <strong>and</strong> outputs (analog inputs, digital inputs <strong>and</strong> digital outputs) depends on<br />

your configuration of expansion I/O bricks. To ascertain your product’s I/O bit patterns, refer<br />

to page 91.<br />

NOTE<br />

Refer to page 90 for instructions on establishing programmable input <strong>and</strong> output functions.<br />

Instructions for connecting to I/O devices are provided in your product’s Installation <strong>Guide</strong>.<br />

Input Functions<br />

Virtual Inputs<br />

can be established<br />

to provide programmable<br />

input<br />

functionality for data<br />

or external events<br />

that are not<br />

ordinarily<br />

represented by<br />

inputs. See page 94<br />

for details.<br />

Input functions may be assigned to two basic groups of programmable inputs. LIMFNC assigns<br />

functions to the limit inputs found on the “LIMITS/HOME” connector. INFNC assigns functions to<br />

the trigger inputs (on the “TRIGGERS/OUTPUTS” connector) <strong>and</strong> to the digital inputs installed on<br />

expansion I/O bricks. The syntax, LIMFNCi-c or INFNCi-c, requires a letter designator (“c”)<br />

that corresponds to an input function; options for the input functions are listed in the table below.<br />

Letter Designator<br />

Function<br />

A....................General-purpose input (default function for triggers & inputs on I/O bricks)<br />

B....................BCD program select<br />

C....................Kill<br />

D....................Stop<br />

E....................Pause/Continue<br />

F....................User fault<br />

G....................<br />

H....................Trigger Interrupt for position capture or registration (trigger inputs only). Special trigger<br />

functions can be assigned with the TRGFN comm<strong>and</strong> (see page 166).<br />

I....................Cause alarm event (requires Ethernet interface) in Communications Server<br />

J....................Jog in the positive-counting direction<br />

K....................Jog in the negative-counting direction<br />

L....................Jog velocity select<br />

M....................Joystick release<br />

N....................Joystick axis select<br />

O....................Joystick velocity select<br />

P....................One-to-one program select<br />

Q....................Program security<br />

R....................End-of-travel limit for positive-counting direction *<br />

S....................End-of-travel limit for negative-counting direction *<br />

T....................Home limit *<br />

* The limit inputs are factory-set to their respective end-of-travel or home limit function (see page 91).<br />

Output Functions Comm<strong>and</strong> Function<br />

OUTFNCi-A ............General-purpose output (default function)<br />

OUTFNCi-B ............Moving/not moving<br />

OUTFNCi-C ............Program in progress<br />

OUTFNCi-D ............Hardware or software end-of-travel limit encountered<br />

OUTFNCi-E ............Stall indicator — stepper axes only<br />

OUTFNCi-F ............Fault indicator (indicates drive fault input or user fault input is active)<br />

OUTFNCi-G ............Position error exceeds max. limit set with SMPER — servo axes only<br />

OUTFNCi-H ............Output on position<br />

* The “i” in the comm<strong>and</strong> syntax represents the number of the programmable input (e.g., OUTFNC3-H<br />

assigns onboard output #3 as an “output on position” function).<br />

118 Gem6K Series Programmer’s <strong>Guide</strong>


Thumbwheels<br />

You can connect the controller's programmable I/O to a bank of thumbwheel switches to<br />

allow operator selection of motion or machine control parameters.<br />

The comm<strong>and</strong>s that allow for thumbwheel data entry are:<br />

INSTW.................. Establish thumbwheel data inputs<br />

OUTTW.................. Establish thumbwheel data outputs<br />

TW......................... Read thumbwheels or PLC inputs<br />

INPLC.................. Establish PLC data inputs<br />

OUTPLC................ Establish PLC data outputs<br />

Thumbwheel Setup<br />

The controller’s programming language allows direct input of BCD thumbwheel data via the<br />

programmable inputs. Use the steps below to set up <strong>and</strong> read the thumbwheel interface. Refer<br />

to the Gem6K Series Comm<strong>and</strong> Reference for descriptions of the comm<strong>and</strong>s used below.<br />

Step 1<br />

Wire your thumbwheels to the Gem6K. Refer to your product’s Installation <strong>Guide</strong> for I/O<br />

specifications.<br />

Step 2<br />

Set up the inputs <strong>and</strong> outputs for operation with thumbwheels. The data valid input will be an<br />

input which the operator holds active to let the controller read the thumbwheels. This input is<br />

not necessary; however, it is often used when interfacing with PLCs.<br />

OUTPLC1,1-4,0,12 ; Configure PLC output set 1:<br />

; onboard outputs 1-4 are strobe outputs,<br />

; no output enable bit,<br />

; 12 ms strobe time per digit read.<br />

INPLC1,1-8,9 ; Configure PLC input set 1:<br />

; onboard inputs 1-8 are data inputs,<br />

; onboard input 9 is a sign input,<br />

; no data valid input.<br />

INLVL000000000 ; Onboard inputs 1-9 configured active low<br />

Step 3<br />

The thumbwheels are read sequentially by outputs 1-4, which strobe two digits at a time. The<br />

sign bit is optional. Set the thumbwheels to +12345678 <strong>and</strong> type in the following comm<strong>and</strong>s:<br />

VAR1=TW5<br />

VAR1<br />

; Assign data from all 8 thumbwheel digits to VAR1<br />

; Displays the variable (*VAR1=+0.12345678).<br />

; If you do not receive this response, return to<br />

; step 1 <strong>and</strong> retry.<br />

PLCs<br />

The controller’s programmable I/O may be connected to most PLCs. After defining <strong>and</strong><br />

storing controller programs, the PLC typically executes programs, loads data, <strong>and</strong> manipulates<br />

inputs to the controller. The PLC instructs the controller to perform the motion segment of a<br />

total machine process.<br />

Refer to your product’s Installation <strong>Guide</strong> for instructions on connecting to I/O devices. For<br />

higher current or voltages above 24VDC, use external signal conditioning such as OPTO-22<br />

compatible I/O signal conditioning racks. Contact your local distributor or automation<br />

technology center for information on these products.<br />

Chapter 5. Custom Profiling 119


PLC Scan Mode<br />

Scan Time<br />

To check how much time<br />

(in 2 ms increments) the<br />

last scan took to complete,<br />

issue the TSCAN comm<strong>and</strong><br />

or use the SCAN oper<strong>and</strong><br />

for variable assignments<br />

<strong>and</strong> IF conditions.<br />

For example, if the last<br />

PLC program took 3<br />

system updates (2 ms<br />

each) to scan, then TSCAN<br />

would report *TSCAN6,<br />

indicating that it took 6 ms<br />

to complete the scan.<br />

Each pass, if taking the<br />

same path through the<br />

conditional branches (IF<br />

statements), will always<br />

report the same TSCAN<br />

value.<br />

The PLC feature allows you to create a pre-compiled program that mimics PLC functionality by<br />

scanning through the I/O faster than in a normal program run. Because the functions of PLC<br />

programs are pre-compiled, delays associated with comm<strong>and</strong> processing are eliminated during<br />

profile execution, allowing more rapid sequencing of actions than would be possible with<br />

programs which are not compiled. Comm<strong>and</strong> processing is then free to monitor other activities.<br />

The PLC program is<br />

scanned/ executed at<br />

the beginning of the<br />

2-ms update period.<br />

The scan will stop after<br />

30 segments have been<br />

executed <strong>and</strong> resume at<br />

the next 2-ms update.<br />

PLCP programs, when<br />

compiled, comprise a<br />

linked list of PLC<br />

segments. During a<br />

scan, each segment is<br />

counted until the total<br />

number of segments<br />

executed exceeds 30.<br />

If the 30-segment limit<br />

occurs while executing<br />

a multi-segment<br />

To ascertain the scan time<br />

required to execute 30<br />

segments, use TSCAN<br />

or [SCAN].<br />

Note: In Scan mode, when a<br />

scan is complete, the next scan<br />

will begin at the start of the<br />

next 2 ms System Update Period.<br />

Begin Scan Window<br />

30-segment limit<br />

• I/O Updated by System<br />

• Trajectories calculated<br />

• Programs/Tasks run<br />

• Etc.<br />

Begin New Scan<br />

(or resume scan<br />

at next segment)<br />

End Scan Window<br />

Time (msec)<br />

Scanning<br />

Scanning<br />

0<br />

2 millisecond<br />

System Update Period<br />

2 msec<br />

statement, then that statement will finish no matter how many segments it executes. For<br />

example, if 29 segments have executed, then the next segment will cause the scan to pause<br />

until the next 2-ms update. If that next statement is VARI1=1PE, which executes 2 segments,<br />

then VARI1=1PE will complete its operations before pausing the scan.<br />

To Implement a<br />

PLC Program …<br />

1. Define the PLC program (DEF PLCPi statement, followed by comm<strong>and</strong>s from the list<br />

below, followed by END). Up to 99 PLC programs may be defined, identified as PLCP1,<br />

PLCP2, PLCP3, <strong>and</strong> so on. Only these comm<strong>and</strong>s are allowed in a PLC program:<br />

• IF, ELSE, <strong>and</strong> NIF (conditional branching) —The PLC program uses the non-scaled<br />

integer (“raw”) oper<strong>and</strong> values (e.g., PE value is not scaled by SCLD or ERES; PANI<br />

value is ADC counts, not volts). The only oper<strong>and</strong>s that are not allowed are: SIN,<br />

COS, TAN, ATAN, VCVT, SQRT, VAR, TW, READ, DREAD, DREADF, DAT, DPTR, <strong>and</strong> PI.<br />

• L <strong>and</strong> LN (loops)<br />

• HALT —<br />

- If the PLC program is executed with SCANP, HALT will terminate the current<br />

PLC program <strong>and</strong> kill the SCANP mode<br />

- If the PLC program is executed with PRUN, HALT will stop the PLC program<br />

(<strong>and</strong> the program that executed the PRUN statement) running in that task.<br />

• BREAK —<br />

- If the PLC program is executed with SCANP, BREAK will end only the current<br />

scan loop. At the next 2-millsecond update, the scan will restart at the first line<br />

of the PLC program.<br />

- If the PLC program is executed with PRUN, BREAK will stop the PLC program<br />

<strong>and</strong> execution will continue in the program from which the PRUN was executed<br />

(resuming at the comm<strong>and</strong> immediately following the PRUN comm<strong>and</strong>).<br />

• TIMST <strong>and</strong> TIMSTP (start <strong>and</strong> stop the timer) —<br />

• OUT (turn on a digital output)<br />

120 Gem6K Series Programmer’s <strong>Guide</strong>


• ANO (set an analog output voltage – requires an extended I/O brick with on an<br />

analog output SIM) —<br />

• EXE (execute a program in a specific task — e.g., 2%EXE MOVE)<br />

• PEXE (execute a compiled program in a specific task — e.g., 3%PEXE PLCP4)<br />

• VARI (integer variables). A VARI assignment expression is limited to one math<br />

function — either addition (+) or subtraction (-). The oper<strong>and</strong>s can be any of the<br />

monitored integer assignment operators (e.g., PE, PC, etc.).<br />

NOTE: The PLC program uses the non-scaled (“raw”) oper<strong>and</strong> values.<br />

• VARB (binary variables). Bitwise operations are limited to Boolean And (&),<br />

Boolean Inclusive Or (|), <strong>and</strong> Boolean Exclusive Or (^). The oper<strong>and</strong>s can be any<br />

of the monitored binary assignment operators (e.g., IN, LIM, AS, VARB, etc.).<br />

2. Compile the PLC program (PCOMP PLCPi). A compiled program runs much faster than a<br />

st<strong>and</strong>ard program. After the PLCP program is compiled, it is placed in the Gem6K<br />

controller’s “compiled” memory partition (see MEMORY comm<strong>and</strong>). To verify which PLC<br />

programs are compiled, type in the TDIR comm<strong>and</strong>; compiled PLC programs are identified<br />

as “COMPILED AS A PLC PROGRAM”.<br />

3. Execute the PLC program (SCANP PLCPi). When the PLC program is launched with the<br />

SCANP comm<strong>and</strong>, it is executed in the “PLC Scan Mode”. The advantage of the PLC Scan<br />

Mode is that the PLC program is executed within a dedicated 0.5 ms time slot during every<br />

2 ms system update period. This gives the PLCP program faster throughput for monitoring<br />

<strong>and</strong> manipulating I/O.<br />

An alternative execution method is to use the PRUN comm<strong>and</strong> (PRUN PLCPi). This method<br />

is similar to the SCANP PLCPi method, but will only run through the PLCP program once.<br />

Technical Notes<br />

About PLC<br />

Programs<br />

• Controller Status bit #3 is set when a PLCP program is being executed in Scan Mode. To<br />

check the controller status, use SC, TSC, or TSCF.<br />

• Launching programs external to the scan: Using the EXE comm<strong>and</strong> or the PEXE<br />

comm<strong>and</strong>, a scan program can launch another program in a specified task. EXE launches a<br />

st<strong>and</strong>ard, non-compiled program; PEXE launches a compiled program.<br />

• Stopping the scan: The scan program can be stopped in either of two ways: using the !K<br />

comm<strong>and</strong>, or clearing the scan program by issuing a SCANP CLR comm<strong>and</strong>.<br />

• Timing the PLC program outputs: It is not possible to control where the PLC program<br />

will pause if the scan takes more than the allowed time. This means that there can be a<br />

time lag of several update periods before the outputs, analog outputs, <strong>and</strong>/or variables<br />

affected by the PLC program are updated. The order in which the scan takes place should<br />

be considered when creating PLC programs to minimize the effects of such a lag. One<br />

way to avoid the lag is to create a binary variable as a temporary holding place for the<br />

desired output states. The last comm<strong>and</strong>s before the END statement of the PLC program<br />

can set the outputs according to the final status of the variable, such that all output states<br />

are written at the same time, just as the scan completes. This method is demonstrated in the<br />

example program below.<br />

• Memory Requirements: Most comm<strong>and</strong>s allowed in a PLC program consume one<br />

segment of compiled memory after the program is compiled with PCOMP; the exceptions<br />

are VARI <strong>and</strong> VARB (each consume 2 segments) <strong>and</strong> IF statements. Each IF conditional<br />

evaluation compounded with either an AND or an OR operator consumes an additional<br />

segment (e.g., IF(IN.1=b1 AND 1AS.1=b0) consumes three segments of compiled<br />

memory). The number of compounds is limited only by the memory available.<br />

• Order of Evaluation for Conditional Expressions:<br />

Because only one level of parenthesis is allowed, the order of evaluation of IF<br />

Chapter 5. Custom Profiling 121


conditionals is from left to right. Refer to the flowchart below for the evaluation logic.<br />

Get Next Conditional<br />

FALSE<br />

Evaluate<br />

TRUE<br />

NO<br />

Compound = OR<br />

YES<br />

YES<br />

Compound = AND<br />

NO<br />

Statement<br />

Evaluates FALSE<br />

Statement<br />

Evaluates TRUE<br />

Programming<br />

Example<br />

DEF PLCP3<br />

; Binary states of outputs 1-6 represented by VARB1 bits 1-6.<br />

; Outputs 1-6 set at the end of program.<br />

VARB1=b000000 ; Initialize binary variable 1<br />

IF(IN.1=b1)<br />

; If onboard input 1 is ON, turn output 1 ON<br />

VARB1=VARB1 | b100000 ; Set binary bit for output 1 only to ON<br />

NIF<br />

IF(IN.2=b1)<br />

; If onboard input 2 is ON, turn output 2 ON<br />

VARB1=VARB1 | b010000 ; Set binary bit for output 2 only to ON<br />

NIF<br />

IF(IN.3=b1)<br />

; If onboard input 3 is ON, turn output 3 ON<br />

VARB1=VARB1 | b001000 ; Set binary bit for output 3 only to ON<br />

NIF<br />

IF(IN.4=b1)<br />

; If onboard input 4 is ON, turn output 4 ON<br />

VARB1=VARB1 | b000100 ; Set binary bit for output 4 only to ON<br />

NIF<br />

IF(IN.5=b1)<br />

; If onboard input 5 is ON, turn output 5 ON<br />

VARB1=VARB1 | b000010 ; Set binary bit for output 5 only to ON<br />

NIF<br />

IF(IN.6=b1)<br />

; If onboard input 6 is ON, turn output 6 ON<br />

VARB1=VARB1 | b000001 ; Set binary bit for output 6 only to ON<br />

NIF<br />

OUT(VARB1)<br />

; Turn on appropriate onboard outputs<br />

END<br />

PCOMP PLCP3<br />

; Compile program PLCP3<br />

SCANP PLCP3<br />

; Run compiled program PLCP3 in Scan mode. See diagram.<br />

DEF PLCP3<br />

VARB1=b000000<br />

IF(IN.1=b1)<br />

VARB1=VARB1 | b100000<br />

NIF<br />

IF(IN.2=b1)<br />

VARB1=VARB1 | b010000<br />

NIF<br />

IF(IN.3=b1)<br />

VARB1=VARB1 | b001000<br />

NIF<br />

IF(IN.4=b1)<br />

VARB1=VARB1 | b000100<br />

NIF<br />

IF(IN.5=b1)<br />

VARB1=VARB1 | b000010<br />

NIF<br />

IF(IN.6=b1)<br />

VARB1=VARB1 | b000001<br />

NIF<br />

OUT(VARB1)<br />

END<br />

Pause Scan<br />

Scan<br />

Complete<br />

Begin New<br />

Scan<br />

Time (msec)<br />

Scanning<br />

Scanning<br />

Scanning<br />

0<br />

2 msec<br />

4 msec<br />

Scanning<br />

6 msec<br />

2 System Update Periods are needed to complete the scan<br />

for compiled program PLCP3, for a total of 4 msec.<br />

The response to a TSCAN comm<strong>and</strong> would be: *TSCAN4.<br />

122 Gem6K Series Programmer’s <strong>Guide</strong>


RP240 Remote Operator Panel<br />

Gem6K Series products are directly compatible with the Compumotor RP240 Remote<br />

Operator Panel. This section describes how to use your Gem6K product with the RP240.<br />

Instructions for connecting the RP240 are provided in the Gem6K Hardware Installation<br />

<strong>Guide</strong>. Refer to the Model RP240 User <strong>Guide</strong> (p/n 88-012156-01) for information on RP240<br />

hardware specifications, mounting guidelines, environmental considerations, <strong>and</strong><br />

troubleshooting.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Configuration<br />

NOTE<br />

As shipped from the factory, your Gem6K product is configured to operate an RP240 from the<br />

RS-232 connector (referred to as the “COM 2” port). This should be appropriate for the<br />

majority of applications requiring RP240 interface.<br />

For more information<br />

on controlling your<br />

product's multiple<br />

serial ports, refer to<br />

page 56.<br />

Every Gem6K Series product has two serial ports. The RS-232/485 connector is referenced as<br />

the “COM1” serial port, <strong>and</strong> the RS-232 connector is referenced as the “COM2” serial port.<br />

To configure the Gem6K product's serial ports for use with the RP240 <strong>and</strong>/or Gem6K language<br />

comm<strong>and</strong>s, use the DRPCHK comm<strong>and</strong>. Be sure to select the affected serial port (COM 1 or<br />

COM 2) with the PORT comm<strong>and</strong> before you execute the DRPCHK comm<strong>and</strong>. Once you issue<br />

the DRPCHK comm<strong>and</strong>, it is automatically saved in non-volatile memory. The configuration<br />

options are:<br />

DRPCHKØ ..........Use the serial port for Gem6K comm<strong>and</strong>s only (default for COM 1)<br />

DRPCHK1 ..........Check for RP240 on power up or reset. If detected, initialize RP240.<br />

If no RP240, use serial port for Gem6K comm<strong>and</strong>s.<br />

DRPCHK2 ..........Check for RP240 every 5-6 seconds. If detected, initialize RP240. Do not use<br />

Chapter 5. Custom Profiling 123


port for Gem6K comm<strong>and</strong>s.<br />

DRPCHK3 ..........Check for RP240 on power up or reset. If detected, initialize RP240.<br />

If no RP240, use serial port for DWRITE comm<strong>and</strong> only. The DWRITE comm<strong>and</strong><br />

can be used to transmit text strings to remote RS-232C devices. (default setting<br />

for COM 2)<br />

Example<br />

COM 2 is to be used for RS-232; COM 1 is to be used for RP240, but the RP240 will be plugged<br />

in on an as-needed basis. The set-up comm<strong>and</strong>s for such an application should be executed in<br />

the following order:<br />

PORT1<br />

DRPCHK2<br />

PORT2<br />

DRPCHKØ<br />

; Select COM1 serial port for setup<br />

; Configure COM1 for RP240, periodic check<br />

; Select COM2 serial port for setup<br />

; Configure COM2 for Gem6K comm<strong>and</strong>s only<br />

Operator Interface Features<br />

The RP240 may be used as your product’s operator interface, not a program entry terminal.<br />

As an operator interface, the RP240 offers the following features:<br />

• Displays text <strong>and</strong> variables<br />

• 8 LEDs can be used as programmable status lights<br />

• Operator data entry of variables: read data from RP240 into variables <strong>and</strong> comm<strong>and</strong><br />

value substitutions (see Comm<strong>and</strong> Value Substitutions on page 7).<br />

Typically the user creates a program in the Gem6K controller to control the RP240 display<br />

<strong>and</strong> RP240 LEDs. The program can read data <strong>and</strong> make variable assignments via the RP240's<br />

keypad <strong>and</strong> function keys.<br />

The Gem6K Series software comm<strong>and</strong>s for the RP240 are listed below. Detailed descriptions<br />

are provided in the Gem6K Series Comm<strong>and</strong> Reference. The example below demonstrates the<br />

majority of these Gem6K Series comm<strong>and</strong>s for the RP240.<br />

DCLEAR............Clear The RP240 Display<br />

DJOG................Enter RP240 Jog Mode<br />

[DKEY]............Numeric value of RP240 Key<br />

DLED................Turn RP240 LEDs On/Off<br />

DPASS..............Change RP240 Password<br />

DPCUR..............Position The Cursor On The RP240 Display<br />

[DREAD] .........Read RP240 Data<br />

[DREADF] .......Read RP240 Function Key<br />

DREADI............RP240 Data Read Immediate Mode<br />

DRPCHK............Check for RP240<br />

DSTP................Enable/Disable the RP240 Stop Key<br />

DVAR................Display Variable On RP240<br />

DWRITE............Display Text On The RP240 Display<br />

124 Gem6K Series Programmer’s <strong>Guide</strong>


Programming<br />

Example<br />

DEF panel1<br />

; Define program panel1<br />

REPEAT<br />

; Start of repeat loop<br />

DCLEAR0<br />

; Clear display<br />

DWRITE"SELECT A FUNCTION KEY" ; Display text "SELECT A FUNCTION KEY"<br />

DPCUR2,2 ; Move cursor to line 2 column 2<br />

DWRITE"DIST"<br />

; Display text "DIST"<br />

DPCUR2,9 ; Move cursor to line 2 column 9<br />

DWRITE"GO"<br />

; Display text "GO"<br />

DPCUR2,35 ; Move cursor to line 2 column 35<br />

DWRITE"EXIT"<br />

; Display text "EXIT"<br />

VAR1 = DREADF<br />

; Input a function key<br />

IF (VAR1=1)<br />

; If function key #1 hit<br />

GOSUB panel2<br />

; GOSUB program panel2<br />

ELSE<br />

; Else<br />

IF (VAR1=2)<br />

; If function key #2 hit<br />

DLED1 ; Turn on LED #1<br />

GO1 ; Start motion on axis #1<br />

DLED0 ; Turn off LED #1<br />

NIF<br />

; End of IF (VAR1=2)<br />

NIF<br />

; End of IF (VAR1=1)<br />

UNTIL (VAR1=6) ; Repeat until VAR1=6 (function key 6)<br />

DCLEAR0<br />

; Clear display<br />

DWRITE"LAST FUNCTION KEY = F" ; Display text "LAST FUNCTION KEY = F"<br />

DVAR1,1,0,0 ; Display variable 1<br />

END<br />

; End of panel1<br />

DEF panel2<br />

DCLEAR0<br />

DWRITE"ENTER DISTANCE"<br />

D(DREAD)<br />

END<br />

; Define prog panel2<br />

; Clear display<br />

; Display text "ENTER DISTANCE"<br />

; Enter distance number from RP240<br />

; End of panel2<br />

Using the Default Menus<br />

On power-up, the Gem6K product will automatically default to a mode in which it controls<br />

the RP240 with the menu-driven functions listed below.<br />

The flow chart below<br />

illustrates the RP240's<br />

menu structure in the<br />

default operating mode<br />

(when no Gem6K<br />

product user program<br />

is controlling the<br />

RP240). Press the<br />

Menu Recall key to<br />

back up to the previous<br />

screen. The menu<br />

functions are described<br />

in detail below.<br />

• Run a stored program (RUN, STOP, PAUSE <strong>and</strong> CONTINUE functions)<br />

• Jog the load<br />

• Display the status of:<br />

- System (TSS), for each task<br />

- Axis (TAS)<br />

- Extended Axis (TASX)<br />

- I/O (TIN <strong>and</strong> TOUT)<br />

- Limits (TLIM) <strong>and</strong> ENABLE input (TINO bit #6)<br />

- Position: Comm<strong>and</strong>ed (TPC), Encoder (TPE)<br />

- Firmware revision levels for the Gem6K product (TREV) <strong>and</strong> the RP240<br />

• Enable or disable the internal drive (DRIVE)<br />

• Access RP240 menu functions with a security password (set with DPASS)<br />

• Reset the Gem6K product (equivalent to the RESET comm<strong>and</strong>)<br />

NOTE: To disable these menus, the start-up program (the program assigned with the<br />

STARTP comm<strong>and</strong>) must contain the DCLEARØ comm<strong>and</strong>.<br />

Chapter 5. Custom Profiling 125


126 Gem6K Series Programmer’s <strong>Guide</strong>


Running a Stored<br />

Program<br />

<br />

<br />

<br />

<br />

<br />

<br />

or<br />

<br />

<br />

After accessing the RUN menu, press F1 to “find” the names of the programs stored in the<br />

Gem6K product’s memory; pressing F1 repeatedly displays subsequent programs in the order<br />

in which they were stored in BBRAM. To execute the program, press the ENTER key.<br />

To type in a program name at the location of the cursor, first select alpha or numeric<br />

characters with the F2 function key (characters will be alpha if an asterisk appears to the right<br />

of ALPHA, or numeric if no asterisk appears). If alpha, press the up (2) or down (8) keys to<br />

move through the alphabet, if numeric, press the desired number key. Press F3 to move the<br />

cursor to the left, or F4 to move the cursor to the right.<br />

Only user programs defined with DEF <strong>and</strong> END may be executed from this menu. Compiled<br />

profiles (GOBUF profiles) cannot be executed from this menu; they must be executed from the<br />

terminal emulator with the PRUN comm<strong>and</strong>, or you can place the PRUN (name of path)<br />

comm<strong>and</strong> in a user program <strong>and</strong> then execute that program from this menu.<br />

HINT: If you wish to<br />

display each comm<strong>and</strong> as<br />

it is executed, select STEP<br />

<strong>and</strong> TRACE <strong>and</strong> press the<br />

ENTER key to step<br />

through the program.<br />

When a program is RUN <strong>and</strong> TRACE is selected (TRACE*), the RP240 display will trace all<br />

program comm<strong>and</strong>s as they are executed. This is different from the TRACE comm<strong>and</strong> in that<br />

the trace output goes to the RP240 display, not to a terminal via the serial port.<br />

When a program is RUN <strong>and</strong> STEP is selected, step mode has been entered. This is similar to<br />

the STEP comm<strong>and</strong>, but when selected from the RUN menu the step mode allows single<br />

stepping by pressing the ENTER key. Both RP240 trace mode <strong>and</strong> step mode are exited when<br />

program execution is terminated.<br />

Jogging<br />

<br />

<br />

<br />

<br />

You can jog the axis by pressing the arrow keys on the RP240’s numeric keypad. The left <strong>and</strong><br />

right arrow keys are for jogging the axis in the negative <strong>and</strong> positive direction, respectively.<br />

Pressing an arrow key starts motion <strong>and</strong> releasing the arrow key stops motion.<br />

The HI <strong>and</strong> LO values in the jog menu represent the velocity in units of revs/sec. If scaling is<br />

enabled, the value is multiplied by the programmed SCLV value.<br />

To edit the jog velocity* values:<br />

1. Press the F5 function key under EDIT (edit mode indicated with an asterisk).<br />

2. Press the F1 function key to select the HI <strong>and</strong> LO values (cursor appears under the<br />

first digit of the value selected).<br />

3. Using the numeric keyboard, enter the value desired.<br />

4. Repeat steps 2 <strong>and</strong> 3 for all values to be changed.<br />

5. Press ENTER when finished editing.<br />

6. To jog with the new velocity values, first press the F6 function key (under JOG) to<br />

enable the arrow keys again.<br />

Jog accel <strong>and</strong> decel values are specified by the JOGA <strong>and</strong> JOGAD comm<strong>and</strong>s, respectively.<br />

Chapter 5. Custom Profiling 127


Status Reports:<br />

System & Axis<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

After accessing the desired status menu, you can ascertain the function <strong>and</strong> status of each<br />

system (TSS, for each task) or axis (TAS <strong>and</strong> TASX) status bit by pressing the arrow keys on<br />

the numeric keypad.<br />

To view a more descriptive explanation of each status bit (includes a text description), press<br />

the left or right arrow keys on the numeric keypad.<br />

Status Reports:<br />

I/O, Limits, Position<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

INPUTS Menu: This menu displays the TIN bit patterns for programmable inputs (onboard<br />

triggers <strong>and</strong> digital inputs on expansion I/O bricks). Remember that I/O bit patterns vary by<br />

product (see page 91 to find the bit patterns for your product). The initial menu show the<br />

trigger inputs status; use the up <strong>and</strong> down arrows to select the status of inputs on expansion<br />

I/O bricks.<br />

OUTPUTS Menu: This menu displays the TOUT bit patterns for programmable outputs<br />

(onboard outputs <strong>and</strong> digital outputs on expansion I/O bricks). Remember that I/O bit patterns<br />

vary by product (see page 91 to find the bit patterns for your product). The initial menu show<br />

the onboard outputs; use the up <strong>and</strong> down arrows to select the status of outputs on expansion<br />

I/O bricks.<br />

128 Gem6K Series Programmer’s <strong>Guide</strong>


LIMITS Menu:<br />

• The POS, NEG <strong>and</strong> HOME status items represent the hardware states of the limit inputs<br />

on the “LIMITS/HOME” connector, regardless of their LIMFNC input function<br />

assignments; they do not represent INFNC limit functions assigned to onboard trigger<br />

inputs or digital inputs on expansion I/O bricks.<br />

• “POS” refers to the hardware end-of-travel limit imposed when counting in the positive<br />

direction. “NEG” refers to the limit imposed when counting in the negative direction.<br />

• A “1” indicates that the input is grounded, “0” indicates not grounded.<br />

The end-of-travel limits (POS <strong>and</strong> NEG) must be grounded to allow motion (this is<br />

reversed if the active level is reversed with the LIMLVL comm<strong>and</strong>).<br />

The Enable input (ENABLE input terminal) must also be grounded before motion is<br />

allowed. When not grounded, the output to the motor is cut off <strong>and</strong> the shutdown<br />

outputs are activated.<br />

POS Menu:<br />

• The position values (encoder, comm<strong>and</strong>ed, <strong>and</strong> position error) shown are continually<br />

updated.<br />

• The position error (“ERROR”) report is applicable only to servo axes.<br />

• Position values are subject to the SCLD scaling factor (if scaling is enabled—SCALE1),<br />

PSET offset value, encoder polarity (ENCPOL), <strong>and</strong> comm<strong>and</strong>ed direction polarity<br />

(CMDDIR).<br />

Enabling <strong>and</strong><br />

Disabling the Drive(s)<br />

<br />

<br />

<br />

<br />

In the DRIVE menu, the current status of the drive(s) is displayed. To enable or disable the<br />

drive, press F1 or F2, respectively This menu offers the same functionality as the DRIVE<br />

comm<strong>and</strong>.<br />

WARNING<br />

Shutting down a rotary drive system allows the load to freewheel if there is no brake installed.<br />

Access Security<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

If the RP240 password is modified with the DPASS comm<strong>and</strong> to be other than the default (see<br />

Changing the Password below) the ACCESS menu then becomes the new default menu after<br />

power-up or executing a RESET. After that, the new password must then be entered to access<br />

the original default menu (see “Access Approved” path in illustration). If the operator does not<br />

know the new password, all he or she can do is run programs stored in the Gem6K product<br />

(RUN).<br />

Chapter 5. Custom Profiling 129


Changing the Password: The default password for Gem6K products is “6000”. A new<br />

password (numeric value of up to 4 characters) can be established with the DPASS comm<strong>and</strong>.<br />

For example, the DPASS2001 comm<strong>and</strong> sets the password to 2001.<br />

Revision Levels<br />

<br />

<br />

<br />

<br />

<br />

<br />

Resetting the Gem6K<br />

Product<br />

<br />

<br />

<br />

<br />

<br />

<br />

After accessing the RESET menu, press the F1 key to execute a reset (or press F2 to cancel<br />

<strong>and</strong> exit the menu). The reset is identical to issuing a RESET comm<strong>and</strong> or cycling power to<br />

the Gem6K product. If a start-up program has been assigned with the STARTP comm<strong>and</strong>,<br />

that program will be executed.<br />

CAUTION<br />

Executing a reset will restore most comm<strong>and</strong> values (exclusions: see page 65) to their<br />

factory default setting.<br />

Joystick Control, Analog Inputs<br />

☞<br />

Refer to your<br />

Installation <strong>Guide</strong> for<br />

connection<br />

procedures.<br />

Joystick Control<br />

The Gem6K allows you to add analog input (ANI) SIMs to the expansion I/O bricks (sold<br />

separately). Each ANI SIM provides 8 analog inputs. The default voltage range for these input<br />

is -10VDC to +10VDC, but other ranges are selectable with the ANIRNG comm<strong>and</strong>. ANI<br />

inputs may be used in a variety of ways:<br />

• Control an axis with a joystick (see Joystick Control)<br />

• Use the voltage value to control other events. The voltage value on the ANI inputs can<br />

be read using the ANI or TANI comm<strong>and</strong>s.<br />

The controller supports joystick operation with digital inputs <strong>and</strong> analog inputs. The digital<br />

inputs include the onboard limit inputs <strong>and</strong> trigger inputs, as well as digital input SIMs on an<br />

external I/O brick. The 12-bit analog inputs are available on board (single analog input) or if<br />

you install an analog input SIM on an external I/O brick (default voltage range is -10V to<br />

+10V, selectable with ANIRNG).<br />

130 Gem6K Series Programmer’s <strong>Guide</strong>


To Set Up Joystick<br />

Operation<br />

(refer also to the<br />

example code below)<br />

1. Select the required digital inputs <strong>and</strong> analog inputs required for joystick operation. Connect<br />

the joystick as instructed in your controller’s Installation <strong>Guide</strong>.<br />

2. Assign the appropriate input functions to the digital inputs used for joystick's operation:<br />

• Release Input: INFNCi-M for triggers & I/O brick inputs, or LIMFNCi-M for limit<br />

inputs.<br />

• Velocity Select Input: INFNCi-O for triggers & external inputs, or LIMFNCi-O for<br />

limit inputs.<br />

3. (optional) Use the ANIRNG comm<strong>and</strong> to select the voltage range for the analog inputs you<br />

will use. The default range is -10VDC to +10VDC (other options are 0 to +5V, -5 to +5V,<br />

<strong>and</strong> 0 to +10V).<br />

4. Use the JOYAXH comm<strong>and</strong> to assign the analog input that will control the axis.<br />

5. Define the joystick motion parameters:<br />

• Max. Velocity when Velocity Select input switch is open/high (JOYVH comm<strong>and</strong>). If<br />

the Velocity Select input is not used, joystick motion always uses the JOYVH velocity.<br />

• Max. Velocity when Velocity Select input switch is closed/low (JOYVL comm<strong>and</strong>).<br />

• Accel (JOYA comm<strong>and</strong>).<br />

• Accel for s-curve profiling (JOYAA comm<strong>and</strong>).<br />

• Decel (JOYAD comm<strong>and</strong>).<br />

• Decel for s-curve profiling (JOYADA comm<strong>and</strong>).<br />

6. Define the usable voltage zone for your joystick:<br />

(make sure you have first assigned the analog inputs – see step 3 above)<br />

• End Deadb<strong>and</strong> (JOYEDB): Defines the voltage offset (from the -10V & +10V<br />

endpoints) at which max. velocity occurs. Default is 0.1V, maxing voltage at -9.9V <strong>and</strong><br />

+9.9V.<br />

• Center Voltage (JOYCTR or JOYZ): Defines the voltage when the joystick is at rest to be<br />

the zero-velocity center. Default JOYCTR setting is 0V.<br />

• Center Deadb<strong>and</strong> (JOYCDB): Defines the zero-velocity range on either side of the<br />

Center Voltage. Default is 0.1V, setting the zero-velocity range at -0.1V to +0.1V.<br />

7. To jog the axis:<br />

a. In your program, enable Joystick Operation with the JOY comm<strong>and</strong> (Joystick Release<br />

input must be closed in order to enable joystick mode). When the JOY comm<strong>and</strong><br />

enables joystick mode, program execution stops (assuming the Continuous Comm<strong>and</strong><br />

Execution Mode is disabled with the COMEXCØ comm<strong>and</strong>).<br />

b. Move the load with the joystick.<br />

c. When you are finished, open the Joystick Release input to disable joystick mode. This<br />

allows program execution to resume with the next statement after the initial JOY<br />

comm<strong>and</strong> that started the joystick mode.<br />

Joystick<br />

Programming<br />

Example<br />

(refer also to the<br />

illustration below)<br />

Application Requirements: This example represents a typical two-axis joystick application in<br />

which a high-velocity range is required to move to a region, then a low-velocity range is<br />

required for a fine search. After the search is completed it is necessary to record the load<br />

positions, then move to the next region. A digital input can be used to indicate that the position<br />

should be read. The Joystick Release input is used to exit the joystick mode <strong>and</strong> continue with<br />

the motion program.<br />

Hardware Configuration:<br />

• An analog input SIM is installed in the 3rd slot of I/O brick 1. The eight analog inputs<br />

(1-8) are addressed as input numbers 17-24 on the I/O brick. Analog input 17 will<br />

control the motion.<br />

• A digital input SIM is installed in the 1st slot of I/O brick 1. The eight digital inputs (1-<br />

8) are addressed as input numbers 1-8 on the I/O brick. Digital input 6 will be used for<br />

the Joystick Release function, <strong>and</strong> input 7 will be used for the Joystick Velocity Select<br />

input. Input 8 will be used to indicate that the position should be read.<br />

Chapter 5. Custom Profiling 131


Setup Code (the drawing below shows the usable voltage configuration):<br />

1INFNC7-M ; Assign Joystick Release f(n) to brick 1, input 7<br />

1INFNC8-O ; Assign Joystick Velocity Select f(n) to brick 1, input 8<br />

JOYAXH1-17 ; Assign analog input 17 to control the motion,<br />

JOYVH1<br />

; Max. velocity is 10 units/sec when the<br />

; Velocity Select input (1IN.7) is open (high)<br />

JOYVL10<br />

; Max. velocity is 1 unit/sec when the<br />

; Velocity Select input (1IN.7) is closed (low)<br />

JOYA100<br />

; Set joystick accel to 100 units/sec/sec<br />

JOYAD100<br />

; Set joystick decel to 100 units/sec/sec<br />

;**** COMMANDS TO SET UP USABLE VOLTAGE: **********<br />

1JOYCTR.17=+1.0 ; Set center voltage for analog input 17<br />

; to+1.0V. The +1.0V value was<br />

; ascertained by checking the voltage of the both<br />

; inputs (with the 1TANI.17)<br />

; when the joystick was at rest.<br />

1JOYCDB.17=0.5 ; Set center deadb<strong>and</strong> to compensate for the fact that<br />

; when the joystick is at rest, the voltage received on<br />

; the analog input may fluctuate +/- 0.5V on either<br />

; side of the +1.0V center.<br />

1JOYEDB.17=2.0 ; Set end deadb<strong>and</strong> to compensate for the fact that the<br />

; joystick can produce only -8.0V to +8.0V.<br />

;**************************************************<br />

JOY1<br />

; Enable joystick mode<br />

Velocity<br />

(positive direction)<br />

JOYVH or JOYVL<br />

JOYCDB<br />

(zero-velocity range)<br />

JOYEDB<br />

-10V +10V<br />

Volts<br />

JOYEDB<br />

JOYCTR or JOYZ<br />

(voltage when joystick is at rest)<br />

JOYVH or JOYVL<br />

Velocity<br />

(negative direction)<br />

Analog Input Interface<br />

Refer to your product's<br />

Installation <strong>Guide</strong> for<br />

ANI connection<br />

information.<br />

Using analog (ANI) inputs on expansion I/O bricks, your controller can use analog voltage as a<br />

means to control the program based on external conditions.<br />

Each ANI SIM on an expansion I/O brick provides eight analog inputs. The 12-bit analog<br />

inputs have a default voltage range of -10VDC to +10VDC. Other ranges are selectable with<br />

the ANIRNG comm<strong>and</strong> (0 to +5VDC, 0 to +10VDC, <strong>and</strong> -5 to +5VDC). The voltage value of<br />

the ANI inputs can be transferred to the terminal with the TANI comm<strong>and</strong>, or used in an<br />

assignment or comparison operation with the ANI operator (e.g., IF(1ANI


Host Computer Interface<br />

Another choice for product control is to use a host computer <strong>and</strong> execute a motion program using<br />

the serial interface (RS-232 or RS-485). A host computer may be used to run a motion program<br />

interactively from a BASIC or C program (high-level program controls the Gem6K product <strong>and</strong> acts<br />

as a user interface). A BASIC program example is provided below.<br />

10 ' Gem6K Series Serial Communication BASIC Routine<br />

12 ' Gem6K.BAS<br />

14 '<br />

16 ' **************************************************************<br />

18 '<br />

20 ' This program will set the communications parameters for the<br />

22 ' serial port on a PC to communicate with a Gem6K series<br />

24 ' st<strong>and</strong>-alone product.<br />

26 '<br />

28 ' **************************************************************<br />

30 '<br />

100 '*** open com port 1 at 9600 baud, no parity, 8 data bits, 1 stop bit<br />

110 '*** activate Request to Send (RS), suppress Clear to Send (CS), suppress<br />

120 '*** DATA set ready (DS), <strong>and</strong> suppress Carrier Detect (CD) ***<br />

130 OPEN "COM1:9600,N,8,1,RS,CS,DS,CD" FOR RANDOM AS #1<br />

140 '<br />

150 '*** initialize variables ***<br />

160 MOVE$ = "" ' *** comm<strong>and</strong>s to be sent to the product ***<br />

170 RESPONSE$ = "" ' *** response from the product ***<br />

180 POSITION$ = "" ' *** feedback position reported ***<br />

190 SETUP$ = "" ' *** setup comm<strong>and</strong>s ***<br />

200 '<br />

210 '*** format the screen <strong>and</strong> wait for the user to start the program ***<br />

220 CLS : LOCATE 12, 20<br />

230 PRINT "Press any key to start the program"<br />

240 '<br />

250 '*** wait for the user to press a key ***<br />

260 PRESS$ = INKEY$<br />

270 IF PRESS$ = "" THEN 260<br />

280 CLS<br />

290 '<br />

300 '*** set a pre-defined move to make ***<br />

310 SETUP$ = "ECHO1:ERRLVL0:LH0:"<br />

320 MOVE$ = "A100:V2:D50000:GO1:TFB:"<br />

330 '<br />

340 '<br />

400 '*** send the comm<strong>and</strong>s to the product ***<br />

410 PRINT #1, SETUP$<br />

420 PRINT #1, MOVE$<br />

430 '<br />

500 ' *** read the response from the TFB comm<strong>and</strong> ***<br />

510 ' *** the controller will send a leading "+" or "-" in response to the TFB comm<strong>and</strong> to<br />

520 ' *** indicate which direction travel has occurred. ***<br />

530 WHILE (RESPONSE$ "+" AND RESPONSE$ "-") ' *** this loop waits for the "+"<br />

540 RESPONSE$ = INPUT$(1, #1) ' *** or "-" characters to be returned<br />

550 WEND ' *** before reading the position ***<br />

560 '<br />

570 WHILE (RESPONSE$ CHR$(13)) ' *** this loop reads one character at a time<br />

580 POSITION$ = POSITION$ + RESPONSE$ ' *** from the serial buffer until a carriage<br />

590 RESPONSE$ = INPUT$(1, #1) ' *** return is encountered ***<br />

600 WEND<br />

610 '<br />

620 '*** print the response to the screen ***<br />

630 LOCATE 12, 20: PRINT "Position is " + POSITION$<br />

640 '<br />

650 'END<br />

Chapter 5. Custom Profiling 133


Graphical User Interface (GUI) Development Tools<br />

TO ORDER<br />

To order Motion OCX Toolkit, DDE6000, or Motion Toolbox ® , contact your local<br />

Automation Technology Center (ATC) or distributor.<br />

ActiveX Control<br />

PanelMaker<br />

Provided with Motion Planner is the Gem6K ActiveX control, a 32-bit control which can be<br />

used as an interface tool between your custom Windows application <strong>and</strong> the Gem6K product.<br />

For example, you might use the ActiveX control with a third-part factory automation software<br />

<strong>and</strong> operator interface, such as Wonderware's In-Touch.<br />

Sold separately as an add-on utility to Motion Planner, PanelMaker is a custom GUI creation<br />

tool based on the VisualBasic Scripting language. Using PanelMaker, you can create custom<br />

interfaces for operator input <strong>and</strong> diagnostics. The PanelMaker custom controls include:<br />

• Communication between the application <strong>and</strong> the Gem6K product•<br />

134 Gem6K Series Programmer’s <strong>Guide</strong>


Custom Profiling<br />

5C HAPTER FIVE<br />

Custom<br />

Profiling<br />

IN THIS CHAPTER<br />

This chapter explains how to use these custom profiling features:<br />

• S-Curve Profiling ..............................................136<br />

• Compiled Motion Profiling...............................139<br />

• On-the-Fly Motion (pre-emptive GOs)..............155<br />

• Registration.......................................................159<br />

• Synchronizing Motion.......................................163<br />

For basic motion (accel/velocity/distance), see page ....71<br />

For homing profiles, see page ......................................79<br />

For Following profiles, see page ...................................168


S-Curve Profiling<br />

Controllers allow you to perform S-curve move profiles, in addition to the usual trapezoidal<br />

profiles. S-curve profiling provides smoother motion control by reducing the jerk (rate of<br />

change) in acceleration <strong>and</strong> deceleration portions of the move profile (see drawing below).<br />

Because S-curve profiling reduces jerk, it improves position tracking performance.<br />

Trapezoidal<br />

S-Curve<br />

Decel Accel Velocity<br />

Maximum Jerk<br />

Time<br />

Time<br />

Velocity<br />

Decel Accel<br />

Less Jerk<br />

Time<br />

Time<br />

S-Curve Programming Requirements<br />

To program an S-curve profile, you must use the average accel/decel comm<strong>and</strong>s provided in<br />

the Gem6K Series programming language. For every maximum accel/decel comm<strong>and</strong> (e.g.,<br />

A, AD, HOMA, HOMAD, JOGA, JOGAD, etc.) there is an average comm<strong>and</strong> for S-curve<br />

profiling (see table below).<br />

Maximum Accel/Decel Comm<strong>and</strong>s:<br />

Comm<strong>and</strong> Function<br />

Average (“S-Curve”) Accel/Decel Comm<strong>and</strong>s:<br />

Comm<strong>and</strong> Function<br />

A Acceleration AA Average Acceleration<br />

AD Deceleration ADA Average Deceleration<br />

HOMA Home Acceleration HOMAA Average Home Acceleration<br />

HOMAD Home Deceleration HOMADA Average Home Deceleration<br />

JOGA Jog Acceleration JOGAA Average Jog Acceleration<br />

JOGAD Jog Deceleration JOGADA Average Jog Deceleration<br />

JOYA Joystick Acceleration JOYAA Average Joystick Acceleration<br />

JOYAD Joystick Deceleration JOYADA Average Joystick Deceleration<br />

LHAD Hard Limit Deceleration LHADA Average Hard Limit Deceleration<br />

LSAD Soft Limit Deceleration LSADA Average Soft Limit Deceleration<br />

PA Path Acceleration PAA Average Path Acceleration<br />

PAD Path Deceleration PADA Average Path Deceleration<br />

Determining the S-Curve Characteristics<br />

The comm<strong>and</strong> values for average accel/decel (AA, ADA, etc.) <strong>and</strong> maximum accel/decel (A, AD,<br />

etc.) determine the characteristics of the S-curve. To smooth the accel/decel ramps, you must<br />

enter average accel/decel comm<strong>and</strong> values that satisfy the equation ½ A ≤ AA < A, where<br />

A represents maximum accel/decel <strong>and</strong> AA represents average accel/decel. Given this<br />

requirement, the following conditions are possible:<br />

136 Gem6K Series Programmer’s <strong>Guide</strong>


Acceleration Setting<br />

Profiling Condition<br />

AA > ½ A, but AA < A............. S-curve profile with a variable period of constant acceleration. Increasing<br />

the AA value above the pure S-curve level (AA > ½ A), the time required to<br />

reach the target velocity <strong>and</strong> the target distance is decreased. However,<br />

increasing AA also increases jerk.<br />

AA = ½ A ................................ Pure S-curve (no period of constant acceleration—smoothest motion).<br />

AA = A .................................... Trapezoidal profile (but can be changed to an S-curve by specifying a new<br />

AA value less than A).<br />

AA < ½ A; or AA > A............... When you issue the GO comm<strong>and</strong>, the move will not be executed <strong>and</strong> an<br />

error message, *INVALID CONDITIONS FOR S_CURVE ACCELERATION—<br />

FIELD n, will be displayed.<br />

AA = zero................................ S-curve profiling is disabled. Trapezoidal profiling is enabled. AA tracks A.<br />

(Track means the comm<strong>and</strong>'s value will match the other comm<strong>and</strong>'s value<br />

<strong>and</strong> will continue to match whatever the other comm<strong>and</strong>'s value is set to.)<br />

However, if you enter an average decel comm<strong>and</strong> (e.g., ADA, HOMADA, etc.)<br />

equal to zero, you will receive the “INVALID DATA-FIELD n” error.<br />

AA ≠ zero <strong>and</strong> AA ≠ A ............ S-curve profiling is enabled only for st<strong>and</strong>ard moves (e.g., not for<br />

compiled motion, or on-the-fly motion changes). All subsequent st<strong>and</strong>ard<br />

moves for that axis must comply with this equation:<br />

½ A ≤ AA < A.<br />

AA > ½ A ................................ Average accel/decel is raised above the pure S-curve level; this decreases<br />

the time required to reach the target velocity <strong>and</strong> distance. However,<br />

increasing AA also increases jerk. After increasing AA, you can reduce jerk<br />

by increasing A, but be aware that increasing A requires a greater torque to<br />

achieve the comm<strong>and</strong>ed velocity at the mid-point of the acceleration profile.<br />

No AA value ever entered ...... Profile will default to trapezoidal. AA tracks A.<br />

If you never change the A or AA deceleration comm<strong>and</strong>s, AA deceleration will track AA<br />

acceleration. However, once you change A deceleration, AA deceleration will no longer track<br />

changes in AA acceleration. For example, if you never change the AD or ADA comm<strong>and</strong> values,<br />

ADA will track the AA comm<strong>and</strong> value. But once you change AD, the ADA comm<strong>and</strong> value will<br />

no longer track the changes in the AA comm<strong>and</strong> value.<br />

The calculation for determining S-curve average accel <strong>and</strong> decel move times is as follows<br />

(calculation method identical for S-curve <strong>and</strong> trapezoidal moves):<br />

Time = Velocity<br />

Aavg<br />

or Time =<br />

2 ∗ Distance<br />

Aavg<br />

Scaling affects the AA average acceleration (AA, ADA, etc.) the same as it does for the A<br />

maximum acceleration (A, AD, etc.). See page 67 for details on scaling.<br />

NOTE: Equations for calculating jerk are provided on page 138.<br />

Programming Example<br />

; In this example, axis 1 executes a pure S-curve <strong>and</strong> takes 1 second<br />

; to reach a velocity of 5 rps.<br />

SCALE0 ; Disable scaling<br />

DEF SCURV ; Begin definition of program SCURV<br />

MA0 ; Select incremental positioning mode<br />

<br />

D40000 ; Set distances to 40,000 positive-<br />

; direction steps<br />

A10 ; Set max. accel to 10 rev/sec/sec<br />

AA5 ; Set avg. accel to 5 rev/sec/sec on<br />

AD10 ; Set max. decel to 10 rev/sec/sec<br />

ADA5 ; Set avg. decel to 5 rev/sec/sec on<br />

Move profile<br />

V5 ; Set velocity to 5 rps<br />

GO1 ; Execute motion<br />

END ; End definition of program<br />

<br />

<br />

Chapter 6. Following 137


Calculating Jerk<br />

Zero Acceleration<br />

A<br />

(Programmed Accel)<br />

Rules of Motion:<br />

da<br />

Jerk =<br />

dt<br />

dv<br />

a =<br />

dt<br />

dx<br />

v = (x = distance)<br />

dt<br />

V 2<br />

V<br />

(Programmed Velocity)<br />

Assuming the accel profile starts<br />

when the load is at zero velocity <strong>and</strong><br />

the ramp to the programmed velocity<br />

is not compromised:<br />

Zero Velocity<br />

Ø<br />

(zero)<br />

V 1<br />

t 1 t 2 t 3<br />

A B C<br />

Jerk = J A =<br />

A 2 * AA<br />

V (A-AA)<br />

A = programmed acceleration<br />

(A, AD, HOMAD, etc.)<br />

AA = average acceleration<br />

(AA, ADA, HOMAA, etc.)<br />

V = programmed velocity<br />

(V, HOMV, etc.)<br />

A<br />

A<br />

t 1 =<br />

t1 ≥ t ≥ Ø a (t) = J A * t<br />

a (t) = acceleration at time t<br />

v (t) = velocity at time t<br />

J A<br />

J A * t 2 d (t) = distance at time t<br />

v (t) =<br />

V A<br />

2<br />

t 2 = -<br />

AA J A<br />

J A * t 3<br />

d (t) =<br />

V<br />

6<br />

V 2 = V -<br />

A 2<br />

2 * J A<br />

C t3 ≥ t > t2 a (t) = A - (J A * (t - t 2 ))<br />

t 3 =<br />

AA<br />

NOTE: t 3 - t 2 = t 1<br />

B t2 ≥ t > t1 a (t) = A<br />

A 2<br />

v (t) =<br />

2J A<br />

+ A * (t - t 1 )<br />

V 1 =<br />

2<br />

J A * t 1 A 2<br />

3<br />

J A * t 1 A * (t - t 1 ) 2<br />

=<br />

d (t) = +<br />

2 2 * J<br />

6<br />

2<br />

A<br />

+ V 1 * (t - t 1 )<br />

J A * (t 3 - t) 2<br />

2<br />

v (t) = V -<br />

V 2 J A (t 3 - t) 3<br />

d (t) =<br />

2AA<br />

+<br />

6<br />

- V * (t 3 - t)<br />

Starting at a Non-Zero Velocity: If starting the acceleration profile with a non-zero initial velocity, the move comprises<br />

two components: a constant velocity component, <strong>and</strong> an s-curve component. Typically, the change of velocity should be<br />

used in the S-curve calculations. Thus, in the calculations above, you would substitute “(V F - V O )” for “V” (V F = final<br />

velocity, V O = initial velocity). For example, the jerk equation would be:<br />

Jerk = J A =<br />

A 2 * AA<br />

(V F - V O ) (A-AA)<br />

138 Gem6K Series Programmer’s <strong>Guide</strong>


Compiled Motion Profiling<br />

Gem6K Series products allow you to construct complex individual axis motion profiles which<br />

are compiled <strong>and</strong> saved. You can define separate <strong>and</strong> independent profiles for each individual<br />

axis. The profiles may contain:<br />

• Sequences of motion<br />

• Loops<br />

• Programmable output changes<br />

• Embedded dwells<br />

• Direction changes<br />

• Trigger functions<br />

Related Comm<strong>and</strong>s:<br />

Brief descriptions of related<br />

comm<strong>and</strong>s are found on page 139.<br />

For detailed descriptions, refer to the<br />

Gem6K Series Comm<strong>and</strong> Reference.<br />

☞<br />

PLCP programs are<br />

stored in compiled<br />

memory<br />

(see page 11).<br />

Compiled motion profiles are defined like programs (using the DEF <strong>and</strong> END comm<strong>and</strong>s); the<br />

comm<strong>and</strong>s used to construct the motion profile segments are stored in a program (stored in<br />

Program memory). This program is then compiled (using the PCOMP comm<strong>and</strong>) <strong>and</strong> the<br />

compiled profile segments (GOBUF, PLOOP, GOWHEN, TRGFN, <strong>and</strong> POUTA statements) from<br />

the program are stored in Compiled memory. (TIP: The TDIR comm<strong>and</strong> reports which<br />

programs are compiled as a compiled profile.) You can then execute the compiled profile with<br />

the PRUN comm<strong>and</strong>.<br />

The amount of RAM allocated for storing compiled profile segments is determined by the<br />

MEMORY comm<strong>and</strong> setting. The list below identifies memory allocation defaults <strong>and</strong> limits for<br />

Gem6K Series products. Further details on re-allocating memory are provided on page 11.<br />

Total memory (bytes) .........................................300,000<br />

Default allocation (program,compiled)...............MEMORY150000,150000<br />

Maximum allocation for compiled profiles ........MEMORY1000,299000<br />

Maximum # of compiled profiles .......................300<br />

Maximum # of compiled profile segments .........2069<br />

CAUTIONS<br />

• Issuing a memory allocation comm<strong>and</strong> (e.g., MEMORY70000,230000) will erase all existing<br />

programs <strong>and</strong> compiled path segments. However, issuing the MEMORY comm<strong>and</strong> by itself (i.e.,<br />

MEMORY—to request the status of how the memory is allocated) will not affect existing programs<br />

or segments.<br />

• After compiling (PCOMP) <strong>and</strong> running (PRUN) a compiled profile. The profile segments will be<br />

deleted from compiled memory if you cycle power or issue a RESET comm<strong>and</strong>.<br />

After compiling (PCOMP), you can execute the profiles with the PRUN comm<strong>and</strong>, <strong>and</strong> all of<br />

the motion <strong>and</strong> functions compiled into the profile are executed without any further<br />

comm<strong>and</strong>s during profile execution.<br />

Because the motion <strong>and</strong> functions are pre-compiled, delays associated with comm<strong>and</strong><br />

processing are eliminated during profile execution, allowing more rapid sequencing of actions<br />

than would be possible with programs which are not compiled. Comm<strong>and</strong> processing is then<br />

free to monitor other activities, such as I/O <strong>and</strong> communications.<br />

Chapter 6. Following 139


NOTES<br />

• During compilation (PCOMP), most comm<strong>and</strong>s are executed the same as if no profile were being<br />

defined, even those which are not relevant to the construction of a profile. This is also true of<br />

non-compiled motion comm<strong>and</strong>s embedded in a compiled motion program during PCOMP. For<br />

this reason, it’s good to limit comm<strong>and</strong>s between DEF <strong>and</strong> END to those which actually assist in<br />

the construction of the profile. Even for those that do actually assist in the construction of the<br />

profile, such as A, V, <strong>and</strong> D, it is important to remember that the comm<strong>and</strong> is executed <strong>and</strong> data<br />

actually changes, <strong>and</strong> it is not restored after compilation is completed.<br />

• If your compiled motion program contains variables, the variables are evaluation only at compile<br />

time.<br />

Each motion segment in a compiled motion profile may have its own distance, velocity,<br />

acceleration, <strong>and</strong> deceleration, as shown in the program example below:<br />

Programming<br />

Example<br />

DEF simple ; Begin definition of program simple<br />

MC0<br />

; Preset positioning mode (disable continuous mode)<br />

D50000 ; Distance is 50000<br />

A10 ; Acceleration is 10<br />

AD10 ; Deceleration is 10<br />

V5 ; Velocity is 5<br />

GOBUF1 ; Store the first motion segment for axis 1.<br />

; Profile attributes are: MC0, A10, AD10, V5, D50000<br />

D30000 ; Distance is 30000<br />

V2 ; Velocity is 2<br />

GOBUF1 ; Store the second motion segment for axis 1<br />

; Profile attributes are: MC0, A10, AD10, V2, D30000<br />

D40000 ; Distance is 40000<br />

V4 ; Velocity is 4<br />

GOBUF1 ; Store the third motion segment for axis 1<br />

; Profile attributes are: MC0, A10, AD10, V4, D40000<br />

; Because this is the last segment in a preset profile,<br />

; the velocity will automatically end at zero.<br />

END<br />

; End program definition<br />

PCOMP simple<br />

PRUN simple<br />

; Compile simple<br />

; Run simple<br />

The resulting profile from the above program:<br />

v<br />

5<br />

D50000<br />

4<br />

3<br />

STATUS COMMANDS:<br />

Use these comm<strong>and</strong>s to<br />

check the status of<br />

compiled profiles.<br />

2<br />

1<br />

D30000<br />

D40000<br />

0<br />

t<br />

System Status (TSSF, TSS, & SS):<br />

• Bit #29 is set if compiled memory is 75% full.<br />

• Bit #30 is set if compiled memory is 100% full.<br />

• Bit #31 is set if a compile (PCOMP) failed; this bit is cleared on power-up, reset, or after<br />

a successful compile. Possible causes include:<br />

- Errors in profile design (e.g., change direction while at non-zero velocity, distance<br />

& velocity equate to


Axis Status (TASF, TAS, & AS): Bit #31 is set while compiled a GOBUF profile is executing.<br />

TSEG & SEG: Reports the number of available segments in compiled memory.<br />

TDIR: Identifies programs that are “compiled as a path” (compiled with the PCOMP<br />

comm<strong>and</strong>) <strong>and</strong> reports the percentage of remaining compiled memory.<br />

Rules for Using<br />

Velocity in Preset<br />

Compiled Motion<br />

When defining preset mode (MC0) compiled profiles there are several rules that govern the<br />

velocity.<br />

Rule #1: The last segment in the compiled profile will automatically end at zero velocity (only<br />

if not in a PLOOP/PLN loop).<br />

DEF PROF5 ; Begin definition of profile #5<br />

MC0<br />

; Select preset positioning<br />

V1<br />

; Set velocity to 1 rev/sec<br />

D4000 ; Set distance to 4000<br />

GOBUF1 ; First motion segment (V1, D4000)<br />

V2<br />

; Set velocity to 2 (second segment)<br />

GOBUF1 ; Second motion segment (V2, D4000)<br />

END ; End definition of profile #5<br />

PCOMP ; Compile profile #5<br />

; When you execute PRUN PROF5, the resulting profile is:<br />

V<br />

2<br />

1<br />

0<br />

4000<br />

8000<br />

D<br />

Rule #2: If you wish intermediate segments to end in zero velocity, use the VF0 comm<strong>and</strong> in<br />

the respective GOBUF segment.<br />

DEF PROF6 ; Begin definition of profile #6<br />

MC0<br />

; Select preset positioning<br />

V1<br />

; Set velocity to 1 rev/sec<br />

VF0<br />

; End this segment at zero velocity<br />

D4000 ; Set distance to 4000<br />

GOBUF1 ; First motion segment (V1, D4000, VF0)<br />

V2<br />

; Set velocity to 2 (second segment)<br />

VF0<br />

; End this segment at zero velocity<br />

GOBUF1 ; Second motion segment (V2, D4000, VF0)<br />

END ; End definition of profile #6<br />

PCOMP ; Compile profile #6<br />

; When you execute PRUN PROF6, the resulting profile is:<br />

V<br />

2<br />

1<br />

0<br />

4000<br />

8000<br />

D<br />

Rule #3: CAUTION: With compiled loops (PLOOP <strong>and</strong> PLN), the last segment within the loop<br />

must end at zero velocity or there must be a final segment placed outside the loop. Otherwise,<br />

when the profile is compiled with PCOMP you’ll receive the “ERROR: MOTION ENDS IN<br />

NON-ZERO VELOCITY–AXIS n” error message <strong>and</strong> system status bit #31 will be set. after the<br />

final segment is completed, the motor will continue moving at the last segment’s velocity.<br />

DEF PROF7 ; Begin definition of profile #7<br />

MC0<br />

; Select preset positioning<br />

D3000 ; Set distance to 3000<br />

PLOOP4 ; Loop (between PLOOP & PLN) 4 times<br />

V1<br />

; Set velocity to 1 rev/sec<br />

GOBUF1 ; First motion segment<br />

PLN1 ; End loop<br />

END ; End definition of profile #7<br />

Chapter 6. Following 141


PCOMP<br />

; Compile profile #7, but instead of compile, you receive<br />

; an error message<br />

To fix the profile, reduce the PLOOP count by one <strong>and</strong> add a GOBUF statement after the PLN<br />

comm<strong>and</strong>:<br />

DEF PROF7 ; Begin definition of profile #7<br />

MC0<br />

; Select preset positioning<br />

D3000 ; Set distance to 3000<br />

PLOOP3 ; Loop (between PLOOP & PLN) 3 times<br />

V1<br />

; Set velocity to 1 rev/sec<br />

GOBUF1 ; Looped motion segment<br />

PLN1 ; End loop<br />

GOBUF1 ; Last motion segment (end at zero velocity)<br />

END ; End definition of profile #7<br />

PCOMP ; Compile profile #7<br />

; When you execute PRUN PROF7, the resulting profile is:<br />

V<br />

2<br />

1<br />

0<br />

3000<br />

6000 9000 12000<br />

D<br />

Rule #4: With compiled loops (PLOOP <strong>and</strong> PLN), if you wish the velocity at the end of each<br />

loop to end at zero, use a VF0 comm<strong>and</strong>.<br />

DEF PROF8 ; Begin definition of profile #8<br />

MC0<br />

; Select preset positioning<br />

D3000 ; Set distance to 3000<br />

PLOOP4 ; Loop (between PLOOP & PLN) 4 times<br />

V1<br />

; Set velocity to 1 rev/sec<br />

VF0<br />

; End each segment at zero velocity<br />

GOBUF1 ; Looped motion segment<br />

PLN1 ; End loop<br />

END ; End definition of profile #8<br />

PCOMP ; Compile profile #8<br />

; When you execute PRUN PROF8, the resulting profile is:<br />

V<br />

2<br />

1<br />

0<br />

3000<br />

6000 9000 12000<br />

D<br />

Compiled Following Profiles<br />

More details on<br />

Following are<br />

found in Chapter 6<br />

(page 168).<br />

The new FOLRNF comm<strong>and</strong> designates that the motor will move the load the distance<br />

designated in a preset GOBUF segment, completing the move at the specified final ratio. The<br />

only allowable value for FOLRNF is zero (0). FOLRNF is allowed for a segment only if the<br />

starting ratio is also zero, i.e., it must be the first segment, or the previous segment must have<br />

ended in zero ratio. FOLRNF is only useful with compiled preset Following moves because the<br />

starting <strong>and</strong> final ratios are already zero for motion initiated with GO.<br />

Compiled motion profiles may be constructed with any combination of preset or continuous<br />

motion segments. A continuous (MC1) Following segment will start with the final ratio of the<br />

previous segment, <strong>and</strong> end with the ratio given by FOLRN <strong>and</strong> FOLRD. The motion segment<br />

will consist of one ramp from the starting ratio to the final ratio. Just as with continuous<br />

Following ramps outside of a compiled profile, the master travel over which the ramp takes<br />

place is specified with FOLMD. The slave travel over which the ramp takes place is simply the<br />

142 Gem6K Series Programmer’s <strong>Guide</strong>


product of master travel <strong>and</strong> average ratio. Because the slave travel is not specified explicitly,<br />

it is possible for arithmetic round-off errors to cause actual slave travel during a ramp to differ<br />

from theoretical calculations. For applications in which slave distance is important, preset<br />

segments should be used.<br />

A preset (MCØ) Following segment will also start with the final ratio of the previous segment,<br />

but may end in one of two ways. FOLRNF specifies the final ratio of a preset Following<br />

segment. The only valid value for FOLRNF is zero (0). If FOLRNFØ is given before the<br />

GOBUF, the resulting motion segment will be constructed exactly as preset Following moves<br />

are outside of compiled profiles. In this case, the starting ratio must be zero, the final ratio<br />

will be zero, <strong>and</strong> the maximum intermediate ratio will be given by FOLRN <strong>and</strong> FOLRD. The<br />

relationships between ratio, master distance, <strong>and</strong> slave distance for this case are given on page<br />

192 under the heading Master <strong>and</strong> Follower Distance Calculations. The FOLRNF comm<strong>and</strong><br />

affects only the immediately subsequent preset Following segment, <strong>and</strong> must be given<br />

explicitly for each preset segment which is to end in zero ratio.<br />

If FOLRNFØ is not given before the GOBUF, the segment will end with the ratio given by<br />

FOLRN <strong>and</strong> FOLRD, <strong>and</strong> need not start with zero ratio. This type of motion segment is<br />

constrained, however, to intermediate ratios which fall between the starting <strong>and</strong> final ratios.<br />

Compiled profiles are built from motion segments created with the GOBUF comm<strong>and</strong>. That<br />

is, the motion segments may be all Following or all non-Following, but not a mixture of<br />

Following <strong>and</strong> non-Following.<br />

The GOBUF comm<strong>and</strong> builds the appropriate type of motion segment based on the values of<br />

FOLMAS <strong>and</strong> FOLEN during compilation. These parameters may not be changed inside a<br />

compiled program after a GOBUF. The choice of zero or non-zero FOLMAS must be the same<br />

during PRUN as during PCOMP (if non-zero, the value can be changed, but still must be nonzero).<br />

If a non-zero FOLMAS is given, the value of FOLEN must be the same during PRUN as<br />

during PCOMP.<br />

Distance<br />

Calculations For<br />

Compiled<br />

Following Moves<br />

The graph below shows 6 possibilities of ratio change profiles for preset segments, with legal<br />

FOLMD <strong>and</strong> “D” values constrained by the requirement that the average ratio (given by<br />

“D”/FOLMD) is between R1 <strong>and</strong> R2. If the distance is outside these ranges, in the profile used<br />

to get from R1 to R2 over FOLMD (covering “D” slave distance), an error message will be<br />

generated during the PCOMP comm<strong>and</strong>. For the graphs shown, the constraints are expressed by:<br />

(R1 * FOLMD) = “D” >= (R2 * FOLMD) if R2 < R1<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

The two graphs above show the cases of R1R2, but the distance calculations of the<br />

ramp <strong>and</strong> constant ratio portions are the same for the two cases. For each graph, the heavy<br />

lined profile (first case) of these mimics the shape of the corresponding preset velocity change<br />

Chapter 6. Following 143


(FOLENØ) segments in that the ramp takes place before the constant ratio portion. The second<br />

case occurs only if the distance specified exactly matches the start <strong>and</strong> end ratios <strong>and</strong><br />

FOLMD1. In the third case, the ramp takes place after the constant ratio portion. In the first<br />

<strong>and</strong> third cases, only two segments are built, <strong>and</strong> the slave <strong>and</strong> master distances traveled in<br />

each segment are easily calculated with the simple formulas shown below. These formulas<br />

are based on positive ratios <strong>and</strong> master <strong>and</strong> slave distances. In the construction of Following<br />

profiles, ratios <strong>and</strong> master distances are always positive, with direction implied by the sign of<br />

the slave distance. For calculations with negative slave distances, simply use the magnitude<br />

of “D” in the formulas below, <strong>and</strong> invert the sign of the resulting slave distances.<br />

Case 1 (Ramp first) MD1 = [D-(R2*FOLMD)]/((R1-R2)/2) where MD1 = master distance during ramp<br />

MD2 = FOLMD - MD1<br />

where MD2 = master distance during flat<br />

D1 = .5*(R1+R2)*MD1<br />

where D1 = slave distance during ramp<br />

D2 = D - D1<br />

where D2 = slave distance during flat<br />

Case 2 (Ramp only) MD1 = FOLMD where MD1 = master distance during ramp<br />

D1 = D<br />

where D1 = slave distance during ramp<br />

Case 3 (Ramp last) MD1 = [D-(R1*FOLMD)]/((R2-R1)/2) where MD1 = master distance during ramp<br />

MD2 = FOLMD - MD1<br />

where MD2 = master distance during flat<br />

D1 = .5*(R1+R2)*MD1<br />

where D1 = slave distance during ramp<br />

D2 = D - D1<br />

where D2 = slave distance during flat<br />

Dwells <strong>and</strong> Direction Changes<br />

Compiled profiles may incorporate changes in direction only if the preceding motion segment<br />

has come to rest. This may be achieved for non-Following segments either by creating a<br />

continuous segment with a goal velocity of zero, or by preceding a preset segment with VFØ.<br />

It may be achieved for Following segments either by creating a continuous or preset segment<br />

with a goal ratio of zero, or by preceding a preset segment with FOLRNFØ. In all cases,<br />

motion within the profile comes to rest, although the profile is not yet complete. Even though<br />

the motor is not moving, the axis status bit 1 (AS.1) will remain set, indicating a profile is<br />

still underway. Only then can you change direction (using the D+ or D- comm<strong>and</strong>, D~ is not<br />

allowed) within a profile. An attempt to incorporate changes in direction if the preceding<br />

motion segment has not come to rest will result in a compilation error.<br />

In many applications, it may be useful to create a time delay between moves. For example, a<br />

machine cycle may require a move out, dwell for 2 seconds, <strong>and</strong> move back. To create this<br />

dwell, a compiled GOWHEN may be used between the two moves. The code within a compiled<br />

program may look like:<br />

MC0<br />

; Preset incremental positioning used<br />

D(VAR1) ; Target position is in VAR1<br />

VF0<br />

; Motion comes to rest at end of move (or use FOLRNFØ)<br />

GOBUF1<br />

; Create move out segment<br />

GOWHEN(T=2000) ; Profile delays for 2 seconds<br />

D- ; Return position is home (direction reversed)<br />

VF0<br />

; Motion comes to rest at end of move (or use FOLRNFØ)<br />

GOBUF1<br />

; Create move back home segment<br />

In Following applications, it may be more useful to create a master travel delay between<br />

moves. For example, a machine cycle replacing a cam may require a move out, dwell for<br />

2000 master counts, <strong>and</strong> move back. To create this dwell, a compiled GOBUF of zero slave<br />

distance may be used between the two moves. The code within a compiled program may look<br />

144 Gem6K Series Programmer’s <strong>Guide</strong>


like:<br />

MC0<br />

; Preset incremental positioning used<br />

D(VAR1) ; Target position is in VAR1<br />

FOLMD4000 ; Move takes place over 4000 master counts<br />

FOLRNF0 ; Motion comes to rest at end of move<br />

GOBUF1<br />

; Create move out segment<br />

D0<br />

; No change in target position<br />

FOLMD2000 ; Dwell takes place over 2000 master counts<br />

FOLRNF0 ; Motion comes to rest at end of “move” (dwell)<br />

GOBUF1<br />

; Create dwell segment<br />

D(VAR1) ; Return position is home (direction change implied)<br />

D- ; Return position is home (direction reversed)<br />

FOLMD4000 ; Move takes place over 4000 master counts<br />

FOLRNF0 ; Motion comes to rest at end of move<br />

GOBUF1<br />

; Create move back home segment<br />

Compiled Motion Versus On-The-Fly Motion<br />

The two basic ways of creating a complex profile are with compiled motion or with on-the-fly<br />

pre-emptive GO comm<strong>and</strong>s. With compiled motion, portions of a profile are built piece by<br />

piece, <strong>and</strong> stored for later execution. Compiled motion is appropriate for profiles with motion<br />

segments of pre-determined velocity, acceleration <strong>and</strong> distance. Compiled motion profiles<br />

allow for shorter motion segments, which results in faster cycle times because there is no<br />

comm<strong>and</strong> processing <strong>and</strong> execution delay. The axes may perform their own motion control<br />

<strong>and</strong> coordination, freeing program flow for other tasks, such as I/O, machine control, <strong>and</strong> host<br />

requests. The disadvantages to pre-defined compiled motion profiles are the amount of<br />

memory use <strong>and</strong> limited run-time decision making <strong>and</strong> I/O processing.<br />

With pre-emptive GO moves, the motion profile underway is pre-empted with a new profile<br />

when a new GO comm<strong>and</strong> is issued. The new GO comm<strong>and</strong> constructs <strong>and</strong> launches the preempting<br />

profile. Pre-emptive GOs are appropriate when the desired motion parameters are not<br />

known until motion is already underway.<br />

The table below summarizes the differences between the use of compiled motion <strong>and</strong> on-thefly<br />

motion.<br />

Comm<strong>and</strong>/Issue Compiled Motion On-The-Fly Motion<br />

GOBUF<br />

Constructs motion segment <strong>and</strong> appends to N/A<br />

previously constructed segment<br />

PRUN Used to launch previously compiled motion N/A<br />

GO GO causes move during PCOMP GO Constructs & launches profile,<br />

even if moving<br />

Direction changes<br />

Insufficient room for<br />

AD (decel) value<br />

Only if previous motion segment comes to rest<br />

(MCØ & VFØ or MC1 & VØ), else compile error<br />

Same as on-the-fly<br />

Not allowed during motion, else<br />

AS.3Ø, ER.1Ø<br />

Decel is modified (steppers);<br />

Motion is killed, AS.3Ø (servos)<br />

Chapter 6. Following 145


Related Comm<strong>and</strong>s<br />

GOBUF<br />

Store a Motion Segment in Compiled Memory:<br />

The GOBUF comm<strong>and</strong> creates a motion segment as part of a profile <strong>and</strong> places it in a segment<br />

of compiled memory, to be executed after all previous GOBUF motion segments have been<br />

executed. An individual axis profile is constructed by sequentially appending motion segments<br />

using GOBUF comm<strong>and</strong>s. Each motion segment may have its own distance to travel, velocity,<br />

acceleration, <strong>and</strong> deceleration.<br />

The end of a GOBUF motion segment in preset mode is determined by the distance or position<br />

specified. The end of a GOBUF motion segment in continuous mode is determined by the goal<br />

velocity specified. In both cases, the final velocity <strong>and</strong> position achieved by a segment will be<br />

the starting velocity <strong>and</strong> position for the next segment. If either type of segment is followed by<br />

a GOWHEN comm<strong>and</strong>, the segment’s final velocity will be maintained until the GOWHEN<br />

condition becomes true.<br />

PLOOP & PLN<br />

Loop Start & Loop End (Compiled Motion only):<br />

The PLOOP <strong>and</strong> PLN comm<strong>and</strong>s specify the beginning <strong>and</strong> end of an axis-specific profile loop,<br />

respectively. All segments defined between the PLOOP <strong>and</strong> PLN comm<strong>and</strong>s are included<br />

within that loop.<br />

VF & FOLRNF<br />

GOWHEN<br />

Final Velocity & Numerator of Slave-to-Master Final Ratio:<br />

The VF <strong>and</strong> FOLRNF comm<strong>and</strong>s are used to designate that the motor will move the load the<br />

distance designated in a preset GOBUF motion segment, completing the move at a final speed<br />

of zero. The VF comm<strong>and</strong> is used when the Following mode is disabled (FOLENØ). The<br />

FOLRNF comm<strong>and</strong> is used when the Following mode is enabled (FOLEN1).<br />

Conditional GO:<br />

When GOWHEN is compiled in a profile, the GOWHEN condition is stored as part of that profile<br />

instead of being executed immediately. When progress through the profile reaches the<br />

compiled GOWHEN, AS.26 is set, <strong>and</strong> the next segment’s execution will be suspended until the<br />

GOWHEN condition becomes true. This allows subsequent GOWHEN <strong>and</strong> GOBUF combinations<br />

to be issued <strong>and</strong> stored, instead of overriding each other.<br />

TRGFN<br />

Trigger Functions:<br />

When TRGFN is compiled in a profile, the TRGFN condition is stored as part of that profile<br />

instead of being executed immediately. When progress through the profile reaches the<br />

compiled TRGFN, the embedded trigger functions are assigned to that trigger. AS.26 is set if<br />

the GOWHEN function has been assigned to the trigger, <strong>and</strong> the next segment’s execution will<br />

be suspended until the specified trigger input goes active. This allows subsequent TRGFN,<br />

GOWHEN, <strong>and</strong> GOBUF combinations to be issued <strong>and</strong> stored, instead of overriding each other.<br />

PCOMP, PRUN<br />

& PUCOMP<br />

Compile a Program, Run a Compiled Program, & Un-Compile a Compiled Program:<br />

The PCOMP, PRUN, <strong>and</strong> PUCOMP comm<strong>and</strong>s allow you to incorporate individual axis profiles<br />

within compiled motion profiles. Compiled motion for the Gem6K series allows you to<br />

construct complex motion programs using individual profiles (a series of GOBUF comm<strong>and</strong>s).<br />

PEXE<br />

Execute Compiled GOBUF Profile from PLC Program:<br />

You can place a PEXE comm<strong>and</strong> inside a compiled PLCP program. When the PLCP program<br />

is scanned in the PLC Scan Mode (SCANP), the PEXE comm<strong>and</strong> launches the specified<br />

compiled profile in another task. For details on the PLC Scan Mode, see page 120.<br />

146 Gem6K Series Programmer’s <strong>Guide</strong>


POUTA<br />

Output During Compiled Motion Profile:<br />

The POUTA comm<strong>and</strong> turns the programmable output bits on <strong>and</strong> off.<br />

TSEG & SEG<br />

Transfer/Display (TSEG) or Assign (SEG) the Number of Free Segment Buffers:<br />

The TSEG comm<strong>and</strong> returns the number of free segment buffers in compiled memory. The<br />

SEG comm<strong>and</strong> is used to assign the number of free segment buffers in compiled memory to a<br />

variable or to make a comparison against another value.<br />

Compiled Motion — Sample Application 1<br />

Profile<br />

A manufacturer has an application where wire is being wrapped onto a spindle. There is a<br />

motor controlling the rotational speed of the spindle. Every application of the spindle requires<br />

that the motor runs at a fast speed with a slow acceleration for the first few revolutions, a<br />

medium speed for the next couple of revolutions, <strong>and</strong> a slower speed as the spindle gets fuller<br />

to maintain somewhat of a constant velocity off the feed wire. The technician would like to<br />

use an RP240 to enter the velocity <strong>and</strong> number of revolutions for each stage of winding.<br />

Programmable outputs 1, 2 <strong>and</strong> 3 are wired to status LEDs, <strong>and</strong> should go on for the<br />

respective stages of winding (output 1 for stage 1, etc.).<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Program DEF PROFIL ; Define motion profile program<br />

VAR10 = 4000 * VAR4 ; Get distance of first stage<br />

; (assuming 4000 steps/revolution)<br />

D(VAR10)<br />

; Set distance<br />

V(VAR1)<br />

; Set velocity of first stage<br />

POUTA.1-1<br />

; Turn output 1 on<br />

GOBUF1<br />

; Build motion<br />

VAR10 = 4000 * VAR5 ; Get distance of second stage<br />

D(VAR10)<br />

; Set distance<br />

V(VAR2)<br />

; Set velocity of second stage<br />

POUTA01<br />

; Turn output 1 off <strong>and</strong> output 2 on<br />

GOBUF1<br />

; Build motion<br />

VAR10 = 4000 * VAR6 ; Get distance of third stage<br />

D(VAR10)<br />

; Set distance<br />

V(VAR3)<br />

; Set velocity of third stage<br />

POUTAx01<br />

; Turn output 2 off <strong>and</strong> output 3 on<br />

GOBUF1<br />

; Build motion<br />

POUTA.3-0 ; Turn off output 3<br />

END<br />

; End motion profile program<br />

<br />

DEF EXMPL1 ; Define program example 1<br />

L<br />

; Continual loop of program execution<br />

DCLEAR0<br />

; Clear all lines on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"ENTER VELOCITY STAGE 1" ; Prompt user<br />

VAR1 = DREAD<br />

; Get 1st velocity from RP240 entry<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"ENTER VELOCITY STAGE 2" ; Prompt user<br />

VAR2 = DREAD<br />

; Get 2nd velocity from RP240 entry<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"ENTER VELOCITY STAGE 3" ; Prompt user<br />

VAR3 = DREAD<br />

; Get 3rd velocity from RP240 entry<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"ENTER REVOLUTIONS STAGE 1" ; Prompt user<br />

Chapter 6. Following 147


VAR4 = DREAD<br />

; Get # of windings 1st stage from RP240 entry<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"ENTER REVOLUTIONS STAGE 2" ; Prompt user<br />

VAR5 = DREAD<br />

; Get # of windings 2nd stage from RP240 entry<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE”ENTER REVOLUTIONS STAGE 3" ; Prompt user<br />

VAR6 = DREAD<br />

; Get # of windings 3rd stage from RP240 entry<br />

PCOMP PROFIL<br />

; Re-compile profile with new vel/dist info<br />

$AGAIN<br />

; Label for repeating same profile<br />

PRUN PROFIL<br />

; Execute profile<br />

DCLEAR1<br />

; Clear line 1 on RP240 display<br />

DPCUR1,1 ; Position cursor at line 1, column 1<br />

DWRITE"SAME DATA (1=YES,2=NO)"<br />

; Prompt user if perform again with old data<br />

VAR7 = DREAD<br />

; Get response<br />

IF(VAR7=1)<br />

; If user wants to perform same profile<br />

GOTO AGAIN<br />

; perform again<br />

NIF<br />

; End conditional<br />

LN<br />

; End comm<strong>and</strong> execution loop<br />

END ; End definition program example 1<br />

; ******************************************<br />

; * To begin, execute the EXMPL1 program *<br />

; ******************************************<br />

Compiled Motion — Sample Application 2<br />

Here’s an example of replacing a mechanical cam using a compiled Following profile. There<br />

is evenly spaced product coming in on a feeder belt. The feeder belt may vary in speed. The<br />

cam that you are replacing controls a push arm that will push the product into a box for<br />

shipping. You would also like the arm to retract at a faster rate than it extends. In other<br />

words, you would like to have a smooth push to load <strong>and</strong> a fast retract to set up for the next<br />

product. Since this is a cam, this profile must repeat continuously for each product or master<br />

cycle but won’t start until the first product is detected.<br />

<br />

<br />

<br />

<br />

<br />

The feeder belt is the master <strong>and</strong> the master cycle length (space from the front of one product<br />

to the front of the next) is 12000 master (encoder) counts on the feeder belt. The push of the<br />

product will start 2000 counts into the master cycle. The push will take place over Gem6K<br />

master counts, <strong>and</strong> the retract over 2000 master counts. The distance the push arm (slave)<br />

must travel is 4000 counts. Assume the detector is wired to trigger 1A (onboard trigger input<br />

1). Below is a graph of this Following profile.<br />

148 Gem6K Series Programmer’s <strong>Guide</strong>


Profile<br />

<br />

<br />

<br />

Program<br />

<br />

<br />

; Setup code<br />

FOLMAS1<br />

FOLEN1<br />

INFNC1-H<br />

<br />

<br />

<br />

<br />

<br />

; Master is coming in on the master encoder input<br />

; Enable Following<br />

; Assign onboard input 1 (TRG-1A) as trigger interrupt<br />

; Motion program<br />

DEL EXPL2<br />

; Delete program (in case it already exists in memory)<br />

DEF EXPL2 ; Begin definition of program example 2<br />

1TRGFNA1<br />

; Launch axis 1 profile upon receiving TRG-1A<br />

; (1st product detected)<br />

PLOOP0<br />

; Loop continuously to mimic a mechanical cam<br />

; Program first move - dwell<br />

FOLRN1<br />

; Set up ratios - numerator<br />

FOLRD1<br />

; <strong>and</strong> denominator<br />

FOLMD2000<br />

; Over a distance of 2000 master steps<br />

D0<br />

; slave will not move<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

; Program second move - positive slave move<br />

FOLMD6000<br />

; Over a distance of 6000 master steps<br />

D4000<br />

; slave will move 4000 steps<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

; Program third move - negative slave move<br />

FOLRN3<br />

; New ratio to accommodate larger distance of slave travel<br />

FOLMD2000<br />

; Over a distance of 2000 master steps<br />

D-4000 ; slave will move -4000 steps<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

; Program last move - dwell<br />

FOLMD2000<br />

; Over a distance of 2000 master steps<br />

D0<br />

; slave will not move<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

PLN1<br />

; Close cam loop<br />

END ; End program example 2<br />

PCOMP EXPL2 ; Compile program EXPL2<br />

; ** To execute the program, enter the PRUN EXPL2 comm<strong>and</strong> **<br />

Chapter 6. Following 149


Program<br />

Modification<br />

Let’s now modify the constraints of the system. Let’s say that the product will be spaced roughly 12000<br />

master counts apart. It may or may not be exactly 12000, but it will never be less than 10000 (just to<br />

make sure the retraction finishes before the next product is detected). We can then modify the program to<br />

wait for the product to be detected each cycle. We can also take the extra “dwell” or zero distance move<br />

out of the end of the profile. See program below:<br />

; Setup code<br />

FOLMAS1<br />

; Master is coming in on the master encoder<br />

FOLEN1<br />

; Enable Following mode<br />

INFNC1-H<br />

; Assign onboard input 1 (TRG-1A) as trigger interrupt<br />

; Motion program<br />

DEL EXPL2B<br />

DEF EXPL2B<br />

PLOOP0<br />

1TRGFNA1<br />

; Delete program (in case it already exists in memory)<br />

; Begin definition of program example 2b<br />

; Loop continuously to mimic a mechanical cam<br />

; Pause axis 1 profile until TRG-1A is activated<br />

; (detect next product)<br />

; Program first move - dwell<br />

FOLRN1<br />

; Set up ratios - numerator<br />

FOLRD1<br />

; <strong>and</strong> denominator<br />

FOLMD2000<br />

; Over a distance of 2000 master steps<br />

D0<br />

; slave will not move<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

; Program second move - positive slave move<br />

FOLMD6000<br />

; Over a distance of 6000 master steps<br />

D4000<br />

; slave will move 4000 steps<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

; Program third move - negative slave move<br />

FOLRN3<br />

; New ratio to accommodate larger distance of slave travel<br />

FOLMD2000<br />

; Over a distance of 2000 master steps<br />

D-4000 ; slave will move -4000 steps<br />

FOLRNF0<br />

; <strong>and</strong> end at zero ratio<br />

GOBUF1<br />

; Build motion<br />

PLN1<br />

; Close cam loop<br />

END<br />

; End program example 2b<br />

PCOMP EXPL2B<br />

; Compile program EXPL2B<br />

; **********************************************************<br />

; * To execute the program, enter the PRUN EXPL2B comm<strong>and</strong> *<br />

; **********************************************************<br />

150 Gem6K Series Programmer’s <strong>Guide</strong>


Compiled Motion — Sample Application 3<br />

In this application, there is a wheel that stamps a logo onto the product. The product is<br />

assumed to be entering at a constant <strong>and</strong> fixed spacing, each product is 4 inches in length with<br />

2 inches separating each unit. The stamp wheel has a circumference of 9 inches, <strong>and</strong> must be<br />

traveling at a 1 to 1 ratio with the product at the time of stamping. The stamp wheel must then<br />

travel five inches in just 2 inches of master travel. There is a sensor wired to trigger A of the<br />

Gem6K controller to detect the first product <strong>and</strong> start the cycling. At the time of the trigger<br />

the product is 1 inch away from contact with the stamp wheel. Assume that the home position<br />

of the slave is 0.5 inches away from a stamp. The mechanics of the system give 3000 steps of<br />

master travel per inch <strong>and</strong> 1500 steps of slave travel per inch.<br />

Profile<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

As you can see above, we have a multi-tiered Following profile. By multi-tiered we mean<br />

that ratio is changing from a non-zero value to another non-zero value. To program this<br />

profile effectively, we will break the profile into pieces as shown with the dotted lines in the<br />

above illustration:<br />

Program FOLMAS1 ; Define the master as the master encoder input<br />

FOLEN1<br />

; Enable Following<br />

INFNC1-H ; Assign onboard input 1 (TRG-1A) as trigger interrupt<br />

SCLMAS3000 ; Set scaling of master steps per inch<br />

SCLD1500 ; Set scaling of slave steps per inch<br />

SCALE1<br />

; Enable scaling<br />

DEF EXMPL3 ; Start definition of example program 3<br />

1TRGFNA1 ; Launch axis 1 profile when TRG-1A is activated<br />

; Program first ramp from ratio 0 to ratio 1<br />

FOLRD1<br />

; Set Following ratio - denominator<br />

FOLRN1 ; Set the Following ratio at 1 to 1<br />

FOLMD1 ; Over a master distance of 1"<br />

D0.5 ; Slave will travel 0.5"<br />

GOBUF1<br />

; Build motion<br />

PLOOP0<br />

; Start the continuous loop<br />

; Program constant ratio<br />

FOLRN1<br />

; At a 1 to 1 ratio<br />

FOLMD4 ; Over a master distance of 4"<br />

D4 ; Slave will travel 4"<br />

GOBUF1<br />

; Build motion<br />

; Program ramp to new ratio<br />

FOLRN3<br />

; Go to a 3 to 1 ratio<br />

FOLMD0.5 ; Over a master distance of 0.5"<br />

D1 ; Slave will travel 1"<br />

GOBUF1<br />

; Build motion<br />

Chapter 6. Following 151


; Program second constant ratio<br />

FOLRN3<br />

; At a 3 to 1 ratio<br />

FOLMD1 ; Over a master distance of 1"<br />

D3 ; Slave will travel 3"<br />

GOBUF1<br />

; Build motion<br />

; Program ramp to lower ratio<br />

FOLRN1<br />

; Go to a 1 to 1 ratio<br />

FOLMD0.5 ; Over a master distance of 0.5"<br />

D1 ; Slave will travel 1"<br />

GOBUF1<br />

; Build motion<br />

PLN1<br />

; Close motion loop<br />

; Define the exit motion<br />

FOLRN0<br />

; Stop slave at zero ratio (<strong>and</strong> zero velocity)<br />

FOLMD1 ; Over a master distance of 1"<br />

D0.5 ; And a slave distance of 0.5"<br />

GOBUF1<br />

; Build motion<br />

END ; End definition of example program 3<br />

PCOMP EXMPL3 ; Compile example program 3<br />

; **********************************************************<br />

; * To execute the program, enter the PRUN EXMPL3 comm<strong>and</strong> *<br />

; **********************************************************<br />

NOTE: The GOBUF comm<strong>and</strong> has been added to the “Define the exit motion” portion<br />

of the program despite the fact that an infinite loop has been programmed earlier in the<br />

program. This is to avoid an error message when the program is compiled.<br />

Compiled Motion — Sample Application 4<br />

A manufacturer of stamped molds needs to make a machine which will stamp molds into a<br />

continuous flow of extruded plastic material. The stamp must be lowered 0.5 inches into the<br />

plastic to leave the correct impression. Because the flow is continuous, the stamp must also<br />

move in synchronization with plastic in the direction of flow as it is lowered <strong>and</strong> raised. The<br />

initial design approach to the machine required two axes of motion. One was needed to lower<br />

<strong>and</strong> raise the stamp, the other to allow the stamp to follow the plastic. With the availability of<br />

complex Following cam profiles the job can done with a single axis.<br />

In the drawing below, the stamp is attached to a rotating arm in such a way that the stamp<br />

remains level as the arm rotates. The length of the arm at the stamp fixture, or radius of<br />

rotation, is exactly one inch. The arm is mounted above the plastic so that at the bottom of its<br />

rotation (270 degrees), the stamp will be 0.5 inches into the plastic. Using trigonometry, the<br />

horizontal <strong>and</strong> vertical positions <strong>and</strong> speeds may be calculated at other arm angles. Because<br />

the stamp must follow the flow of the plastic, we must adjust the ratio of rotational speed to<br />

plastic speed so that the horizontal velocity component of the arm stays at 1:1 with the plastic<br />

while the stamp is in the plastic.<br />

<br />

<br />

<br />

<br />

<br />

152 Gem6K Series Programmer’s <strong>Guide</strong>


The table below shows these relationships. The arm is directly driven with a servo motor<br />

having 4096 steps per revolution. The table shows increments of 30 degrees, which is about<br />

341 servo motor steps, or about 0.524 slave inches measured around the circumference<br />

described by rotation of the arm. The plastic flow is measured with an encoder giving 1000<br />

steps per inch of flow. To maintain ratios in terms of inches, FOLRD will always be 1000. The<br />

required FOLRN value is simply the inverse of the arm’s horizontal velocity component<br />

multiplied by the number of slave steps per inch. The corresponding ratio in terms of surface<br />

speeds is given in parentheses. The required FOLMD is the number of master steps<br />

corresponding to the horizontal component of slave rotation.<br />

Arm angle,<br />

degrees<br />

Horizontal<br />

component<br />

(in.) = cos(deg)<br />

FOLMD =<br />

1000 * delta cos(deg)<br />

Horizontal vel<br />

component = -sin(deg)<br />

Required FOLRN =<br />

-651.9/sin(deg)<br />

210 -0.866 n/a 0.500 1304 (2:1)<br />

240 -0.500 366 0.866 753 (1.155:1)<br />

270 0.000 500 1.000 652 (1:1)<br />

300 0.500 500 0.866 753 (1.155:1)<br />

330 0.866 366 0.500 1304 (2:1)<br />

The profile that we construct from these number is meant to approximate the inverse sine<br />

function in the last column, but of course, will actually be a series of ramps <strong>and</strong> constant ratio<br />

segments. Let’s review the Compiled Following Move Distance Calculations to determines<br />

the exact shape <strong>and</strong> error in the first motion segment( from 210 to 240 degrees). First, we need<br />

to determine if the ramp or constant ratio is first for that segment. Using ratios <strong>and</strong> distances<br />

in inches, we have:<br />

R1 = 2......................................... Starting ratio<br />

R2 = 1.155.................................. Final ratio<br />

D = (2*pi)/12 = 0.524 .................. Distance at stamp hinge<br />

FOLMD=.366.............................. Travel along plastic<br />

We find (R1+R2) * FOLMD/2 = 0.577, which is greater than D, so the “Ramp First”<br />

equations apply to this segment. Let’s examine the error at the junction between the ramp <strong>and</strong><br />

constant ratio portion of this segment.<br />

MD1 = [D - (R2 * FOLMD)] / ( (R1 - R2) / 2) = 0.239 master inches<br />

D1 = 0.5 * (R1 + R2) * MD1 = 0.377 slave inches at circumference = 21.6 degrees<br />

cos(210+21.6) - cos(210) = -0.621 - (-0.866) = 0.245 inches slave horizontal travel<br />

error = horizontal slave travel - master travel = 0.245 - 0.239 = 0.006 inches<br />

A similar calculation may be done for the “elbow” of the next of the next segment, <strong>and</strong><br />

symmetry indicates these errors will be the same between 270 <strong>and</strong> 330 degrees. The error<br />

along intermediate points may be found with linear interpolation of ratio <strong>and</strong> master distance.<br />

In this case, the errors fall within manufacturing tolerance. If the errors were too large, the<br />

travel could be broken into more segments, each with exactly correct positions <strong>and</strong> ratios at<br />

their boundaries.<br />

So far, we have only discussed the portion of the profile which lowers <strong>and</strong> raises the stamp.<br />

During the remainder of the profile, the arm must continue its rotation to bring the stamp to its<br />

starting position in time for the next mold. The mold is 3 inches long, <strong>and</strong> .4 inches are needed<br />

between molds for strength at the edges. This makes the total master cycle 3.4 inches long.<br />

The total slave cycle must be 4096 steps, so the segments required to bring the arm around<br />

must complete the portions of master <strong>and</strong> slave cycles not already accounted for. We will<br />

create two segments, which divide the remaining master <strong>and</strong> slave travels in two, <strong>and</strong> are<br />

mirror images of each other. The average ratio of these two segments must simply be slave<br />

travel divided by master travel, i.e., (D / FOLMD). As previously determined, the FOLRN<br />

value for the boundaries of the stamping portion of the profile is 638. From this value <strong>and</strong> the<br />

average ratio, we can calculate the peak FOLRN value.<br />

D = 0.5 * remaining slave = 0.5 * (4096 - 4 * 341) = 1366<br />

FOLMD = 0.5 * remaining master = 0.5 * [1000 * (3.4 - 2 * 0.866)] = 834<br />

peak ratio = FOLRN/1000<br />

0.5 * (FOLRN/1000 + 1304/1000) = average ratio = D / FOLMD = 1366 / 834 = 1.638<br />

FOLRN = 1972 (solved from above)<br />

Chapter 6. Following 153


Finally, we need to design a segment used to create a smooth entry into the repetitive portion<br />

of the profile. We’ll assume that the home position of the arm is at 180 degrees, so it needs to<br />

achieve the FOLRN ratio of 1304 in 30 degrees (341 slave steps). Using the same averaging<br />

arithmetic as above, the required master distance for the entry segment is 523 steps. A sensor<br />

is positioned with this entry segment in mind, <strong>and</strong> wired to TRG-1A. A function to start motion<br />

when the sensor is triggered will be imbedded inside the profile. The motion segments for the<br />

stamping portion <strong>and</strong> recovery portions of the profile must be enclosed in a loop, <strong>and</strong> may be<br />

programmed by picking the numbers from the table <strong>and</strong> equations above. Because the ratio<br />

denominators are the same for all segments, <strong>and</strong> the slave distances are the same for the entry<br />

<strong>and</strong> each of the stamping segments, these are comm<strong>and</strong>ed only when the values change.<br />

Repetitive Portion of<br />

Profile<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Program FOLMAS1 ; Follow master encoder<br />

FOLEN1<br />

; Enable Following mode<br />

INFNC1-H ; Enable trigger 1 (TRG-1A) for interrupt function<br />

SCALE0<br />

; Parameters are in steps<br />

DEF STAMP ; Start program definition<br />

TRGFNA1<br />

; Motion profile starts upon trigger 1 (TRG-1A)<br />

FOLRD1000 ; Ratio denominator, 1ØØØ steps per inch<br />

;define the entry segment<br />

D341<br />

; Distance of 341 steps is about 3Ø degrees<br />

FOLRN13Ø4 ; Goal ratio for start segment<br />

FOLMD523 ; Master distance during ramp<br />

GOBUF1<br />

; Build start segment<br />

PLOOP0<br />

; Start the continuous loop<br />

;this profile section starts 2-to-1 ratio, or a starting FOLRN13Ø4<br />

FOLRN753 ; Goal ratio for segment<br />

FOLMD366 ; Master travel in steps for segment<br />

GOBUF1<br />

; Build motion segment<br />

;the 2nd section of profile starts with the final ratio of the 1st section<br />

FOLRN652 ; Goal ratio for segment<br />

FOLMD500 ; Master travel in steps for segment<br />

GOBUF1<br />

; Build motion segment<br />

;the next two sections are mirror images of the first two<br />

FOLRN753 ; Goal ratio for third segment<br />

FOLMD500 ; Master travel in steps for 3rd segment<br />

GOBUF1<br />

; Build motion segment<br />

FOLRN1304 ; Goal ratio for 4th segment<br />

FOLMD366 ; Master travel in steps for 4th segment<br />

GOBUF1<br />

; Build motion segment<br />

;the next two sections complete the loop <strong>and</strong> are mirror images of each other<br />

D1366<br />

; Slave travel in recovery segments<br />

FOLMD834 ; Master travel in steps for recovery segments<br />

FOLRN1972 ; Goal ratio for ramp up segment<br />

GOBUF1<br />

; Build ramp up motion segment<br />

FOLRN523 ; Goal ratio for ramp down segment<br />

GOBUF1<br />

; Build ramp down motion segment<br />

PLN1<br />

; End of loop cycle<br />

;finally, a segment to end motion<br />

D341<br />

; Distance of 341 steps is about 3Ø degrees<br />

FOLRN0<br />

; Goal ratio for end segment<br />

FOLMD1000 ; Master distance during ramp<br />

GOBUF1<br />

; Build end segment<br />

END<br />

; End of STAMP program definition<br />

PCOMP STAMP ; Compile the program<br />

; **********************************************************<br />

; * To execute the program, enter the PRUN STAMP comm<strong>and</strong> *<br />

; **********************************************************<br />

154 Gem6K Series Programmer’s <strong>Guide</strong>


On-the-Fly Motion (pre-emptive GOs)<br />

While motion is in progress, you can change these motion parameters to affect a new profile:<br />

• Acceleration (A) — s-curve acceleration is not allowed<br />

• Deceleration (AD) — s-curve deceleration is not allowed<br />

• Velocity (V)<br />

• Distance (D)<br />

• Preset or Continuous Positioning Mode Selection (MC)<br />

• Incremental or Absolute Positioning Mode Selection (MA)<br />

• Following Ratio Numerator <strong>and</strong> Denominator (FOLRN <strong>and</strong> FOLRD, respectively)<br />

The motion parameters can be changed by sending the respective comm<strong>and</strong> (e.g., A, V, D, MC)<br />

followed by the GO comm<strong>and</strong>. If the continuous comm<strong>and</strong> execution mode is enabled<br />

(COMEXC1), you can execute buffered comm<strong>and</strong>s; otherwise (COMEXCØ), you must prefix each<br />

comm<strong>and</strong> with an immediate comm<strong>and</strong> identifier (e.g., !A, !V, !D, !MC, followed by !GO).<br />

The new GO comm<strong>and</strong> pre-empts the motion profile in progress with a new profile based on<br />

the new motion parameter(s). On-the-fly motion changes are applicable only for motion<br />

started with the GO comm<strong>and</strong>, <strong>and</strong> not for motion started with other comm<strong>and</strong>s such as HOM,<br />

JOG, JOY, or PRUN.<br />

On-the-fly motion changes are most likely to be used to change the velocity <strong>and</strong>/or goal<br />

position of a preset move already underway. In the event that the goal position is completely<br />

unknown before motion starts, a move may be started in continuous mode (MC1), with a switch<br />

to preset mode (MCØ), a distance comm<strong>and</strong> (D), <strong>and</strong> a GO given later. In absolute positioning<br />

mode (MA1) the new goal position given with a pre-emptive GO is explicit in the D comm<strong>and</strong>.<br />

In incremental positioning (MAØ) the distance given with a new pre-emptive GO is always<br />

measured from the at-rest position before the original GO. If a move is stopped (with the S<br />

comm<strong>and</strong>), <strong>and</strong> then resumed (with the C comm<strong>and</strong>), this resumed motion is considered to be<br />

part of the original GO. A subsequent distance given with a new pre-emptive GO is measured<br />

from the at rest position before the original GO, not the intermediate stopped position.<br />

Programming Example:<br />

This program creates a 2-tiered profile (single-axis) that changes velocity<br />

<strong>and</strong> deceleration at specific motor positions.<br />

SCALE0<br />

; Disable scaling<br />

DEL OTF<br />

; Delete program (in case program is already in memory)<br />

DEF OTF<br />

; Begin definition of program<br />

PSET0<br />

; Set position to zero<br />

COMEXC1<br />

; Enable continuous comm<strong>and</strong> processing mode<br />

MC0<br />

; Select preset positioning<br />

MA0<br />

; Select incremental positioning<br />

A20<br />

; Set accel to 20 revs/sec/sec<br />

AD20<br />

; Set decel to 20 revs/sec/sec<br />

V9<br />

; Set velocity to 9 revs/sec<br />

D500000<br />

; Set distance to 20 revs<br />

GO1<br />

; Initiate motion<br />

WAIT(PC>100000) ; Wait until comm<strong>and</strong>ed position > 100000 steps (4 revs)<br />

V4<br />

; Slow down for machine operation<br />

GO1<br />

; Initiate new profile with new velocity<br />

WAIT(PC>450000) ; Wait until the motor position > 450000 steps (18 revs)<br />

AD5<br />

; Set decel for gentle stop<br />

V1<br />

; Slow down for gentle stop<br />

GO1<br />

; Initiate new profile with new velocity<br />

END<br />

; End program definition<br />

Chapter 6. Following 155


The table below summarizes the restrictions on pre-emptive GOs.<br />

Condition<br />

Execute GO during MC1 & FOLENØ<br />

Execute GO during MC1 & FOLEN1<br />

Execute GO during MCØ & FOLENØ<br />

Execute GO during MCØ & FOLEN1<br />

Change MC setting during motion<br />

Change ENC setting during motion<br />

Change FOLENØ to FOLEN1 during motion<br />

Change FOLEN1 to FOLENØ during motion<br />

Possible<br />

Yes<br />

Yes<br />

Yes<br />

No<br />

Yes (but cannot change MC1 to MCØ during FOLEN1)<br />

No<br />

No<br />

Only while MC1, constant ratio, <strong>and</strong> not shifting<br />

OTF Error Conditions<br />

The ability to change the goal position on the fly raises the possibility of several error<br />

conditions:<br />

Further instructions<br />

about h<strong>and</strong>ling error<br />

conditions are provided<br />

on page 30.<br />

Error Conditions<br />

The new position goal of an on-the-fly<br />

GO cannot be reached with the<br />

current direction, velocity, <strong>and</strong> decel.<br />

Set axis status<br />

bit #30<br />

Gem6K Response<br />

Set error<br />

status bit #10<br />

Kill motion (decelerate<br />

at the LHAD value)<br />

YES YES NO<br />

The direction of the new goal position<br />

is opposite that of current travel YES YES YES<br />

There has not yet been an overshoot,<br />

but it is not possible to decelerate to YES YES YES<br />

the new distance from the current<br />

velocity using the specified AD value.<br />

RELATED STATUS COMMANDS<br />

Axis Status — Bit #30: (this status bit is cleared with the next GO comm<strong>and</strong>)<br />

AS.30 ....Assignment & comparison operator — use in a conditional expression (see pg. 25).<br />

TASF ......Full text description of each status bit. (see “Preset Move Overshot” line item)<br />

TAS ........Binary report of each status bit (bits 1-32 from left to right). See bit #30.<br />

Error Status — Bit #10: The error status is monitored <strong>and</strong> reported only if you enable errorchecking<br />

bit #10 with the ERROR comm<strong>and</strong> (e.g., ERROR.1Ø-1). NOTE: When the error occurs, the<br />

controller with branch to the error program (assigned with the ERRORP comm<strong>and</strong>). (this status bit is<br />

cleared with the next GO comm<strong>and</strong>)<br />

ER.10 ....Assignment & comparison operator — use in a conditional expression (see pg. 25).<br />

TERF ......Full text description of each status bit. (see “Preset Move Overshot” line item)<br />

TER ........Binary report of each status bit (bits 1-32 from left to right). See bit #10.<br />

Scenarios<br />

Scenario #1: OTF change of velocity <strong>and</strong><br />

distance, where new comm<strong>and</strong>ed distance (D 2 ) is<br />

greater than the original distance (D 1 ) that was<br />

pre-empted [D 2 >D 1 ]. The distances are the areas<br />

under the profiles, starting at t 0 for both. If the<br />

original move had continued, D 1 would have been<br />

reached at time t 1 . D 2 is reached at time t 2 .<br />

<br />

<br />

<br />

<br />

<br />

<br />

156 Gem6K Series Programmer’s <strong>Guide</strong>


Scenario #2: OTF change of distance, where<br />

new comm<strong>and</strong>ed distance (D 2 ) is less than the<br />

original distance (D 1 ) that was pre-empted [D 2 <<br />

D 1 ]. In this example, the position where the OTF<br />

change was entered is already beyond D 2 (or D 2<br />

can not be reached with the comm<strong>and</strong>ed<br />

deceleration). The result is an error <strong>and</strong> motion is<br />

killed (decel at the LHAD value) <strong>and</strong> TAS bit #30<br />

<strong>and</strong> TER bit #10 are set.<br />

<br />

<br />

<br />

<br />

<br />

<br />

Scenario #3: OTF change of velocity. Note that<br />

motion must continue for a longer time at the<br />

reduced velocity to reach the original<br />

comm<strong>and</strong>ed distance than if it had continued at<br />

the original velocity (t 2 > t 1 ).<br />

<br />

<br />

<br />

<br />

<br />

<br />

On-The-Fly Motion — Sample Application<br />

A manufacturer of three products wishes to produce a “sampler-pak” package which will<br />

contain a few of each of his products. The products all have the same width <strong>and</strong> length, but<br />

are 3, 4, <strong>and</strong> 5 inches high respectively. The 3 products are fed from individual lines into a<br />

common conveyor, <strong>and</strong> arrive at a stacking <strong>and</strong> wrapping station. At this station, a tray<br />

accepts a product <strong>and</strong> must have moved down by that product’s height by the time the next<br />

product arrives. This means that each time a new product arrives, the velocity of the tray must<br />

be changed to match the height of that product. Although product spacing will be regular, the<br />

ordering of product type on the common conveyor will be r<strong>and</strong>om, due to variations in the<br />

input lines. Also, a finished sampler-pak should contain 5 products or be at least 18 inches<br />

high, whichever occurs first. This means that the total move distance of the tray will be<br />

unknown until the last product arrives. When the last product is stacked, an output is asserted<br />

which will pause the conveyor <strong>and</strong> start the wrapping process. When wrapping is complete,<br />

the sampler-pak is removed from the tray, <strong>and</strong> the tray returns to the starting position.<br />

The basic problems in this application are that the move distance is not known until near the<br />

end, <strong>and</strong> the velocity must change on the fly. As the products approach the tray, they are<br />

detected with a near vertical arrangement of three sensors. Products of heights 3, 4, <strong>and</strong> 5<br />

inches are detected by 1, 2, or all 3 sensors respectively. Input 1 always detects a product, <strong>and</strong><br />

switches last, so that the others will be stable. When each product is identified, the motion<br />

profile is modified accordingly.<br />

Chapter 6. Following 157


Program<br />

(portion only)<br />

VAR1=0<br />

; Initialize product count<br />

VAR2=0<br />

; Initialize move distance variable<br />

VAR3=0<br />

; Initialize velocity<br />

A10<br />

; Moderate acceleration<br />

MC0<br />

; Start with preset move<br />

WHILE(VAR1


Registration<br />

A “registration input” is<br />

a trigger input assigned<br />

the “trigger interrupt”<br />

function with the<br />

INFNCi-H comm<strong>and</strong>.<br />

When a registration input is activated, the motion profile currently being executed is replaced<br />

by the registration profile with its own distance (REG), acceleration (A & AA), deceleration (AD<br />

& ADA), <strong>and</strong> velocity (V) values. The registration move may interrupt any preset, continuous,<br />

or registration move in progress.<br />

The registration move does not alter the rest of the program being executed when registration<br />

occurs, nor does it affect comm<strong>and</strong>s being executed in the background if the controller is<br />

operating in the continuous comm<strong>and</strong> execution mode (COMEXC1).<br />

Registration moves will not be executed while the motor is not performing a move, while in<br />

the joystick mode (JOY1), or while decelerating due to a stop, kill, soft limit, or hard limit.<br />

How to Set up a Registration Move<br />

☞<br />

ENCCNT: Encoder<br />

capture options for<br />

stepper axes are<br />

discussed on page 85.<br />

Before you can initiate a registration move, you must program these elements (refer also to the<br />

programming examples below):<br />

1. Configure one of the trigger inputs (TRG-nA [#1] or TRG-nB [#2]) to function as a<br />

trigger interrupt input; this is done with the INFNCi-H comm<strong>and</strong>, where “i” is the<br />

input bit number representing the targeted trigger input. Note that the “Master Trigger”<br />

input may not be used for registration.<br />

2. Specify the distance of the registration move with the REG comm<strong>and</strong>. For servo axes,<br />

the distance refers to the encoder position. For stepper axes, the distance refers to<br />

comm<strong>and</strong>ed position if ENCCNT0 (default setting) or encoder position if ENCCNT1.<br />

3. Enable the registration function with the RE comm<strong>and</strong>. Registration is performed only<br />

when the registration function is enabled, <strong>and</strong> with a non-zero distance specified in the<br />

respective axis-designation field of the REG comm<strong>and</strong>.<br />

NOTE: The registration move is executed using the A, AA, AD, ADA, <strong>and</strong> V values that<br />

were in effect when the REG comm<strong>and</strong> was entered.<br />

Registration Move Accuracy (see also Registration Move Status below)<br />

The accuracy of the registration move distance specified with the REG comm<strong>and</strong> is ±1 count<br />

(servo axes: encoder count; stepper axes: comm<strong>and</strong>ed count if ENCCNT0 or encoder count if<br />

ENCCNT1).<br />

RULE OF THUMB: To prevent position overshoot, make sure the REG distance is greater<br />

than 4 ms multiplied by the incoming velocity.<br />

The lapse between activating the registration input <strong>and</strong> commencing the registration move<br />

(this does not affect the move accuracy) is less than one position sample period (2 ms).<br />

The REG distance will be scaled by the distance scale factor (SCLD value) if scaling is<br />

enabled (SCALE1). See page 67 for details on scaling.<br />

Chapter 6. Following 159


Preventing Unwanted Registration Moves (methods)<br />

• Registration Input Debounce: Registration Input Debounce: By default, the registration<br />

inputs are debounced for 2 ms before another input on the same trigger is recognized.<br />

(The debounce time is the time required between a trigger's initial active transition <strong>and</strong><br />

its secondary active transition.) Therefore, the maximum rate that a registration input<br />

can initiate registration moves is 500 times per second. If your application requires a<br />

shorter debounce time, you can change it with the TRGLOT comm<strong>and</strong>.<br />

• Registration Single-Shot: The REGSS comm<strong>and</strong> allows you to program the Gem6K<br />

controller to ignore any registration comm<strong>and</strong>s after the first registration move has<br />

been initiated. Refer to the REGSS comm<strong>and</strong> description for further details <strong>and</strong> an<br />

application example.<br />

• Registration Lockout Distance: The REGLOD comm<strong>and</strong> specifies what distance an axis<br />

must travel before any trigger assigned as a registration input will be recognized. Refer<br />

to the Sample Application 3 below.<br />

Registration Move Status & Error H<strong>and</strong>ling<br />

Axis Status — Bit #28: This status bit is set when a registration move has been initiated by<br />

any registration input (trigger). This status bit is cleared with the next GO comm<strong>and</strong>.<br />

AS.28 .......Assignment & comparison operator — use in a conditional expression (see pg. 26).<br />

TASF..........Full text description of each status bit. (see “Reg Move Comm<strong>and</strong>ed” line item)<br />

TAS............Binary report of each status bit (bits 1-32 from left to right). See bit #28.<br />

Axis Status — Bit #30: If, when the registration input is activated, the registration move<br />

profile cannot be performed with the specified motion parameters, the Gem6K controller will<br />

kill the move in progress <strong>and</strong> set axis status bit #30. This status bit is cleared with the next GO<br />

comm<strong>and</strong>.<br />

AS.3Ø .......Assignment & comparison operator — use in a conditional expression (see pg. 26).<br />

TASF..........Full text description of each status bit. (see “Preset Move Overshot” line item)<br />

TAS............Binary report of each status bit (bits 1-32 from left to right). See bit #30.<br />

Further instructions<br />

about h<strong>and</strong>ling error<br />

conditions are provided<br />

on page 30.<br />

Error Status — Bit #10: This status bit may be set if axis status bit #30 is set. The error<br />

status is monitored <strong>and</strong> reported only if you enable error-checking bit #10 with the ERROR<br />

comm<strong>and</strong> (e.g., ERROR.1Ø-1). NOTE: When the error occurs, the controller will branch to<br />

the error program (assigned with the ERRORP comm<strong>and</strong>). This status bit is cleared with the<br />

next GO comm<strong>and</strong>.<br />

ER.1Ø .......Assignment & comparison operator — use in a conditional expression (see pg. 26).<br />

TERF..........Full text description of each status bit. (see “Preset Move Overshot” line item)<br />

TER............Binary report of each status bit (bits 1-32 from left to right). See bit #10.<br />

Trigger Status — Bits #1-17: Trigger status bits are set when a registration move has been<br />

initiated by trigger inputs A or B, or with the TRIG-M (master trigger) input. This also<br />

indicates that the position has been captured. As soon as the captured information is<br />

transferred or assigned/compared (see page 99), the respective trigger status bit is cleared (set<br />

to Ø).<br />

TRIG..........Assignment & comparison operator — use in a conditional expression.(see pg. 26).<br />

TTRIG .......Binary report of each status bit (bits 1-17 from left to right). From left to right the bits<br />

represent trigger A <strong>and</strong> B, the 17 th bit is master trigger M (the “MASTER TRIG” input<br />

terminal) — see page 91.<br />

160 Gem6K Series Programmer’s <strong>Guide</strong>


Registration — Sample Application 1<br />

In this example, two-tiered registration is achieved (see illustration below). While the motor<br />

is executing it’s 50,000-unit move, trigger input 1 (TRG-1A) is activated <strong>and</strong> executes<br />

registration move A to slow the load’s movement. An open container of volatile liquid is then<br />

placed on the conveyor belts. After picking up the liquid <strong>and</strong> while registration move A is<br />

still in progress, trigger input 2 (TRG-1B) is activated <strong>and</strong> executes registration move B to<br />

slow the load to gentle stop.<br />

DEL REGI1 ; Delete program (in case program already resides in memory)<br />

DEF REGI1 ; Begin program definition<br />

INFNC1-H ; Define trigger input 1 (TRG-1A) as trigger interrupt input<br />

INFNC2-H ; Define trigger input 2 (TRG-1B) as trigger interrupt input<br />

A20<br />

; Set acceleration on axis 1 to 20 units/sec2<br />

AD40 ; Set deceleration on axis 1 to 40 units/sec2<br />

V1<br />

; Set velocity on axis 1 to 1 unit/sec<br />

1REGA4000 ; Set TRG-1A's registration distance on axis 1 to 4000 units<br />

; (registration A move will use the A, AD, & V values above)<br />

A5<br />

; Set acceleration on axis 1 to 5 units/sec/sec<br />

AD2<br />

; Set deceleration on axis 1 to 2 units/sec/sec<br />

V.5 ; Set velocity on axis 1 to 0.5 units/sec<br />

1REGB13000 ; Set TRG-1B's registration distance on axis 1 to 13,000 units<br />

; (registration B move will use the A, AD, & V values above)<br />

RE10 ; Enable registration on axis 1 only<br />

A50 ; Set acceleration to 50 units/sec/sec on axis 1<br />

AD50 ; Set deceleration to 50 units/sec/sec on axis 1<br />

V10 ; Set velocity to 10 unit/sec on axis 1<br />

D50000 ; Set distance to 50000 units on axis 1<br />

GO10 ; Initiate motion on axis 1<br />

END<br />

; End program definition<br />

v<br />

10<br />

8<br />

1st Registration mark<br />

(TRG-1A) occurs<br />

2nd Registration mark<br />

(TRG-1B) occurs<br />

6<br />

4<br />

Pick up<br />

container<br />

here<br />

2<br />

0<br />

0<br />

10,000<br />

20,000<br />

D<br />

Chapter 6. Following 161


Registration — Sample Application 2<br />

A user has a line of material with r<strong>and</strong>omly spaced registration marks. It is known that the<br />

first mark must initiate a registration move, <strong>and</strong> that each registration move cannot be<br />

interrupted or the end product will be destroyed. Since the distance between marks is r<strong>and</strong>om,<br />

it is impossible to predict if a second registration mark will occur before the first registration<br />

move has finished.<br />

DEL REGI2<br />

DEF REGI2<br />

INFNC1-H<br />

RE1<br />

V2<br />

REGA20000<br />

MC1<br />

V1<br />

GO1<br />

END<br />

; Delete program (in case program already resides in memory)<br />

; Begin program definition<br />

; Trigger capture mode for trigger 1 (TRG-A)<br />

; Enable registration<br />

; Set registration move to a velocity of 2 rps<br />

; <strong>and</strong> a distance of 20000 steps<br />

; Start a mode continuous<br />

; move at a velocity of 1 rps<br />

; Initiate motion<br />

; End program definition<br />

v<br />

2<br />

1st Registration<br />

mark occurs<br />

2nd Registration<br />

mark occurs<br />

The first registration move<br />

is pre-empted by a second<br />

registration input.<br />

1<br />

0<br />

t<br />

In order to stop the second registration from occurring, REGSS can be used:<br />

DEL REGI2b<br />

DEF REGI2b<br />

INFNC1-H<br />

RE1<br />

V2<br />

REGA20000<br />

REGSS1<br />

MC1<br />

V1<br />

GO1<br />

END<br />

; Delete program (in case program already resides in memory)<br />

; Begin program definition<br />

; Trigger capture mode for trigger 1 (TRG-A)<br />

; Enable registration<br />

; Set registration move to a velocity of 2 rps<br />

; <strong>and</strong> a distance of 20000 steps<br />

; Enable registration single shot mode<br />

; Start a mode continuous<br />

; move at a velocity of 1 rps<br />

; Initiate motion<br />

; End program definition<br />

v<br />

2<br />

1<br />

1st Registration<br />

mark occurs<br />

2nd Registration<br />

mark occurs<br />

Because of REGSS, the<br />

first registration move is<br />

NOT pre-empted by the<br />

second registration input.<br />

The registration “single<br />

shot” will be reset when<br />

you issue a new motion<br />

comm<strong>and</strong> (GO, PRUN, etc.).<br />

0<br />

t<br />

162 Gem6K Series Programmer’s <strong>Guide</strong>


Registration — Sample Application 3<br />

A print wheel uses registration to initiate each print cycle. From the beginning of motion, the<br />

controller should ignore all registration marks before traveling 2000 steps. This is to ensure<br />

that the unit is up to speed <strong>and</strong> that the registration mark is a valid one.<br />

DEL REGI3<br />

DEF REGI3<br />

INFNC1-H<br />

RE1<br />

V2<br />

REGA2500<br />

REGLOD2000<br />

MC1<br />

V1<br />

GO1<br />

END<br />

; Delete program (in case program already resides in memory)<br />

; Begin program definition<br />

; Trigger capture mode for trigger 1 (TRG-A)<br />

; Enable registration<br />

; Set registration move to a velocity of 2 rps<br />

; <strong>and</strong> a distance of 2500 steps<br />

; Set registration lockout distance to 2000 steps<br />

; Start a mode continuous<br />

; move at a velocity of 1 rps<br />

; Initiate motion<br />

; End program definition<br />

v<br />

2<br />

1st Registration mark occurs<br />

after 1500 steps, but the<br />

registration<br />

move does not<br />

occur because<br />

the lockout<br />

distance is set<br />

to 2000 steps.<br />

2nd Registration<br />

mark occurs after<br />

3000 steps.<br />

1<br />

0<br />

t<br />

Synchronizing Motion (GOWHEN <strong>and</strong> TRGFN operations)<br />

Conditional “GO”s (GOWHEN)<br />

GOWHEN <strong>and</strong> TRGFN allow you to synchronize the execution of motion <strong>and</strong> other events:<br />

• GOWHEN — synchronize execution of the subsequent start-motion comm<strong>and</strong> (GO, GOL,<br />

FGADV, FSHFC, or FSHFD) to:<br />

- Position (comm<strong>and</strong>ed, feedback device, motor, master, slave, Following shift)<br />

- Master cycle number<br />

- Input status<br />

- Time delay (dwell)<br />

• TRGFN:<br />

- Suspend execution of the next start-motion comm<strong>and</strong> (GO, GOL, FGADV, FSHFC,<br />

or FSHFD) until the specified trigger input goes active.<br />

- Suspend beginning a new Following master cycle until the specified trigger<br />

input goes active.<br />

The GOWHEN comm<strong>and</strong> is used to synchronize a motion profile with a specified position<br />

count, input status, dwell (time delay), or master cycle number. Comm<strong>and</strong> processing does not<br />

wait for the GOWHEN conditions (relational expressions) to become true during the GOWHEN<br />

comm<strong>and</strong>. Rather, the motion from the subsequent start-motion comm<strong>and</strong> (GO, GOL, FGADV,<br />

FSHFC, <strong>and</strong> FSHFD) will be suspended until the condition becomes true.<br />

Start-motion type comm<strong>and</strong>s that cannot be synchronized using the GOWHEN comm<strong>and</strong> are:<br />

HOM, JOG, JOY, <strong>and</strong> PRUN. A preset GO comm<strong>and</strong> that is already in motion can start a new<br />

profile using the GOWHEN <strong>and</strong> GO sequence of comm<strong>and</strong>s. Continuous moves (MC1) already<br />

in progress can change to a new velocity based upon the GOWHEN <strong>and</strong> GO sequence. Both<br />

preset <strong>and</strong> continuous moves can be started from rest with the GOWHEN <strong>and</strong> GO sequence.<br />

Chapter 6. Following 163


GOWHEN<br />

Syntax<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Using the numeric variable oper<strong>and</strong>: VAR will be sampled only once, at the moment the<br />

GOWHEN comm<strong>and</strong> is executed. To use other right-h<strong>and</strong> side data sources, precede the<br />

GOWHEN comm<strong>and</strong> with a comm<strong>and</strong> that loads a variable with the data source desired <strong>and</strong><br />

then use that variable in the GOWHEN expression.<br />

SCALING<br />

If scaling is enabled (SCALE1), the right-h<strong>and</strong> oper<strong>and</strong> is multiplied by SCLD if the left-h<strong>and</strong><br />

oper<strong>and</strong> is FB, PC, PE, PSLV, or PSHF. The right-h<strong>and</strong> oper<strong>and</strong> is multiplied by the SCLMAS<br />

value if the left-h<strong>and</strong> oper<strong>and</strong> is PMAS. (The SCLD or SCLMAS values used correlate to the<br />

axis specified with the variable–e.g., a GOWHEN expression with PE scales the encoder<br />

position by the SCLD value.)<br />

GOWHEN<br />

Status<br />

Axis Status — Bit #26: Bit #26 is set when motion has been comm<strong>and</strong>ed by a GO, GOL,<br />

FGADV, FSHFC, or FSHFD comm<strong>and</strong>, but is suspended due to a pending GOWHEN condition. This<br />

status bit is cleared when the GOWHEN condition is true or when a stop (!S) or kill (!K or ^K)<br />

comm<strong>and</strong> is executed. The GOWHEN comm<strong>and</strong> can be cleared using S or K comm<strong>and</strong><br />

(e.g., !S11XØ or !KØXX1).<br />

AS.26 .......Assignment & comparison operator — use in a conditional expression (see page 26).<br />

TASF..........Full text description of each status bit. (see “Gowhen is Pending” line item)<br />

TAS............Binary report of each status bit (bits 1-32 from left to right). See bit #26.<br />

Axis Status — Bit #29: Bit #29 is set when the input state of position relationship specificed<br />

in the GOWHEN expression was already true when the subsequent GO, GOL, FGADV, FSHFC or<br />

FSHFD comm<strong>and</strong> was executed.<br />

AS.29 .......Assignment & comparison operator — use in a conditional expression (see page 26).<br />

TASF..........Full text description of each status bit. (see “Gowhen Error” line item)<br />

TAS............Binary report of each status bit (bits 1-32 from left to right). See bit #29.<br />

Further instructions<br />

about h<strong>and</strong>ling error<br />

conditions are<br />

provided on page 30.<br />

Error Status — Bit #14: Bit #14 is set if the input state or position relationship specified in<br />

the GOWHEN expression was already true when the subsequent GO, GOL, FGADV, FSHFC, or<br />

FSHFD comm<strong>and</strong> is issued. The error status is monitored <strong>and</strong> reported only if you enable errorchecking<br />

bit #14 with the ERROR comm<strong>and</strong> (e.g., ERROR.14-1). NOTE: When the error<br />

occurs, the controller with branch to the error program (assigned with the ERRORP comm<strong>and</strong>).<br />

164 Gem6K Series Programmer’s <strong>Guide</strong>


ER.14 .......Assignment & comparison operator — use in a conditional expression (see page 26).<br />

TERF..........Full text description of each status bit. (see “GOWHEN condition true” line item)<br />

TER ............Binary report of each status bit (bits 1-32 from left to right). See bit #14.<br />

GOWHEN ...<br />

On A Trigger Input<br />

GOWHEN<br />

VS<br />

WAIT<br />

Factors Affecting<br />

GOWHEN Execution<br />

☞<br />

GOWHEN in Compiled<br />

Motion (Compiled<br />

Motion is discussed on<br />

page 139)<br />

Sample<br />

Gem6K Code<br />

If you wish motion to be triggered with a trigger input, use the TRGFNc1 comm<strong>and</strong>. The<br />

TRGFNc1 comm<strong>and</strong> executes in the same manner as the GOWHEN comm<strong>and</strong>, except that<br />

motion is executed when the specified trigger input “c” is activated.. For more information,<br />

refer to Trigger Functions below.<br />

A WAIT will cause the controller program to halt program flow (except for execution of<br />

immediate comm<strong>and</strong>s) until the condition specified is satisfied. Common uses for this function<br />

include delaying subsequent I/O activation until the master has achieved a required position or<br />

an object has been sensed.<br />

By contrast, a GOWHEN will suspend the motion profile until the specified condition is met. It<br />

does not affect program flow. If you wish motion to be triggered with a trigger input, use the<br />

TRGFNc1 comm<strong>and</strong>. The TRGFNc1 comm<strong>and</strong> executes in the same manner as the GOWHEN<br />

comm<strong>and</strong>, except that motion is executed when the specified trigger input (c) is activated (see<br />

Trigger Functions below for details). In addition, GOWHEN expressions are limited to the<br />

oper<strong>and</strong>s listed above; WAIT can use additional oper<strong>and</strong>s such as FS (Following status) <strong>and</strong><br />

VMAS (velocity of master).<br />

If a second GOWHEN comm<strong>and</strong> is executed before a start-motion comm<strong>and</strong> (GO, GOL, FSHFC,<br />

or FSHFD), then the first GOWHEN is over-written by the second GOWHEN comm<strong>and</strong>. (GOWHEN<br />

comm<strong>and</strong>s are not nested.) An error is not generated when a GOWHEN comm<strong>and</strong> is over-written<br />

by another GOWHEN.<br />

While waiting for a GOWHEN condition to be met <strong>and</strong> a start-motion comm<strong>and</strong> has been<br />

issued, if a second GOWHEN comm<strong>and</strong> is encountered, then the first sequence is disabled <strong>and</strong><br />

another start-motion comm<strong>and</strong> is needed to re-arm the second GOWHEN sequence.<br />

A new GOWHEN comm<strong>and</strong> must be issued for each start-motion comm<strong>and</strong> (GO, GOL, FGADV,<br />

FSHFC, or FSHFD). That is, once a GOWHEN condition is met <strong>and</strong> the motion comm<strong>and</strong> is<br />

executed, subsequent motion comm<strong>and</strong>s will not be affected by the same GOWHEN comm<strong>and</strong>.<br />

If the GOWHEN <strong>and</strong> start-motion comm<strong>and</strong>s are issued, the motion profile is delayed until the<br />

GOWHEN condition is met. If a second start-motion comm<strong>and</strong> is encountered, the second startmotion<br />

comm<strong>and</strong> will override the GOWHEN comm<strong>and</strong> <strong>and</strong> start motion. If this override<br />

situation is not desired, it can be avoided by using a WAIT condition between the first startmotion<br />

comm<strong>and</strong> <strong>and</strong> the second start-motion comm<strong>and</strong>.<br />

It is probable that the GOWHEN comm<strong>and</strong>, the GO comm<strong>and</strong>, <strong>and</strong> the GOWHEN condition<br />

becoming true may be separated in time, <strong>and</strong> by other comm<strong>and</strong>s. Situations may arise, or<br />

comm<strong>and</strong>s may be given which make the GOWHEN invalid or inappropriate. In these cases, the<br />

GOWHEN condition is cleared, <strong>and</strong> any motion pending the GOWHEN condition becoming true<br />

is canceled. These situations include execution of the JOG, JOY, HOM, PRUN, <strong>and</strong> DRIVEØ<br />

comm<strong>and</strong>s, as well motion being stopped due to hard or soft limits, a drive fault, an<br />

immediate stop (!S), or an immediate kill (!K or ^K).<br />

When used in a compiled program, a GOWHEN will pause the profile in progress (motion<br />

continues at constant velocity) until the GOWHEN condition evaluates true. When executing a<br />

compiled Following profile, the GOWHEN is ignored on the reverse Following path (i.e., when<br />

the master is moving in the opposite direction of that which is specified in the FOLMAS<br />

comm<strong>and</strong>). A compiled GOWHEN may require up to 4 segments of compiled memory storage.<br />

In the example below, the motor must start motion when input #2 signals a safe condition.<br />

While waiting, the program must be monitoring inputs <strong>and</strong> serving other system requirements,<br />

so a WAIT statement cannot be used; instead, a GOWHEN <strong>and</strong> GO sequence will delay the move<br />

profile of axis 2.<br />

Chapter 6. Following 165


Trigger Functions (TRGFN)<br />

MC0<br />

; Set to preset move mode<br />

D20<br />

; Set distance end-point<br />

COMEXC1<br />

; Enable continuous comm<strong>and</strong> execution mode<br />

V1<br />

; Set velocity<br />

A100<br />

; Set acceleration<br />

GOWHEN(IN.2=b1) ; Delay profile. When expression is true (input #2 is<br />

; low) start motion.<br />

GO<br />

; Comm<strong>and</strong> to move. Motor will not start until<br />

; conditions in the GOWHEN statement are true.<br />

; Comm<strong>and</strong> processing does not wait, so other system<br />

; functions may be performed.<br />

The Trigger Functions comm<strong>and</strong> (TRGFN) allows you to assign additional functions to trigger<br />

inputs that have been defined as “trigger interrupt” inputs (INFNCi-H):<br />

TRGFNc bb<br />

Start New Master Cycle (FMCNEW) function<br />

Conditional GO (GOWHEN) function<br />

Trigger letter. Two triggers are available (A or B).<br />

The “Master Trigger” (letter M) may also be used.<br />

• “Conditional GO” Function (TRGFNc1x): Suspend execution of the next start-motion<br />

comm<strong>and</strong> until specified trigger input “c” goes active. Start-motion comm<strong>and</strong>s are listed<br />

below. Refer to page 163 or to the GOWHEN comm<strong>and</strong> description for additional details.<br />

- GO (st<strong>and</strong>ard comm<strong>and</strong> to begin motion)<br />

- FGADV (begin geared advance – for Following motion)<br />

- FSHFC (begin continuous shift – for Following motion)<br />

- FSHFD (begin preset shift – for Following motion)<br />

Axis status bit #26 (reported with TASF, TAS, or AS) is set to one (1) when there is a<br />

pending “Conditional GO” condition initiated by a TRGFN comm<strong>and</strong>; this bit is cleared<br />

when the trigger is activated or when a stop comm<strong>and</strong> (S) or a kill comm<strong>and</strong> (K) is issued.<br />

If you need execution to be triggered by other factors (e.g., input state, master position,<br />

encoder position, etc.) use the GOWHEN comm<strong>and</strong>.<br />

• “New Master Cycle” Function (TRGFNcx1): This is equivalent to executing the FMCNEW<br />

comm<strong>and</strong>. When specified trigger input “c” goes active, the controller begins a new<br />

Following master cycle. For more information on master cycles, refer to page 182 or to<br />

the FMCNEW comm<strong>and</strong> description.<br />

These trigger functions are cleared once the function is complete (trigger input is activated). To<br />

use the trigger to perform a GOWHEN function again, the TRGFN comm<strong>and</strong> must be given again.<br />

Sample<br />

Gem6K Code<br />

INFNC1-H<br />

INFNC2-H<br />

TRGFNBx1<br />

TRGFNB1x<br />

GO1<br />

; Define input #1 (TRG-A) as a trigger interrupt input<br />

; Define input #2 (TRG-B) as a trigger interrupt input<br />

; When TRG-1B goes active, motor will begin a new<br />

; master cycle<br />

; When TRG-2B goes active, motor will execute the move<br />

; comm<strong>and</strong>ed with the GO comm<strong>and</strong>.<br />

; The move is comm<strong>and</strong>ed, but will not execute<br />

; until trigger 2B goes active.<br />

166 Gem6K Series Programmer’s <strong>Guide</strong>


Following<br />

6C HAPTER SIX<br />

Following<br />

IN THIS CHAPTER<br />

This chapter will help you underst<strong>and</strong> Ratio Following:<br />

• Introduction to Ratio Following ......................................................................168<br />

• Implementing Ratio Following .......................................................................170<br />

• Master Cycle Concept .....................................................................................182<br />

• Technical Considerations for Following .........................................................186<br />

• Troubleshooting for Following .......................................................................196<br />

• Following Comm<strong>and</strong>s (list).............................................................................198


Ratio Following – Introduction<br />

As part of its st<strong>and</strong>ard features, the Gem6K Series Drive/Controller family allows you to solve<br />

applications requiring Ratio Following.<br />

Compiled Profiles<br />

You can pre-compile<br />

Following profiles<br />

(saves processing<br />

time). See page 142<br />

for details.<br />

Ratio Following is, essentially, controlled motion based on the measurement of external<br />

motion. This includes concepts such as an electronic gearbox, trackball, follower axis feed-tolength,<br />

as well as complex changes of ratio as a function of master position. Ratio Following<br />

can include continuous, preset, <strong>and</strong> registration-like moves in which the velocity is replaced<br />

with a ratio.<br />

The follower axis may follow in either direction <strong>and</strong> change ratio while moving, with phase<br />

shifts allowed during motion at otherwise constant ratio. Ratio changes or new moves may be<br />

dependent on master position or based on receipt of a trigger input. Also, a follower axis may<br />

perform Following moves or normal time-based moves in the same application because<br />

Following can be enabled <strong>and</strong> disabled at will. Product cycles (operations which repeat with<br />

periodic master travel) can be easily specified with the master cycle concept (see page 182).<br />

In Ratio Following, acceleration ramps between ratios will take place over a user-specified<br />

master distance. Product cycles can be easily specified with the master cycle concept.<br />

This chapter highlights the capabilities of the Gem6K Following features <strong>and</strong> provides<br />

application examples. If you need more details on the operation or syntax of a particular<br />

comm<strong>and</strong>, please refer to the Gem6K Series Comm<strong>and</strong> Reference.<br />

Before delving into the specifics of Ratio Following, read on to gain a basic underst<strong>and</strong>ing of<br />

how the Gem6K follows.<br />

What can be a master<br />

The Gem6K can be made to “follow” any of the master input (“master”) sources listed in the<br />

table below.<br />

• Incremental encoder. The encoder can be the axis-related “ENCODER” port on a stepper,<br />

or it can be the “MASTER ENCODER” port.<br />

• Analog input (servo axes only). This requires an ANI SIM be installed on an expansion<br />

I/O brick (see your product’s Installation <strong>Guide</strong> for instructions). ANI SIMs <strong>and</strong><br />

expansion I/O bricks are sold separately.<br />

• Internal count source (a “virtual master” option)<br />

• Internal sine wave source (a “virtual master” option)<br />

• Integer variable (VARI)<br />

A servo axis may not follow its own feedback device input (encoder or analog input).<br />

A stepper axis may follow its own encoder input, as long as that axis does not use the Encoder<br />

Stall Detect feature (ESTALL1 mode).<br />

For instructions on assigning a master for a particular follower axis, refer to Define the<br />

Master <strong>and</strong> Follower (page 170), or refer to the FOLMAS comm<strong>and</strong> description in the Gem6K<br />

Series Comm<strong>and</strong> Reference.<br />

168 Gem6K Series Programmer’s <strong>Guide</strong>


Following Status (TFSF, TFS & FS Comm<strong>and</strong>s)<br />

Many of the Following features described in this document have associated status bits that can be displayed<br />

(with the TFSF <strong>and</strong> TFS comm<strong>and</strong>s) or used in assignment or comparison operations (with the FS operator).<br />

The portions of this document which describe those features also summarize the related status bits.<br />

FS Bit Function (YES = 1; NO = Ø)<br />

1....... Follower in Ratio Move..... A Following move is in progress.<br />

2....... Ratio is Negative .............. The current ratio is negative (i.e., follower counts counting in the opposite direction from master).<br />

3....... Follower Ratio Changing .. The follower is ramping from one ratio to another (including a ramp to or from zero ratio).<br />

4....... Follower At Ratio .............. The follower is at constant non-zero ratio.<br />

Bits 1-4 indicate the status of the follower axis in Following motion.<br />

* 5....... FOLMAS Active.................. A master is specified with the FOLMAS comm<strong>and</strong>.<br />

* 6....... FOLEN Active.................... Following has been enabled with the FOLEN comm<strong>and</strong>.<br />

* 7....... Master is Moving .............. The specified master is currently in motion.<br />

8....... Master Dir Neg ................. The current master direction is negative. (Bit must be cleared to allow Following move in preset<br />

mode—MCØ).<br />

Bits 5-8 indicate the status required for Following motion (i.e., a master must be assigned, Following must be enabled,<br />

the master must be moving, <strong>and</strong> for many features, the master direction must be positive).<br />

Unless the master is a comm<strong>and</strong>ed position of another axis, minor vibration of the master will likely cause bits 7-8 to<br />

toggle on <strong>and</strong> off, even if the master is nominally “at rest”. These bits are meant primarily as a quick diagnosis for the<br />

absence of master motion, or master motion in the wrong direction. Many features require positive master counting to<br />

work properly.<br />

9....... OK to Shift ........................ Conditions are valid to issue shift comm<strong>and</strong>s (FSHFD or FSHFC).<br />

10....... Shifting now ...................... A shift move is in progress.<br />

11....... Shift is Continuous............ An FSHFC-based shift move is in progress.<br />

12....... Shift Dir is Neg.................. The direction of the shift move in progress is negative.<br />

Bits 9-12 indicate the shift status of the follower. Shifting is super-imposed motion, but if viewed alone, can have its<br />

own status. In other words, bits 10-12 describe only the shifting portion of motion.<br />

13....... Master Cyc Trig Pend....... A master cycle restart is pending the occurrence of the specified trigger.<br />

14....... Mas Cyc Len Given .......... A non-zero master cycle length has been specified with the FMCLEN comm<strong>and</strong>.<br />

15....... Master Cyc Pos Neg......... The current master cycle position (PMAS) is negative. This could be by caused by a negative initial<br />

master cycle position (FMCP), or if the master is moving in the negative direction.<br />

16....... Master Cyc Num > 0......... The master position (PMAS) has exceeded the master cycle length (FMCLEN) at least once, causing<br />

the master cycle number (NMCY) to increment.<br />

Bits 13-16 indicate the status of master cycle counting. If a Following application is taking advantage of master cycle<br />

counting, these bits provide a quick summary of some important master cycle information.<br />

17....... Mas Pos Prediction On..... Master position prediction has been enabled (FPPEN).<br />

18....... Mas Filtering On ............... A non-zero value for master position filtering (FFILT) is in effect.<br />

19....... <br />

20....... <br />

Bit 17 <strong>and</strong> 18 indicate the status of master position measurement features.<br />

21....... <br />

22....... <br />

23....... OK to do FGADV move...... OK to do Geared Advance move (master assigned with FOLMAS, Following enabled with FOLEN, <strong>and</strong><br />

follower axis is either not moving, or moving at constant ratio in continuous mode).<br />

24....... FGADV move underway .... Geared Advance move profile is in progress.<br />

Bits 23 <strong>and</strong> 24 indicate the status of a Geared Advance move.<br />

25....... <br />

26....... FMAXA/FMAXV limited........ The present Following move profile is being limited by FMAXA or FMAXV.<br />

27....... <br />

28....... <br />

Bits 23 <strong>and</strong> 24 indicate the status of a Geared Advance move.<br />

* All these conditions must be true before Following motion will occur.<br />

Chapter 7. Multi-Tasking 169


Implementing Ratio Following<br />

This section covers the basic elements of implementing Ratio Following:<br />

• Applying Following setup parameters<br />

• Move profiles<br />

• Performing phase shifts (FSHFC <strong>and</strong> FSHFD)<br />

• Geared advanced (FGADV)<br />

• Application scenarios:<br />

- Electronic gearbox<br />

- Trackball<br />

Ratio Following Setup Parameters<br />

Prior to executing a Following move, there are several setup parameters that must be<br />

specified. These parameters may be established:<br />

Programming<br />

examples — see<br />

application examples<br />

later in this chapter.<br />

• Define the master <strong>and</strong> follower (FOLMAS)<br />

• Define master & follower scaling factors (SCLMAS, SCLA, SCLD, <strong>and</strong> SCLV) – if required<br />

• Define the follower-to-master Following ratio (FOLRN <strong>and</strong> FOLRD)<br />

• Define the master distance (FOLMD) – define scaling first<br />

• Enable the Following Mode (FOLEN)<br />

Following Status<br />

(see TFSF, TFS <strong>and</strong> FS<br />

comm<strong>and</strong>s)<br />

Following Status bits 5-8 (see table below) are meant to indicate the status required for<br />

Following motion (i.e., a master must be assigned, Following must be enabled, the master must<br />

be moving, <strong>and</strong> for many features, the master direction must be positive).<br />

Bits 7-8 represent master motion <strong>and</strong> master direction respectively. Unless the master is a<br />

comm<strong>and</strong>ed position of another axis, it is likely that minor vibration of the master will cause<br />

these bits to toggle on <strong>and</strong> off, even if the master is nominally “at rest”. These bits are meant<br />

primarily as a quick diagnosis for the absence of master motion, or master motion in the wrong<br />

direction. Many features require positive master counting to work properly.<br />

Bit # Function (yes = 1; no = Ø)<br />

5 FOLMAS Active ................A master is specified with the FOLMAS comm<strong>and</strong>.<br />

6 FOLEN Active ..................Following has been enabled with the FOLEN comm<strong>and</strong>.<br />

7 Master is Moving.............The specified master is currently in motion.<br />

8 Master Dir Neg................The current master direction is negative. (bit must be cleared to<br />

allow Following move in preset mode–MCØ).<br />

Define the Master<br />

<strong>and</strong> Follower;<br />

(FOLMAS)<br />

The FOLMAS comm<strong>and</strong> defines the masters <strong>and</strong> the followers. The comm<strong>and</strong> syntax is:<br />

Follower<br />

Axis<br />

FOLMAS <br />

Format for master assignment to follower:<br />

<br />

Sign Bit<br />

Master source axis # (optional)<br />

Master source selection<br />

170 Gem6K Series Programmer’s <strong>Guide</strong>


• Sign bit (±): Specifies the count direction of the master source which will result in<br />

positive master travel counts. The sign bit is not meant to be used simply to change the<br />

direction of follower motion. That function can be done with the sign of the D comm<strong>and</strong>.<br />

Rather, the sign bit is used to allow forward motion of the physical master (e.g., conveyor<br />

belt, rotating wheel, or the continuous feed of material or product) to result in positive<br />

counts. Several features described later in this document require increasing master counts<br />

for proper operation. These include Following motion in preset positioning mode (MCØ) ,<br />

master cycle counting, <strong>and</strong> executing GOWHEN based on master cycle position.<br />

• Master source axis number (1 st i): Selects the axis number of the master source. This<br />

number is not required when selecting the Master Encoder as the master source. . If the<br />

master source is “8” (VARI), this represents the integer variable (VARI) number.<br />

• Master source selection (2 nd i): Selects the master source (according to the master source<br />

axis number). The options, selected by their respective number, are:<br />

1.... Incremental encoder connected to one of the axis-related “ENCODER” ports, or the<br />

“MASTER ENCODER” port. If the master encoder is selected, the master source<br />

input number must be omitted from the syntax.<br />

2.... Analog input (servo axes only). This requires an ANI SIM be installed on an<br />

expansion I/O brick (see your product’s Installation <strong>Guide</strong> for instructions), <strong>and</strong><br />

the ANI input must be designated as a master input source with the ANIMAS<br />

comm<strong>and</strong>. ANI SIMs <strong>and</strong> expansion I/O bricks are sold separately.<br />

5.... Internal count source (see Following a Virtual Master below for details)<br />

6.... Internal sine wave source (see Following a Virtual Master below for details)<br />

8.... VARI variable (see Following an Integer Variable below for details)<br />

NOTES<br />

• Servo controllers: The follower axis cannot use its own comm<strong>and</strong>ed position or its<br />

currently selected feedback device (encoder or ANI) as the master input.<br />

• Stepper controllers: A follower axis that is using the Stall Detect mode (ESTALL1) cannot<br />

use its own encoder as the master input.<br />

• If scaling is enabled (SCALE1), the measurement of the master is scaled by the SCLMAS<br />

value.<br />

As an example, suppose the Master Encoder input is to be the master input for follower axis 1,<br />

<strong>and</strong> forward travel of the physical master (e.g., conveyor belt) results in negative counts on<br />

the Master Encoder. Given these operating constraints, you would use the FOLMAS-1<br />

comm<strong>and</strong>.<br />

The default axis follower setting is disabled. If you do not want the axis to be a follower,<br />

simply leave it not configured (e.g., FOLMAS+11 comm<strong>and</strong> configures axis #1 as a follower<br />

to encoder #1;). If an axis is currently configured as a follower, you can disable its follower<br />

status by putting a zero (Ø) in the parameter field (e.g., the FOLMASØ comm<strong>and</strong> disables axis<br />

1 from being a follower axis).<br />

As soon as the master/follower configuration is specified with the FOLMAS comm<strong>and</strong>, a<br />

continuously updated relationship is maintained between the follower’s position <strong>and</strong> the<br />

master’s position. The update period is 2 ms.<br />

FOLMAS Setting Not Saved in Non-Volatile Memory<br />

The FOLMAS configuration is not saved in non-volatile memory. Therefore, you may wish to<br />

include it in the power-up program (STARTP).<br />

Chapter 7. Multi-Tasking 171


Following a Virtual<br />

Master<br />

The Gem6K allows two “Virtual Master” options for applications that require the<br />

synchronization features of Following, but have no external master to measure.<br />

• Internal count source.<br />

• Internal sine wave.<br />

Internal Count Source<br />

The internal count source is intended to mimic the counts which might be received on an<br />

external encoder port. Just as may be encountered with an external encoder, this count<br />

source may speed up, slow down, stop, or count backwards. There is one count source<br />

with a user definable <strong>and</strong> variable count frequency. The count frequency, specified in<br />

counts per second with FVMFRQ, is a signed value, allowing the master to move forward<br />

or backwards. The rate at which the count frequency may change is specified in counts<br />

per second per second with the FVMACC comm<strong>and</strong>. This allows smooth changes in<br />

master velocity <strong>and</strong> direction. Neither of these comm<strong>and</strong>s are scaled or have associated<br />

report backs. The accumulated raw count <strong>and</strong> count rate have no report back, but may be<br />

accessed via TPMAS <strong>and</strong> TVMAS respectively if the internal count source is specified as<br />

master.<br />

The associated comm<strong>and</strong>s are:<br />

FVMFRQi ........................................ Where “i” is the count frequency in counts/sec<br />

(range is 0-1,000000)<br />

FVMACCi ........................................ Where “i” is the count accel in counts/sec 2<br />

(range is 0-9,999,999)<br />

The count source is always enabled, counting at the signed rate specified with the<br />

FVMFRQ comm<strong>and</strong>. There are no start or stop comm<strong>and</strong>s, no modes, distances, or limit<br />

inputs. To stop <strong>and</strong> start the count source, specify zero or non-zero values respectively<br />

for the FVMFRQ comm<strong>and</strong>. To add or subtract a “preset” number of counts (i.e., move<br />

the master forward or backward a “preset distance”), you must calculate the time required<br />

for that distance, (using the frequency <strong>and</strong> acceleration values), <strong>and</strong> comm<strong>and</strong> the<br />

appropriate value of FVMFRQ for that duration.<br />

Internal Sine Wave<br />

The internal sine wave is generated using the internal count source as a frequency input.<br />

By designating the internal sine wave as a master (e.g., FOLMAS+16), you may produce<br />

a sinusoidally oscillating motion, with control of the phase (angle), amplitude, <strong>and</strong> center<br />

of oscillation. There is one sine wave using the variable count frequency (FVMFRQ) to<br />

increase or decrease the angle from which the sine is calculated. Each count of the count<br />

frequency changes the angle by one tenth (0.1) of a degree. For example, a FVMFRQ<br />

value of 3600 would create an angular frequency of 3600 tenths degrees per second, or 1<br />

cycle per second. When used as a source for the sine wave, the maximum value for<br />

FVMFRQ is 144000. This results in a maximum of 40 Hz angular frequency. Higher<br />

frequencies are not allowed because they may be subject to aliasing.<br />

The associated comm<strong>and</strong>s are:<br />

SINANGi ........................................ Where “i” is the new angle (range is 0.0-360.0 degrees)<br />

SINAMPi ........................................ Where “i” is the amplitude (range is 0-9,999,999 —<br />

maximum peak-to-peak is 16384))<br />

SINGOb .......................................... Where “b” is the binary start/stop for the master axis:<br />

1 = restart from zero degrees<br />

0 = stop the sine wave<br />

The SINAMP comm<strong>and</strong> is included in the specification in order to allow a change in slave<br />

amplitude without changing the center of oscillation. Changing the ratio (with FOLRN)<br />

will also change the slave amplitude, but unless the comm<strong>and</strong> is given at exactly the<br />

master zero crossing, it will also change the center of slave oscillation. The center of<br />

oscillation may be changed by a controlled amount by using the FSHFD comm<strong>and</strong>. The<br />

SINAMP comm<strong>and</strong> affects the sine wave immediately, without any built in ramp in<br />

amplitude. If a gentle change is desired, a user program should be written which<br />

172 Gem6K Series Programmer’s <strong>Guide</strong>


epeatedly issues the comm<strong>and</strong> with small changes in value, until the desired value is<br />

reached.<br />

Using SINGO with a “0” parameter abruptly stops the sine wave, without changing its<br />

current magnitude. Using SINGO with a “1” parameter abruptly starts the sine wave, also<br />

without changing its current magnitude. To gently pause the slave output, use an<br />

FVMFRQ value of zero, with a moderate FVMACC value; to resume, restore the FVMFRQ<br />

value.<br />

The SINGO with a “1” parameter always starts at the previous angle, which may not be<br />

the desired start of oscillation. The SINANG comm<strong>and</strong> will instantly change the angle<br />

<strong>and</strong> corresponding sine of the angle. This represents an abrupt change in master position.<br />

If the slave is still following when this occurs, there will be an abrupt change in<br />

comm<strong>and</strong>ed slave position. To start the slave properly, move the slave to the desired<br />

start position first (using MC0, D, GO), then issue SINANG, then MC1, GO1, <strong>and</strong> finally<br />

SINGO. If SINANG is issued without any parameters, the current angle is reported, not<br />

the most recent user SINANG comm<strong>and</strong> value.<br />

Sinewave Example:<br />

In the example below, the follower will oscillate at 1 Hz centered around zero, with a peak-topeak<br />

amplitude of 2048. Assume both the master axis <strong>and</strong> the follower axis use the same units.<br />

Based on this assumption, we can use a following ratio of 1 to 1 <strong>and</strong> control the amplitude with<br />

the SINAMP comm<strong>and</strong>. In order to provide a gentle start the oscillation is started at the bottom<br />

of the cycle, where the velocity is zero.<br />

D-1024 ; Establish desired bottom of oscillation<br />

MC0<br />

; Put into preset move mode<br />

GO1<br />

; Move to desired bottom location<br />

FOLMAS16<br />

; Set follower to follow internal sine wave<br />

FOLRN1 ; Set following ratio to 1 to 1<br />

FOLRD1<br />

FOLEN1<br />

; Enable following mode<br />

MC1<br />

; Enable continuous motion<br />

SINAMP1024 ; Establish center to peak amplitude<br />

FVMFRQ3600 ; Establish 1 Hz frequency<br />

FVMACC999999 ; Reach frequency rapidly<br />

SINANG270<br />

; Start angle at bottom of cycle<br />

GO1<br />

; Lock follower to master (not started yet)<br />

SINGO1<br />

; Start sine wave (<strong>and</strong> hence follower motion)<br />

Following an Integer<br />

Variable<br />

Syntax is FOLMASn8. This option allows an axis to follow the integer variable (VARI)<br />

specified with “n”; that is, VARIn. The range for “n” is 1-8 (VARI1 – VARI8). For example,<br />

FOLMAS48 assigns axis #1 to follow VARI4.<br />

This option is particularly useful in conjunction with the INVARI (Map Inputs to a VARI<br />

Variable) feature. INVARI continuously updates a specified VARI variable with the value of a<br />

specified group of digital inputs, allowing an axis to follow a binary input pattern. Another<br />

useful way to update the value of the VARI variable is to calculate its value in a PLCP program<br />

(launched with the SCANP comm<strong>and</strong>).<br />

The INVARI <strong>and</strong> SCANP options for updating VARI are good choices, because both are<br />

performed every system update, thus facilitating smooth Following motion. It is also possible<br />

to use an extra task (multi-tasking) to calculate VARI values, but the resulting updates will not<br />

be as fast (not perfectly periodic); consequently, Follow motion will be less smooth.<br />

Chapter 7. Multi-Tasking 173


Define the Master<br />

<strong>and</strong> Follower<br />

Scaling Factors;<br />

(SCLMAS);<br />

. . . . if required;<br />

If you will be scaling your motion parameters (distance, velocity, acceleration/deceleration), be<br />

aware that the only variance from non-Following scaling is that the master source (distance) is<br />

scaled by the SCLMAS value. Virtual master sources are not scaled.<br />

Typically, the master <strong>and</strong> follower scale factors are programmed so that master <strong>and</strong> follower units are<br />

the same, but this is not required. Consider the scenario below as an example.<br />

The master is a 1000-line encoder (4000 counts/rev post-quadrature) mounted to a 50 teeth/rev pulley<br />

attached to a 10 teeth/inch conveyor belt, resulting in 80 counts/tooth (4000 counts/50 teeth = 80<br />

counts/tooth). To program in inches, you would set up the master scaling factor with the SCLMAS800<br />

comm<strong>and</strong> (80 counts/tooth * 10 teeth/inch = 800 counts/inch).<br />

The follower axis is a servo motor with position feedback from a 1000-line encoder (4000 counts/rev).<br />

The motor is mounted to a 4-pitch (4 revs/inch) leadscrew. Thus, to program in inches, you would set<br />

up the follower scaling factor with the SCLD16000 comm<strong>and</strong> (4000 counts/rev * 4 revs/inch = 1Gem6K<br />

counts/inch).<br />

Define the Followerto-Master<br />

Following<br />

Ratio (FOLRN &<br />

FOLRD)<br />

FOLRNF may be used to<br />

define a final ratio for<br />

compiled Following<br />

profiles (see page 142).<br />

NOTE: Additional details on scaling <strong>and</strong> non-scaled units of measure are presented on page 67.<br />

The FOLRN <strong>and</strong> FOLRD comm<strong>and</strong>s establish the goal ratio between the follower <strong>and</strong> master<br />

travel, just as the V comm<strong>and</strong> establishes the goal velocity for a typical non-Following move.<br />

The FOLRN comm<strong>and</strong> specifies the ratio's numerator (follower travel), <strong>and</strong> the FOLRD<br />

comm<strong>and</strong> specifies the ratio’s denominator (master travel). If the denominator (FOLRD) is not<br />

specified, it is assumed to be 1.<br />

FOLRN <strong>and</strong> FOLRD are specified with two positive numbers, but the resulting ratio applies to<br />

moves in both directions; the actual follower direction will depend on the direction comm<strong>and</strong>ed<br />

with the D comm<strong>and</strong> <strong>and</strong> master direction. Numeric variables (VAR) can be used with these<br />

comm<strong>and</strong>s for follower <strong>and</strong>/or master parameters (e.g., FOLRN(VAR1) : FOLRD3). The<br />

maximum value of the resulting quotient is 127 to 1.<br />

For a preset Following move (MCØ mode), the FOLRN/FOLRD ratio represents the maximum<br />

allowed ratio. For a continuous move (MC1 mode), it represents the final ratio r eached by the<br />

follower axis.<br />

Example As an example, assume the follower-to-master ratio is set to 5-to-3 for an axis (FOLRN5 :<br />

FOLRD3). The first parameter (5) is scaled by the SCLD value to give follower steps. The<br />

second parameter (3) is scaled by the SCLMAS value to give master steps. If the SCLD setting<br />

is 25000 <strong>and</strong> the SCLMAS setting is 4000, the follower-to-master step ratio would be 5 ∗ 25000<br />

to 3 ∗ 4000, or 125 follower steps for every 12 master steps.<br />

Define the Master<br />

Distance; (FOLMD);<br />

The “master distance” for moves in the Following mode (FOLEN1) is analogous to the move<br />

time for normal time-based moves with Following disabled (FOLENØ). For time-based moves,<br />

the time required to ramp to a new velocity (MC1 mode) or move to a new position (MCØ<br />

mode) is determined indirectly by the acceleration (A), deceleration (AD), <strong>and</strong> velocity (V)<br />

comm<strong>and</strong> values. For Following mode moves, a ramp to a new ratio (MC1 mode) or a move to<br />

a new position (MCØ mode) takes place over a specific master distance, not over a specific<br />

time. This distance is defined directly by the user with the FOLMD comm<strong>and</strong>.<br />

In other words, the FOLMD comm<strong>and</strong> defines the master distance over which a preset follower<br />

move will take place, or the master distance over which a continuous follower move will<br />

change from its current ratio (including zero) to the comm<strong>and</strong>ed ratio (ratio established by<br />

FOLRN <strong>and</strong> FOLRD).<br />

By carefully specifying a master distance (FOLMD), a precise position relationship between<br />

master <strong>and</strong> follower during all phases of the profile is ensured.<br />

☞ HINT: If the follower axis is in continuous mode (MC1) <strong>and</strong> the master is starting from<br />

rest, setting FOLMD to Ø will ensure precise tracking of the master's acceleration ramp.<br />

If scaling is enabled (SCALE1), the FOLMD value is scaled by the SCLMAS parameter.<br />

Examples <strong>and</strong> more information on this topic can be found below in the section titled<br />

Follower vs. Master Move Profiles.<br />

174 Gem6K Series Programmer’s <strong>Guide</strong>


Enable the<br />

Following Mode;<br />

(FOLEN1)<br />

When an axis is configured as a follower with the FOLMAS comm<strong>and</strong>, it will continuously<br />

monitor the position <strong>and</strong> motion of its master, even if the follower is at rest. This allows<br />

subsequent motion to be related to the motion of the master via ratios (FOLRN/FOLRD) <strong>and</strong><br />

ramping over master distances (FOLMD). Such moves are done with Following enabled<br />

(FOLEN1).<br />

It is also possible, <strong>and</strong> sometimes desirable, to have the follower axis motion independent of<br />

master axis motion, yet still “aware” of master position. For example, a move may need to<br />

start at a specified master position, yet finish in a fixed time, independent of the master speed.<br />

This move would be performed with Following disabled (FOLENØ).<br />

Following may be enabled or disabled between moves, as needed, without affecting the<br />

monitoring of the master.<br />

If a move is performed with Following disabled, its motion profile is determined by the<br />

acceleration, deceleration, <strong>and</strong> velocity specified with the A, AD, <strong>and</strong> V comm<strong>and</strong>s. Its motion<br />

is the same as if the axis were not configured as a follower, but the axis does monitor the<br />

master.<br />

If a move is performed with Following enabled, its profile is determined by the specified<br />

master distance (FOLMD) <strong>and</strong> Following ratio (FOLRN/FOLRD). The next section describes<br />

such profiles.<br />

Follower vs. Master Move Profiles<br />

Before an axis begins moving in the Following Mode (FOLEN1), the program should define<br />

how the follower will reach the comm<strong>and</strong>ed ratio. This is accomplished with the FOLRN <strong>and</strong><br />

FOLRD comm<strong>and</strong>s. The acceleration <strong>and</strong> deceleration of the follower can be defined in two<br />

ways: a time-based acceleration ramp with the A <strong>and</strong> AD comm<strong>and</strong>s, or acceleration over a<br />

certain master distance with the FOLMD comm<strong>and</strong>. Specifying an acceleration (A) for the<br />

follower means that the acceleration ramp is time-based <strong>and</strong> there is no position relationship<br />

between master <strong>and</strong> follower until the comm<strong>and</strong>ed Following ratio (defined with FOLRN <strong>and</strong><br />

FOLRD) is reached. Specifying a master distance for the follower's move profile (FOLMD)<br />

ensures a precise position relationship between master <strong>and</strong> follower during all phases of the<br />

profile. Thus, whenever the position relationship between master <strong>and</strong> follower is important, the<br />

FOLMD method should be used. Following Status (TFSF, TFS, <strong>and</strong> FS) bits 1-4 indicate the<br />

status of follower in motion. They mimic the meaning <strong>and</strong> organization of Axis Status (TASF<br />

<strong>and</strong> AS) bits 1-4, except that each bit indicates the current state of the ratio, rather than the<br />

current state of the velocity:<br />

Bit # Function (YES = 1; NO = Ø)<br />

1 Follower in Ratio Move ..... A Following move is in progress<br />

2 Ratio is Negative............... The current ratio is negative (i.e., the follower counts are counting in<br />

the opposite direction from the master counts).<br />

3 Follower Ratio Changing .. The follower is ramping from one ratio to another (including a ramp<br />

to or from zero ratio).<br />

4 Follower At Ratio .............. The follower is at constant non-zero ratio.<br />

Chapter 7. Multi-Tasking 175


Continuous<br />

Positioning Mode<br />

Moves<br />

For Following moves in the continuous positioning mode (MC1), FOLMD specifies the exact<br />

master travel distance over which the follower ratio changes. This will be required for any<br />

application that uses multiple ratios <strong>and</strong> continuous moves for the construction of precisely<br />

defined multi-segment moves.<br />

☞ HINT: If the follower is in continuous mode (MC1) <strong>and</strong> the master is starting from rest,<br />

setting FOLMD to Ø will ensure precise tracking of the master’s acceleration ramp.<br />

In the profile below, the first two moves each change ratio over one master inch, <strong>and</strong> the final<br />

ramp to zero takes place over two master inches.<br />

3<br />

Ratio<br />

2<br />

1<br />

1 2 3 4 5 6 7<br />

Master Travel (inches)<br />

Example<br />

In the sample Gem6K code below, assume the follower has a 1000-line encoder connected to a<br />

2-pitch leadscrew. This gives 8000 follower axis steps per inch. The master is a toothed belt<br />

with a pulley connected to the master encoder, such that there are 800 master steps per inch.<br />

SCALE1<br />

; Enable scaling<br />

SCLD8000<br />

; Set scaling so that follower comm<strong>and</strong>s are in inches<br />

SCLMAS800<br />

; Set scaling so that master comm<strong>and</strong>s are in inches<br />

COMEXC1<br />

; Allow comm<strong>and</strong>s during motion<br />

FOLMAS1<br />

; Define master to be master encoder input<br />

FOLEN1<br />

; Enable Following (will follow master encoder)<br />

FOLMD1<br />

; Follower to change ratio over 1 inch of the master travel<br />

FOLRD1<br />

; Set Following ratio denominator to 1 for subsequent ratios<br />

D+ ; Set direction positive<br />

MC1<br />

; Mode set to continuous clockwise moves<br />

FOLRN1 ; Set Following ratio numerator to 1 (ratio set to 1:1)<br />

FMCNEW1<br />

; Restart master cycle counting<br />

GO1<br />

; Start from rest to reach velocity of master encoder<br />

WAIT(1FS.4=B1) ; (for steppers) Wait until follower is at ratio<br />

FOLRN3 ; Set Following ratio numerator to 3 (ratio set to 3:1)<br />

GOWHEN (1PMAS>=2) ; Enable motion pre-processing so that the next ramp<br />

; begins at master position 2<br />

GO1 ; Follower starts ratio change to 3 to 1 at master position 2<br />

FOLRN0 ; Set Following ratio numerator to zero (ratio is 0 to 1)<br />

FOLMD2<br />

; Follower changes ratio over 2 inches of master travel<br />

WAIT(1AS.26=b0) ; Wait until the previous ramp is started<br />

; (GOWHEN bit in axis status register is cleared)<br />

WAIT(1FS.3=b0) ; Wait until the previous ramp is finished<br />

GOWHEN(1PMAS>=5) ; Enable motion pre-processing so that follower motion<br />

; begins at master position 5<br />

GO1<br />

; Wait for master to reach 5 revolutions before<br />

; follower starts ratio change to 0 (zero)<br />

176 Gem6K Series Programmer’s <strong>Guide</strong>


Preset Positioning<br />

Mode Moves<br />

For preset positioning mode (MCØ) moves, the FOLMD parameter is the master distance over<br />

which the entire follower move is to take place.<br />

As an example, a follower is to move 20 inches over a master distance of 25 inches with a<br />

maximum ratio of 1:1 (ratio set with the FOLRN1 <strong>and</strong> FOLRD1 comm<strong>and</strong>s). The program <strong>and</strong><br />

a diagram of the move profiles are provided below.<br />

FOLMAS1<br />

; Define master to be master encoder<br />

FOLMD25<br />

; Define follower to perform the move over 25 inches<br />

; of the master<br />

MC0<br />

; Set positioning mode to preset<br />

MA0<br />

; Set preset positioning mode to incremental<br />

D20<br />

; Set follower distance to 20 inches<br />

FOLRN1 ; Set Following ratio numerator to 1<br />

FOLRD1 ; Set Following ratio denominator to 1 (ratio is 1:1)<br />

GO1<br />

; Perform the follower move<br />

Ratio<br />

1<br />

Master Profile<br />

Slave Profile<br />

5 10 15 20 25<br />

Master Travel (inches)<br />

If the master distance specified is too large for the follower distance <strong>and</strong> ratio (FOLRN <strong>and</strong><br />

FOLRD) comm<strong>and</strong>ed, the follower will never actually reach the comm<strong>and</strong>ed ratio, <strong>and</strong> the<br />

move profile will look similar to that below. Here, the FOLMD is 25 inches <strong>and</strong> the follower is<br />

comm<strong>and</strong>ed to move 10 inches:<br />

Ratio<br />

1<br />

Master Profile<br />

Slave Profile<br />

5 10 15 20 25<br />

Master Travel (inches)<br />

If the master distance is too small for the follower distance <strong>and</strong> ratio comm<strong>and</strong>ed, the Gem6K<br />

will not perform the move at all. For example, if the FOLMD is 25, the ratio is 1:1, <strong>and</strong> the<br />

follower is comm<strong>and</strong>ed to move 30 inches, the move will not even be attempted. The error<br />

message “INVALID DATA” will be displayed (depending on the ERRLVL setting) <strong>and</strong><br />

program execution will continue.<br />

Chapter 7. Multi-Tasking 177


Performing Phase Shifts<br />

Following Status (TFSF, TFS <strong>and</strong> FS) bits 9-12 indicate the shift status of the follower.<br />

Shifting is super-imposed motion, but if viewed alone, can have its own status. In other words,<br />

bits 10-12 describe only the shifting portion of motion.<br />

Bit # Function (YES = 1; NO = Ø)<br />

9 OK to Shift.......................Conditions are valid to issue shift comm<strong>and</strong>s (FSHFD or FSHFC).<br />

10 Shifting now ....................A shift move is in progress.<br />

11 Shift is Continuous..........An FSHFC-based shift move is in progress.<br />

12 Shift Dir is Neg................The direction of the shift move in progress is negative.<br />

When a follower is following a master continuously, it may be necessary to adjust, or shift, the<br />

Following phase (follower’s position with respect to the master) independent of motion due to<br />

ratio moves. The FSHFC <strong>and</strong> FSHFD comm<strong>and</strong>s allow time-based follower moves to be<br />

superimposed upon ratio Following moves. Because phase shifts are time-based, they are<br />

independent of master motion; in fact, the master may be at rest <strong>and</strong> a shift may still be<br />

performed.<br />

Use the FSHFD comm<strong>and</strong> to perform a preset shift move with a specific change in follower<br />

phase. The FSHFD distance value will be scaled by SCLD if scaling is enabled (SCALE1).<br />

Use the FSHFC comm<strong>and</strong> to superimpose a continuous shift move in the positive (FSHFC1)<br />

or negative (FSHFC2) direction. The FSHFC parameters stop (Ø) <strong>and</strong> kill (3) can be used to<br />

halt a continuous FSHFC move or a preset FSHFD move without affect the ratio motion.<br />

The most recently defined velocity <strong>and</strong> acceleration (i.e., the V <strong>and</strong> A values) for the follower<br />

will determine the basis for the superimposed shift move profile for both FSHFC <strong>and</strong> FSHFD<br />

moves. The comm<strong>and</strong>ed velocity of the FSHFC or FSHFD move will be added to the current<br />

velocity at which the follower is performing the Following move . For example, assume a<br />

follower is traveling at 1 rps in the positive direction as a result of following a master. If a<br />

FSHFC move is comm<strong>and</strong>ed in the positive direction at 2 rps, the follower's actual velocity<br />

(after acceleration) will be 3 rps.<br />

For servos, shifting may be performed whenever Following is enabled (FOLEN1). For steppers,<br />

this may only be done while Following is enabled <strong>and</strong> the follower is either not in a move, or is<br />

in continuous positioning mode (MC1) <strong>and</strong> moving at constant ratio. For both products, TFS/FS<br />

bit 9 indicates when a shift is allowed.<br />

The current follower position (TPSLV value) <strong>and</strong> the net follower shift accumulated since the<br />

most recent FOLEN1 comm<strong>and</strong> (TPSHF value) may be read into numeric variables (VAR)<br />

using the PSLV <strong>and</strong> PSHF comm<strong>and</strong>s, respectively (e.g., VAR6=1PSLV). They may also be<br />

used for subsequent decision making (e.g., IF(1PSHFVAR2), etc.).<br />

The TPSHF <strong>and</strong> PSHF values are set to zero each time the Following mode is enabled<br />

(FOLEN1), even if the follower is already in Following mode. This provides a way of<br />

clearing these values for programming convenience.<br />

Note that the distance traveled during the time-based deceleration due to stop, kill, or limits is<br />

included in the PSHF value. By comparing “before <strong>and</strong> after” values of PSHF, a Gem6K<br />

program may calculate how much shift was required to perform visual- or sensor-based<br />

alignment of a master/follower phase relationship.<br />

178 Gem6K Series Programmer’s <strong>Guide</strong>


Phase Shift<br />

Examples<br />

FSHFC Example<br />

An FSHFC or FSHFD move may be needed to adjust the follower position on the fly because of<br />

a load condition which changes during the continuous Following move. Below are<br />

programming examples to demonstrate both shift methods.<br />

An operator is visually inspecting the follower’s continuous Following motion with respect to<br />

the master. If he notices that the master <strong>and</strong> follower are out of synchronization, it may be<br />

desirable to have an interrupt programmed (e.g., activated by pressing a push-button switch)<br />

that will allow the operator to move the follower at a superimposed correction speed until the<br />

operator chooses to have the follower start tracking the master again (by releasing the pushbutton).<br />

The programming example below illustrates this.<br />

Assume all scale factors <strong>and</strong> set-up parameters have been entered for the master <strong>and</strong> follower.<br />

In this example, the follower is continually following the master at a 1:1 ratio. If the operator<br />

notices some mis-alignment between master <strong>and</strong> follower, he can press 1 of 2 pushbuttons<br />

(connected to onboard trigger inputs #1 <strong>and</strong> #2) to shift the follower in the positive or<br />

negative direction until the button is released. After the adjustment, the program continues on<br />

as before.<br />

DEL SHIFT ; Delete program before defining<br />

DEF SHIFT ; Begin definition of program called SHIFT<br />

COMEXS1<br />

; Continue comm<strong>and</strong> execution after stop<br />

COMEXC1<br />

; Continue comm<strong>and</strong> execution during motion<br />

FOLMAS1<br />

; Master encoder is the master<br />

FOLRN1 ; Set follower-to-master Following ratio numerator to 1<br />

FOLRD1 ; Set follower-to-master Following ratio denominator to 1<br />

; (ratio set to 1:1)<br />

FOLEN1<br />

; Enable Following mode<br />

A25<br />

; Set acceleration<br />

AD18<br />

; Set deceleration<br />

V5<br />

; Set velocity<br />

D+ ; Set direction to positive<br />

MC1<br />

; Select continuous positioning mode<br />

GO1<br />

; Start following master continuously<br />

VARB1=b10 ; Define onboard input pattern #1 <strong>and</strong> assign to VARB<br />

VARB2=b01 ; Define onboard input pattern #2 <strong>and</strong> assign to VARB<br />

$TESTIN<br />

; Define label called TESTIN<br />

IF(IN=VARB1) ; IF statement (if input #1 is activated, do the jump)<br />

JUMP SHIFTP ; Jump to shift follower in the positive direction<br />

; when pattern 1 active<br />

NIF<br />

; End of IF statement<br />

IF(IN=VARB2) ; IF statement (if input #2 is activated, do the jump)<br />

JUMP SHIFTN ; Jump to shift follower in the negative direction<br />

; when pattern 2 active<br />

NIF<br />

; End of IF statement<br />

JUMP TESTIN ; Return to main program loop<br />

$SHIFTP<br />

; Define label called SHIFTP (subroutine to shift in<br />

; the positive direction)<br />

FSHFC1<br />

; Start continuous follower shift in positive direction<br />

WAIT(IN.1=B0) ; Continue shift until input bit #1 is deactivated<br />

FSHFC0<br />

; Stop shift move<br />

WAIT(1FS.10=B0) ; (steppers only) Wait until the shift is completed<br />

JUMP TESTIN ; Return to main program loop<br />

$SHIFTN<br />

; Define label called SHIFTN (subroutine to shift<br />

; in the negative direction)<br />

FSHFC2<br />

; Start continuous follower shift move in the<br />

; negative direction<br />

WAIT(IN.2=B0) ; Continue shift until bit #2 is deactivated<br />

FSHFC0<br />

; Stop shift move<br />

WAIT(1FS.10=B0) ; (steppers only) Wait until the shift is completed<br />

JUMP TESTIN ; Return to main program loop<br />

END<br />

; End definition of program called SHIFT<br />

Chapter 7. Multi-Tasking 179


FSHFD Example<br />

In this example, the follower follows a master that moves in a continuous cycle. Once each<br />

cycle, the master <strong>and</strong> follower both pick parts. The master’s part is detected by a sensor<br />

connected to trigger 1B, <strong>and</strong> the follower’s part is detected by a sensor connected to trigger 1A.<br />

After both parts are detected, they must be aligned. The sensors are mounted 2 inches apart<br />

from each other, so that proper alignment would result in 2 inches of follower travel between<br />

detection of the master's part <strong>and</strong> detection of the follower’s part.<br />

The follower position is sampled when each of the sensors activates. The difference between<br />

the follower positions is compared to the required 2 inches. If the measured difference is<br />

greater than or less than 2 inches, then a shift move to correct the alignment is made. At that<br />

point, the follower will then start tracking the master again. The follower is continually<br />

following the master at a 1:1 ratio.<br />

DEL ALIGN<br />

; Delete program before defining<br />

DEF ALIGN<br />

; Begin definition of program called ALIGN<br />

COMEXC1<br />

; Allow continuous comm<strong>and</strong> execution during motion<br />

FOLMAS1<br />

; The master encoder input is the master<br />

FOLRN1 ; Set follower-to-master ratio numerator to 1<br />

FOLRD1 ; Set follower-to-master ratio denominator to 1<br />

; (ratio set to 1:1)<br />

FOLEN1<br />

; Enable Following mode<br />

MC1<br />

; Enable continuous positioning mode<br />

D+ ; Set direction to positive<br />

GO1<br />

; Start Following master continually<br />

INFNC1-H<br />

; Enable trigger input 1A to latch position of follower<br />

; when the follower's part is detected<br />

INFNC2-H<br />

; Enable trigger input 1B to latch position of follower<br />

; when the master's part is detected<br />

$SYNCLP<br />

; Main loop where synchronizing moves occur<br />

WAIT(TRIG.1=b1 AND TRIG.2=b1)<br />

; Wait for both follower <strong>and</strong> master inputs to occur<br />

VAR10=1PCCA ; Load VAR10 with the follower comm<strong>and</strong>ed position due<br />

; to follower input activation<br />

VAR11=1PCCB ; Load VAR11 with the follower comm<strong>and</strong>ed position due<br />

; to master input activation<br />

VAR12=VAR10-VAR11 ; Load VAR12 with the offset distance<br />

VAR13=VAR12-2 ; Calculate the required shift<br />

FSHFD(VAR13) ; Perform synchronization move of distance in VAR13<br />

JUMP SYNCLP ; Return (jump) to main program loop<br />

END<br />

; End of program<br />

Geared Advance Following<br />

The FGADV comm<strong>and</strong> provides the ability to super-impose an advance or retard on Following<br />

motion. This is the same ability provided by the FSHFD comm<strong>and</strong> (see Performing Phase<br />

Shifts above), except that the super-imposed motion is also geared to master motion. The<br />

FGADV comm<strong>and</strong> has the positive or negative “advance” distance as a parameter, but it<br />

initiates motion instead of simply setting up the distance. The shape of the super-imposed<br />

profile is determined by the FOLMD, FOLRN, <strong>and</strong> FOLRD comm<strong>and</strong>s (just as a normal preset<br />

Following move).<br />

The FGADV comm<strong>and</strong> profile may be delayed with the GOWHEN comm<strong>and</strong>.<br />

A FGADV move may be performed only while the conditions below exist (Following status bit<br />

#23, reported with the FS, TFS, <strong>and</strong> TFSF comm<strong>and</strong>s, indicates that it is “OK to do FGADV<br />

move”):<br />

• Master is specified with a FOLMAS comm<strong>and</strong><br />

• Following is enabled with the FOLEN comm<strong>and</strong><br />

• The follower is either not moving, or moving at constant ratio in continuous mode<br />

(MC1)<br />

180 Gem6K Series Programmer’s <strong>Guide</strong>


A FGADV move may not be performed:<br />

• During a preset (MC0) move<br />

• In a compiled profile or program<br />

Following Status (FS, TFS, <strong>and</strong> TFSF) bit #24 reports if a “FGADV move is underway”.<br />

Example COMEXC1 ; All comm<strong>and</strong> processing during motion<br />

FOLRN25 ; Set numerator of follower-to-master Following ratio<br />

FOLRD10 ; Set denominator of follower-to-master Following ratio<br />

FOLMD1000 ; Set master distance to 1000 units<br />

MC1<br />

; Enable continuous positioning mode<br />

D+ ; Set direction to positive<br />

FOLEN1<br />

; Enable Following<br />

GO<br />

; Ramp up to a 2.5:1 ratio over 1000 master distance units<br />

FOLMD500 ; Set master distance to 500 units<br />

FOLRN13 ; Superimposed ratio will be 1.3 (added to 2.5 = 3.8 total)<br />

WAIT(FS.23=B1) ; Wait for OK to do geared advance<br />

; (in this case, ramp is complete)<br />

FGAVD400 ; Advance the follower 400 counts over a distance<br />

; of 500 master counts<br />

WAIT (FS.23=B1) ; Wait for OK to do geared advance (in this case,<br />

; FGADV400 super-imposed profile is complete)<br />

FGADV-400 ; Retard the follower 400 counts over a distance of<br />

; 500 master counts (2.5 - 1.3 = 1.2 net ratio)<br />

Summary of Ratio Following Comm<strong>and</strong>s<br />

ANIMAS............................ Assigns an analog input to be used as a master in a FOLMAS assignment<br />

(requires a ANI SIM located on an expansion I/O brick)<br />

FGADV .............................. Defines the geared advance distance<br />

FOLEN .............................. Enables or disables Following mode<br />

FOLMAS............................ Defines masters<br />

FOLMD .............................. Defines the master distance over which follower acceleration or moves are<br />

to take place<br />

FOLRN <strong>and</strong> FOLRD............. Establishes the maximum follower-to-master ratio for a preset move or the<br />

final ratio for a continuous move (FOLRN for the numerator <strong>and</strong> FOLRD for<br />

the denominator)<br />

FSHFD .............................. Initiates preset advance or retard (shift) of follower position during<br />

continuous Following moves<br />

FSHFC .............................. Initiates continuous advance or retard (shift) of follower position (or kills or<br />

stops the shift portion of motion) during continuous Following moves<br />

FVMACC............................ Establishes the rate at which the virtual master count frequency (FVMFRQ)<br />

may change.<br />

FVMFRQ............................ Defines the frequency of the virtual master count.<br />

SCLD ................................ Sets the follower distance scale factor<br />

SCLMAS............................ Sets the master distance scale factor<br />

SINAMP............................ Defines the amplitude of the internal sine wave<br />

SINANG............................ Defines the phase angle of the internal sine wave<br />

SINGO .............................. Initiates the internal sine wave<br />

TPSHF or [ PSHF ]........... Transfers or assigns the net position shift since constant ratio<br />

TPSLV or [ PSLV ]........... Transfers or assigns the current follower position<br />

TVMAS or [ VMAS ]........... Transfers or assigns the velocity of the master<br />

Chapter 7. Multi-Tasking 181


Master Cycle Concept<br />

Ratio Following can also address applications that require precise programming<br />

synchronization between moves <strong>and</strong> I/O control based on master positions or external<br />

conditions. The concept of the master cycle greatly simplifies the required synchronization.<br />

A master cycle is simply an amount of master travel over which one or more related follower<br />

axis events take place. The distance traveled by the master in a master cycle is called the<br />

master cycle length. A master cycle position is the master position relative to the start of the<br />

current master cycle. The value of master cycle position increases as positive-direction<br />

master cycle counts are received, until it reaches the value specified for master cycle length.<br />

At that point, the master cycle position becomes zero, <strong>and</strong> the master cycle number is<br />

incremented by one—this condition is called rollover.<br />

The master cycle concept is analogous to minutes <strong>and</strong> hours on a clock. If the master cycle is<br />

considered an hour, then the master cycle length is 60 minutes. The number of minutes past<br />

the hour is the master cycle position, <strong>and</strong> current hour is the master cycle number. In this<br />

analogy, the master cycle position decrements from 59 to zero as the hour increases by one.<br />

By specifying a master cycle length, periodic actions may be programmed in a loop or with<br />

subroutines which refer to cycle positions, even though the master may be running<br />

continuously. To accommodate applications where the feed of the product is r<strong>and</strong>om, the start<br />

of the master cycle may be defined with trigger inputs. Two types of waits are also<br />

programmable to allow suspension of program operation or follower moves based on master<br />

positions or external conditions.<br />

Master Cycle Comm<strong>and</strong>s<br />

Following Status (TFSF, TFS <strong>and</strong> FS) bits 13-16 indicate the status of master cycle counting.<br />

If a following application is taking advantage of master cycle counting, these bits provide a<br />

quick summary of some important master cycle information:<br />

Bit # Function (YES = 1; NO = Ø)<br />

13 Master Cyc Trig Pend .....A master cycle restart pending the occurrence of the specified trigger.<br />

14 Mas Cyc Len Given.........A non-zero master cycle length has been specified with FMCLEN.<br />

15 Master Cyc Pos Neg.......The current master cycle position (PMAS) is negative. This could be<br />

by caused by a negative initial master cycle position (FMCP), or if the<br />

master is moving in the negative direction.<br />

16 Master Cyc Num > 0 .......The master position (PMAS) has exceeded the master cycle length<br />

(FMCLEN) at least once, causing the master cycle number (NMCY) to<br />

increment.<br />

Master Cycle Length<br />

(FMCLEN);<br />

The FMCLEN comm<strong>and</strong> is used to define the length of the master cycle. The value entered<br />

with this comm<strong>and</strong> is scaled by the SCLMAS parameter to allow specification of the master<br />

cycle length in user units. This parameter must be defined before those comm<strong>and</strong>s which wait<br />

for periodically repeating master positions are executed.<br />

The default value of FMCLEN is zero, which means the master cycle length is practically<br />

infinite (i.e., 4,294,967,246 steps, after scaling). If a value of zero is chosen, the master cycle<br />

position will keep increasing until this very high value is exceeded or a new cycle is defined<br />

with the FMCNEW comm<strong>and</strong> (or triggered after a TRGFNcx1 comm<strong>and</strong>) described below. If a<br />

non-zero value for FMCLEN is chosen, the internally maintained master cycle position will<br />

keep increasing until it reaches the value of FMCLEN. At this point, it immediately rolls over<br />

to zero <strong>and</strong> continues to count.<br />

The master cycle length may be changed with the FMCLEN comm<strong>and</strong> even after a master cycle<br />

has been started. The new master cycle length takes affect as soon as it is issued. If the new<br />

master cycle length is greater than the current master cycle position, the cycle position will not<br />

change, but will rollover when the new master cycle length is reached. If the new master<br />

182 Gem6K Series Programmer’s <strong>Guide</strong>


Example<br />

Code<br />

cycle length is less than the current master cycle position, the new master cycle position<br />

becomes equal to the old cycle position minus one or more multiples of the new cycle length.<br />

FMCLEN23<br />

; Set master cycle length:<br />

; (axis 1: 23 units<br />

Restart Master Cycle<br />

Counting (FMCNEW or<br />

TRGFNcx1xxxxxx);<br />

Once the length of the master cycle has been specified with the FMCLEN comm<strong>and</strong>, master<br />

cycle counting may be restarted immediately with the FMCNEW comm<strong>and</strong>, or based on<br />

activating a trigger input as specified with the TRGFNcx1 comm<strong>and</strong>. The new master cycle<br />

count is started at an initial position specified with the FMCP comm<strong>and</strong> (see below).<br />

When the TRGFNcx1 comm<strong>and</strong> is used, the restart of master cycle counting is pending<br />

activation of the specified trigger. If an FMCNEW comm<strong>and</strong> is issued while waiting for the<br />

specified trigger to activate, counting is restarted immediately with the FMCNEW comm<strong>and</strong>,<br />

<strong>and</strong> the TRGFNcx1 comm<strong>and</strong> is canceled.<br />

When using TRGFNcx1<br />

• Before the TRGFN comm<strong>and</strong> can be used, you must first assign the trigger interrupt function<br />

to the specified trigger input with the INFNCi-H comm<strong>and</strong>, where “i” is the input number of<br />

the trigger input desired for the function (input bit assignments vary by product).<br />

• Because the Gem6K program will not wait for the trigger to occur before continuing on with<br />

normal program execution, a WAIT or GOWHEN condition based on PMAS will not evaluate<br />

true if the restart of master cycle counting is pending the activation of a trigger. To halt<br />

program operation, the WAIT comm<strong>and</strong> can be used.<br />

A new master cycle will restart automatically when the total master cycle length (FMCLEN value)<br />

is reached. This is useful in continuous feed applications.<br />

Example<br />

Code<br />

FMCNEW1<br />

INFNC2-H<br />

1TRGFNBx1<br />

; Restart new master cycle counting<br />

; Assign input #2 (TRG-1B) the trigger interrupt<br />

; function (prerequisite to using the TRGFN features)<br />

; When trigger input 2 (TRG-1B) goes active,<br />

Initial Master Cycle<br />

Position (FMCP);<br />

The FMCP comm<strong>and</strong> allows you to assign for the first cycle only, an initial master cycle<br />

position to be a value other than zero. When master cycle counting is restarted with the<br />

FMCNEW comm<strong>and</strong> or with the trigger specified in the TRGFNcx1 comm<strong>and</strong>, the master cycle<br />

position takes the initial value previously specified with the FMCP comm<strong>and</strong>. The value for<br />

FMCP is scaled by SCLMAS if scaling is enabled (SCALE1)<br />

FMCP was designed to accommodate situations in which the trigger that restarts master cycle<br />

counting occurs either before the desired cycle start, or somewhere in the middle of what is to<br />

be the first cycle. In the former case, the FMCP value must be negative. The master cycle<br />

position is initialized with that value, <strong>and</strong> will increase right through zero until it reaches the<br />

master cycle length (FMCLEN). At that point, it will roll over to zero as usual.<br />

The continuous cut-to-length example below illustrates the use of a negative FMCP (a trigger<br />

that senses the motion of the master is physically offset from the master position at which<br />

some action must take place). If it is desired that the first cycle is defined as already partially<br />

complete when master cycle counting is restarted, the FMCP value must be greater than zero,<br />

but less than the master cycle length.<br />

To give a value for FMCP which is greater than master cycle length is meaningless since<br />

master cycle positions are always less than the master cycle length. The Gem6K responds to<br />

this case as soon as a new master cycle counting begins by using zero instead of the initial<br />

value specified with FMCP.<br />

Chapter 7. Multi-Tasking 183


Transfer <strong>and</strong><br />

Assignment/<br />

Comparison of Master<br />

Cycle Position <strong>and</strong><br />

Number;<br />

The current master cycle position <strong>and</strong> the current master cycle number may be displayed with<br />

the TPMAS <strong>and</strong> TNMCY comm<strong>and</strong>s, respectively. These values may also be read into numeric<br />

variables (VAR) at any time using the PMAS <strong>and</strong> NMCY comm<strong>and</strong>s (e.g., VAR6=NMCY). If<br />

position capture is used, the master cycle position <strong>and</strong> be captured, <strong>and</strong> the value is available<br />

with the TPCMS <strong>and</strong> PCMS comm<strong>and</strong>s.<br />

Very often, the master cycle number will be directly related to the quantity of product produced<br />

in a manufacturing run, <strong>and</strong> the master cycle position can be used to determine what portion of<br />

a current cycle is complete.<br />

The master cycle number is sampled once per position sampling period (see note, left). If the<br />

master cycle length (FMCLEN) divided by the master's velocity (VMAS) is less than the<br />

position sampling period (2 ms), then the sample (TNMCY or NMCY value) may not be<br />

accurate.<br />

Details on using PMAS in conditional expressions is provided below in Using Conditional<br />

Statements with PMAS.<br />

Using Conditional<br />

Statements with<br />

Master Cycle Position<br />

(PMAS);<br />

The current master cycle position (PMAS) value may be used in comparison expressions, just<br />

like other position variables such as PC, PE, <strong>and</strong> FB. PMAS is a special case, however, because<br />

its value rolls over to zero when the master cycle length (FMCLEN) is met or exceeded. This<br />

means that PMAS values greater than or equal to the master cycle length will never be reported<br />

with the TPMAS comm<strong>and</strong>, or with expressions such as (VAR1=1PMAS).<br />

The other fact that makes PMAS special is that master cycle counting may be restarted after<br />

the comm<strong>and</strong> containing the PMAS expression has been executed. Either the FMCNEW<br />

comm<strong>and</strong> or the TRGFNcx1 comm<strong>and</strong> may be used to restart counting, each with a different<br />

effect on the evaluation of PMAS.<br />

The treatment of PMAS in comparison expressions depends on the comm<strong>and</strong> using the<br />

expression, as described below. WAIT <strong>and</strong> GOWHEN are treated as special cases.<br />

IF, UNTIL, <strong>and</strong><br />

WHILE<br />

WAIT <strong>and</strong> GOWHEN<br />

These comm<strong>and</strong>s evaluate the current value of PMAS in the same way that TPMAS does (i.e.,<br />

PMAS values will never be greater than or equal to the master cycle length). With these<br />

comm<strong>and</strong>s, avoid comparing PMAS to be greater than or equal to variables or constants which<br />

are nearly equal to the master cycle length, because rollover may occur before a PMAS sample<br />

is read which makes the comparison true. If such a comparison is necessary, it should be<br />

combined (using OR) with a comparison for master cycle number (NMCY) being greater than<br />

the current master cycle number.<br />

Also, master cycle counting restart may be pending activation of a trigger, but this will not<br />

affect the evaluation of PMAS for IF, WAIT, <strong>and</strong> WHILE. It is simply evaluated based on<br />

counting currently underway.<br />

These comm<strong>and</strong>s evaluate the current value of PMAS differently than TPMAS does, in such a<br />

way that it is possible to compare PMAS to variables or constants which are greater than or<br />

equal to the master cycle length <strong>and</strong> still have the comparison be reliably detected.<br />

Effectively, PMAS is evaluated as if the master cycle length were suddenly set to its maximum<br />

value (2 32 ) at the time the WAIT or GOWHEN comm<strong>and</strong> is encountered. It eliminates the need to<br />

OR the PMAS comparison with a comparison for master cycle number (NMCY) being greater than<br />

the current master cycle number. Such multiple expressions are not allowed in the GOWHEN<br />

comm<strong>and</strong>, so this alternative evaluation of PMAS offers the required flexibility.<br />

This method of evaluation of PMAS allows comm<strong>and</strong>s which sequence follower axis events<br />

through a master cycle to be placed in a loop. The WAIT or GOWHEN comm<strong>and</strong> at the top of<br />

the loop can execute, even though the actual master travel has not finished the previous cycle.<br />

If it is desired to WAIT or GOWHEN for a master cycle position of the next master cycle, the<br />

variable or constant specified in the comm<strong>and</strong> should be calculated by adding one master<br />

cycle length to the desired master cycle position.<br />

184 Gem6K Series Programmer’s <strong>Guide</strong>


Finally, master cycle counting restart may be pending activation of a trigger (TRGFNcx1),<br />

<strong>and</strong> this will suspend the evaluation of PMAS for these comm<strong>and</strong>s. PMAS is not sampled, <strong>and</strong><br />

the comparison evaluates as false. During this time, if the pending status of master cycle<br />

counting restart is aborted with FMCNEWØ, the GOWHEN condition is also cleared, <strong>and</strong> any<br />

motion profile of any axis waiting on that PMAS comparison will be canceled. Otherwise,<br />

when master cycle counting is restarted by a trigger, evaluation takes place as described<br />

above. This allows GOWHEN to include waiting on a trigger without explicitly including it in<br />

the GOWHEN expression.<br />

Synchronizing<br />

Following Moves with<br />

Master Positions<br />

A final special case allows perfect synchronization between the start of a Following motion<br />

profile of a follower axis <strong>and</strong> a specified position of its master. If a GOWHEN(1PMAS >= x)<br />

expression is used to synchronize a follower with its own master, with the operator specifically<br />

“>=”, a special synchronization occurs. Although it may be impossible for the Gem6K product<br />

to sample the exact master position specified, the Following motion profile is calculated from<br />

master travel based on that position. This allows for the construction of profiles in which the<br />

synchronization of master <strong>and</strong> follower positions is well defined <strong>and</strong> precisely maintained.<br />

This feature requires positive travel of the master, which can be achieved with the appropriate<br />

sign for the FOLMAS specification.<br />

Summary of Master Cycle <strong>and</strong> Wait Comm<strong>and</strong>s<br />

FMCLEN................................ Defines the length of the master cycle<br />

FMCNEW................................ Immediately restart master cycle counting<br />

FMCP .................................... Defines the initial position of a new master cycle<br />

GOWHEN................................ GOWHEN suspends execution of the next move on the specified axis until<br />

the specified conditional statement (based on T, IN, LIM, FB, NMCY, PC,<br />

PE, PMAS, PSLV, or PSHF) is true<br />

TNMCY or [ NMCY ].............. Transfers or assigns the current master cycle number<br />

TPCMS or [ PCMS ]............... Transfers or assigns the captured master cycle position<br />

TPMAS or [ PMAS ].............. Transfers or assigns the current master cycle position<br />

TRGFN.................................. aTRGFNc1x initiates a GOWHEN, suspending execution of the next<br />

follower move on axis (a) until the specified trigger input (c) goes active.<br />

aTRGFNcx1 causes master cycle counting to restart when the specified<br />

trigger input (c) goes active.<br />

WAIT .................................... WAIT suspends program execution until the specified conditional<br />

statement (based on PMAS, FS, NMCY, PCMS, PSHF, PSLV, or VMAS) is<br />

true;<br />

WAIT(SS.i=b1) suspends program execution until a trigger input is<br />

activated. The “i” is the programmable input bit number corresponding<br />

to the trigger input. (Input bit assignments vary by product; refer to the<br />

Programmable I/O Bit Patterns table on page 91 to determine the<br />

correct bit pattern for your product.)<br />

AS <strong>and</strong> TAS bit #26............... AS <strong>and</strong> TAS (<strong>and</strong> TASF) bit #26 is set when there is a profile suspended<br />

pending GOWHEN condition, initiated either by a GOWHEN comm<strong>and</strong> or a<br />

TRGFNc1 comm<strong>and</strong>; this bit is cleared when the GOWHEN condition is<br />

true or when a stop or kill comm<strong>and</strong> is issued.<br />

ER <strong>and</strong> TER bit #14............... ER, TER, <strong>and</strong> TERF bit #14 is set if the GOWHEN condition is already true<br />

when the GO, GOL, FGADV, FSHFC, or FSHFD comm<strong>and</strong> is given (ERROR<br />

bit #14 must first be enabled to check for this condition)<br />

NOTE<br />

The continuous cut-to-length application example below illustrates the use of the master<br />

cycle concept <strong>and</strong> the comm<strong>and</strong>s above.<br />

Chapter 7. Multi-Tasking 185


Technical Considerations for Following<br />

Keep in mind that<br />

in all cases, the<br />

follower position is<br />

calculated from a<br />

sampled master<br />

position.<br />

In the introduction to Following (see page 168), the algorithm for Gem6K Following was<br />

briefly discussed. Here we will address some of the more technical aspects of Following:<br />

• Performance<br />

• Master Position Prediction<br />

• Master Position Filtering<br />

• Following error<br />

• Maximum acceleration <strong>and</strong> velocity (stepper axes only)<br />

• Factors affecting Following accuracy<br />

• Preset vs. Continuous Following moves<br />

• Master <strong>and</strong> follower axis distance calculations<br />

• Using other features with Following<br />

Performance Considerations<br />

When a follower axis is following a master, the Gem6K does not simply measure the master<br />

velocity to derive follower axis velocity. Instead, the Gem6K samples the master position<br />

(position sampling period = 2 ms) <strong>and</strong> calculates the corresponding follower axis position<br />

comm<strong>and</strong>. This is true even if the follower axis is in the process of changing ratios. A follower<br />

axis is not simply following velocity, but rather position. With this algorithm, the master <strong>and</strong><br />

follower position or phase relationship is maintained indefinitely, without any drift over time due<br />

to velocity measurement errors.<br />

The Gem6K also measures master velocity by measuring the change in master position over a<br />

number of sample periods. The present master velocity <strong>and</strong> position may be used to calculate<br />

the next comm<strong>and</strong>ed follower position, so the follower has no velocity-dependent phase<br />

delay. This concept is known as Master Position Prediction <strong>and</strong> may be enabled or disabled<br />

as needed with the FPPEN comm<strong>and</strong>.<br />

The Gem6K's default Following algorithm should work well for most applications; however,<br />

you can change the Following algorithm to meet application-specific needs. For instance,<br />

suppose that the speed of the master is very slow, or has some vibration. For a case like this,<br />

the Gem6K allows you to filter the master position signal to generate a smooth follower<br />

position comm<strong>and</strong>. This is known as Master Position Filtering <strong>and</strong> is programmed with the<br />

FFILT comm<strong>and</strong>.<br />

186 Gem6K Series Programmer’s <strong>Guide</strong>


Master Position Prediction<br />

Master Position Prediction is a technique used to compensate for the fact a follower's position<br />

comm<strong>and</strong> cannot be calculated <strong>and</strong> implemented infinitely fast.<br />

The master position prediction mode is enabled by default (FPPEN1) in the Following<br />

algorithm, but can be turned off as desired with the FPPENØ comm<strong>and</strong>.<br />

The Gem6K measures master position once per position sampling period (2 ms), <strong>and</strong><br />

calculates a corresponding follower position comm<strong>and</strong>. This calculation <strong>and</strong> achieving the<br />

subsequent follower comm<strong>and</strong>ed position requires 2 sample periods (4 ms).<br />

If master position prediction mode is disabled (FPPENØ), waiting 2 sample periods results in<br />

a follower position lag. That is, by the time the follower reaches the position that corresponds<br />

to the sampled master position, 2 sample periods have gone by, <strong>and</strong> the master may be at a<br />

new position. Measured in time, the lag is 2 sample periods. Measured in position, the lag is<br />

2 sample periods ∗ current follower velocity.<br />

For example, suppose the follower is traveling at a speed of 25000 counts per second. If<br />

master position prediction mode is disabled (FPPENØ), the follower will lag the master by<br />

100 counts (25000 counts/sec ∗ 4 ms = 100 counts).<br />

By measuring the change in master position over sequential sample periods, the master's<br />

present velocity is calculated. The present master velocity <strong>and</strong> position are used to predict<br />

future master position. If master position prediction mode is enabled (FPPEN1, the predicted<br />

future master position is used to determine the follower's position comm<strong>and</strong>. In this case the<br />

follower has no velocity-dependent phase delay. The follower's velocity for a given sample<br />

will always be the velocity required to move from its current position to the next calculated<br />

position comm<strong>and</strong>.<br />

If the master motion is fairly smooth <strong>and</strong> velocity is not very slow, the measurement of its recent<br />

velocity will be very accurate, <strong>and</strong> a good way of predicting future position. But the master<br />

motion may be rough, or the measurements may be inaccurate if there is no filtering (see Master<br />

Position Filtering below). In this case, the predicted master position <strong>and</strong> the corresponding<br />

follower position comm<strong>and</strong> will have some error, which may vary in sign <strong>and</strong> magnitude from<br />

one sample to the next. This r<strong>and</strong>om variation in follower position comm<strong>and</strong> error results in<br />

rough motion. The problem is particularly pronounced if there is vibration on the master.<br />

It may be desirable to disable the master position prediction mode (FPPENØ) when maximum<br />

follower smoothness is important <strong>and</strong> minor phase delays can be accommodated.<br />

If master filtering is enabled (FFILT_Ø), then the prediction algorithm would be used on the<br />

filtered master position, resulting in a smoother follower position comm<strong>and</strong>. However, due to<br />

the delay introduced by the filtering, the prediction algorithm would not compensate for the<br />

total delay in the follower's tracking comm<strong>and</strong>. (See also Master Position Filtering below.)<br />

Following Status (TFSF, TFS, <strong>and</strong> FS) bit 17 indicates the status of where or not the master<br />

position prediction mode is enabled.<br />

Master Position Filtering<br />

The follower axis' position comm<strong>and</strong> is calculated at each position sample period (2 ms). This<br />

calculation is a function of the master position <strong>and</strong> the master velocity estimated from the<br />

change in master position over 2 position sample periods.<br />

The Master Position Filter feature allows you to apply a low-pass filter to the measurement of<br />

master position. Master position filtering is used in these situations:<br />

• Measurement of master position is contaminated by either electrical noise (when analog<br />

input is the master) or mechanical vibration.<br />

• Measurement noise is minimal, but the motion that occurs on the master input is<br />

oscillatory. In this case, using the filter can prevent the oscillatory signal from<br />

propagating into the follower axis (i.e., ensuring smoother motion on the follower axis).<br />

Chapter 7. Multi-Tasking 187


The b<strong>and</strong>width of the low-pass filter is controlled with the FFILT comm<strong>and</strong>:<br />

FFILT Setting<br />

Low pass Filter B<strong>and</strong>width<br />

Ø infinite (no filtering) – default setting<br />

1 120 Hz<br />

2 80 Hz<br />

3 50 Hz<br />

4 20 Hz<br />

When considering whether or how much master position filtering to use, consider the<br />

application requirement itself. The application requirements related to filtering can be<br />

categorized into these three types:<br />

Type I:<br />

Type II:<br />

Type III:<br />

If an application requires smooth motion but also high follower tracking accuracy,<br />

then a heavy filtering should not be used. It should not be used because it may<br />

introduce too much velocity phase lag, although the motion may be smooth. In<br />

other words, the master axis in the first place should produce very smooth motion<br />

<strong>and</strong> low sensor measurement noise such that a higher level of master filtering is<br />

not needed.<br />

If follower axis velocity tracking error is not critical but smooth follower axis<br />

motion is desired, then you can use a higher level of master filtering to deal with<br />

sensor noise or master vibration problems.<br />

If it is determined that under certain dynamic conditions the master position's<br />

oscillatory measurement is purely caused by its vibration motion (noise is<br />

insignificant), <strong>and</strong> it is necessary for the follower to follow such motion, then the<br />

filter comm<strong>and</strong> should not be used or only use the highest b<strong>and</strong>width (FFILT1).<br />

Following Status (TFSF, TFS, <strong>and</strong> FS) bit 18 indicates the status of master position filtering.<br />

Following Error<br />

As soon as an axis becomes configured as a follower, the follower's position comm<strong>and</strong> is<br />

continuously updated <strong>and</strong> maintained. At each update, the position comm<strong>and</strong> is calculated<br />

from the current master position <strong>and</strong> velocity, <strong>and</strong> the current ratio or velocity of the follower.<br />

Whenever the comm<strong>and</strong>ed position is not equal to the actual follower position, a Following<br />

error exists. This error, if any, may be positive or negative, depending on both the reason for<br />

the error <strong>and</strong> the direction of follower travel. Following error is defined as the difference<br />

between the comm<strong>and</strong>ed position <strong>and</strong> the actual position.<br />

Following Error = Comm<strong>and</strong>ed position - Actual position<br />

If the follower is traveling in the positive direction <strong>and</strong> the actual position lags the<br />

comm<strong>and</strong>ed position, the error will be positive. If the follower is traveling in the negative<br />

direction <strong>and</strong> the actual position lags the comm<strong>and</strong>ed position, the error will be negative. This<br />

error is always monitored, <strong>and</strong> may be read into a numeric variable (VAR) at any time using<br />

the PER comm<strong>and</strong>. The error value in follower steps is scaled by SCLD for the axis. This<br />

value may be used for subsequent decision making, or simply storing the error corresponding<br />

to some other event.<br />

188 Gem6K Series Programmer’s <strong>Guide</strong>


Maximum Velocity <strong>and</strong> Acceleration<br />

(Stepper Axes Only)<br />

The follower's attempt to faithfully follow the master may comm<strong>and</strong> velocities <strong>and</strong><br />

accelerations that the follower axis is physically not able to complete. Therefore, the FMAXV<br />

<strong>and</strong> FMAXA comm<strong>and</strong>s are provided to set the maximum velocity <strong>and</strong> acceleration at which<br />

the follower will be allowed to move.<br />

If the follower is comm<strong>and</strong>ed to move at rates beyond the defined maximums, the follower<br />

will begin falling behind it's comm<strong>and</strong>ed position. If this happens, a correction velocity will<br />

be applied to correct the position error as soon as the comm<strong>and</strong>ed velocity <strong>and</strong> acceleration<br />

fall within the limitation of FMAXV <strong>and</strong> FMAXA.<br />

The FMAXA <strong>and</strong> FMAXV comm<strong>and</strong>s should be used only to protect against worst case<br />

conditions, <strong>and</strong> should be avoided altogether if they are not needed. If an axis is not able to<br />

follow its profile because of limitations imposed by these comm<strong>and</strong>s, some correction motion<br />

will occur. If the maximum acceleration (FMAXA value) is set very low, some oscillation<br />

about the comm<strong>and</strong>ed position may occur because the follower is not allowed to decelerate<br />

fast enough to prevent overshoot.<br />

Factors Affecting Following Accuracy<br />

There are additional accuracy requirements of Following applications beyond those of<br />

st<strong>and</strong>ard positioning. The follower axis must maintain positioning accuracy while in motion,<br />

not just at the end of moves, because it is trying to stay synchronized with the master.<br />

Assuming parameters such as master <strong>and</strong> follower scaling <strong>and</strong> ratios have been specified<br />

correctly, the overall positioning accuracy for an application depends on several factors:<br />

• Resolution of the master<br />

• Resolution of the follower axis<br />

• Position sampling accuracy<br />

• Accuracy of the follower axis motor <strong>and</strong> drive<br />

• Accuracy of load mechanics<br />

• Master position prediction<br />

• Master velocity relative to master position prediction & master position filtering<br />

• Tuning (servo axes only)<br />

• Repeatability of the trigger inputs <strong>and</strong> sensors<br />

Just as with a mechanical arrangement, the accuracy errors can build up with every link from<br />

the beginning to the end. The overall worst case accuracy error will be the sum of all the<br />

sources of error listed below. The errors fall into two broad categories, namely, master<br />

measurement errors <strong>and</strong> follower errors. These both ultimately affect follower accuracy,<br />

because the comm<strong>and</strong>ed follower position is based on the measured master position.<br />

It is important to underst<strong>and</strong> how master measurement errors result in follower position errors.<br />

In many applications, master <strong>and</strong> follower units will be the same (e.g., inches, millimeters,<br />

degrees). These applications will require linear speeds or surface speeds to be matched (i.e., a<br />

1:1 ratio). For example, suppose that in a rotary knife application, there were 500 master<br />

steps per inch of material, so an error in master measurement of one encoder step would result<br />

in 0.002 inches of follower position error.<br />

If the master <strong>and</strong> follower units are not the same, or the ratio is not 1:1, the master error times<br />

the ratio of the application gives the follower error. An example would be a rotary master <strong>and</strong><br />

a linear follower. For instance, suppose one revolution of a wheel gives 4000 master counts,<br />

<strong>and</strong> results in 10 inches of travel on the follower. The ratio is then 10 inches/revolution. The<br />

follower error which results from one step of master measurement error is (1/4000) ∗ 10<br />

inches/revolution = 0.0025 inches.<br />

Chapter 7. Multi-Tasking 189


Resolution of the<br />

Master;<br />

Resolution of the<br />

Follower;<br />

Position Sampling<br />

Accuracy;<br />

Accuracy of the<br />

Follower Motor <strong>and</strong><br />

Drive;<br />

Accuracy of the<br />

Load Mechanics<br />

Master Position<br />

Prediction;<br />

The best case master measurement precision is the inverse of the number of master steps per<br />

user's master unit. For example, if there are 100 master steps/inch, then the master<br />

measurement precision is 0.01 inches. Even if all other sources of error are eliminated,<br />

follower accuracy will only be that which corresponds to 1 step of the master (e.g., 0.01 inches<br />

in the previous example).<br />

The best case follower axis precision is the inverse of the number of follower steps per user's<br />

position unit. For example, if there are 1000 follower steps/inch, then the follower resolution is<br />

0.001 inches. Even if all other sources of error are eliminated, follower positioning accuracy<br />

will only be that which corresponds to 1 step of the follower. This must be at least as great as<br />

the precision required by the application.<br />

The position sampling rate for the Gem6K depends on whether it is a servo or a stepper. The<br />

sample period for is 2 ms.<br />

The repeatability of the sampling rate, from one sample to the next, may vary by as much as<br />

100 µs. This affect may be eliminated by using non-zero master position filter (FFILT)<br />

comm<strong>and</strong> values. Otherwise, measurement of master position may be off by as much as (20 to<br />

100 microseconds ∗ master speed). This may appear to be a significant value at high master<br />

speeds, but it should be noted that this error changes in value (<strong>and</strong> usually sign) every sample<br />

period. It is effectively like a noise of 200-600 Hz; if the mechanical frequency response of the<br />

motor <strong>and</strong> load is much less than this frequency, the load cannot respond to this error.<br />

The precision also depends on how accurately the drive follows its comm<strong>and</strong>ed position while<br />

moving. Even if master measurement were perfect, if the drive accuracy is poor, the precision<br />

will be poor.<br />

In the case of stepper drives, this amounts to the specified motor/drive accuracy.<br />

In the case of servo drives, the better the drive is tuned for smoothness <strong>and</strong> zero Following<br />

error, the better the precision of the positioning. Often, this really only matters for a specific<br />

portion of the profile, so the drive should be tuned for zero Following error at that portion.<br />

The accuracy (not repeatability) of the load mechanics must be added to the overall build up of<br />

accuracy error. This includes backlash for applications which involve motion in both<br />

directions.<br />

The master position prediction mode may be enabled or disabled with the FPPEN comm<strong>and</strong>,<br />

but each state contributes a different error.<br />

Disabled (FPPENØ): The follower position comm<strong>and</strong> is based on a master position that is 2<br />

sample periods (4 ms) old. This means that master measurement error due to<br />

disabling the position prediction mode will be (2 sample periods ∗ master speed).<br />

Enabled (FPPEN1): If the position prediction mode is enabled (default setting), its accuracy is<br />

also affected by position sampling accuracy, master speed, <strong>and</strong> master position<br />

filtering. The error due to enabling the position prediction mode is about twice that<br />

due to sampling accuracy (i.e., 40 to 200 microseconds ∗ master speed). As with the<br />

error due to position sampling accuracy, the error due to the position prediction mode<br />

being enabled is like a noise on the order of 200-600 Hz, which is not noticed by<br />

large loads.<br />

190 Gem6K Series Programmer’s <strong>Guide</strong>


Master Velocity<br />

Relative to Master<br />

Position Prediction;<br />

Variation in Master Velocity: Although increasing master position filtering (increasing the<br />

FFILT comm<strong>and</strong> value) eliminates the error due to sampling accuracy, it increases the error<br />

due to variations in master speed when the master position prediction mode is enabled<br />

(FPPEN1).<br />

Most applications maintain a constant master speed, or change very slowly, so this effect is<br />

minimal. But if the master is changing rapidly, there may be a significant master speed<br />

measurement error. Because predicted master positions are in part based on master speed<br />

measurement, the can result in an error in master position prediction mode (FPPEN1). This<br />

effect will always be smaller than that due to the master position prediction mode being<br />

disabled (FPPENØ).<br />

Tuning;<br />

(Servo Axes Only)<br />

A servo system’s tuning has a direct impact on how well the follower axis can track the master<br />

input. Overshoot, lag, oscillation, etc., can be devastating to Following performance. The best<br />

tool to use for tuning the Gem6K series controller is Motion Planner’s <strong>Gemini</strong> Servo Tuner<br />

utility.<br />

Repeatability of the<br />

Trigger Inputs <strong>and</strong><br />

Sensors;<br />

Some applications may use the trigger inputs for functions like registration moves, GOWHENs,<br />

or new cycles. For these applications, the repeatability of the trigger inputs <strong>and</strong> sensors add to<br />

the overall position error.<br />

Refer to page 99 for accuracy specifications on the trigger input position capture function.<br />

Refer to your sensor manufacturer’s documentation for the sensor repeatability. In the Gem6K<br />

controller, the position capture from the trigger inputs have approximately 100 µs<br />

repeatability, <strong>and</strong> the sensor repeatability (SR) should be determined, too. Velocity ∗ time =<br />

distance, so the error due to repeatability is (SR + 0.0001 seconds) ∗ speed = error. If the<br />

sensor repeatability is given in terms of distance, that value can be added directly.<br />

Preset vs. Continuous Following Moves<br />

When a follower performs a preset (MCØ) move in Following mode (FOLEN1), the<br />

comm<strong>and</strong>ed position is either incremental or absolute in nature, but it does have a comm<strong>and</strong>ed<br />

endpoint. The direction traveled by the follower will be determined by the comm<strong>and</strong>ed<br />

endpoint position, <strong>and</strong> the direction the master is counting.<br />

Let’s illustrate this with an example. Assume all necessary set-up comm<strong>and</strong>s have been<br />

previously issued for our follower (axis #1) <strong>and</strong> master so that distances specified are in<br />

revolutions:<br />

FOLRN3 ; Set Following follower-to-master ratio numerator to 3<br />

FOLRD4 ; Set Following follower-to-master ratio denominator to 4<br />

; (ratio is 3 revs on the follower to 4 revs on the master)<br />

FOLEN1 ; Enable Following on axis #1<br />

FOLMD10 ; Set preset move to take place over 10 master revolutions<br />

MC0<br />

; Set follower to preset positioning mode<br />

MA1<br />

; Set follower to absolute positioning mode<br />

PSET0 ; Set current absolute position reference to zero<br />

D5<br />

; Set move distance to absolute position 5 revolutions<br />

GO1 ; Initiate move to absolute position 5<br />

If the master is stationary when the GO1 comm<strong>and</strong> is executed, the follower will remain<br />

stationary also. If the master begins to move <strong>and</strong> master pulses are positive in direction, the<br />

follower will begin the preset move in the positive direction. If the master pulses stop arriving<br />

before 10 master revolutions have been traveled, the follower will also stop moving, but that<br />

GO1 comm<strong>and</strong> will not be completed. If the master then starts to count in the negative<br />

direction, the follower will follow in the negative direction, but only as far as it's starting<br />

position. If the master continues to count negative, the follower will remain stationary. The<br />

Chapter 7. Multi-Tasking 191


GO1 comm<strong>and</strong> will not actually be completed until the master has traveled at least 10<br />

revolutions in the positive direction from where it was at the time the GO1 comm<strong>and</strong> was<br />

executed. If the master oscillates back <strong>and</strong> forth between it's position at the start of the GO1<br />

comm<strong>and</strong> to just under 10 revolutions, the follower will oscillate back <strong>and</strong> forth as well.<br />

The master must be counting in the positive direction for any preset (MCØ) GO1s comm<strong>and</strong>ed<br />

on the follower to be completed. If mechanics of the system dictate that the count on the<br />

source of the master pulses is negative, a minus (-) sign should be entered in the FOLMAS<br />

comm<strong>and</strong> so that Gem6K sees the master counts as positive.<br />

Continuous follower moves (MC1) react much differently to master pulse direction. Whereas a<br />

preset move will only start the profile if the master counts are counting in the positive<br />

direction, a continuous move will begin the ramp to its new ratio following the master in either<br />

direction. As long as the master is counting in the positive direction, the direction towards<br />

which the follower starts in a continuous move is determined by the argument (sign) of the D<br />

comm<strong>and</strong>. The follower direction is positive for D+ <strong>and</strong> negative for D-.<br />

If the master is counting in the negative direction when follower begins a continuous move,<br />

the direction towards which the follower moves is opposite to that comm<strong>and</strong>ed with the D<br />

comm<strong>and</strong>. The follower direction is positive for D- <strong>and</strong> negative for D+.<br />

If the master changes direction during a continuous follower move, the follower will also<br />

reverse direction. As with st<strong>and</strong>ard continuous moves, the GO1 will continue until terminated<br />

by S, K, end-of-travel limits, stall condition, or comm<strong>and</strong> to go to zero velocity. As with<br />

preset moves, the sign on the FOLMAS comm<strong>and</strong> determines the direction of master counting<br />

with respect to the direction of actual counting on the master input.<br />

Master <strong>and</strong> Follower Distance Calculations<br />

The formulas below show the relationship between master move distances <strong>and</strong> the<br />

corresponding follower move distances. These relationships may be used to assist in the<br />

design of Following mode moves in which both the position <strong>and</strong> duration of constant ratio are<br />

important.<br />

In such calculations, it is helpful to use SCLMAS <strong>and</strong> SCLD values which allow the master <strong>and</strong><br />

follower distances to be expressed in the same units (e.g., inches or millimeters). In this case,<br />

many applications will be designed to reach a final ratio of 1:1, <strong>and</strong> the distances in these<br />

figures can be easily calculated.<br />

☞ HINT: For a trapezoidal preset follower axis move with a maximum ratio of 1:1, the<br />

master <strong>and</strong> follower distances during the constant ratio portion will be the same. The<br />

follower travel during acceleration will be exactly half of the corresponding master travel,<br />

<strong>and</strong> it will also occur during deceleration.<br />

Master Distance (FOLMD)<br />

The FOLMD comm<strong>and</strong> determines the master distance over which the acceleration (mode<br />

continuous moves – MC1) or the entire move (preset moves – MCØ) takes place. If the<br />

follower axis is in continuous positioning mode (MC1), FOLMD is the master distance over<br />

which the follower axis is to accel or decel from the current ratio to the new ratio. If the<br />

follower axis is in preset positioning mode (MCØ), FOLMD is the master distance over which<br />

the follower's entire move will take place.<br />

When the Follower is in Continuous Positioning Mode (MC1)<br />

D = FOLMD * (R 2 + R 1 )<br />

2<br />

where:<br />

FOLMD = Master distance<br />

R 2 = New ratio (FOLRN ÷ FOLRD)<br />

R 1 = Current ratio (FOLRN ÷ FOLRD)<br />

D = Follower distance traveled during ramp<br />

192 Gem6K Series Programmer’s <strong>Guide</strong>


When the Follower is in Preset Positioning Mode (MCØ)<br />

Trapezoidal<br />

Follower Moves<br />

D max = (FOLMD * R max )<br />

D 1 = (D max - D)<br />

2<br />

MD 1 = 2 * D 1<br />

R max<br />

D 2 = D - (2 * D 1 )<br />

MD 2 = D 2<br />

R max<br />

FOLMD = (2 * MD 1 ) + MD 2<br />

where:<br />

FOLMD = Master distance<br />

MD 1 = Master distance during accel & decel ramps<br />

MD 2 = Master distance during constant ratio<br />

D = Total follower axis preset distance comm<strong>and</strong>ed<br />

D 1 = Follower travel during accel <strong>and</strong> decel ramps<br />

D 2 = Follower travel during constant ratio<br />

D max = Maximum follower distance possible<br />

(assuming no accel or decel)<br />

R max = Maximum ratio = FOLRN ÷ FOLRD<br />

These Profiles<br />

depict ratio vs.<br />

distance<br />

Trapezoidal profile if:<br />

D = (D 2 + 2 * D 1 ) < D max<br />

Rectangular profile if:<br />

D 2 = D<br />

D 1 = zero<br />

MD 2 = FOLMD<br />

MD 1 = zero<br />

R max<br />

Ratio Ratio<br />

R max<br />

D 1 D 2 D 1<br />

MD 1 MD 2 MD 1<br />

Distance<br />

D 2<br />

MD 2<br />

Distance<br />

Triangular<br />

Follower Moves<br />

D = R peak * FOLMD<br />

2<br />

where:<br />

FOLMD = Master distance<br />

R peak = Peak ratio reached during move<br />

D = Total follower distance<br />

Triangular profile if:<br />

R max<br />

D < 1/2 D max<br />

Ratio<br />

D<br />

R peak<br />

This Profile depicts<br />

ratio vs. distance<br />

FOLMD<br />

Distance<br />

Distance<br />

Calculation<br />

Example<br />

In the example below, the desired travel during constant ratio is already contained in numeric<br />

variable #1 (VAR1), <strong>and</strong> may have been read from thumbwheels or a DATA comm<strong>and</strong>. The<br />

corresponding follower move distance (D) <strong>and</strong> FOLMD are calculated as shown:<br />

VAR2=2<br />

; Desired follower travel during accel <strong>and</strong> decel combined<br />

VAR3=2 * VAR2 ; Required master travel during these ramps<br />

VAR4=VAR1 + VAR2 ; Move distance is constant ratio portion plus ramps<br />

VAR5=VAR1 + VAR3 ; Master travel for entire follower move<br />

FOLMD(VAR5) ; Establish calculated master travel<br />

D(VAR4)<br />

; Establish calculated follower travel<br />

GO1<br />

; Make desired follower move<br />

Similar calculations may be done for a series of continuous move ramps to ratios, separated<br />

by GOWHEN for master cycle positions. These ramps may be repeated in a loop to create a<br />

Chapter 7. Multi-Tasking 193


continuous cyclical follower profile..<br />

Beware of Roundoff<br />

Error (Scaling only)<br />

Some potential for roundoff error exists if the scaling of a move distance or master distance by<br />

SCLD <strong>and</strong> SCLMAS does not result in an integer number of steps. Some additional care must<br />

be taken in the segment by segment construction of profiles using ramps to continuous ratio.<br />

The Gem6K maintains a follower position comm<strong>and</strong> which is calculated from the comm<strong>and</strong>ed<br />

constant ratios, the ramps to the new ratios, <strong>and</strong> the master travel over which these take place.<br />

At the end of each ramp or constant ratio portion, this comm<strong>and</strong>ed position is calculated to the<br />

nearest integer follower step. If the ratios <strong>and</strong> master travel result in a non-integer follower<br />

travel for a segment, the fractional part of that segment's calculated travel will be lost. In a<br />

cyclical application, repeated truncations could build up to a significant error. This may be<br />

avoided through careful attention to design of the profile.<br />

Using Other Features with Following<br />

The Gem6K has many features that may be used in the same application as its Following<br />

features. In some cases, having configured an axis as a follower with the FOLMAS comm<strong>and</strong><br />

will affect, or be affected by, the operation of other features, as described below.<br />

Setups used by<br />

FOLMAS<br />

(Stepper Axes Only)<br />

S (Stop) & K (Kill)<br />

Comm<strong>and</strong>s<br />

The FOLMAS comm<strong>and</strong> uses the drive resolution (DRES) <strong>and</strong> the velocity range (PULSE) data<br />

to configure an axis as a follower. In order for this data to be used correctly, these comm<strong>and</strong>s<br />

must be given before FOLMAS. These comm<strong>and</strong>s are not allowed after FOLMAS is given.<br />

After FOLMAS is executed, the MC comm<strong>and</strong> may be used to change from incremental to<br />

absolute positioning <strong>and</strong> back.<br />

Stop (S) <strong>and</strong> Kill (K) comm<strong>and</strong>s cause the follower to do a non-Following decel, even if the<br />

follower is in Following mode. A stop or a kill, buffered or immediate, will clear a pending<br />

GOWHEN condition (clears AS bit #26).<br />

Kill Conditions<br />

GO Comm<strong>and</strong><br />

Registration<br />

Moves<br />

(see page 159)<br />

Under default operation (FOLK0), certain error conditions (i.e., drive fault input active, or max.<br />

position error limit exceeded) will cause the Gem6K to disable the drive <strong>and</strong> kill the Following<br />

profile (follower’s comm<strong>and</strong>ed position loses synchronization with the master).<br />

If you enable Following Kill (FOLK1), these error conditions will still disable the drive<br />

(DRIVE0), but will not kill the Following profile. Because the Following profile is still running,<br />

the controller keeps track of what the follower’s position should be in the Following trajectory.<br />

To resume Following operation, resolve the error condition (drive fault, excessive position<br />

error), enable the drive (DRIVE1), <strong>and</strong> comm<strong>and</strong> the controller to impose a shift to compensate<br />

for the lapse/shift that occurred while the drive was disabled <strong>and</strong> the follower was not moving.<br />

To impose the shift, assign the negative of the internally monitored shift value (PSHF) to a<br />

variable (e.g., VAR1 = -1 * PSHF) <strong>and</strong> comm<strong>and</strong> the shift using a variable substitution in the<br />

FSHFD comm<strong>and</strong> (e.g., FSHFD(VAR1)).<br />

The FOLK comm<strong>and</strong> only preserves Following profiles; normal velocity-based profiles will be<br />

killed regardless of the FOLK comm<strong>and</strong>.<br />

If a follower axis is in Following mode (FOLEN1), moves will ramp to a ratio (set with FOLRN<br />

<strong>and</strong> FOLRD). If it is not in Following mode, moves will ramp to a velocity (V). Switching in<br />

<strong>and</strong> out of Following mode does not change the value for final ratio or final velocity goals, but<br />

simply changes which parameter is used as the goal.<br />

Registration inputs may be enabled with the INFNCi-H comm<strong>and</strong> while an axis is a follower,<br />

<strong>and</strong> registration moves may interrupt either a Following mode move or a time-based move.<br />

The registration move itself, however, is always a time based move, <strong>and</strong> implements the<br />

registration velocity with respect to a stationary reference. Any trigger input may be used as a<br />

registration input or for any Following feature which uses triggers, even at the same time.<br />

194 Gem6K Series Programmer’s <strong>Guide</strong>


Enter/Exit<br />

Following Mode<br />

While Moving<br />

Pause <strong>and</strong><br />

Continue<br />

TVEL <strong>and</strong> TVELA<br />

Comm<strong>and</strong>s<br />

TASF, TAS & AS<br />

Axis Status Bits<br />

Changing<br />

Feedback Sources<br />

(Servo Axes only)<br />

Following <strong>and</strong><br />

Other Motion<br />

Conditional<br />

Statements Using<br />

PMAS<br />

The FOLENØ comm<strong>and</strong> may be executed while a follower axis is moving at constant ratio. In<br />

this case, the current velocity becomes the constant velocity, <strong>and</strong> the follower may accelerate<br />

or decelerate to other velocities. The FOLEN1 comm<strong>and</strong> may not be executed while the<br />

follower axis is moving in the non-Following mode. Attempting to do so will result in the<br />

error response “MOTION IN PROGRESS”.<br />

A program may be paused <strong>and</strong> continued, even if configured as a follower. The program does<br />

not lose track of the master input, even though motion is stopped. As usual, if a program<br />

finishes normally, or if COMEXS is set to zero (COMEXSØ), the program may not be continued.<br />

If a program is resumed, partially completed Following moves will be completed; however, the<br />

remainder of the move is completed over the entire original master distance (FOLMD value).<br />

The TVEL <strong>and</strong> VEL comm<strong>and</strong>s have always reported an unsigned value (i.e. magnitude),<br />

consistent with the fact that the V comm<strong>and</strong> is always positive, even if the move direction is<br />

negative. When Following is enabled (FOLEN1), TVEL <strong>and</strong> VEL report the net magnitude of<br />

comm<strong>and</strong>ed velocity due to following <strong>and</strong>/or shifting. For example, if the follower axis is<br />

Following in the positive direction at 1 rps, TVEL reports 1.000. If a shift in the negative<br />

direction of 1.5 rps is then comm<strong>and</strong>ed, TVEL will report 0.5 – still positive, even though the<br />

net direction is negative.<br />

By contrast, TVELA <strong>and</strong> VELA have always been signed. In the above example, TVELA will<br />

report -0.5.<br />

Axis Status (TASF, TAS <strong>and</strong> AS) bits 1-4 represent the motion status of an axis. Bits 1 <strong>and</strong> 2<br />

represent the moving <strong>and</strong> direction status of the net motion of an axis, including the<br />

combination of following <strong>and</strong> shifting.<br />

Bits 3 <strong>and</strong> 4 represent acceleration <strong>and</strong> velocity, respectively. With Following disabled<br />

(FOLENØ), the accel <strong>and</strong> velocity can only be due to a comm<strong>and</strong>ed time-based profile. With<br />

Following enabled (FOLEN1), the net comm<strong>and</strong>ed velocity <strong>and</strong> accel could be due to<br />

following the master <strong>and</strong>/or a simultaneous shift (time-based profile). Bits 3 <strong>and</strong> 4 only reflect<br />

the acceleration <strong>and</strong> velocity status of the time-based profile, not the combined comm<strong>and</strong>.<br />

For example, if the follower axis is Following in the positive direction at 1 rps, TAS reports<br />

1ØØØ. If a continuous shift (FSHFC2) of 0.8 rps in the negative direction is then comm<strong>and</strong>ed,<br />

TAS will report 1Ø1Ø, while the shaft is decelerating to 0.2 rps. When the continuous shift<br />

velocity is reached, TAS will report 1ØØ1.<br />

Changing feedback sources (SFB) may result in a follower axis Following its own feedback.<br />

For this reason, changing feedback sources is not allowed while a master is specified<br />

(FOLMAS).<br />

Following motion is initiated with the GO comm<strong>and</strong>, just like normal motion. Other motion,<br />

which does not depend on the motion of an external master, may not be used while a follower<br />

axis is in Following mode (FOLEN1). These motion types include jog mode, joystick mode,<br />

<strong>and</strong> homing. To use these motion types, Following must be disabled (FOLENØ) — see<br />

Enter/Exit Following Mode While Moving above for precautions.<br />

The master cycle position (PMAS) value may be used in the comparison argument of these<br />

comm<strong>and</strong>s:<br />

• WAIT & GOWHEN: If it is desired to WAIT or GOWHEN on a master cycle position of the<br />

next master cycle, one master cycle length (value of FMCLEN) should be added to the<br />

master cycle position specified in the argument. This allows comm<strong>and</strong>s that sequence<br />

follower axis events through a master cycle to be placed in a loop. The WAIT or<br />

GOWHEN comm<strong>and</strong> at the top of the loop could execute, even though the actual master<br />

Chapter 7. Multi-Tasking 195


travel had not finished the previous cycle. This is done to allow a PMAS value which is<br />

equal to the master cycle length to be specified <strong>and</strong> reliably detected.<br />

• IF, UNTIL, & WHILE: These arguments use the instantaneous PMAS value. Be careful<br />

to avoid specifying PMAS values that are nearly equal to the master cycle length<br />

(FMCLEN), because rollover may occur before a PMAS sample is read.<br />

Compiled Motion<br />

Following profiles may be pre-compiled to save processing time. For details, refer to<br />

page 142.<br />

Troubleshooting for Following (see also Chapter 8)<br />

Following applications are often more complex than others, because motion of the followers is programmed as a function<br />

of the motion of the master. This requires the motion of the master to be well characterized <strong>and</strong> accurately specified in the<br />

program. It often requires an unfamiliar way of thinking about the motion of the desired follower. The table below offers<br />

some possible reasons for troubles which may be encountered in achieving the desired follower motion.<br />

Symptom<br />

Follower does not follow master<br />

Follower motion is<br />

Ratio seems wrong<br />

Follower profile wrong, or unrepeatable<br />

Master/follower alignment drifts over<br />

many cycles<br />

Follower lags Following position<br />

(steppers only)<br />

Possible Causes<br />

• Improper FOLMAS<br />

• Poor connection if master is encoder<br />

• Master running backward<br />

• No encoder power (when the encoder is selected as the master)<br />

• FFILT comm<strong>and</strong> value too low<br />

• Unnecessary FPPEN amplifies master roughness<br />

• FOLRN <strong>and</strong> FOLRD follower-to-master ratio values are inaccurate,<br />

possibly reversed<br />

• SCLD or SCLMAS wrong<br />

• Following limited by FMAXV or FMAXA (steppers only)<br />

• WAIT used where GOWHEN should be<br />

• Too little master travel between GOWHEN <strong>and</strong> GO1, desired PMAS is<br />

missed<br />

• Roundoff error due to fractional steps resulting from SCLD or SCLMAS<br />

<strong>and</strong> user's parameters<br />

• Ratios <strong>and</strong> master distances specified result in fractional follower<br />

steps covered during ramps, constant ratio<br />

• Inhibited by FMAXV<br />

• FMAXA clips acceleration peaks resulting from attempt to follow rough<br />

master<br />

196 Gem6K Series Programmer’s <strong>Guide</strong>


Error Messages<br />

If an illegal programming condition is discovered while programming or executing programs, the Gem6K responds with an<br />

error message. If a program execution error is detected, the program is aborted.<br />

The table below lists all the error messages that relate to Following, <strong>and</strong> indicates the comm<strong>and</strong> <strong>and</strong> cause that may<br />

generate them. These error messages are displayed only if the error level is set to level 4 with the ERRLVL4 comm<strong>and</strong><br />

(this is the default setting).<br />

Error Message<br />

FOLMAS NOT SPECIFIED<br />

INCORRECT DATA<br />

INVALID CONDITIONS FOR<br />

COMMAND<br />

INVALID DATA<br />

Cause<br />

No FOLMAS for the axis is currently specified. It will occur if FMCNEW, FSHFC, or<br />

FSHFD comm<strong>and</strong>s are executed <strong>and</strong> no FOLMAS comm<strong>and</strong> was executed, or<br />

FOLMASØ was executed.<br />

Velocity (V), acceleration (A), or deceleration (AD) comm<strong>and</strong> is zero. (used by<br />

FSHFC & FSHFD)<br />

The FOLMD comm<strong>and</strong> value is too small to achieve the preset distance <strong>and</strong> still<br />

remain within the FOLRN/FOLRD ratio.<br />

A comm<strong>and</strong> phase shift cannot be performed:<br />

FSHFD.............Error if already shifting or performing other time based move.<br />

FSHFC.............Error if currently executing a FSHFD move, or if currently executing another<br />

FSHFC move in the opposite direction.<br />

The FOLEN1 comm<strong>and</strong> was given while a profile was suspended by a GOWHEN.<br />

The parameter supplied with the comm<strong>and</strong> is invalid.<br />

FFILT.............Error if: smooth number is not 0-4<br />

FMCLEN...........Error if: master steps > 999999999 or negative<br />

FMCP...............Error if: master steps > 999999999 or 999999999 or negative<br />

FOLRD.............Error if: master steps > 999999999 or negative<br />

FOLRN.............Error if: follower steps>999999999 or negative<br />

FSHFC.............Error if: number is not 0-3<br />

FSHFD.............Error if: follower steps>999999999 or 999999999 or 999999999 or 127 when a GO is executed.<br />

Attempting a preset Following move with a FOLMD value that is too small.<br />

The FOLEN1 comm<strong>and</strong> was given while that follower was moving in a non-Following<br />

mode.<br />

A GO comm<strong>and</strong> was given while moving in the Following mode (FOLEN1) <strong>and</strong> while<br />

in the preset positioning mode (MCØ).<br />

A GO comm<strong>and</strong> was given while moving in a Following ramp <strong>and</strong> while in the<br />

continuous positioning mode (MC1). Following status (FS) bit #3 will be set to 1.<br />

Chapter 7. Multi-Tasking 197


Following Comm<strong>and</strong>s<br />

Detailed information about these comm<strong>and</strong>s is provided in the<br />

Gem6K Series Comm<strong>and</strong> Reference.<br />

ANIMAS ........................Assigns an analog input to be used as a master in a FOLMAS assignment (requires a ANI SIM located on an<br />

expansion I/O brick).<br />

ERROR...........................Enable bit #14 to check for when a GOWHEN condition is already true when a subsequent GO, GOL, FGADV,<br />

FSHFC, or FSHFD comm<strong>and</strong> is given.<br />

ERRORP ........................ If ERROR bit #14 is enabled, a GOSUB branch to the error program occurs if a GOWHEN condition is already<br />

true when a subsequent GO, GOL, FGADV, FSHFC, or FSHFD comm<strong>and</strong> is given.<br />

FFILT...........................Sets the b<strong>and</strong>width for master position filtering.<br />

FGADV...........................Defines the geared advance distance.<br />

FMAXA...........................Stepper axes only: Sets the max. acceleration a follower may use while Following.<br />

FMAXV...........................Stepper axes only: Sets the max. velocity at which a follower may travel.<br />

FMCLEN ........................Defines the length of the master cycle.<br />

FMCNEW ........................Restarts new master cycle counting immediately. To make this a trigger-based operation instead of issuing<br />

the FMCNEW comm<strong>and</strong>, use the TRGFNcx1 comm<strong>and</strong>.<br />

FMCP.............................Defines the initial position of a new master cycle.<br />

FOLEN...........................Enables or disables Following mode.<br />

FOLK.............................Allows drive fault or maximum position error to disable drive without killing the Following profile.<br />

FOLMAS ........................Defines master for follower.<br />

FOLMD...........................Defines the master distance over which ratio changes or moves are to take place.<br />

FOLRD...........................Establishes the DENOMINATOR ONLY for the max. follower-to-master ratio for a preset move or the final<br />

ratio for a continuous move (use in combination with the FOLRN comm<strong>and</strong>).<br />

FOLRN...........................Establishes the NUMERATOR ONLY for the max. follower-to-master ratio for a preset move or the final<br />

ratio for a continuous move (use in combination with the FOLRD comm<strong>and</strong>).<br />

FPPEN...........................Allows master position prediction to be enabled or disabled.<br />

FSHFC...........................Allows continuous advance or retard (shift) of follower position during continuous Following moves.<br />

FSHFD...........................Allows preset advance or retard (shift) of follower position during continuous Following moves.<br />

FVMACC ........................Establishes the rate at which the virtual master count frequency (FVMFRQ) may change for an axis.<br />

FVMFRQ ........................Defines the frequency of the virtual master count.<br />

GOWHEN ........................ A GOWHEN comm<strong>and</strong> suspends execution of the next follower move until the specified conditional statement<br />

(based on T, IN, LIM, PC, PE, PMAS, PSLV, or PSHF) is true. To make this a trigger-based operation<br />

instead of issuing the GOWHEN comm<strong>and</strong>, use the TRGFNc1x comm<strong>and</strong>.<br />

SCLD.............................Sets the follower distance scale factor.<br />

SCLMAS ........................Sets the master scale factor.<br />

SINAMP ........................Defines the amplitude of the internal sine wave.<br />

SINANG ........................Defines the phase angle of the internal sine wave.<br />

SINGO...........................Initiates the internal sine wave.<br />

TRGFN...........................aTRGFNc1x initiates a GOWHEN. Suspends execution of the next follower move on follower axis (a) until the<br />

specified trigger input (c) goes active.<br />

aTRGFNcx1 allows master cycle counting to be restarted on axis (a) when the specified trigger input (c)<br />

goes active.<br />

198 Gem6K Series Programmer’s <strong>Guide</strong>


Status <strong>and</strong> Assignment Comm<strong>and</strong>s:<br />

TASF, TAS & [ AS ]......Bit 26 of each axis status is set (1) if a motion profile suspended by a GOWHEN (including TRGFNc1x) is<br />

pending on that axis. The bit is cleared when the GOWHEN is true, or when a stop (S) or kill (K) comm<strong>and</strong> is<br />

executed.<br />

TERF, TER & [ ER ]......Bit 14 is set if the GOWHEN condition is already true when a subsequent GO, GOL, FGADV, FSHFC, or<br />

FSHFD comm<strong>and</strong> is given. (The corresponding error-checking bits must be enabled with the ERROR<br />

comm<strong>and</strong> before the error will be detectable.)<br />

TFSF, TFS & [ FS ]......Transfers or assigns/compares the Following status or each axis.<br />

TNMCY <strong>and</strong> [ NMCY ] ....Transfers or assigns the current master cycle number.<br />

TPCMS <strong>and</strong> [ PCMS ] ....Transfers or assigns the current captured master cycle position.<br />

TPMAS <strong>and</strong> [ PMAS ] ....Transfers or assigns the current master cycle position.<br />

TPSHF <strong>and</strong> [ PSHF ] ....Transfers or assigns the net position shift since constant ratio.<br />

TPSLV <strong>and</strong> [ PSLV ] ....Transfers or assigns the follower's current comm<strong>and</strong>ed position.<br />

TVMAS <strong>and</strong> [ VMAS ] ....Transfers or assigns the current velocity of the master axis.<br />

WAIT .............................A WAIT comm<strong>and</strong> suspends program execution until the specified conditional statement (based on PMAS,<br />

FS, NMCY, PCMS, PSHF, PSLV, or VMAS) is true;<br />

WAIT(SS.i=b1) suspends program execution until a trigger input is activated (“i” is the input bit number<br />

corresponding to the trigger input—refer to the Gem6K Series Comm<strong>and</strong> Reference).<br />

Chapter 7. Multi-Tasking 199


200 Gem6K Series Programmer’s <strong>Guide</strong>


Multi-Tasking<br />

7<br />

CHAPTER SEVEN<br />

Multi-Tasking<br />

IN THIS CHAPTER<br />

• Introduction to Multi-Tasking .........................................................................202<br />

• Using Gem6K Resources While Multi-Tasking..............................................210<br />

• Multi-Tasking Performance Issues..................................................................214<br />

• Multi-Tasking Application Examples .............................................................215


Introduction to Multi-Tasking<br />

What is Multi-Tasking Multi-tasking is the ability of the Gem6K to run more than one<br />

program at the same time. This allows users to manage independent activities, aside from just<br />

motion.<br />

Why use Multi-Tasking<br />

• Multiple independent tasks can act on the same process or same axis.<br />

• A supervisory program can control <strong>and</strong> coordinate multiple processes.<br />

What is a Task A system task is a program execution environment, not a program. Each<br />

task runs independently. Each task can be used to run independent programs. Any task may<br />

run any program. Multiple tasks could even be running the same program simultaneously.<br />

Each task may either be:<br />

• Running a program<br />

• Monitoring ON, ERROR, or INSELP conditions<br />

• Inactive (not running a program or monitoring conditions)<br />

Using Multi-Tasking to Run Programs<br />

Use the Wizard<br />

Motion Planner provides<br />

a Multi-Tasking wizard,<br />

accessed from the<br />

Editor. The wizard leads<br />

you, step by step,<br />

through the process of<br />

setting up for multitasking.<br />

Multi-tasking is initiated by the Task Supervisor. The supervisor is the Gem6K’s main<br />

program execution environment — it runs the STARTP program <strong>and</strong> contains the comm<strong>and</strong><br />

buffer <strong>and</strong> parser. If the multi-tasking feature is not being used, the supervisor is the lone<br />

program execution environment of the Gem6K, as shown in Figure 1. When multi-tasking is in<br />

operation, the supervisor is referred to as “Task 0”.<br />

Resources<br />

I/O<br />

Inputs<br />

Outputs<br />

Limits<br />

Triggers<br />

Serial Ports<br />

PORT1 (RS-232)<br />

PORT2 (RS-232/485)<br />

Ethernet<br />

Axis<br />

GEM6K<br />

Supervisor<br />

Run Start-up Program<br />

Execute Programs<br />

Monitor Conditions<br />

Comm<strong>and</strong> Buffer & Parser<br />

Program Memory<br />

move1<br />

math<br />

inout<br />

fill<br />

move2<br />

seal<br />

gohome<br />

move3<br />

main<br />

Variables<br />

VAR<br />

VARB<br />

VARI<br />

VARS<br />

Figure 1: Gem6K Supervisor, with no Multi-Tasking<br />

The Gem6K can have a maximum of 10 tasks, in addition to the Task Supervisor (Task 0).<br />

Each task acts as an individual program execution environment. The boxes shown under<br />

Resources in Fig. 1, <strong>and</strong> the following Figures, represent the resources that the supervisor <strong>and</strong><br />

tasks monitor <strong>and</strong> manipulate (see list below). These resources can be shared with other tasks.<br />

• I/O..................................Inputs <strong>and</strong> Outputs (onboard I/O <strong>and</strong> expansion I/O bricks)<br />

• Communication ports ....“RS-232”, “RS-232/485”, <strong>and</strong> “ETHERNET”<br />

202 Gem6K Series Programmer’s <strong>Guide</strong>


• Axis .............................. The Gem6K axis can be shared with any tasks<br />

• Variables ...................... Real (VAR), binary (VARB), integer (VARI), <strong>and</strong> string (VARS)<br />

“Program Memory” is the Gem6K’s non-volatile memory where programs are stored. Any<br />

task may run any program. Multiple tasks could even be running the same program<br />

simultaneously. Programs in multi-tasking are defined as they typically are with the Gem6K<br />

GEM6K<br />

Resources<br />

I/O<br />

Inputs<br />

Outputs<br />

Limits<br />

Triggers<br />

Serial Ports<br />

PORT1 (RS-232)<br />

PORT2 (RS-232/485)<br />

Ethernet<br />

Axis<br />

Supervisor<br />

Run Start-up Program<br />

Execute Programs<br />

Monitor Conditions<br />

Comm<strong>and</strong> Buffer & Parser<br />

Task 1<br />

Execute Programs<br />

Monitor Conditions<br />

Task 2<br />

Execute Programs<br />

Monitor Conditions<br />

Program Memory<br />

move1<br />

math<br />

inout<br />

fill<br />

move2<br />

seal<br />

gohome<br />

move3<br />

main<br />

Variables<br />

VAR<br />

VARB<br />

VARI<br />

VARS<br />

Task 10<br />

Execute Programs<br />

Monitor Conditions<br />

Figure 2: Gem6K8 - Multi-Tasking with 10 tasks.<br />

The Task Identifier (%) prefix is used to specify that the associated comm<strong>and</strong> will affect the<br />

indicated task number. For most simple multi-tasking applications, the % prefix will only be<br />

used to start a program running in a specific task. Multi-tasking programs can be started<br />

through the communication ports (see Figs. 3a-3c), or from a program (see Figs. 4a-4d). Note<br />

that the programs are run in the tasks specified with the % prefix.<br />

Starting Tasks from<br />

a Communications<br />

Port<br />

Resources<br />

GEM6K<br />

Supervisor<br />

Program Memory<br />

I/O<br />

1%move1<br />

RUN main<br />

1%move1<br />

1%move1<br />

Serial Ports<br />

Ethernet<br />

1%move1<br />

move1<br />

DEF move1<br />

Axis<br />

Task 1<br />

END<br />

RUN move1<br />

Variables<br />

Figure 3a: Multi-Tasking initiated from a computer terminal.<br />

Chapter 8. Troubleshooting 203


GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

2%inout<br />

2%inout<br />

Serial Ports<br />

Ethernet<br />

Axis<br />

2%inout<br />

Task 1<br />

Running move1<br />

move1<br />

DEF move1<br />

_<br />

_<br />

_<br />

END<br />

Task 2<br />

Run inout<br />

inout<br />

DEF inout<br />

_<br />

_<br />

_<br />

2%inout<br />

END<br />

Variables<br />

Figure 3b: Multi-Tasking initiated from a computer terminal (cont’d).<br />

GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

3%fill<br />

3%fill<br />

move1<br />

3%fill<br />

Serial Ports<br />

Ethernet<br />

Task 1<br />

DEF move1<br />

_<br />

_<br />

_<br />

Axis<br />

Running move1<br />

END<br />

inout<br />

Task 2<br />

Running inout<br />

DEF inout<br />

_<br />

_<br />

_<br />

END<br />

Variables<br />

3%fill<br />

Task 3<br />

Run fill<br />

fill<br />

DEF fill<br />

_<br />

_<br />

_<br />

END<br />

Figure 3c: Multi-Tasking initiated from a computer terminal (cont’d).<br />

Starting Tasks from<br />

a Program<br />

GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

RUN main<br />

RUN main<br />

main<br />

DEF main<br />

_<br />

_<br />

_<br />

RUN main<br />

Serial Ports<br />

Ethernet<br />

1%move1<br />

2%inout<br />

3%fill<br />

END<br />

Axis<br />

Variables<br />

Figure 4a: Multi-Tasking initiated from a program.<br />

204 Gem6K Series Programmer’s <strong>Guide</strong>


GEM6K<br />

Resources<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Axis<br />

Variables<br />

Supervisor<br />

Running main<br />

1%move1<br />

1%move1<br />

Task 1<br />

RUN move1<br />

1%move1<br />

Program Memory<br />

main<br />

DEF main<br />

_<br />

_<br />

_<br />

1%move1<br />

2%inout<br />

3%fill<br />

END<br />

move1<br />

DEF move1<br />

_<br />

_<br />

_<br />

END<br />

Figure 4b: Multi-Tasking initiated from a program (cont’d).<br />

GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Running main<br />

2%inout<br />

Task 1<br />

2%inout<br />

main<br />

DEF main<br />

_<br />

_<br />

_<br />

1%move1<br />

2%inout<br />

3%fill<br />

END<br />

Axis<br />

Running move1<br />

move1<br />

DEF move1<br />

_<br />

_<br />

_<br />

Task 2<br />

END<br />

Variables<br />

2%inout<br />

RUN inout<br />

inout<br />

DEF inout<br />

_<br />

_<br />

_<br />

END<br />

Figure 4c: Multi-Tasking initiated from a program (cont’d).<br />

GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Running main<br />

3%fill<br />

Task 1<br />

3%fill<br />

main<br />

DEF main<br />

_<br />

_<br />

_<br />

1%move1<br />

2%inout<br />

3%fill<br />

END<br />

Axis<br />

Running move1<br />

move1<br />

DEF move1<br />

_<br />

_<br />

_<br />

Task 2<br />

END<br />

Running inout<br />

inout<br />

Variables<br />

Task 3<br />

DEF inout<br />

_<br />

_<br />

_<br />

END<br />

3%fill<br />

RUN fill<br />

fill<br />

DEF fill<br />

_<br />

_<br />

_<br />

END<br />

Figure 4d: Multi-Tasking initiated from a program (cont’d).<br />

Chapter 8. Troubleshooting 205


Interaction Between Tasks<br />

A new task is initiated by identifying the task number with the Task Identifier (%) prefix,<br />

followed by the name of the program to be run in the specified task. Because the % prefix<br />

specifies the task number that the associated comm<strong>and</strong> will affect, new tasks can be started<br />

from within other tasks. Fig. 5b shows the move1 program in task 1 being started by the<br />

main program in the supervisor. Fig. 5c shows the fill program in task 3 being started by<br />

the move1 program in task 1 with the 3%fill comm<strong>and</strong>. Fig. 5d shows the inout<br />

program in task 2 being started by the fill program in task 3 with the 2%inout comm<strong>and</strong>.<br />

Program execution in a task is controlled by comm<strong>and</strong>s executed from the program the task is<br />

running. In the example shown in Figs 5a-5d, program execution in Task 1 is controlled by<br />

comm<strong>and</strong>s executed from the move1 program, program execution in Task 2 is controlled by<br />

comm<strong>and</strong>s executed from the inout program, <strong>and</strong> program execution in Task 3 is controlled<br />

by comm<strong>and</strong>s executed from the fill program.<br />

GEM6K<br />

RUN main<br />

Resources<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

RUN main<br />

Supervisor<br />

RUN main<br />

Program Memory<br />

main<br />

DEF main<br />

1%move1<br />

_<br />

_<br />

_<br />

END<br />

Axis<br />

Variables<br />

Figure 5a: Initiating multi-tasking.<br />

GEM6K<br />

Resources<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Supervisor<br />

Running main<br />

1%move1<br />

1%move1<br />

1%move1<br />

Program Memory<br />

main<br />

DEF main<br />

1%move1<br />

_<br />

_<br />

_<br />

END<br />

Axis<br />

Variables<br />

Task 1<br />

RUN move1<br />

move1<br />

DEF move1<br />

3%fill<br />

_<br />

_<br />

END<br />

Figure 5b: Task initiated from another task (cont’d).<br />

206 Gem6K Series Programmer’s <strong>Guide</strong>


GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Running main<br />

Task 1<br />

main<br />

DEF main<br />

1%move1<br />

_<br />

_<br />

_<br />

END<br />

Axis<br />

Running move1<br />

3%fill<br />

3%fill<br />

move1<br />

DEF move1<br />

3%fill<br />

_<br />

_<br />

Variables<br />

END<br />

3%fill<br />

Task 3<br />

RUN fill<br />

fill<br />

DEF fill<br />

2%inout<br />

_<br />

_<br />

END<br />

Figure 5c: Task initiated from another task (cont’d).<br />

GEM6K<br />

Resources<br />

Supervisor<br />

Program Memory<br />

I/O<br />

Serial Ports<br />

Ethernet<br />

Running main<br />

Task 1<br />

main<br />

DEF main<br />

1%move1<br />

_<br />

_<br />

_<br />

END<br />

Axis<br />

Running move1<br />

move1<br />

DEF move1<br />

3%fill<br />

_<br />

_<br />

Variables<br />

Task 2<br />

END<br />

2%inout<br />

RUN inout<br />

inout<br />

DEF inout<br />

_<br />

_<br />

_<br />

Task 3<br />

END<br />

Running fill<br />

fill<br />

2%inout<br />

2%inout<br />

DEF fill<br />

2%inout<br />

_<br />

_<br />

END<br />

Figure 5d: Task initiated from another task (cont’d).<br />

Chapter 8. Troubleshooting 207


Tasks<br />

Refer to page 210 for<br />

more details about<br />

associating axes with<br />

tasks.<br />

The default condition in multi-tasking is that each task is associated with motion, as shown in<br />

Fig. 6a. This means that when a task associated with motion hits an end-of travel limit,<br />

program execution will be killed within that task. It may therefore be necessary to unassign<br />

motion association for a given task to allow an independent program execution environment.<br />

When this is done, the unassigned task cannot control or quary any information about the<br />

motor or motion.<br />

The TSKAX comm<strong>and</strong> allows you to unassign the motion from the task. By assigning the task<br />

to no motion(TSKAX0), the task can not control or query information on the Gem6K motor or<br />

motion..<br />

GEM6K<br />

Resources<br />

I/O<br />

Inputs<br />

Outputs<br />

Limits<br />

Triggers<br />

Serial Ports<br />

PORT1 (RS-232)<br />

PORT2 (RS-232/485)<br />

Ethernet<br />

Supervisor<br />

Run Start-up Program<br />

Execute Programs<br />

Monitor Conditions<br />

Comm<strong>and</strong> Buffer & Parser<br />

Task 1<br />

Execute Programs<br />

Monitor Conditions<br />

Default = All Axes<br />

Program Memory<br />

move1<br />

math<br />

inout<br />

fill<br />

move2<br />

seal<br />

gohome<br />

move3<br />

main<br />

Task 2<br />

Axes<br />

Execute Programs<br />

Monitor Conditions<br />

Default = All Axes<br />

Variables<br />

VAR<br />

VARB<br />

VARI<br />

VARS<br />

Task 10<br />

Execute Programs<br />

Monitor Conditions<br />

Default = All Axes<br />

DEF main ; Begin definition of program called "main"<br />

1%TSKAX1 ; Associate task 1 with motion<br />

2%TSKAX0 ; Do not associate task 2 with motion)<br />

1%move1 ; Execute the "move1" program in Task 1<br />

2%inout ; Execute the "inout" program in Task 2 (Will not affect any<br />

; motion)<br />

END<br />

; End definition of program called "main"<br />

208 Gem6K Series Programmer’s <strong>Guide</strong>


How a “Kill” Works While Multi-Tasking<br />

The general rule of comm<strong>and</strong> execution within a task is that the comm<strong>and</strong> affects only the<br />

task in which it was executed or to which it was directed via the % prefix. This includes<br />

almost all motion comm<strong>and</strong>s when tasks have an associated (TSKAX) axis. The exception is<br />

the Kill comm<strong>and</strong>. A “K” or “!K” without prefix or parameters will kill all controller axes,<br />

<strong>and</strong> programs running in all tasks. This exception is made to allow one short, familiar<br />

comm<strong>and</strong> to effectively stop all controller processes. As usual, a “K” with parameters (e.g.,<br />

Kx11) will kill motion only on the specified axis, <strong>and</strong> will not kill the program. A “K”<br />

prefixed with a task specifier but without parameters (e.g., 3%K) will kill the program <strong>and</strong><br />

motion if the task has an associated axis.<br />

Certain inputs can be used to kill programs <strong>and</strong> motion. These inputs <strong>and</strong> their results under<br />

multi-tasking are:<br />

• Drive Fault input. Kills program execution <strong>and</strong> the associated axis for all tasks that are<br />

associated with the faulted axis.<br />

• Kill input (INFNCi-C or LIMFNCi-C). If prefixed with the task identifier (e.g.,<br />

2%INFNC3-C), it will kill the designated task, its program <strong>and</strong> the associated axis. If not<br />

prefixed with a task identifier, it will kill the controller axis, <strong>and</strong> all programs running<br />

in all tasks. It will also cause a branch to the task’s error program if the task’s errorchecking<br />

bit 6 is enabled (n%ERROR.6-1).<br />

• User fault input (INFNCi-F or LIMFNCi-F). This input functions the same as the kill<br />

input noted above, with the exception that it will also cause a branch to the task’s error<br />

program if the task’s error-checking bit 7 is enabled (n%ERROR.7-1).<br />

Chapter 8. Troubleshooting 209


Using Gem6K Resources While Multi-Tasking<br />

Associating Axes with Tasks<br />

The default condition in multi-tasking is that each task is associated with motion. The TSKAX<br />

comm<strong>and</strong> allows you to unassign the task from the motion, thus constraining task response<br />

<strong>and</strong> control to I/O only. The TSKAX comm<strong>and</strong> allows you to specify motion (1) or no motion<br />

(0). This association covers all interaction between axes comm<strong>and</strong>s, conditions or inputs <strong>and</strong><br />

task program flow, including the following:<br />

• Motion data comm<strong>and</strong>s (e.g., A, V, D). These comm<strong>and</strong>s will apply only if the task is<br />

associated with motion.<br />

• Stop, pause, <strong>and</strong> continue comm<strong>and</strong>s <strong>and</strong> inputs. These comm<strong>and</strong>s will affect motion<br />

only on tasks associated with motion: S (stop) comm<strong>and</strong> — without parameters, PS<br />

(pause) comm<strong>and</strong>, <strong>and</strong> C (continue) comm<strong>and</strong>. Inputs programmed with these functions<br />

will affect motion only on tasks associated with motion <strong>and</strong> specified in the input<br />

function assignment (with the n% prefix): Kill input (n%INFNCi-C or n%LIMFNCi-C),<br />

stop input (n%INFNCi-D or n%LIMFNCi-D), pause/continue input (n%INFNCi-E or<br />

n%LIMFNCi-E), <strong>and</strong> user fault input (n%INFNCi-F or n%LIMFNCi-F).<br />

• Drive fault <strong>and</strong> limit inputs. If a drive fault or end-of-travel limit occurs, only tasks<br />

assocaited with motion will be killed.<br />

• ON conditions. Axis status bits are only monitored if the task is associated with<br />

motion.<br />

• ERROR conditions. Each task has its own error status register (ER, TER, TERF), errorchecking<br />

bits (ERROR), <strong>and</strong> error program (ERRORP).<br />

• Comm<strong>and</strong> buffer control:<br />

− COMEXC. Pauses comm<strong>and</strong> processing of that task until the associated motion<br />

has stopped<br />

− COMEXL. Allows the specified associated motion to not kill that task’s<br />

program.<br />

210 Gem6K Series Programmer’s <strong>Guide</strong>


Sharing Common Resources Between Multiple Tasks<br />

Controller resources other than processing time must also be shared between multiple tasks.<br />

All physical inputs <strong>and</strong> outputs are shared (i.e., each task may read all inputs <strong>and</strong> write to all<br />

outputs). Some of the functions associated with that I/O (defined with LIMFNC, INFNC <strong>and</strong><br />

OUTFNC comm<strong>and</strong>s) are unique for each task. All variables (VAR, VARI, VARB, VARS),<br />

DATA programs, <strong>and</strong> the DATPTR are shared. If one task modifies a variable, a DATA<br />

program, or DATPTR, the new value is the same for all tasks. There are no “private” variables.<br />

The serial ports are shared (i.e., any task may read from, or write to, any serial port). When a<br />

task writes to a serial port, the characters are all sent to the output buffer at once, but<br />

execution proceeds to the next comm<strong>and</strong> without waiting for those characters to be<br />

transmitted.<br />

The data assignment functions READ, DREAD, or DREADF, <strong>and</strong> TW are also shared between<br />

tasks, but in these cases, the task is not allowed to execute the next comm<strong>and</strong> until the data<br />

has been received <strong>and</strong> assigned. This requires waiting for human or host input, or<br />

thumbwheel strobe time. During this time, that task is “blocked”, <strong>and</strong> that data assignment<br />

function (READ, DREAD, or DREADF, or TW) is owned by the blocked task. If another task is<br />

active, it will continue to execute comm<strong>and</strong>s. If this second task attempts to access a data<br />

assignment function which is still owned by the first task, the second task becomes blocked<br />

also. This situation persists until the first task receives <strong>and</strong> assigns its data. At that point,<br />

ownership of the data assignment function passes to the second task, until it too receives <strong>and</strong><br />

assigns its data. All this blocking <strong>and</strong> ownership is automatic, not requiring coordination by<br />

the user.<br />

Locking Resources to a Specific Task<br />

Examples:<br />

LOCK1,1 locks COM1<br />

LOCK1,0 unlocks COM1<br />

LOCK2,1 locks COM2<br />

LOCK2,0 unlocks COM2<br />

LOCK3,1 locks swapping<br />

LOCK3,0 unlocks swapping<br />

The LOCK comm<strong>and</strong> may be used by a system task to gain or release exclusive ownership of a<br />

resource. This will allow that task to complete a sequence of comm<strong>and</strong>s with that resource<br />

while preventing another task from using the resource in between comm<strong>and</strong>s. Any other task<br />

attempting to access or LOCK that resource will become blocked (i.e., become temporarily<br />

totally inactive) until the resource is released by the task that owns it. Resources which may be<br />

LOCKed are:<br />

• COM1 — the “RS-232” connector or the “ETHERNET” connector<br />

• COM2 — the “RS-232/485” connector<br />

• Task Swapping — When task swapping is locked to a specific task, comm<strong>and</strong><br />

statements in all other tasks will not be executed until the task swapping is again<br />

unlocked. For more information on task swapping, refer to page 214.<br />

NOTE: A resource may be locked by a task only while that task is executing a program. If<br />

program execution is terminated for any reason (e.g., stop, kill, limit, fault, or just reaching the<br />

END of a program), all resources locked by that task will become unlocked.<br />

For example, to report the current position of a robotic arm, one might program:<br />

VAR10 = 1PM<br />

; position of axis one<br />

LOCK1,1<br />

; lock COM1 ("RS-232" port) resource<br />

WRITE "Arm Position is" ; write string<br />

WVAR10<br />

; write position<br />

WRITE "inches\13"<br />

; write string <strong>and</strong> carriage return<br />

LOCK1,0<br />

; release COM1 to other tasks<br />

; Between the LOCK comm<strong>and</strong>s, other tasks will run unless they<br />

; attempt to access COM1, in which case they become<br />

; temporarily blocked.<br />

How Multi-tasking <strong>and</strong> the % Prefix Affect Comm<strong>and</strong>s <strong>and</strong> Responses<br />

Multi-tasking affects many, but not all, of the Gem6K comm<strong>and</strong>s <strong>and</strong> features. The table<br />

below lists the comm<strong>and</strong>s that are affected by multi-tasking <strong>and</strong> the task-identifier (%) prefix.<br />

Any comm<strong>and</strong> that is not listed may be considered unaffected by multi-tasking. Any<br />

Chapter 8. Troubleshooting 211


comm<strong>and</strong> which has motion data (e.g., A, V, D) is only affected if the task has been associated<br />

with motion via the TSKAX comm<strong>and</strong>. Any comm<strong>and</strong> listed below as affected by the % prefix<br />

may also accept the @ character as a task number; in this case, all tasks will be affected by the<br />

comm<strong>and</strong>.<br />

The response (if any) sent to the terminal by the comm<strong>and</strong> will be prefixed with the task<br />

number <strong>and</strong> % sign if the comm<strong>and</strong> had been executed by any task other than Task 0, the<br />

Supervisor Task. For comm<strong>and</strong>s executed in Task 1, if the comm<strong>and</strong> itself had the 1% prefix,<br />

then the response will also have the prefix. Otherwise, the response will not be prefixed.<br />

Therefore, if no multi-tasking is used, no responses will have task prefixes. If multi-tasking is<br />

used, however, you can determine which task originated the response. A response could be<br />

the result of a transfer comm<strong>and</strong> (e.g., TER), a comm<strong>and</strong> with no parameters (e.g. MC),<br />

TRACE output, or an error message.<br />

Comm<strong>and</strong>(s) Effect of % Prefix Effect of Multi-tasking<br />

GOTO, IF, ELSE, NIF,<br />

WHILE, NWHILE, REPEAT,<br />

UNTIL, L, LN, LX<br />

None (ignored)<br />

These comm<strong>and</strong>s direct program flow<br />

only on the task from which they are<br />

executed.<br />

GOSUB, RUN, ,<br />

JUMP, HALT, BP, PS, T,<br />

WAIT, C<br />

COMEXC, COMEXR, COMEXS<br />

Effectively inserts<br />

comm<strong>and</strong> into<br />

numbered task’s<br />

program<br />

Affects mode on<br />

numbered task<br />

S, K Specifies affected<br />

task only<br />

ERROR, ERRORP, TER,<br />

TERF, ER<br />

TCMDER, TSS, TSSF, SS,<br />

TSTAT<br />

TTIM, TIMINT, TIMST,<br />

TIMSTP, TIM<br />

TRACE, TRACEP, TEX,<br />

STEP, #<br />

ONCOND, ONIN, ONP, ONUS,<br />

ONVARA, ONVARB<br />

Affect/report on<br />

numbered task<br />

Report on numbered<br />

task<br />

Comm<strong>and</strong> refers to<br />

timer of numbered<br />

task<br />

Comm<strong>and</strong> refers to<br />

numbered task<br />

Comm<strong>and</strong> refers to<br />

numbered task<br />

These comm<strong>and</strong>s initiate, interrupt or<br />

continue program flow only on<br />

implicitly or explicitly specified task.<br />

These comm<strong>and</strong>s affect program flow<br />

only on implicitly or explicitly specified<br />

task.<br />

These comm<strong>and</strong>s affect program flow<br />

(depending on parameters given)<br />

only on implicitly or explicitly specified<br />

task. A “K” with no prefix or<br />

parameters kills all tasks.<br />

These comm<strong>and</strong>s affect/report error<br />

conditions <strong>and</strong> programs only on<br />

implicitly or explicitly specified task<br />

(each task has its own error status<br />

register <strong>and</strong> error program).<br />

These comm<strong>and</strong>s report comm<strong>and</strong><br />

errors <strong>and</strong> status only on implicitly or<br />

explicitly specified task.<br />

Each task has an independent timer.<br />

Also, TIMST0,# resets the timer to #<br />

msec., TIMST1,# restarts the timer<br />

with the TIM value of task #.<br />

Each task has its own trace <strong>and</strong> step<br />

mode. This allows tracing on a single<br />

task, or combined tasks comm<strong>and</strong>s.<br />

Each task has its own set of ON<br />

conditions <strong>and</strong> its own ONP program.<br />

LIMFNCi-C, LIMFNCi-D,<br />

LIMFNCi-E, LIMFNCi-F,<br />

LIMFNCi-P,<br />

INFNCi-C, INFNCi-D,<br />

INFNCi-E, INFNCi-F,<br />

INFNCi-P,<br />

INSELP, OUTFNCi-C<br />

Comm<strong>and</strong> refers to<br />

numbered task<br />

These functions are task specific. All<br />

others affect the entire controller <strong>and</strong><br />

cannot be affected by the % prefix.<br />

212 Gem6K Series Programmer’s <strong>Guide</strong>


Input <strong>and</strong> Output Functions <strong>and</strong> Multi-tasking<br />

The Gem6K has inputs <strong>and</strong> outputs (onboard <strong>and</strong> on external optional I/O bricks) that may be<br />

assigned various I/O functions with these function assignment comm<strong>and</strong>s:<br />

LIMFNC........Assigns input functions to the dedicated limit inputs on the “LIMITS/HOME”<br />

connectors (factory default functions are the respective R, S, <strong>and</strong> T limit<br />

input functions).<br />

INFNC..........Assigns input functions to the onboard digital inputs (trigger input on the<br />

“TRIGGERS/OUTPUTS” connectors) <strong>and</strong> to the digital inputs on external I/O<br />

bricks.<br />

OUTFNC........Assigns output functions to the onboard digital outputs (outputs on the<br />

“TRIGGERS/OUTPUTS” connectors) <strong>and</strong> to the digital outputs on external I/O<br />

bricks.<br />

The Gem6K’s I/O <strong>and</strong> events involving programmed I/O are related to tasks only if:<br />

• The input or output function assignment is associated with a specific task. For example,<br />

because of the 1% prefix, the 1%INFNC3-F comm<strong>and</strong> assigns the “user fault” function<br />

to onboard input 3 <strong>and</strong> directs its function to be specific to Task 1.<br />

• An input or output is assigned a specific function <strong>and</strong> the input or output is associated<br />

with a specific task. For example, if Task 1 is associated with motion (1%TSKAX1) <strong>and</strong><br />

onboard input 4 is assigned as a “stop” input (INFNC4-D), then when onboard input 4<br />

goes active motion is stopped; thus Task 1 is affected by input 4.<br />

Each input or output group (LIMFNC, INFNC, <strong>and</strong> OUTFNC) is limited to a maximum of 32<br />

function assignments at one time. Exceptions are: function A, LIMFNC functions R, S, <strong>and</strong> T,<br />

<strong>and</strong> INFNC function H. A given input or output may be assigned only one function, although<br />

for task-specific functions, this I/O point may perform the same function for multiple tasks<br />

(by using the % prefix). This only counts as one function against the maximum total of 32,<br />

even though it is shared by multiple tasks. A given I/O point may not perform different<br />

functions for different tasks. Re-assigning a I/O point’s function in any (same or different)<br />

task will result in removing the assignment of the previous function in the previous task(s).<br />

For example:<br />

1%2INFNC4-C ; module 2's 4th input will kill task 1<br />

2%2INFNC4-C ; module 2's 4th input now kills tasks 1 & 2<br />

3%2INFNC4-D ; module 2's 4th input will stop task 3,<br />

; it no longer has a kill function for tasks 1 & 2<br />

Chapter 8. Troubleshooting 213


Multi-Tasking Performance Issues<br />

When is a Task Active<br />

Tasks are always ready to become active if comm<strong>and</strong>ed to do so. No special comm<strong>and</strong> is<br />

required to allow a task to do something. A task is active if it is:<br />

• Executing a program (SS.3=B1)<br />

• Executing a T or WAIT comm<strong>and</strong> (even if not running a program)<br />

• Monitoring drive faults conditions (DRFEN1)<br />

• Monitoring ONCOND conditions (SS.15=B1)<br />

• Waiting in Program Select Mode (INSELP1 <strong>and</strong> SS.18=B1)<br />

• Monitoring ERROR conditions (ERROR has any non-zero bit)<br />

A task becomes active when it receives a comm<strong>and</strong> to perform something from the list above.<br />

A task which is not active does not create any overhead (delays) in comm<strong>and</strong> processing for<br />

tasks which are active. Once a task becomes active, however, it takes its turn in the sequence<br />

of swapping (see below), <strong>and</strong> checks for all of the conditions listed above. This adds a<br />

processing burden which will slow the comm<strong>and</strong> execution rate of programs running in other<br />

tasks.<br />

A task becomes inactive if nothing from the above list is occurring. There is no special<br />

comm<strong>and</strong> “kill task” to disable all these modes/conditions/activities at once. The st<strong>and</strong>ards<br />

methods for terminating these (S, INSELP0, ERROR0, etc.) are needed to make a task<br />

completely inactive, <strong>and</strong> therefore not creating comm<strong>and</strong> processing overhead. Task 0, the<br />

Task Supervisor, will always be active, even if nothing from the above list is occurring,<br />

because Task 0 always checks the input comm<strong>and</strong> buffer for comm<strong>and</strong>s to execute.<br />

The TSWAP comm<strong>and</strong> reports a binary bit pattern indicating the tasks that are currently active.<br />

Bit 1 represents task 1, bit 2 represents task 2, etc. A “1” indicates that the task is active, <strong>and</strong><br />

a “0” indicates that the task is inactive. The SWAP assignment operator allows the same<br />

information to be assigned to a binary variable, or evaluated in a conditional statement such as<br />

IF or WAIT. This is useful for determining which tasks have any activity, whereas the system<br />

status (SS) <strong>and</strong> error status (ER) states reveal exactly what activity a given task has at that<br />

time.<br />

Task Swapping<br />

The Gem6K has only one processor responsible for executing programs, therefore, multiple<br />

tasks are not actually executing simultaneously. Tasks take turns executing when they are<br />

active. A task’s “turn” consists of executing one comm<strong>and</strong> <strong>and</strong> checking its input, output, ON,<br />

ERROR <strong>and</strong> INSELP conditions before relinquishing control to the next task. The process of<br />

changing from one task to the next is called task swapping. The Gem6K determines when to<br />

swap tasks. The user is not required (or allowed) to determine how long a task should run, or<br />

when to relinquish control to another task.<br />

Although the user does not determine how long a task should run, or when to relinquish<br />

control to another task, the number of “turns” a task gets before swapping may be set with the<br />

TSKTRN comm<strong>and</strong>. The default value is one for all active tasks. Thus, each task has equal<br />

weight, swapping after every comm<strong>and</strong>. If a task needs a larger share of processing time<br />

however, the TSKTRN value for that task can be increased. For example, if task 2 issued a<br />

TSKTRN6 comm<strong>and</strong>, while the others stayed at 1, programs running in task 2 would execute<br />

six comm<strong>and</strong>s before relinquishing. The TSKTRN value for a task may be changed at any<br />

time, allowing a task to increase its weight for an isolated section of program statements.<br />

The TTASK comm<strong>and</strong> reports to the display the task number of the task which executed the<br />

214 Gem6K Series Programmer’s <strong>Guide</strong>


comm<strong>and</strong>. This could be used for diagnostic purposes, as a way to indicate which task is<br />

executing a given section of program. The corresponding TASK assignment allows the<br />

program itself to determine which task is executing it. The current task number TASK may be<br />

assigned to a variable or evaluated in a conditional statement such as IF. This allows a single<br />

program to be used as a subroutine called from programs running in all tasks, yet this routine<br />

could contain sections of statements which are executed by some tasks <strong>and</strong> not others.<br />

Task Execution Speed<br />

Two terms describe the execution speed of tasks in multi-tasking environments.<br />

Performance<br />

Performance is a measure of how fast a task executes comm<strong>and</strong>s, <strong>and</strong> could be described in<br />

terms of comm<strong>and</strong>s per second. Because tasks must take turns executing, performance will<br />

decrease when tasks are added. For example, the performance of a task sharing the controller<br />

with two other tasks will be just one third of its performance if it were running by itself. Using<br />

the TSKTRN comm<strong>and</strong> described above, the relative performances of tasks may be altered.<br />

Determinism<br />

Determinism is a measure of how independent the performance of one task is from the<br />

comm<strong>and</strong>s <strong>and</strong> conditions involved in another task. If task swapping were done via a periodic<br />

interrupt (time slicing), task performance would be completely determinate, i.e., each task<br />

would run exactly for its time slice, not more or less. In the Gem6K products, task swapping is<br />

not time sliced, rather each task is allowed to execute one comm<strong>and</strong> <strong>and</strong> check its input,<br />

output, ON, ERROR <strong>and</strong> INSELP conditions before relinquishing control to the next task. For<br />

this reason, the performance of each task is somewhat determined by the comm<strong>and</strong>s <strong>and</strong><br />

conditions underway in the other tasks. Most comm<strong>and</strong>s execute in approximately the same<br />

time. The others (some math comm<strong>and</strong>s, <strong>and</strong> line <strong>and</strong> arc comm<strong>and</strong>s) are broken into sections<br />

with durations that approximate those of the average comm<strong>and</strong> (approximately 2 ms).<br />

Swapping also takes place between these sections, allowing all task performance to be<br />

reasonably determinate regardless of which comm<strong>and</strong>s are being executed by other tasks.<br />

Although time slicing would give completely determined task performance, the task swapping<br />

would need to include additional task save <strong>and</strong> restore functions to completely protect the task<br />

from the interrupt. This additional overhead would effectively rob processor time from the<br />

time slice, resulting in lower task performance. Task swapping in the Gem6K product does not<br />

add this overhead, <strong>and</strong> is therefore extremely efficient, taking less than 0.5% of task execution<br />

time.<br />

Chapter 8. Troubleshooting 215


216 Gem6K Series Programmer’s <strong>Guide</strong>


Troubleshooting<br />

8<br />

CHAPTER EIGHT<br />

Troubleshooting<br />

IN THIS CHAPTER<br />

• Troubleshooting basics ..............................................................................218<br />

• Solutions to common problems (problem/cause/remedy table).................218<br />

• Program debug tools<br />

- Status comm<strong>and</strong>s ............................................................................222<br />

- Error messages................................................................................229<br />

- Trace mode......................................................................................232<br />

- Single-step mode.............................................................................234<br />

- Break points ....................................................................................235<br />

- Simulating programmable I/O activation........................................235<br />

- Simulating analog input activation..................................................237<br />

- Motion Planner’s Panel Gallery......................................................237<br />

• Technical support.......................................................................................238<br />

• Operating system upgrades........................................................................238<br />

• Product return procedure ...........................................................................238


Troubleshooting Basics<br />

When your system does not function properly (or as you expect it to operate), the first thing<br />

that you must do is identify <strong>and</strong> isolate the problem. When you have accomplished this, you<br />

can effectively begin to resolve the problem.<br />

The first step is to isolate each system component <strong>and</strong> ensure that each component functions<br />

properly when it is run independently. You may have to dismantle your system <strong>and</strong> put it<br />

back together piece by piece to detect the problem. If you have additional units available, you<br />

may want to exchange them with existing components in your system to help identify the<br />

source of the problem.<br />

Determine if the problem is mechanical, electrical, or software-related. Can you repeat or recreate<br />

the problem R<strong>and</strong>om events may appear to be related, but they are not necessarily<br />

contributing factors to your problem. You may be experiencing more than one problem. You<br />

must isolate <strong>and</strong> solve one problem at a time.<br />

Log (document) all testing <strong>and</strong> problem isolation procedures. Also, if you are having<br />

difficulty isolating a problem, be sure to document all occurrences of the problem along with<br />

as much specific information as possible. You may need to review <strong>and</strong> consult these notes<br />

later. This will also prevent you from duplicating your testing efforts.<br />

Once you isolate the problem, refer to the problem solutions contained in this chapter. If the<br />

problem persists, contact your local technical support resource (see Technical Support below).<br />

Electrical Noise<br />

If you suspect that the problems are caused by electrical noise, refer to your Gem6K product's<br />

Installation <strong>Guide</strong> for help.<br />

Solutions to Common Problems<br />

NOTES<br />

• Some hardware-related causes are provided because it is sometimes difficult to identify a<br />

problem as either hardware or software related.<br />

• Refer to other sections of this manual for more information on controller programming<br />

guidelines, system set up, <strong>and</strong> general feature implementation. You may also need to<br />

refer to the comm<strong>and</strong> descriptions in the Gem6K Series Comm<strong>and</strong> Reference. Refer to<br />

your product’s Installation <strong>Guide</strong> for hardware-related issues.<br />

Problem Cause Solution<br />

Communication (Ethernet)<br />

errors.<br />

Communication (serial) not<br />

operative, or receive garbled<br />

characters.<br />

1. Ethernet card not installed<br />

correctly.<br />

2. Ethernet IP address<br />

conflict.<br />

3. Connection to Ethernet port<br />

is compromised or miswired.<br />

1. Improper interface<br />

connections or communication<br />

protocol.<br />

1. Refer to the user instructions that came with your Ethernet<br />

card.<br />

2. Change IP address with the NTADDR comm<strong>and</strong>. (make sure it is<br />

matched by the setup in Motion Planner)<br />

3. Refer to the connection instructions in the Installation <strong>Guide</strong>.<br />

1. See troubleshooting section in your product’s Installation <strong>Guide</strong>.<br />

2. COM port disabled. 2.a. Enable serial communication with the E1 comm<strong>and</strong>.<br />

2.b. If using RS-485, make sure the internal jumpers are set<br />

accordingly (see Installation <strong>Guide</strong>). Make sure COM 2 port is<br />

enabled for sending Gem6K language comm<strong>and</strong>s (execute the<br />

PORT2 <strong>and</strong> DRPCHKØ comm<strong>and</strong>s).<br />

3. In daisy chain, unit may not<br />

be set to proper address.<br />

3. Verify DIP switch settings (see Installation <strong>Guide</strong>), verify proper<br />

application of the ADDR comm<strong>and</strong>.<br />

218 Gem6K Series Programmer’s <strong>Guide</strong>


Problem Cause Solution<br />

Direction is reversed.<br />

(stepper axes only)<br />

Direction is reversed, servo<br />

condition is unstable.<br />

(servo axes only)<br />

Distance, velocity, <strong>and</strong> accel<br />

are incorrect as programmed.<br />

1. Phase of step motor<br />

1. Switch A+ with A- connection from drive to motor.<br />

reversed (motor does not<br />

move in the comm<strong>and</strong>ed<br />

direction).<br />

2. Phase of encoder reversed 2. Swap the A+ <strong>and</strong> A– connection at the ENCODER connector.<br />

(reported TPE direction is<br />

reversed).<br />

1. Not tuned properly. 1. Refer to tuning instructions in your product's Installation <strong>Guide</strong>.<br />

2. Phase of encoder reversed. 2. Software remedy for encoder feedback only: For the affected<br />

axis, issue ENCPOL1.<br />

Hardware remedy: If using encoder feedback, swap the A+ <strong>and</strong><br />

A- connections to the Gem6K product. If using ANI feedback,<br />

change the mounting so that the counting direction is reversed.<br />

1. Incorrect resolution setting. 1.a. Stepper axes: Set the resolution on the to match the Gem6K<br />

product’s DRES comm<strong>and</strong> setting (default DRES setting is 4,000<br />

steps/rev).<br />

1.b. Match the Gem6K product's ERES comm<strong>and</strong> setting (default<br />

ERES setting is 4,000 counts/rev) to match the post-quadrature<br />

resolution of the encoder.<br />

ERES values for Compumotor encoders:<br />

Stepper axes:<br />

• RE, -RC, -EC, & -E Series Encoders:..... ERES4000<br />

• HJ Series Encoders:............................... ERES2048<br />

Servo axes (SM, BE, N or J Series Servo Motors):<br />

• SM/N/JxxxxD-xxxx:................................. ERES2000<br />

• SM/N/JxxxxE-xxxx:................................. ERES4000<br />

• BExxxxJ-xxxx: ........................................ ERES8000<br />

2. Wrong scaling values. 3. Check the scaling parameters (SCALE1, SCLA, SCLD, SCLV,<br />

SCLMAS) – see also page 67.<br />

Erratic operation. 1. Electrical Noise. 1. Reduce electrical noise or move product away from noise<br />

source.<br />

2. Improper shielding. 2. Refer to the instructions in your product’s Installation <strong>Guide</strong>.<br />

Feedback device (encoder or<br />

resolver) counts missing.<br />

3. Improper wiring. 3. Check wiring for opens, shorts, & mis-wired connections.<br />

1. Improper wiring. 1. Check wiring.<br />

5. Encoder frequency too<br />

high.<br />

Following problems — See page 196<br />

2. Feedback device slipping. 2. Check <strong>and</strong> tighten feedback device coupling.<br />

3. Encoder too hot. 3. Reduce encoder temperature with heatsink, thermal insulator,<br />

etc.<br />

4. Electrical noise. 4a. Shield wiring.<br />

4b. Use encoder with differential outputs.<br />

5. Peak encoder frequency must be below 8 MHz postquadrature.<br />

Peak frequency must account for velocity ripple.<br />

Index 219


Diagnostic LEDs:<br />

All other LED states indicate<br />

hardware conditions; refer to<br />

your product's Installation<br />

<strong>Guide</strong> for details.<br />

Note: There are two diagnostic LED’s on the Gem6K. The left<br />

h<strong>and</strong> LED shows Green or Red, the right h<strong>and</strong> LED shows Yellow<br />

or Green.<br />

Both LED’s are off. 1. No power. 1. Check 120/240VAC power connection <strong>and</strong> 24VDC power<br />

connection <strong>and</strong> restore power as necessary.<br />

Left LED is Red, Right LED is<br />

Green<br />

Left LED is Red, Right LED is<br />

not illuminated.<br />

Left LED is not illuminated,<br />

Right LED is Yellow.<br />

Left LED is Green, Right LED<br />

is flashing Yellow/Green<br />

Motion does not occur.<br />

1. 24VDC power only, no AC<br />

applied.<br />

2. Operating system download<br />

in progress.<br />

3. Operating system download<br />

aborted before successful<br />

completion.<br />

1. Drive faulted.<br />

2. Operating system download<br />

in progress.<br />

3. Operating system download<br />

aborted before successful<br />

completion.<br />

1. Initialization in progress.<br />

This occurs during power-up<br />

<strong>and</strong> reset.<br />

1. Drive is in auto-run mode<br />

(DMODE13)<br />

1. LED’s not lit at all (no<br />

power) or red LED is<br />

illuminated<br />

2. End-of-travel limits are<br />

active.<br />

1. Check 120/240VAC power connection <strong>and</strong> restore power as<br />

necessary.<br />

2. Wait for download to finish before resetting drive or cycling<br />

power.<br />

3. Contact Applications for help on recovering after an aborted<br />

operating system download (or see web site FAQ).<br />

1. Check status with TASF <strong>and</strong> TASXF comm<strong>and</strong>s to determine<br />

cause <strong>and</strong> correct error condition as necessary.<br />

2. Wait for download to finish before resetting drive or cycling<br />

power.<br />

3. Contact Applications for help on recovering after an aborted<br />

operating system download (or see web site FAQ).<br />

1. Wait for unit to complete its power up or reset process.<br />

1. Change mode back to position mode (DMODE12).<br />

1. See LED troubleshooting as noted above.<br />

2.a. Move load off of limits or disable limits by sending the LHØ<br />

comm<strong>and</strong> to the affected axis.<br />

2.b. Software limits: Set LSPOS to a value greater than LSNEG.<br />

3. Improper wiring. 5. Check enable & limit connections..<br />

4. ENABLE input is not<br />

grounded.<br />

6. Ground the ENABLE input connection.<br />

5. Load is jammed. 7. Remove power <strong>and</strong> clear jam.<br />

6. No torque from motor. 8. See problem: Torque, loss of.<br />

7. Max. position error (SMPER<br />

value) exceeded. (servo axes<br />

only)<br />

9. Check to see if TAS/TASF bit #23 is set, <strong>and</strong> issue the DRIVE1<br />

comm<strong>and</strong> to the axis that exceeded the position error limit.<br />

8. Drive has faulted. 10. Check to see if TAS/TASF bit #14 is set.<br />

Power-up Program does not<br />

execute.<br />

Program access denied:<br />

receive the message<br />

*ACCESS DENIED when<br />

trying to use the DEF, DEL,<br />

ERASE, LIMFNC, INFNC, or<br />

MEMORY comm<strong>and</strong>s.<br />

1. ENABLE input is not<br />

grounded.<br />

2. STARTP program is not<br />

defined.<br />

1. Program security function<br />

has been enabled (INFNCi-Q<br />

or LIMFNCi-Q) <strong>and</strong> the<br />

program access input has not<br />

been activated<br />

1. Ground the ENABLE input to GND <strong>and</strong> reset the product.<br />

2. Check the response to the STARTP comm<strong>and</strong>. If no program is<br />

reported, define the STARTP program <strong>and</strong> reset (see page 13, or<br />

refer to the STARTP comm<strong>and</strong> description).<br />

1.a. Activate the assigned program access input, perform your<br />

programming changes, then deactivate the program access input.<br />

1.b. Refer to the instructions on page 104, or to the INFNC or<br />

LIMFNC comm<strong>and</strong> descriptions.<br />

Program execution: the first<br />

time a program is run, the<br />

move distances are incorrect.<br />

Upon downloading the<br />

program the second time,<br />

move distances are correct.<br />

1. Scaling parameters were<br />

not issued when the program<br />

was downloaded; or scaling<br />

parameters have been<br />

changed since the program<br />

was defined.<br />

Problem Cause Solution<br />

1. Issue the scaling parameters (SCALE1, SCLA, SCLD, SCLV,<br />

SCLMAS) before saving any programs.<br />

Torque, loss of. 1. Improper wiring. 1. Check wiring to the drive, as well as other system wiring.<br />

Velocity & acceleration is<br />

incorrect as programmed.<br />

2. No power to drive. 2. Check power to drive.<br />

3. Drive failed. 3. Check drive status.<br />

4. Drive faulted. 4. Check drive status.<br />

5. Shutdown issued to drive. 5. Re-enable drive by sending the DRIVE1 comm<strong>and</strong>.<br />

See Distance problem noted<br />

above.<br />

220 Gem6K Series Programmer’s <strong>Guide</strong>


Program Debug Tools<br />

After creating your programs, you may need to debug the programs to ensure that they<br />

perform as expected. The Gem6K provides several debugging tools. Detailed descriptions<br />

are provided on the following pages.<br />

• Status Comm<strong>and</strong>s: Use the “Transfer” comm<strong>and</strong>s (e.g., TAS, TSS, TIN) to display<br />

various controller status information. Multi-Tasking: System (TSS) <strong>and</strong> Error (TER)<br />

status information is task specific; to check the status for a specific task, you must<br />

prefix the status comm<strong>and</strong> with the task identifier (e.g., 2%TSS to check the system<br />

status for task 2).<br />

• Error Messages: You can enable the Gem6K to display error messages when it<br />

detects certain programming errors as you enter them or as the program is run. When<br />

the controller detects an error with a comm<strong>and</strong>, you can issue the TCMDER comm<strong>and</strong> to<br />

find out which comm<strong>and</strong> caused the error.<br />

• Trace mode: Trace a program as it is executing.<br />

• Single-Step mode: Step through the program one comm<strong>and</strong> at a time.<br />

• Break Points: Establish locations in your program, where comm<strong>and</strong> processing will<br />

halt <strong>and</strong> a message will be transmitted to the PC.<br />

• Simulate Programmable I/O Activation: You can set the desired state of the<br />

Gem6K’s inputs <strong>and</strong> outputs via software comm<strong>and</strong>s.<br />

• Simulate Analog Input Activation: Without an actual voltage present, you can<br />

simulate a specific voltage on the Gem6K’s analog input channels using the ANIEN<br />

comm<strong>and</strong>.<br />

• Motion Planner’s Panel Gallery: Motion Planner’s Panel Gallery provides an<br />

assortment of test panels you can use to verify various system I/O <strong>and</strong> operating<br />

parameters.<br />

Index 221


Status Comm<strong>and</strong>s<br />

Status comm<strong>and</strong>s are provided to assist your diagnostic efforts. These comm<strong>and</strong>s display<br />

status information such as, axis-specific conditions, general system conditions, error<br />

conditions, etc.<br />

Checking Specific Setup Parameters<br />

One way to check the conditions that are established with a specific setup comm<strong>and</strong> is to<br />

simply type in the comm<strong>and</strong> name without parameters. For example, type “ERES” to check<br />

the encoder resolution setting; the response would look something like: *ERES4ØØØ.<br />

Refer to page 64 for a list of most setup parameters <strong>and</strong> their respective comm<strong>and</strong>s.<br />

TIP: To send a status<br />

comm<strong>and</strong> to the Gem6K<br />

product during program<br />

execution, prefix the<br />

comm<strong>and</strong> with an “!” (e.g.,<br />

!TASF).<br />

Below is a list of the status comm<strong>and</strong>s that are commonly used for diagnostics. Additional<br />

status comm<strong>and</strong>s are available for checking other elements of your application (see List of All<br />

Status Comm<strong>and</strong>s below). For more information on each status comm<strong>and</strong>, refer to the<br />

respective comm<strong>and</strong> description in the Gem6K Series Comm<strong>and</strong> Reference.<br />

SPECIAL NOTATIONS<br />

* The comm<strong>and</strong> has a binary report version (just leave the “F” off when you type<br />

it in—e.g., TAS). This is used more by experienced Gem6K programmers.<br />

Using the binary report comm<strong>and</strong>, you can check the status of one particular<br />

bit (e.g., The TAS.1 comm<strong>and</strong> reports “1” if motor is moving or “Ø” if it is not<br />

moving.). In the binary report the bits are numbered left to right, 1 through n.<br />

A “1” in the binary report correlates to a “YES” in the full text report, <strong>and</strong> a “Ø”<br />

correlates to a “NO” in the full text report.<br />

† The comm<strong>and</strong> has an assignment/comparison operator that uses the bit status<br />

for conditional expressions <strong>and</strong> variable assignments. For example, the<br />

WAIT(1AS.1=bØ) comm<strong>and</strong> pauses program execution until status bit<br />

number 1 (1AS.1) reports a binary zero value (indicates that the motor is notmoving).<br />

See page 7 <strong>and</strong> page 25 for more information on using assignment<br />

<strong>and</strong> comparison operators in conditional expressions <strong>and</strong> variable<br />

assignments.<br />

222 Gem6K Series Programmer’s <strong>Guide</strong>


TASF Reports axis-specific conditions. * (TAS) † (AS)<br />

1. Axis is in motion (comm<strong>and</strong>ed) 17. Positive-direction software limit (LSPOS)<br />

encountered<br />

2. Direction is negative 18. Negative-direction software limit (LSNEG)<br />

encountered<br />

3. Accelerating (n/a to deceleration) 19. Within Deadb<strong>and</strong> (steppers) Within deadb<strong>and</strong><br />

(EPMDB) — steppers only<br />

4. At velocity 20. RESERVED In position (COMEXP)<br />

5. Home Successful (HOM) 21. RESERVED<br />

6. In absolute positioning mode (MA) 22. RESERVED<br />

7. In continuous positioning mode (MC) 23. Position error limit is exceeded (SMPER) (servos)<br />

8. In Jog Mode (JOG) 24. Load is within Target Zone (STRGTD & STRGTV)<br />

(servos)<br />

9. In Joystick Mode (JOY) 25. Target Zone timeout occurred (STRGTT) (servos)<br />

10. RESERVEDIn Encoder Step Mode (ENC) —<br />

steppers<br />

11. Position Maintenance Mode (steppers)Position<br />

Maintenance on (EPM) — steppers<br />

26. Motion suspended, pending GOWHEN<br />

27. RESERVED<br />

12. Stall detected (ESTALL) (steppers) 28. Registration move occurred since last GO<br />

13. Drive shutdown occurred 29. GOWHEN Error: Input or position true before Go<br />

14. Drive fault occurred 30. Pre-emptive (OTF) GO or Registration profile not<br />

possible<br />

15. Positive-direction hardware limit hit 31. Compiled GOBUF profile is executing<br />

16. Negative-direction hardware limit hit 32. RESERVED<br />

Index 223


TASXF Reports extended axis-specific conditions. * (TASX) † (ASX)<br />

1. Motor Fault<br />

2. Low voltage Fault<br />

3. Drive over-temperature Fault<br />

4. RESERVED<br />

5. Resolver failure detected (servos)<br />

6.RESERVED<br />

7. Motor configuration error<br />

8. RESERVED<br />

9. Velocity error limit (SMVER) (servos)<br />

10. Bridge fault<br />

11. Bridge temperature fault (servos)<br />

12. Over-voltage (servos)<br />

13-16. RESERVED<br />

17. Stall detected (ESTALL or DSTALL) (steppers)<br />

18. Override mode invoked<br />

19. Bridge in foldback mode (servos)<br />

20. Power dissipation circuit active (not applicable on some servos)<br />

21. Bad Hall state (servos)<br />

22. Unrecognized hardware (consult factory)<br />

23.User fault input active<br />

24. Keep alive active<br />

25. Power dissipation circuit fault (not applicable on some servos)<br />

26. RESERVED<br />

27. RESERVED<br />

28. Motor configuration warning<br />

29. ORES failure<br />

30. Motor thermal model fault (servos)<br />

31. Comm<strong>and</strong> torque/force at limit (TTRQ=DMTLIM) (servos)<br />

32. RESERVED<br />

224 Gem6K Series Programmer’s <strong>Guide</strong>


TSTAT<br />

Reports general system setup <strong>and</strong> current conditions.<br />

Sample response for the Gem6K:<br />

*Gem6K revision: 92-XXXXXX-01-6.0 Gem6K <strong>GV6K</strong>-L3E D1.72 F1.3<br />

*Ethernet address: xxxxxxxxxx; IP address: 192.168.10.30<br />

*Power-up program assignment (STARTP): SETUP<br />

*ENABLE input OK: Yes<br />

*Drive status (DRIVE): 0<br />

*Drive resolution (DRES): 25000<br />

*Encoder resolution (ERES): 4000<br />

*Hard Limit enable: LH3<br />

*Soft Limit enable: LS0<br />

*Current Motion Attributes:<br />

* Scaling enabled (SCALE1): 0<br />

* Acceleration scaler (SCLA): 4000<br />

* Distance scaler (SCLD): 1<br />

* Velocity scaler (SCLV): 4000<br />

* Comm<strong>and</strong>ed position (TPC): +0<br />

* A10.0000<br />

* AA10.0000<br />

* AD10.0000<br />

* ADA10.0000<br />

* V1.0000<br />

* D+4000<br />

*I/O Status:<br />

* Onboard limit inputs:<br />

* Hardware state (TLIM): 000<br />

* Expansion I/O bricks: See TIO response<br />

*Axis Status (see TASF for full text report):<br />

* Axis #1 (1TAS): 0010_0000_0000_1000_0000_0001_0000_0000<br />

*System Status (This is task 0 status if using multi-tasking.):<br />

*0 Programs Defined; Scale Enable 0<br />

* System status (TSSF): 1000_1100_0000_0000_0000_0100_0000_0000<br />

Index 225


TSSF Reports current system conditions. * (TSS) † (SS)<br />

Multi-tasking: Each task has its own system status; therefore, to check the<br />

system status for a specific task, prefix the TSSF comm<strong>and</strong> (e.g., 2%TSSF).<br />

1. System is ready 17. Loading Thumbwheel Data (TW operator)<br />

2. RESERVED 18. In External Program Select Mode (INSELP)<br />

3. Executing a Program 19. Dwell in Progress (T comm<strong>and</strong>)<br />

4. Last comm<strong>and</strong> was immediate 20. Waiting for RP240 Data (DREAD or DREADF)<br />

5. In ASCII Mode 21. RP240 Connected<br />

6. In Echo Mode (ECHO) 22. Non-volatile Memory Error<br />

7. Defining a Program (DEF) 23. Gathering servo data (servos)<br />

8. In Trace Mode (TRACE, TRACEP) 24. Suspend on Swap (multi-tasking)<br />

9. In Step Mode (STEP) 25. RESERVED<br />

10. FS Translate Mode 26. Suspended on COM1 (multi-tasking)<br />

11. Comm<strong>and</strong> error (check with TCMDER) 27. Suspended on COM2 (multi-tasking)<br />

12. Break Point Active (BP) 28. Program Pending (multi-tasking)<br />

13. Pause Active (PS or pause input) 29. Compiled memory partition is 75% full<br />

14. Wait Active (WAIT) 30. Compiled memory partition is 100% full<br />

15. Monitoring On Conditions (ONCOND) 31. Compile operation (PCOMP) failed<br />

16. Waiting for Data (READ) 32. EXE Failed (multi-tasking)<br />

TINOF Reports the status of the ENABLE input. * (TINO) † (INO)<br />

1-5. RESERVED<br />

6. ENABLE input OK (motion not inhibited<br />

7-8. RESERVED<br />

TFSF Reports Following Mode conditions (details on page 170). * (TFS) † (FS)<br />

1. Follower in ratio move 17. Master position prediction mode enabled (FPPEN)<br />

2. Current ratio is negative 18. Master position filtering mode enabled (FFILT)<br />

3. Follower is changing ratio 19. Performing FRC move<br />

4. Follower at ratio (constant non-zero ratio) 20. RESERVED<br />

5. FOLMAS Active 21. Master window given<br />

6. Following Mode enabled (FOLEN) 22. Inside master window<br />

7. Master is moving 23. OK to do a geared advance (FGADV) move<br />

8. Master direction is negative 24. Geared advance (FGADV) move is underway<br />

9. OK to Shift 25. RESERVED<br />

10. Shifting now 26. Present Following move is limited by FMAXA or FMAXV.<br />

11. FSHFC-based shift move is in progress 27. RESERVED<br />

12. Shift direction is negative 28. RESERVED<br />

13. Master cycle trigger input is pending 29. RESERVED<br />

14. Mas cycle length (FMCLEN) given 30. RESERVED<br />

15. Master cycle position is negative 31. RESERVED<br />

16. Master cycle number is > 0 32. RESERVED<br />

226 Gem6K Series Programmer’s <strong>Guide</strong>


TERF Reports error conditions. ** * (TER) † (ER)<br />

Multi-tasking: Each task has its own error status; therefore, to check the<br />

error status for a specific task, prefix the TERF comm<strong>and</strong> (e.g., 2%TErF).<br />

1. Stall detected. 1st: Enable Stall Detection (ESTALL or DSTALL).<br />

2. Hardware end-of-travel limit encountered. 1st: Enable hard limits (LH).<br />

3. Software end-of-travel limit encountered. 1st: Enable hard limits (LH).<br />

4. Drive Fault is active.<br />

5. RESERVED<br />

6. A programmable input, defined as a “kill” input, is active.<br />

7. A programmable input, defined as a “user fault” input, is active.<br />

8. A programmable input, defined as a “stop” input, is active.<br />

9. ENABLE input not grounded.<br />

10. Pre-emptive (OTF) GO or Registration profile not possible.<br />

11. Target Zone settling timeout period (STRGTT) is exceeded. — servo only<br />

12. Max. position error (SMPER value) is exceeded. — servo only<br />

13. RESERVED<br />

14. GOWHEN condition already true.<br />

15. RESERVED<br />

16. Bad comm<strong>and</strong> detected (use TCMDER to identify the bad comm<strong>and</strong>).<br />

17. RESERVED<br />

18. Expansion I/O brick is disconnected or has lost power.<br />

19-22. RESERVED<br />

23. Client connect error<br />

24. Client polling error<br />

25-32. RESERVED<br />

** The error condition will not be reported until you enable the respective error-checking bit with the ERROR<br />

comm<strong>and</strong> (for details, see page 30 or the ERROR comm<strong>and</strong> description). NOTE that when the errorchecking<br />

bit is enabled <strong>and</strong> the error occurs, the controller will branch to the “error” program that you<br />

assigned with the ERRORP comm<strong>and</strong>.<br />

Other status comm<strong>and</strong>s commonly used for diagnostics:<br />

TDIR........ Identifies the name <strong>and</strong> number of all programs residing in the Gem6K product's memory. Also<br />

reports percent of available memory for programs <strong>and</strong> compiled path segments.<br />

TCMDER.... Identifies the bad comm<strong>and</strong> that caused the error prompt (). (see page 232 for details)<br />

TEX .......... Execution status (<strong>and</strong> line of code) of the current program in progress. Task specific.<br />

TIN .......... Binary report of all programmable <strong>and</strong> trigger inputs (“1” = active, “Ø“ = inactive). INFNC also<br />

reports the state <strong>and</strong> programmed function of each input. (see page 91 for bit assignments)<br />

TOUT........ Binary report of all programmable <strong>and</strong> auxiliary outputs (“1” = active, “Ø“ = inactive). OUTFNC<br />

also reports the state <strong>and</strong> programmed function of each output. (see page 91 for bit<br />

assignments)<br />

TLIM........ Binary report of all limit inputs (“1” = active, “Ø“ = inactive). LIMFNC also reports the state <strong>and</strong><br />

programmed function of each limit input. (see page 91 for bit assignments)<br />

TIO .......... Reports current contents on all expansion I/O bricks connected to the Gem6K. Includes current<br />

state <strong>and</strong> function of the digital inputs <strong>and</strong> outputs, as well as voltage of analog inputs.<br />

TPER........ (servo axes) Reports the difference between the comm<strong>and</strong>ed position <strong>and</strong> the actual position<br />

as measure by the feedback device.<br />

TPC .......... Current comm<strong>and</strong>ed position.<br />

TPE .......... Current position of the encoder.<br />

TFB .......... (servo axes) Current position of the feedback device selected with the last SFB comm<strong>and</strong>.<br />

TPMAS...... Current position of the Following master<br />

TPSLV...... Current position of the Following slave<br />

TNMCY...... Current master cycle number.<br />

TNT .......... Reports the current Ethernet conditions (Ethernet enabled/disabled, IP address, Ethernet MAC<br />

address, Ethernet cable connected/disconnected).<br />

Index 227


List of All Status<br />

Comm<strong>and</strong>s<br />

SPECIAL NOTATIONS<br />

* The comm<strong>and</strong> responds with a binary report. This is used more by experienced Gem6K<br />

programmers. Using the bit select operator (.), you can check the status of one particular bit<br />

(e.g., The TAS.1 comm<strong>and</strong> reports “1” if the motor is moving or “Ø” if it is not moving.). In the<br />

binary report, the bits are numbered left to right, 1 through n. A “1” in the binary report<br />

correlates to a “YES” in the full text report, <strong>and</strong> a “Ø” correlates to a “NO” in the full text report.<br />

∆ The comm<strong>and</strong> has a full-text report version (just add an “F” when you type it in—e.g., TASF).<br />

This makes it easier to check status information without having to look up the purpose of each<br />

status bit. (see full-text descriptions, beginning on page 222)<br />

† The comm<strong>and</strong> has an assignment/comparison operator that uses the bit status for conditional<br />

expressions <strong>and</strong> variable assignments. For example, the WAIT(1AS.1=bØ) pauses progress<br />

execution until the status bit number 1 (1AS.1) reports a binary zero value (indicates that the<br />

axis is not-moving). See page 7 <strong>and</strong> page 25 for more information on using assignment <strong>and</strong><br />

comparison operators in conditional expressions <strong>and</strong> variable assignments.<br />

COMMAND STATUS SUBJECT<br />

TANI...............Voltage of ANI analog inputs on EVM32 bricks (servo products with ANI option) †<br />

TANO...............Voltage of ANO analog inputs on EVM32 bricks †<br />

TAS .................Binary Report of Axis Status * ∆ †<br />

TASX .............Binary Report of Axis Status – extended * ∆ †<br />

TCMDER...........Comm<strong>and</strong> Error (view comm<strong>and</strong> that caused the error prompt)<br />

TDIR...............Program Directory <strong>and</strong> Available Memory<br />

TDPTR.............Data Pointer Status †<br />

TER .................Error Status * ∆ †<br />

TEX .................Program Execution Status †<br />

TFB .................Position of Selected Feedback Devices †<br />

TFS .................Binary Report of Following Status * ∆ †<br />

TGAIN.............Current Value of Active Servo Gains<br />

TIN .................Binary Report of Status of Programmable Inputs * †<br />

TINO...............Status of the ENABLE input (bit #6) * ∆ †<br />

TIO .................Report of all I/O on expansion I/O bricks<br />

TLABEL...........Defined Labels (names of)<br />

TLIM...............Binary Report of Hardware Status of All Limit Inputs †<br />

TMEM...............Memory Usage (partition <strong>and</strong> available memory)<br />

TNMCY.............Master Cycle Number †<br />

TNT .................Current Ethernet Conditions, including the TNTMAC report<br />

TNTMAC...........Ethernet Address<br />

TOUT...............Binary Report of Status of Programmable Outputs * †<br />

TPANI.............Position of ANI Inputs †<br />

TPC .................Comm<strong>and</strong>ed Position †<br />

TPCC...............Captured Comm<strong>and</strong>ed Position †<br />

TPCE...............Captured Encoder Position †<br />

TPCME.............Captured Master Encoder Position †<br />

TPCMS.............Captured Master Cycle Position †<br />

TPE .................Position of Encoder †<br />

TPER...............Position Error †<br />

TPMAS.............Position of Master Axis †<br />

TPME...............Position of Master Encoder †<br />

TPROG.............Contents of a Program<br />

TPSHF.............Net Position Shift †<br />

TPSLV.............Current Comm<strong>and</strong>ed Position of the Slave †<br />

TREV ...............Firmware Revision Level<br />

TSC .................Binary Report of Controller Status * ∆ †<br />

TSCAN.............Scan Time of Last PLC Program<br />

TSGSET...........Servo Gain Sets<br />

TSEG ...............Number of Free Segment Buffers †<br />

TSS .................Binary Report of System Status * ∆ †<br />

TSTAT.............Statistics<br />

TSTLT.............Settling Time<br />

TSWAP.............Identify Currently Active Tasks (in multi-tasking) * †<br />

TTASK.............Task Number of the program that executes this comm<strong>and</strong> †<br />

TTIM ...............Time Value †<br />

TTRIG.............Status of “Trigger Interrupt” Activation * †<br />

TUS .................User Status * †<br />

TVEL ...............Current Comm<strong>and</strong>ed Velocity †<br />

TVELA.............Current Actual Velocity †<br />

TVMAS.............Current Velocity of the Master Axis †<br />

228 Gem6K Series Programmer’s <strong>Guide</strong>


Error Messages<br />

Depending on the error level setting (set with the ERRLVL comm<strong>and</strong>), when a programming error is created, the Gem6K will<br />

respond with an error message <strong>and</strong>/or an error prompt. A list of all possible error messages is provided in a table below. The<br />

default error prompt is a question mark (), but you can change it with the ERRBAD comm<strong>and</strong> if you wish.<br />

At error level 4 (ERRLVL4—the factory default setting) the Gem6K responds with both the error message <strong>and</strong> the error prompt.<br />

At error level 3 (ERRLVL3), the Gem6K responds with only the error prompt.<br />

Error Response<br />

ACCESS DENIED<br />

Possible Cause<br />

Program security feature enabled, but program access input (INFNCi-Q) not<br />

activated.<br />

ALREADY DEFINED FOR THUMBWHEELS Attempting to assign an I/O function to an I/O that is already defined as a<br />

thumbwheel I/O.<br />

ALTERNATIVE TASK NOT ALLOWED<br />

Attempting to execute a LOCK comm<strong>and</strong> directed to another task.<br />

AXIS NOT READY<br />

Compiled Profile path compilation error.<br />

COMMAND NOT IMPLEMENTED<br />

Comm<strong>and</strong> is not applicable to the Gem6K Series product.<br />

COMMAND NOT ALLOWED IN PROGRAM<br />

Comm<strong>and</strong> is not allowed inside a program definition (between DEF <strong>and</strong> END).<br />

COMMAND/DRIVE MISMATCH<br />

The comm<strong>and</strong> (or ≥ one field in the comm<strong>and</strong>) is not appropriate to the<br />

AXSDEF configuration (e.g., attempting to execute a servo tuning comm<strong>and</strong> on<br />

a stepper axis)<br />

ERROR: MOTION ENDS IN NON-ZERO<br />

VELOCITY - AXIS N<br />

Compiled Motion: The last GOBUF segment within a PLOOP/PLN loop does not<br />

end at zero velocity, or there is no final GOBUF segment placed outside the loop.<br />

FOLMAS NOT SPECIFIED<br />

No FOLMAS for the axis is currently specified. It will occur if FMCNEW, FSHFC, or<br />

FSHFD comm<strong>and</strong>s are executed <strong>and</strong> no FOLMASØ comm<strong>and</strong> was executed, or<br />

FOLMAS0 was executed.<br />

INCORRECT AXIS<br />

Axis specified is incorrect.<br />

INCORRECT BRICK NUMBER<br />

Attempted to execute a comm<strong>and</strong> that addresses an I/O brick that is not<br />

connected to your Gem6K.<br />

INCORRECT DATA<br />

Incorrect comm<strong>and</strong> syntax.<br />

Following: Velocity (V), acceleration (A) or deceleration (AD) comm<strong>and</strong> is zero<br />

(used by FSHFC & FSHFD).<br />

INPUT(S) NOT DEFINED AS<br />

JOYSTICK INPUT<br />

Attempted to execute JOYCDB, JOYCTR, JOYEDB, or JOYZ before executing<br />

JOYAXH or JOYAXL to assign the analog input to an axis.<br />

INSUFFICIENT MEMORY<br />

Not enough memory for the user program or compiled profile segments. This<br />

may be remedied by reallocating memory (see MEMORY comm<strong>and</strong> description).<br />

INVALID COMMAND<br />

Comm<strong>and</strong> is invalid because of existing conditions<br />

Index 229


Programming Error Messages (continued)<br />

Error Response<br />

INVALID CONDITIONS FOR COMMAND<br />

INVALID CONDITIONS FOR<br />

S_CURVE ACCELERATION—FIELD n<br />

INVALID DATA<br />

Possible Cause<br />

System not ready for comm<strong>and</strong> (e.g., LN comm<strong>and</strong> issued before the L<br />

comm<strong>and</strong>).<br />

Following (these conditions can cause an error during Following):<br />

• The FOLMD value is too small to achieve the preset distance <strong>and</strong> still<br />

remain within the FOLRN/FOLRD ratio.<br />

• A phase shift cannot be performed:<br />

FSHFD Error if already shifting or performing other time based move.<br />

FSHFC .... Error if currently executing a FSHFD move, or if currently<br />

executing another FSHFC move in the opposite direction.<br />

• The FOLEN1 comm<strong>and</strong> was given while a profile was suspended by a<br />

GOWHEN.<br />

Average (AA) acceleration or deceleration comm<strong>and</strong> (e.g., AA, ADA, HOMAA,<br />

HOMADA, etc.) with a range that violates the equation ½A ≤ AA ≤ A (A is the<br />

max. accel or decel comm<strong>and</strong>—e.g., A, AD, HOMA, HOMAD, etc.)<br />

Data for a comm<strong>and</strong> is out of range.<br />

Following (these conditions can cause an error during Following):<br />

• The parameter supplied with the comm<strong>and</strong> is valid.<br />

FFILT Error if: smooth number is not 0-4<br />

FMCLEN .. Error if: master steps > 999999999 or negative<br />

FMCP....... Error if: master steps > 999999999 or < -999999999<br />

FOLMD .... Error if: master steps > 999999999 or negative<br />

FOLRD .... Error if: master steps > 999999999 or negative<br />

FOLRN .... Error if: follower steps > 999999999 or negative<br />

FSHFC .... Error if: number is not 0-3<br />

FSHFD .... Error if: follower steps > 999999999 or < -999999999<br />

GOWHEN .. Error if: position > 999999999 or < -999999999<br />

WAIT....... Error if: position > 999999999 or < -999999999<br />

• Error if a GO comm<strong>and</strong> is given in the preset positioning mode (MCØ) <strong>and</strong>:<br />

FOLRN = zero<br />

FOLMD = zero, or too small<br />

(see Following chapter on page 177)<br />

INVALID FOLMAS SPECIFIED<br />

INVALID RATIO<br />

Following: An illegal master was specified in FOLMAS. A follower may never<br />

use its own comm<strong>and</strong>ed position or feedback source as its master.<br />

Following: Error if the FOLRN:FOLRD ratio after scaling is > 127 when a GO is<br />

executed<br />

INVALID TASK IDENTIFIER Attempting to launch a PEXE or EXE comm<strong>and</strong> into the supervisor task (task 0).<br />

LABEL ALREADY DEFINED<br />

MASTER SLAVE DISTANCE MISMATCH<br />

Defining a program or label with an existing program name or label name<br />

Attempting a preset Following move with a FOLMD value that is too small<br />

MAXIMUM COMMAND LENGTH EXCEEDED Comm<strong>and</strong> exceeds the maximum number of characters<br />

MAXIMUM COUNTS PER SECOND<br />

EXCEEDED<br />

MOTION IN PROGRESS<br />

Velocity value is greater than 1,600,000 counts/sec<br />

Attempting to execute a comm<strong>and</strong> not allowed during motion (see Restricted<br />

Comm<strong>and</strong>s During Motion on page 17.)<br />

Following: The FOLEN1 comm<strong>and</strong> was given while that follower was moving in<br />

a non-Following mode.<br />

230 Gem6K Series Programmer’s <strong>Guide</strong>


Programming Error Messages (continued)<br />

Error Response<br />

NEST LEVEL TOO DEEP<br />

NO MOTION IN PROGRESS<br />

NO PATH SEGMENTS DEFINED<br />

NO PROGRAM BEING DEFINED<br />

NOT ALLOWED IF SFBØ<br />

NOT ALLOWED IN PATH<br />

NOT DEFINING A PATH<br />

NOT VALID DURING FOLLOWING<br />

MOTION<br />

NOT VALID DURING RAMP<br />

OUTPUT USED AS OUTFNC<br />

PATH ALREADY MOVING<br />

PATH NOT COMPILED<br />

STRING ALREADY DEFINED<br />

STRING IS A COMMAND<br />

UNDEFINED LABEL<br />

WARNING: POINTER HAS WRAPPED<br />

AROUND TO DATA POINT 1<br />

WARNING: ENABLE INPUT INACTIVE<br />

WARNING: DEFINED WITH ANOTHER<br />

TW/PLC<br />

Possible Cause<br />

IFs, REPEATs, WHILEs, or GOSUBs nested greater than 16 levels (for each type)<br />

Attempting to execute a comm<strong>and</strong> that requires motion, but motion is not in<br />

progress<br />

Compiled Profile compilation error<br />

END comm<strong>and</strong> issued before a DEF comm<strong>and</strong><br />

Changes to tuning comm<strong>and</strong>s <strong>and</strong> SMPER are not allowed if SFBØ is selected<br />

Compiled Profile path compilation error<br />

Executing a compiled profile comm<strong>and</strong> while not in a path<br />

A GO comm<strong>and</strong> was given while moving in the Following mode (FOLEN1) <strong>and</strong><br />

while in the preset positioning mode (MCØ).<br />

A GO comm<strong>and</strong> was given while moving in a Following ramp <strong>and</strong> while in the<br />

continuous positioning mode (MC1). Following status (FS) bit #3 will be set to 1.<br />

A FOLEN comm<strong>and</strong> was given during one of these conditions:<br />

• During a shift (FSHFC or FSHFD)<br />

• During a change in ratio (FOLRN/FOLRD)<br />

• During deceleration to a stop<br />

Attempted to change an output that is not a “general purpose” (OUTFNCi-A)<br />

output (see page 107)<br />

Compiled Profile compilation error<br />

Attempting to execute a individual profile that has not been compiled<br />

A string (program name or label) with the specified name already exists<br />

Defining a program or label that is a comm<strong>and</strong> or a variant of a comm<strong>and</strong><br />

Comm<strong>and</strong> issued to product is not a comm<strong>and</strong> or program name<br />

During the process of writing data (DATTCH) or recalling data (DAT), the pointer<br />

reached the last data element in the program <strong>and</strong> automatically wrapped<br />

around to the first datum in the program<br />

ENABLE input is no longer connected to ground (GND)<br />

Duplicate I/O in multiple thumbwheel definitions<br />

Index 231


Identifying Bad<br />

Comm<strong>and</strong>s<br />

To facilitate program debugging, the Transfer Comm<strong>and</strong> Error (TCMDER) comm<strong>and</strong> allows<br />

you to display the first comm<strong>and</strong> that the controller detects as an error. This is especially<br />

useful if you receive an error message when running or downloading a program, because it<br />

catches <strong>and</strong> remembers the comm<strong>and</strong> that caused the error.<br />

Using Motion Planner:<br />

If you are typing the comm<strong>and</strong> in a live terminal emulator session, the controller will<br />

detect the bad comm<strong>and</strong> <strong>and</strong> respond with an error message, followed by the ERRBAD<br />

error prompt (). If the bad comm<strong>and</strong> was detected on download, the bad comm<strong>and</strong><br />

is reported automatically (see example below).<br />

NOTE: If you are not using Motion Planner, you’ll have to type in the TCMDER<br />

comm<strong>and</strong> at the error prompt to display the bad comm<strong>and</strong>.<br />

Once a comm<strong>and</strong> error has occurred, the comm<strong>and</strong> <strong>and</strong> its fields are stored <strong>and</strong> system status<br />

bit #11 (reported in the TSSF, TSS <strong>and</strong> SS comm<strong>and</strong>s) is set to 1, <strong>and</strong> error status bit #16<br />

(reported in the TERF, TER <strong>and</strong> ER comm<strong>and</strong>s) is set to 1. The status bit remains set until the<br />

TCMDER comm<strong>and</strong> is issued.<br />

Example Error<br />

Scenario<br />

1. In Motion Planner’s program editor, create <strong>and</strong> save a program with a programming error:<br />

DEL badprg ; Delete a program before defining <strong>and</strong> downloading<br />

DEF badprg ; Begin definition of program called badprg<br />

MA1<br />

; Select the absolute preset positioning mode<br />

A25<br />

; Set acceleration<br />

AD11<br />

; Set deceleration<br />

V5<br />

; Set velocity<br />

VAR1=0 ; Set variable #1 equal to zero<br />

GO1<br />

; Initiate move on axis<br />

IF(VAR1 *NO ERRORS<br />

*INCORRECT DATA<br />

> *IF(VAR1<br />

Trace Mode<br />

Step 1<br />

You can use the Trace mode to debug a program. The Trace mode allows you to track,<br />

comm<strong>and</strong>-by-comm<strong>and</strong>, the entire program as it runs. The Gem6K will display all of the<br />

comm<strong>and</strong>s as they are executed. NOTE: Program tracing is also available on the RP240<br />

display (see page 127).<br />

The example below demonstrates the Trace mode.<br />

Create a program called prog1:<br />

DEF prog1<br />

; Begin definition of program prog1<br />

A10 ; Acceleration is 10<br />

AD10 ; Deceleration is 10<br />

V5 ; Velocity is 5<br />

L3<br />

; Loop 3 times<br />

GOSUB prog3<br />

; Gosub to program #3 (prog3)<br />

LN<br />

; End the loop<br />

END<br />

; End definition of program prog1<br />

232 Gem6K Series Programmer’s <strong>Guide</strong>


Step 2<br />

Create a program prog3:<br />

DEF prog3<br />

; Begin definition of program prog3<br />

D50000 ; Sets the distance to 50,000<br />

GO1<br />

; Initiates motion<br />

END<br />

; End definition of program prog3<br />

Step 3<br />

Enable the Trace Mode:<br />

TRACE1<br />

; Enables the Trace mode<br />

Step 4<br />

Execute the program prog1: (each comm<strong>and</strong> in the program is displayed as it is executed)<br />

EOT13,10,0<br />

; Set End-of-Transmission characters to ,<br />

RUN prog1<br />

; Run program prog1<br />

The response will be:<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG3<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

COMMAND=A10.0000<br />

COMMAND=AD10.0000<br />

COMMAND=V5.0000<br />

COMMAND=L3<br />

COMMAND=GOSUB PROG3 LOOP COUNT=1<br />

COMMAND=D50000 LOOP COUNT=1<br />

COMMAND=GO1 LOOP COUNT=1<br />

COMMAND=END LOOP COUNT=1<br />

COMMAND=LN LOOP COUNT=1<br />

COMMAND=GOSUB PROG3 LOOP COUNT=2<br />

COMMAND=D50000 LOOP COUNT=2<br />

COMMAND=GO1 LOOP COUNT=2<br />

COMMAND=END LOOP COUNT=2<br />

COMMAND=LN LOOP COUNT=2<br />

COMMAND=GOSUB PROG3 LOOP COUNT=3<br />

COMMAND=D50000 LOOP COUNT=3<br />

COMMAND=GO1 LOOP COUNT=3<br />

COMMAND=END LOOP COUNT=3<br />

COMMAND=LN LOOP COUNT=3<br />

COMMAND=END<br />

The format for the Trace mode display is:<br />

Program Name ... Comm<strong>and</strong> ... Loop Count or<br />

Program Name ... Comm<strong>and</strong> ... Repeat Count or<br />

Program Name ... Comm<strong>and</strong> ... While Count<br />

Step 5<br />

Exit the Trace Mode.<br />

TRACE0<br />

; Disables the Trace mode<br />

Tracing Program<br />

Flow<br />

Using the TRACEP comm<strong>and</strong>, you can monitor the entry <strong>and</strong> exit of programs <strong>and</strong> their<br />

associated nest levels.<br />

For example, let’s assume these four programs are defined:<br />

DEF PICK1<br />

GOSUB PICK2<br />

GOTO PICK3<br />

END<br />

DEF PICK2<br />

GOSUB PICK4<br />

END<br />

DEF PICK3<br />

END<br />

DEF PICK 4<br />

END<br />

Index 233


Now we’ll enable the TRACEP mode <strong>and</strong> launch the calling program (PICK1) to start tracing<br />

the program flow:<br />

>TRACEP1<br />

>PICK1<br />

*INITIATE PROGRAM: PICK1 NEST=1<br />

*INITIATE PROGRAM: PICK2 NEST=2<br />

*INITIATE PROGRAM: PICK4 NEST=3<br />

*END: PROGRAM NOW: PICK2 NEST=2<br />

*END: PROGRAM NOW: PICK1 NEST=1<br />

*INITIATE PROGRAM: PICK3 NEST=1<br />

*END:<br />

PROGRAM EXECUTION TERMINATED<br />

>TRACEP0<br />

Single-Step Mode<br />

Step 1<br />

The Single-Step mode allows you to execute one comm<strong>and</strong> at a time. Use the STEP<br />

comm<strong>and</strong> to enable Single-Step mode. To execute a comm<strong>and</strong>, you must use the !# sign. By<br />

entering a !# followed by a delimiter, you will execute the next comm<strong>and</strong> in the sequence. If<br />

you follow the !# sign with a number (n) <strong>and</strong> a delimiter, you will execute the next n<br />

comm<strong>and</strong>s. The Single-Step mode is demonstrated below (using the programs from the Trace<br />

mode above).<br />

Enable the Single-Step Mode:<br />

STEP1 ; Enables Single Step Mode<br />

Step 2<br />

Step 3<br />

Step 4<br />

Step 5<br />

Enable the Trace Mode <strong>and</strong> begin execution of program prog1:<br />

TRACE1<br />

RUN prog1<br />

; Enables the Trace mode<br />

; Run program called prog1<br />

Execute one comm<strong>and</strong> at a time by using the !# comm<strong>and</strong>:<br />

!# ; Executes one comm<strong>and</strong><br />

The response will be:<br />

*PROGRAM=PROG1<br />

COMMAND=A10.0000<br />

To execute more than one comm<strong>and</strong> at a time, follow the !# sign with the number of<br />

comm<strong>and</strong>s you want executed:<br />

!#3 ; Executes three comm<strong>and</strong>s<br />

The response will be:<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

*PROGRAM=PROG1<br />

COMMAND=AD10.0000<br />

COMMAND=V5.0000<br />

COMMAND=L3<br />

To complete the sequence, use the # sign until all the comm<strong>and</strong>s are completed (!#16 would<br />

complete the example).<br />

To exit Single-Step mode, type:<br />

STEP0 ; Disables Single Step Mode<br />

234 Gem6K Series Programmer’s <strong>Guide</strong>


Break Points<br />

The Break Point (BP) comm<strong>and</strong> allows you to establish a location in the program where<br />

comm<strong>and</strong> processing will halt <strong>and</strong> a message will be transmitted to the PC. There are 32 break<br />

points available, BP1 to BP32, all transmitting the message *BREAKPOINT NUMBER n<br />

where n is the break point number.<br />

After halting at a break point, comm<strong>and</strong> processing can be resumed by issuing an immediate<br />

continue (!C) comm<strong>and</strong>.<br />

The break point comm<strong>and</strong> is useful for stopping a program at specific locations in order to test<br />

status for debugging or other purposes.<br />

Example DEF prog1 ; Begin definition of program named prog1<br />

D50000 ; Set distance: 50000 units on axis 1<br />

MA1 ; Absolute mode for axes 1<br />

GO1 ; Initiate motion on axes 1<br />

IF(1PC>40000) ; Compare axis 1 comm<strong>and</strong>ed position to 40000<br />

BP1 ; If motor position is > 40000 units, set break point #1<br />

NIF<br />

; End IF statement<br />

D80000 ; Set distance: 80000 units on axis 1<br />

GO1 ; Initiate motion on axes 1<br />

BP2 ; Set break point #2<br />

END<br />

; End program definition<br />

RUN prog1 ; Execute program prog1<br />

In the example above, when the IF statement evaluates true, the controller will transmit the<br />

message *BREAKPOINT NUMBER 1. A !C comm<strong>and</strong> must be issued before processing will<br />

continue. Once processing has continued, the second break point comm<strong>and</strong> will be<br />

encountered, <strong>and</strong> the message *BREAKPOINT NUMBER 2 will be transmitted, <strong>and</strong> processing<br />

of comm<strong>and</strong>s will pause until a second !C comm<strong>and</strong> is received.<br />

Simulating I/O Activation<br />

If your application has inputs <strong>and</strong> outputs that integrate the Gem6K with other components in<br />

your system, you can simulate the activation of these inputs <strong>and</strong> outputs so that you can run<br />

your programs without activating the rest of your system. Thus, you can debug your program<br />

independent of the rest of your system.<br />

There are two comm<strong>and</strong>s that allow you to simulate the input <strong>and</strong> output states desired. The<br />

INEN comm<strong>and</strong> controls the inputs <strong>and</strong> the OUTEN comm<strong>and</strong> controls the outputs.<br />

NOTE<br />

The INEN comm<strong>and</strong> has no effect on the trigger inputs when they are configured as trigger<br />

interrupt (position latch) inputs with the INFNCi-H comm<strong>and</strong>.<br />

The OUTEN comm<strong>and</strong> has no effect on the onboard outputs when they are configured as<br />

output-on-position outputs with the OUTFNCi-H comm<strong>and</strong>.<br />

You will generally use the INEN comm<strong>and</strong> to cause a specific input pattern to occur so that a<br />

program can be run or an input condition can become true. Use the OUTEN comm<strong>and</strong> to<br />

simulate the output patterns that are needed, <strong>and</strong> to prevent an external portion of your system<br />

from being initiated by an output transition. When you execute your program, the OUTEN<br />

comm<strong>and</strong> overrides the outputs <strong>and</strong> holds them in a defined state.<br />

Index 235


Outputs<br />

Step 1<br />

Step 2<br />

Step 3<br />

Step 4<br />

The following steps describe the use <strong>and</strong> function of the OUTEN comm<strong>and</strong><br />

Display the state of the outputs with the TOUT comm<strong>and</strong>:<br />

TOUT<br />

The response will be:<br />

*TOUT0000_000<br />

; Displays the state of the outputs<br />

Display the function of the outputs with the OUTFNC comm<strong>and</strong>:<br />

OUTFNC<br />

; Displays the state of the outputs<br />

The response will be:<br />

*OUTFNC1-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC2-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC3-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC4-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC5-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC6-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC7-A FAULT OUTPUT - STATUS OFF<br />

Disable outputs 1 - 4, leave them in the ON state.<br />

OUTEN1111 ; Disable outputs 1-4, leave them in ON state<br />

OUTFNC ; Displays the state of the outputs<br />

The response will be:<br />

*OUTFNC1-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC2-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC3-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC4-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC5-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC6-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC7-A FAULT OUTPUT - STATUS OFF<br />

Change the output state using the OUT comm<strong>and</strong>. The status of all outputs, including auxiliary<br />

outputs, is displayed. The output bit pattern varies by product. To determine the bit pattern for<br />

your product, refer to the OUTEN comm<strong>and</strong> description.<br />

OUT1010 ; Activates outputs 1 <strong>and</strong> 3, deactivates outputs 2 <strong>and</strong> 4<br />

Display the state of the outputs with the OUTFNC comm<strong>and</strong>.<br />

OUTFNC<br />

; Displays the state of the outputs<br />

The response will be:<br />

*OUTFNC1-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC2-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC3-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC4-A PROGRAMMABLE OUTPUT - STATUS DISABLED ON<br />

*OUTFNC5-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC6-A PROGRAMMABLE OUTPUT - STATUS OFF<br />

*OUTFNC7-A FAULT OUTPUT - STATUS OFF<br />

Notice that output 2 <strong>and</strong> output 4 have not changed state because the output (OUT) comm<strong>and</strong><br />

has no effect on disabled outputs.<br />

To re-enable the outputs, use the OUTEN comm<strong>and</strong>.<br />

OUTENEEEE ; Re-enables outputs 1-4<br />

236 Gem6K Series Programmer’s <strong>Guide</strong>


Inputs<br />

Step 1<br />

Step 2<br />

Step 3<br />

Step 4<br />

Step 5<br />

The steps below describe the use <strong>and</strong> function of the INEN comm<strong>and</strong>. You can use it to cause<br />

an input state to occur. The inputs will not actually be in this state but the Gem6K treats them<br />

as if they are in the given state <strong>and</strong> will use this state to execute its program.<br />

This program will wait for an input state to occur <strong>and</strong> will then make a preset move:<br />

INFNC1-A ; Onboard input #1 is has no function<br />

INFNC2-A ; Onboard input #2 is has no function<br />

INLVL00 ; Set input #1 <strong>and</strong> #2 active level to low<br />

DEF prog8 ; Begin definition of program prog8<br />

A100 ; Acceleration is set to 100<br />

AD100 ; Deceleration is 100<br />

V5 ; Velocity is 5<br />

D25000 ; Distance is 25,000<br />

WAIT(IN=b11) ; Waits for the input state to be 11<br />

GO1<br />

; Initiate motion<br />

END<br />

; End definition of program prog8<br />

Enable the Trace mode so that you can view the program as it is executed:<br />

TRACE1 ; Enables the trace mode<br />

Execute the program:<br />

RUN prog8 ; Runs program prog8<br />

The program will execute until the WAIT(IN=b11) comm<strong>and</strong> is encountered. The program<br />

will then pause, waiting for the input condition to be satisfied. Simulate the input state using<br />

the INEN comm<strong>and</strong>. Inputs with an E value are not affected. Note that the input bit pattern<br />

varies by product. To determine the bit pattern for your product, refer to the INEN comm<strong>and</strong><br />

description.<br />

!INEN11 ; Disables inputs 1 <strong>and</strong> 2, leaving them in the ON state<br />

The motor will now move for 25000 steps.<br />

Deactivate the input simulation:<br />

INENEE ; Re-enables inputs 1 <strong>and</strong> 2<br />

Simulating Analog Input Channel Voltages<br />

Without actually applying any voltage, you can test any comm<strong>and</strong> or function that references<br />

the voltage on an analog input (located on an expansion I/O brick). For example,<br />

2ANIEN.1=1.2,1.6,1.8 overrides I/O brick 2’s hardware analog input 1 through 3 as<br />

follows: 1.2V on input 1, 1.6V on input 2, <strong>and</strong> 1.8V on input 3.<br />

Another application for the ANIEN comm<strong>and</strong> may be to use it in an ERRORP program to<br />

override the analog input voltage in response to a fault.<br />

Motion Planner’s Panel Gallery<br />

Motion Planner’s Panel Gallery provides diagnostic panels for testing your programs <strong>and</strong><br />

monitor the following:<br />

• I/O (programmable I/O, analog I/O, limits)<br />

• Motion (motor <strong>and</strong> feedback device position, velocity)<br />

• Status (axis, system, interrupt, user-defined, Following)<br />

• Terminal (direct communication with the product, to check for error messages, etc.)<br />

Index 237


Technical Support<br />

For solutions to your questions about implementing Gem6K product software features, first<br />

look in this manual. Other aspects of the product (comm<strong>and</strong> descriptions, hardware specs, I/O<br />

connections, graphical user interfaces, etc.) are discussed in the respective manuals listed in<br />

Reference Documentation on page ii.<br />

If you cannot find the answer in this documentation, contact your local Automation<br />

Technology Center (ATC) or distributor for assistance.<br />

If you need to talk to our in-house application engineers, please contact us at the numbers<br />

listed on the inside cover of this manual. (The phone numbers are also provided when you<br />

issue the HELP comm<strong>and</strong> to the Gem6K.)<br />

Operating System Upgrades<br />

You may obtain an upgraded Gem6K operating system from our web site at<br />

http://www.compumotor.com. Instructions for downloading <strong>and</strong> upgrading the operating<br />

system are provided on the web page.<br />

Product Return Procedure<br />

If you must return your Gem6K Series product to affect repairs or upgrades, use this<br />

procedure:<br />

Step 1<br />

Step 2<br />

Get the serial number <strong>and</strong> the model number of the defective unit, <strong>and</strong> a purchase order number<br />

to cover repair costs in the event the unit is determined by the manufacturers to be out of<br />

warranty.<br />

Before you return the unit, have someone from your organization with a technical<br />

underst<strong>and</strong>ing of the Gem6K Series product <strong>and</strong> its application include answers to the<br />

following questions:<br />

• What is the extent of the failure/reason for return<br />

• How long did it operate<br />

• Did any other items fail at the same time<br />

• What was happening when the unit failed (e.g., installing the unit, cycling power,<br />

starting other equipment, etc.)<br />

• How was the product configured (in detail)<br />

• What, if any, cables were modified <strong>and</strong> how<br />

• With what equipment is the unit interfaced<br />

• What was the application<br />

• What was the system environment (temperature, enclosure, spacing, unit orientation,<br />

contaminants, etc.)<br />

• What upgrades, if any, are required (hardware, software, user guide)<br />

Step 3<br />

Call for a return authorization. Refer to the Technical Support phone numbers provided on the<br />

inside cover of this manual. The support personnel will also provide shipping guidelines.<br />

238 Gem6K Series Programmer’s <strong>Guide</strong>


Index<br />

A<br />

absolute position<br />

absolute positioning mode 72<br />

absolute zero position 72<br />

establishing 72<br />

status 72<br />

acceleration<br />

change on the fly 71, 155<br />

maximum (Following) 189<br />

scaling 68<br />

s-curve profiling 136<br />

units of measure 71<br />

access to RP240 functions 129<br />

accuracy<br />

Following, factors affecting 189<br />

position capture 100, 159<br />

address<br />

Ethernet<br />

conflict 218<br />

multi-drop (RS-485) 60<br />

advance, geared (Following) 180<br />

alarm events<br />

trigger with an input 101<br />

analog inputs<br />

interface 132<br />

override voltage 237<br />

application examples<br />

cam profiling (using compiled<br />

Following) 148, 152<br />

continuous phase shift 179<br />

packaging (using on-the-fly motion)<br />

157<br />

PLC 117<br />

PLC scan mode 117<br />

preset phase shift 180<br />

registration 161, 162, 163<br />

scaling setup 70<br />

spindle (using compiled motion)<br />

147<br />

stamping (using compiled<br />

Following) 151<br />

teaching data points 112<br />

using a joystick 116<br />

using an RP240 116<br />

using analog inputs 116<br />

using programmable I/O 116<br />

assignment & comparison operators 7<br />

used in conditional expressions 25<br />

assignment of master <strong>and</strong> following<br />

170<br />

assumptions, skills required to<br />

implement features ii<br />

axis moving status 223<br />

axis scaling 67<br />

axis status 223<br />

extended 224<br />

relative to Following 195<br />

RP240 display 128<br />

B<br />

BCD program select input 97<br />

before you start programming iii<br />

binary value identifier (b) 6<br />

binary variables (VARB) 18, 22<br />

bit patterns, programmable I/O 91<br />

bit select operator (.) 6, 9<br />

bitwise operations (<strong>and</strong>, or, not, etc.)<br />

22<br />

Boolean operations 21<br />

branching 23<br />

conditional 25<br />

unconditional 23<br />

buffers<br />

buffered comm<strong>and</strong>s<br />

control execution of 14<br />

executed during motion 73, 155<br />

stored in a program 10<br />

comm<strong>and</strong> 73<br />

C<br />

cam profiling example 148, 152<br />

capture positions 99<br />

carriage return, comm<strong>and</strong> delimiter 6<br />

case sensitivity 6<br />

characters<br />

comm<strong>and</strong> delimiters 6<br />

comment delimiter 6<br />

field separators 6<br />

limit per line 6<br />

neutral (spaces) 6<br />

checksum 35<br />

closed-loop operation, steppers 84<br />

COM ports, controlling 56<br />

comm<strong>and</strong>ed position<br />

absolute position reference 72<br />

follower, tracking error 188<br />

status 227<br />

comm<strong>and</strong>s<br />

buffer 73<br />

after pause 99<br />

after stop 98<br />

comm<strong>and</strong> buffer execution<br />

after end-of-travel limit<br />

(COMEXL) 15<br />

after pause/continue input<br />

(COMEXR) 15<br />

after stop (COMEXS) 16<br />

continuous (COMEXC) 14<br />

comm<strong>and</strong> value substitutions 7<br />

delimiters 6<br />

errors in programming 232<br />

executed during motion 155<br />

Following (list of) 198<br />

immediate 4, 73<br />

restricted execution during motion<br />

17<br />

setup comm<strong>and</strong> list 64<br />

status 222<br />

syntax 4<br />

comment delimiter 6<br />

communication 37<br />

controlling multiple serial ports 56<br />

lock port during multi-tasking 211<br />

options 38<br />

problems 218<br />

RS-485 multi-drop 60<br />

compiled motion 139<br />

compare with on-the-fly motion<br />

changes 145<br />

Following profiles 142<br />

related comm<strong>and</strong>s 146<br />

sample applications 147, 148, 151,<br />

152<br />

conditional branching 25, 28<br />

conditional expression examples 25<br />

conditional go 163<br />

conditional GO<br />

pending trigger input 100, 166<br />

conditional looping 25, 28<br />

conditional statement using PMAS<br />

184<br />

configuration<br />

disable drive on kill 66<br />

drive resolution 66<br />

encoder-based stepper setup 84<br />

end-of-travel limits 77<br />

Following setup 170<br />

joystick 130<br />

memory allocation 11<br />

position modes 71<br />

Index 239


programmable inputs 94<br />

programmable outputs 105<br />

scaling 67<br />

setup comm<strong>and</strong>s, list 64<br />

setup program 13<br />

continous comm<strong>and</strong> execution mode<br />

(COMEXC)<br />

effect in continuous positioning<br />

mode 73<br />

continue<br />

effect on Following motion 195<br />

continue (!C) 16, 98<br />

continue execution on pause/resume<br />

(COMEXR) 15, 99<br />

continue execution on stop<br />

(COMEXS) 16, 98<br />

continue input 99<br />

continue key on RP240 123<br />

continuous positioning mode 71, 73<br />

Following 176, 191<br />

distance calculations 192<br />

controlling multiple serial ports 56<br />

count source (internally generated)<br />

172<br />

creating programs 10<br />

D<br />

daisy-chaining 59<br />

with RP240s 60<br />

data<br />

fields, in comm<strong>and</strong> syntax 5<br />

read from serial or Ethernet port 26<br />

read from the RP240 26<br />

teach to variable arrays 110<br />

deadb<strong>and</strong> for stall detection 84<br />

debounce time<br />

position capture 99<br />

program select input 97<br />

programmable inputs 96<br />

debugging tools 221<br />

analog input voltages, simulating<br />

237<br />

error messages 229<br />

I/O activation 235<br />

identify bad comm<strong>and</strong>s 232<br />

problem/cause/solution table 218<br />

RP240 menus 127<br />

single-step mode 234<br />

status comm<strong>and</strong>s 222<br />

trace mode 232<br />

deceleration<br />

change on the fly 71, 155<br />

scaling 68<br />

s-curve profiling 136<br />

units of measure 71<br />

delimiters<br />

comm<strong>and</strong> 6<br />

comment 6<br />

detecting a stall 84<br />

stall indicator output 108<br />

direction, changes in compiled motion<br />

144<br />

distance<br />

calculations, Following 192<br />

compiled motion 143<br />

change on the fly 71, 155<br />

registration 159<br />

units of measure 71<br />

drive<br />

fault status 224<br />

resolution 66, 219<br />

effect on Following 194<br />

shutdown<br />

LED status 220<br />

on kill 66, 98<br />

stall detection 66<br />

status on RP240 129<br />

dwells & direction changes, compiled<br />

motion 144<br />

E<br />

electrical noise See installation guide<br />

electronic I/O devices 119<br />

electronics concepts ii<br />

enable input<br />

as safety feature 116<br />

status 226<br />

enable or disable Following 175<br />

status 169<br />

while moving 195<br />

encoder<br />

capture/counter enable (steppers) 85<br />

failure detection<br />

status 224<br />

feedback for steppers 84<br />

position<br />

RP240 display 128<br />

resolution 84, 219<br />

setup example<br />

steppers 84<br />

Z-channel 79<br />

end-of-move settling 89<br />

end-of-travel limits See limits, end-oftravel<br />

error<br />

clearing 32<br />

error h<strong>and</strong>ling 30<br />

related to safety 116<br />

error message<br />

Following specific 197<br />

error messages 229<br />

Following 188<br />

on-the-fly motion errors 156<br />

program, assignment 31<br />

status 227<br />

Ethernet 39<br />

example programs ii<br />

executing programs see program,<br />

execution options<br />

expansion I/O 93<br />

F<br />

fault output 108<br />

field separator 6<br />

Filter Adjustments 87<br />

filtering, master position See master,<br />

master position filtering<br />

follower<br />

comm<strong>and</strong>ed position 178<br />

Following error 188<br />

conditional go 163<br />

definition of 170<br />

distance<br />

scaling 174<br />

motor/drive accuracy 190<br />

move profiles 175<br />

ratio to master 174<br />

status 169<br />

resolution 190<br />

scaling 174<br />

shift See shift<br />

following<br />

distance<br />

move calculations 192<br />

Following 167<br />

cam profiling example 148, 152<br />

comm<strong>and</strong>s, list of 198<br />

compiled Following profiles 142<br />

conditions used in conditional<br />

expressions 27<br />

distance<br />

scaling 69<br />

enable or disable 175<br />

status 169<br />

while moving 195<br />

error 188<br />

geared advance 180<br />

master cycle concept 182<br />

maximum acceleration (steppers)<br />

189<br />

maximum velocity (steppers) 189<br />

performance considerations 186<br />

prerequisites to Following motion<br />

170<br />

ratio Following introduction 168<br />

set-up parameters 170<br />

status 169, 226<br />

technical considerations 186<br />

virtual master 172<br />

G<br />

geared advance (Following) 180<br />

general purpose input function 96<br />

general purpose output function 107<br />

global comm<strong>and</strong> identifier (@) 6<br />

GOSUB 23<br />

GOTO 23<br />

GOWHEN 163<br />

cleared by stop or kill 194<br />

error condition 227<br />

using PMAS 184<br />

usng PMAS 195<br />

via trigger input 100, 166<br />

H<br />

hard limit See limits, end-of-travel<br />

help (tech support services) iii, 238<br />

hexadecimal value identifier (h) 6, 22<br />

homing<br />

home See limits, home<br />

status 223<br />

240 Gem6K Series Programmer’s <strong>Guide</strong>


zeroing the absolute position 79<br />

host computer operation 133<br />

I<br />

I/O activation (simulation) 235<br />

I/O device interface 118<br />

IF 25<br />

using PMAS 184<br />

usng PMAS 195<br />

immediate comm<strong>and</strong>s 4, 73<br />

not stored in programs 10<br />

immediate data read from RP240 27<br />

immediate stop 16, 73<br />

in position, output function 107<br />

incremental positioning mode 72<br />

inputs<br />

analog 132<br />

application example 117<br />

enable 116<br />

status 226<br />

encoder See encoder<br />

end-of-travel limits 73, 77, 116<br />

home limits 79<br />

joystick 130<br />

PLC 119<br />

programmable 90, 118<br />

alarm event 101<br />

bit pattern 91<br />

debounce time 96<br />

end-of-travel limits 104<br />

function assignments 94, 105<br />

functions (INFNC), effect on<br />

system performance 35<br />

functions (LIMFNC), effect on<br />

system performance 35<br />

general purpose function 96<br />

home limits 104<br />

jogging 101<br />

joystick 102<br />

kill 73, 98<br />

one-to-one program select 103<br />

oper<strong>and</strong> (IN) 25<br />

pause/continue 99<br />

effect on comm<strong>and</strong> buffer 15<br />

polarity 96<br />

program security 14, 104<br />

program select 97<br />

simulating activation 235<br />

status 95<br />

status on RP240 128<br />

stop 16, 73, 98<br />

update rate 90<br />

user fault 99, 116<br />

stop 16<br />

thumbwheel 119<br />

triggers<br />

debounce time 96<br />

position capture 99<br />

programmed functions (TRGFN)<br />

100<br />

update rate 90<br />

virtual inputs 94<br />

interface options 116<br />

interrupts<br />

program (ON conditions) 29<br />

J<br />

jerk (acceleration), reducing 136<br />

jogging<br />

input functions 101<br />

RP240 jog mode 127<br />

setup 101<br />

status on RP240 127<br />

joystick<br />

application example 112, 117<br />

interface 130<br />

release input 102<br />

velocity select input 102<br />

voltage override 237<br />

JUMP 23<br />

K<br />

kill<br />

assigned input function 98<br />

effect on drive 66, 98<br />

effect on Following 194<br />

effect on multi-tasking 209<br />

kill on stall 84<br />

L<br />

labels ($) 23<br />

last motion segment, compiled motion<br />

141<br />

LEDs 220<br />

LEDs on RP240 123<br />

left-to-right math 6<br />

length, master cycle 182<br />

limits<br />

end-of-travel 77<br />

as safety feature 116<br />

effect on comm<strong>and</strong> buffer <strong>and</strong><br />

program execution 15<br />

programmed functions 104<br />

status 223<br />

used as basis to activate output<br />

108<br />

home 79<br />

programmed functions 104<br />

status on RP240 128<br />

line feed, comm<strong>and</strong> delimiter 6<br />

linear interpolation<br />

acceleration scaling 69<br />

distance scaling 69<br />

velocity scaling 69<br />

linear motion parameter calculations<br />

74<br />

lockout distance for registration 160<br />

logical operators 25<br />

loops<br />

conditional 27<br />

unconditional 23<br />

M<br />

master<br />

definition of 170<br />

status 169<br />

direction, status of 169<br />

distance<br />

move calculations 192<br />

programming (FOLMD) 174<br />

master cycle<br />

counting 182<br />

restart 183<br />

status 182<br />

length 182<br />

number 184<br />

position 182<br />

assignment/comparison 184<br />

initial 183<br />

rollover 182, 195<br />

status 184<br />

synchronizing 185<br />

status 169<br />

master cycle concept 182<br />

master input (A.K.A.) 168<br />

master position filtering 186, 187<br />

effect on accuracy 191<br />

effect on position accuracy 190<br />

status 169<br />

master position prediction 186, 187<br />

effect on accuracy 190<br />

status 169<br />

move profiles 175<br />

moving, status of 169<br />

ratio to follower 174<br />

status 169<br />

resolution 190<br />

scaling 69, 174<br />

velocity 186<br />

virtual 172<br />

mathematical operations 19<br />

maximum position error<br />

output to indicate exceeded 108<br />

mechanical cam replacement 148, 152<br />

memory<br />

allocation 11<br />

compiled motion 139<br />

cleared on bad checksum 35<br />

locking 14, 104<br />

non-volatile 35<br />

status 12<br />

menus, RP240 126<br />

messages, error 229<br />

motion<br />

Following motion status 170<br />

motion control concepts ii<br />

parameters used in conditional<br />

expressions 25<br />

pre-compiled profiles See compiled<br />

motion<br />

restrictions while in Following 195<br />

rough 196<br />

synchronize<br />

conditional GOs 163<br />

registration 159<br />

triggered conditional GOs 163<br />

triggered start of master cycle<br />

163<br />

with PMAS 185<br />

motion parameters<br />

linear applications 74<br />

Motion Planner 2<br />

communication features 38<br />

Index 241


setup program tool 13<br />

move completion criteria 89<br />

moving/not moving status 107, 223<br />

multi-drop, RS-485 60<br />

multiple serial ports, controlling 56<br />

multi-tasking 201<br />

affected by kill 209<br />

conditions used in conditional<br />

expressions 27<br />

performance considerations 214<br />

programmed I/O functions 213<br />

sharing system resources 210<br />

task identifier (%) 6, 206, 211<br />

task-specific resources 211<br />

N<br />

negative-direction end-of-travel limits<br />

See limit, end-of-travel<br />

Networking 39<br />

neutral characters 6<br />

noise, electrical See installation guide<br />

numeric variables 18<br />

in conditional expression 25<br />

NWHILE 28<br />

O<br />

on conditions (program interrupts) 29<br />

effect on system performance 35<br />

one-to-one program select input 103<br />

on-line help for Windows 2<br />

on-line manuals ii<br />

on-the-fly motion changes 71, 155<br />

compare with compiled motion 145<br />

operating system upgrades 238<br />

operator interface<br />

host computer operation 133<br />

RP240 remote panel 123<br />

operators<br />

assignment & comparison 7<br />

correlated to status comm<strong>and</strong>s<br />

228<br />

used in conditional expressions<br />

25<br />

bit select 9<br />

bitwise 9<br />

logic 9<br />

math 9<br />

relational 9<br />

outputs<br />

activate on position 109<br />

output on position 109<br />

programmable 90, 118<br />

bit pattern 91<br />

fault output 108<br />

function assignments 105<br />

functions (OUTFNC), effect on<br />

system performance 35<br />

general purpose function 107<br />

limit encountered 108<br />

max position error exceeded 108<br />

moving/not moving 107<br />

oper<strong>and</strong> (OUT) 25<br />

output on position 109<br />

P<br />

polarity 106<br />

program in progress 107<br />

simulating activation 235<br />

stall indicator 108<br />

status 106<br />

status on RP240 128<br />

update rate 90<br />

update rate 90<br />

partitioning memory 11<br />

password, RP240 129<br />

pause active, status 226<br />

pause key on RP240 123<br />

pause, effect on Following motion 195<br />

pause/continue input 99<br />

effect on motion & program<br />

execution 15<br />

performance, effects on 35<br />

performance, Following 186<br />

performance, multi-tasking 214<br />

phase, shift 178<br />

PLC interface 119<br />

application example 117<br />

PLC scan mode 120<br />

point-to-point move 72<br />

polarity<br />

comm<strong>and</strong>ed direction<br />

causes reversed direction 219<br />

programmable inputs 96<br />

programmable outputs 106<br />

position<br />

absolute 72<br />

establish 72<br />

accuracy, Following 190<br />

analog inputs 132<br />

capture 99<br />

comm<strong>and</strong>ed 85<br />

encoder 85<br />

registration 159<br />

comm<strong>and</strong>ed<br />

capture 99<br />

RP240 display 128<br />

comm<strong>and</strong>ed position calculation,<br />

Following 188<br />

encoder 26<br />

capture 99<br />

RP240 display 128<br />

error 219<br />

exceeded max. limit<br />

status 223<br />

max. allowable 116<br />

RP240 display 128<br />

follower axis 178<br />

incremental 72<br />

master See master<br />

positioning modes 71<br />

change on the fly 71, 155<br />

sampling period 186<br />

effect on Following accuracy 190<br />

status<br />

RP240 display 128<br />

used to active an output 109<br />

zeroed after homing 79<br />

positive-direction end-of-travel limits<br />

See limit, end-of-travel<br />

power-up start program (STARTP) 13<br />

clear RP240 menus 125<br />

Following setup comm<strong>and</strong>s 171<br />

will not execute 220<br />

prediction of master position 187. See<br />

master, master position prediction<br />

pre-emptive GOs See on-the-fly<br />

motion changes<br />

preset positioning mode 72<br />

Following 177, 191<br />

distance calculations 193<br />

profiling, custom 135<br />

program<br />

branch<br />

conditionally 25<br />

unconditionally 23<br />

comments 6<br />

creating 10<br />

debug tools 221<br />

editing in Motion Planner 2<br />

error h<strong>and</strong>ling 30<br />

error responses 229<br />

examples, using ii<br />

execution<br />

controlling 14<br />

from RP240 menu 127<br />

options 13<br />

execution status 226<br />

interrupts 29<br />

labels ($) 23<br />

loop<br />

conditionally 25<br />

unconditionally 23<br />

memory allocation 11<br />

multi-tasking 202<br />

power-up program 13<br />

program example 10<br />

programming guidelines 1<br />

scan programs in PLC mode 120<br />

security 14<br />

setup (configuration) program 13<br />

storage 11<br />

program in progress 107<br />

programmable inputs See inputs,<br />

programmable<br />

programmable outputs See outputs,<br />

programmable<br />

programming<br />

creating programs 10<br />

debug tools 221<br />

debugging via RP240 127<br />

error messages 229<br />

error programs 34, 116<br />

examples, using ii<br />

executing programs<br />

options 13<br />

preparing to program iii<br />

program example 10<br />

program security 104<br />

program selection<br />

BCD 97<br />

one-to-one 103<br />

sample programs provided ii<br />

scan programs in PLC mode 120<br />

set-up program 13<br />

242 Gem6K Series Programmer’s <strong>Guide</strong>


R<br />

skills required ii<br />

storing programs 11<br />

ratio of follower to master 174<br />

status 169<br />

reading thumbwheel data 119<br />

reference documentation ii<br />

registration 159<br />

effect on Following 194<br />

lockout distance 160<br />

sample application 161, 162, 163<br />

status 160<br />

related documentation ii<br />

relational operators 25<br />

REPEAT 25<br />

repeatability, Following<br />

position sampling rate 190<br />

sensors 191<br />

trigger inputs 191<br />

resetting the controller 65<br />

via the RP240 menu 130<br />

resolution<br />

drive 66, 219<br />

effect on Following 194<br />

encoder 84, 219<br />

follower axis 190<br />

master axis 190<br />

resources used by multi-tasking 210<br />

responses, error 229<br />

restart master cycle counting 100, 166,<br />

183<br />

restricted comm<strong>and</strong>s during motion 17<br />

return procedure 238<br />

revision levels from RP240 display<br />

130<br />

rollover of master cycle position 182,<br />

184, 195<br />

rough Following motion 196<br />

RP240 123<br />

access security 129<br />

application example 117<br />

COM port setup 57<br />

connectoin verified 226<br />

data read 26<br />

front panel description 123<br />

in daisy chain 60<br />

menu structure 126<br />

RS-485 multi-drop 60<br />

S<br />

safety features 116<br />

sample programs ii<br />

scaling 67, 71<br />

acceleration & deceleration 68<br />

distance 69<br />

effect on system performance 35<br />

follower 174<br />

master 69, 174<br />

velocity 68<br />

scan programs (PLC scan mode) 120<br />

security, program 14, 104<br />

segment, definition of 11<br />

serial ports, controlling 56<br />

settling time, actual 89<br />

set-up comm<strong>and</strong>s 64<br />

set-up program 13<br />

shift<br />

advance 180<br />

continuous 178<br />

application example 179<br />

preset 178<br />

application example 180<br />

status 169, 178<br />

shift left to right (>>) 22<br />

shift right to left (


programmed<br />

conditional GO (GOWHEN)<br />

100, 166<br />

restart master cycle counting<br />

100, 166, 183<br />

status 169<br />

repeatability 191<br />

trigonometric operations 20<br />

troubleshooting 217<br />

comm<strong>and</strong> problems & solutions 218<br />

debug tools 221<br />

enable input status 226<br />

error messages 229<br />

Following 196<br />

general product condition report<br />

225<br />

identify bad comm<strong>and</strong>s 232<br />

methods 218<br />

status comm<strong>and</strong>s 222<br />

test panels in Motion Planner 237<br />

truncation<br />

acceleration/deceleration 68<br />

velocity 68<br />

tuning<br />

effect on Following accuracy 191<br />

Tuning<br />

Filter Adjustments 87<br />

Position Mode 85<br />

Procedures 85<br />

U<br />

unconditional branching 23<br />

unconditional looping 23<br />

units of measurement 67<br />

linear motors 74<br />

UNTIL 25<br />

using PMAS 184<br />

usng PMAS 195<br />

update rate, programmable I/O 90<br />

upgrade the Gem6K operating system<br />

238<br />

user fault input 99, 108<br />

as safety feature 116<br />

user interface options 116<br />

user programs, memory allocation 11<br />

V<br />

value substitution, comm<strong>and</strong> fields 7<br />

variables<br />

binary 18, 22<br />

in conditional expression 25<br />

numeric 18<br />

in conditional expression 25<br />

teach data 110<br />

string 18<br />

variable arrays 110<br />

velocity<br />

change on the fly 71, 155<br />

compiled motion 141<br />

maximum (Following) 189<br />

scaling 68<br />

TVEL & TVELA responses relative<br />

to Following 195<br />

units of measure 71<br />

virtual inputs 94<br />

virtual master 172<br />

W<br />

WAIT 25<br />

compared to GOWHEN 165<br />

status 226<br />

using PMAS 184<br />

usng PMAS 195<br />

web site (www.compumotor.com) ii<br />

WHILE 25, 28<br />

using PMAS 184<br />

usng PMAS 195<br />

X<br />

XON/XOFF, controlling 56<br />

Z<br />

Z-channel 79, 83<br />

status 224<br />

zero position after homing 79<br />

244 Gem6K Series Programmer’s <strong>Guide</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!