AxisModule

Preface

This is a draft of the Axis Module API and Reference documentation. Although not complete, the API, FSM, and documentation provide sufficient content upon which to do an evaluation. Notable omissions or problems due to a lack of consensus in the Axis module documentation include:

  1. distinguishing linear from rotary axis. For example, a Length data type may be used instead of more specific type.
  2. handling measures and units in a STEP compliant way has not been fully assimilated, instead most parameters are handled as typedef doubles, which directly affects the handling of issue 1;
  3. resolving the correlation of events to FSM states is still under discussion and has not been firmly resolved. Whether to use a pure Mealy model (actions only associated on state transitions - thus most states require an update event to do a self-transition) or Moore model (only actions associated with state updates) or a hybrid model of the two has not been resolved. At this point, either the Mealy or hybrid model is a candidate solution. 

    The hybrid model would consider the notion of an "Action" being associated with a state transition, and an "Activity " being associated with state update (equivalent to an internal "update" self-transition.)  A state change causes an Action associated with the state transition and an Activity associated with the new state to both  be executed (or should it only be the action?) FSM cyclic updates involve executing the Activity associated to the current state. The distinction between Action and Activity may cause more confusion. Comments are welcome.

    The following API exclusively uses the Action "label". Actions associated with a state update (or self-transition) have an "update" prefix attached to the method.

  4. refining the homing API to handle the variety of homing options. 

Background

The Axis module is responsible for control of a single axis of motion. An axis is any movable part of a machine or system that requires controlled motion.  The Axis module models a basic servo-controller to control a single variable, X, so that the Axis module transforms incoming motion setpoints into setpoints for the corresponding actuators. In the case of an axis of motion, X is its position. However, the Axis module API is general enough to support many other common single-input, single-output servo-control applications. The following list itemizes some basic capabilities inherent in the Axis Module API:

Component Hierarchy

The Axis module defines interfaces that encapsulate the functionality pertaining to a single axis of motion in a standalone or multi-axis control system. The Axis module contains interfaces defining Servoing, Parametric, IO Interfacing, Device Managing and Interpolator components. The Servoing components offer functionality for setpoint motion servoing.  The Parametric components package values defining motion and device limits, dynamics and rates. The IO Interfacing components provide pluggable customization to handle input and output of  setpoint information involving different IO devices and physical setups. The Device Managing components provide functionality to manage the FSM for handling power management, errors, estopping, fault recovery, etc. The Interpolator components provide functionality for trajectory-based motion and includes a Inteperpolator module that acts as a container for these components. The Interpolator components are included as part of the Axis module so that an Axis can be packaged as a standalone single-axis system. If the Axis module is part of a coordinated multi-axis system, the functionality of the Interpolator components would be subsumed by services provided within an Axis Group. The relationship between Axis Module components is shown in the Figure labeled "Axis Module Interface Hierarchy" , and includes interface inheritance (i.e., hollow triangle arrows) and association relationships (i.e., -> arrows) between components.

  Axis Module Class Hierarchy Figure
Figure: Axis Module Interface Hierarchy

Below is a description of Axis module interfaces shown in the UML diagram:

IAxis
is a container to manage a collection of axis objects, including basic motion servoing objects, parameter objects, and interfacing objects. The Axis class acts as a container of Axis components by providing a means of storing object references and then providing access to the object references. The IAxis class manages single instances of the each object. (Is there any reason to manage more than one instance of each object?) The IAxis class provides set and get methods to assign(set) or access(get) references to the current instance of each object. A component realization of an IAxis interface would also include an implementation of an Axis FSM as defined in the section describing Axis Behavior.
IAxisCommandedInput
Clients interface to Axis for controlling desired position, velocity and torque.
IAxisCommandedOutput
Services for commanding actuator setpoint.
IAxisDisabling
Services for disabling axis.
IAxisEnabling
Services for enabling axis.
IAxisLimits
Limits to motion ranges.
IAxisPositioningServo
Services for position servoing.
IAxisResetting
Services for resetting axis.
IAxisSetup
Services preparatory to cyclic operation that can be supplied before arrival of commanded values, and contains the capability limits specified classes AxisLimits and AxDyn.
IAxisSensedState
Services to handle sensor data (such as position and velocity feedback) and provides values derived from raw, measured, filtered, and other knowledge.
IAxisTorqueServo
Services for torque servoing.
IAxisVelocityServo
Services for velocity servoing.

Axis Interpolator components are defined within the Axis Module to allow deployment of a standalone Axis. The packaging of these services in the Axis module allows users to a buy a deployment-ready Axis that may not be part of a large multi-axis controller. The Axis Interpolator provides primitive trajectory responsibilities when the axis is not expected to coordinated by an Axis Group module. Should an Axis Group be part of a deployed controller, it would subsume the functionality defined by these interfaces. If an Axis Group is not part of the deployed controller, components that implement these interfaces would typically be part of the Human Machine Interface subsystem.

IAxisSupervisor
is a container to manage a collection of interpolation objects, including homing, continuous jogging, incremental jogging and absolute positioning. The interpolation is done by coordinating the activity of an Axis. The IAxisSupervisor controls an Axis via an IAxis reference.
IAxisAbsolutePositioning
Services for absolute position jogging.
IAxisHoming
Homing service.
IAxisJogging
Jogging service.
IAxisIncrementing
Incremental jogging service.
IAxisRates
Motion profile description.

These above interfaces allow deployment of plug-and-play components adhering to these interfaces that are customized to accommodate different axis functionality, as well as to accommodate axis integration with different hardware. To accommodate different hardware, a user would plug in different AxisCommandOutput and AxisSensedState components to work with varying hardware. For example, one set of components would be suited for interfacing with a D/A interface card as opposed to another set of components suited for interfacing with hardware based on a SERCOS network.

Behavior

The Axis module is responsible for coordinating among several control strategies for managing motion. Each control strategy has an associated Axis motion control component that implements the control strategy. Motion control components model a basic servo-controller in order to control a single variable X. In the case of the AxisPositioningServo component, X is position. Internally, motion control components implement a servoing strategy, such as, open loop, closed loop, bang-bang, or fuzzy logic. It is assumed a motion control component instance would implement one servoing strategy. Motion control components are not restricted from implementing multiple servo strategies, however, the Axis module API does not have any methods for supporting this. In order to change a servo strategy, the component is replaced in the Axis container with a new component and servo strategy.

Motion control components operate cyclically. Assuming closed loop control, each cycle a motion control component gets the desired X, reads the actual X, uses a Control Law component to calculate a new commanded setpoint Xdot, and then writes the new setpoint Xdot. We assume each cycle is bounded by a worst-case time period, although this performance time is not explicitly specified nor accessible by the Axis API. The worst-case time period measured using a typical CPU benchmark is expected to be part of the component data sheet.

To increase flexibility and modularity, the motion control components delegate operation to other assisting components for services that include calculating the setpoint transform, handling actuator and sensor IO, and determining motion control parameters. The Axis class acts as a container for these Axis components. All Axis components, including motion control components, use the Axis class container to access other assisting Axis component. For this to work, all Axis components inherit the interface IOmacAxis, which contains a method setAxisReference(IAxis * axis) for setting the reference of the Axis container. The control system configuration will use this method to set the proper Axis reference.

The assisting components include:   AxisCommandedInput, AxisCommandedOutput, AxisDyn, AxisKinematics, AxisLimits, AxisMaintenance, AxisRates, AxisSensedState, and AxisSetup.

Within the Axis components that follow position, velocity, acceleration, or torque, ControlLaw components can be used to do loop closure. Assignment of a ControlLaw component to a Position/Velocity/Acceleration/Torque servo, is done through Specialization of the servo Base Class. For example, AxisVelocityServo may not need a ControlLaw component for loop closure if the Axis is connected to SERCOS drive configured to accept velocity setpoints. In this case, the implementation class is simply:

 
    class CAxisVelocityServo : public IAxisVelocityServo;

However, AxisVelocityServo may need a ControlLaw component if it is doing software servoing, and would require an association to the IControlLaw interface:

 
    class CAxisVelocityServo() : public IAxisVelocityServo 
    {
      IControlLaw * velocityControlLaw;
    };
    

Assignment of velocityControlLaw is done at configuration time. (See Omac Module Description for more information concerning configuration. )

Each cycle the motion control component is also responsible for testing for error conditions such as limit violations or hardware failures.

The Axis class, coordinates between the different servoing motion control strategies by means of a Finite State Machine (FSM). The FSM, including events, states, and state transitions, is predefined for the Axis module and is shown in the following diagram.

Axis Module Class FSM Figure

Switching between servoing  motion control strategies is achieved by sending events to the Axis FSM. The internal FSM implementation is itself hidden (which is an area of debate), but the Axis interface provides methods for event propagation and state query. The Axis FSM corresponds to the READY state of the OMAC Module FSM. The OMAC module defines a deployment FSM for activating and deactivating a component/module in the system. All Axis components inherit the event methods from the IOmac interface, and must implement the FSM corresponding to the OMAC deployment FSM. Once a component has been activated and is in the READY state, it can then delegate to its functional-specific FSM. Thus, the READY state in the OMAC FSM is the superstate of the subordinate Axis FSM.

The Axis-specific FSM event propagating methods, which can lead to state transitions and may result in changing control strategies, include:    disableAxis, enableAxis, estopAxis, followCommandedTorque, followCommandedAbsPosition, followCommandedRelPosition, followCommandedTorque, followCommandedVelocity, resetAxis, and stopAxis. Note that each pluggable component has seperate stopping actions associated with the pluggable component and that there is not a generic "Stopping" pluggable component. The relationship between state, events, next state and action associated with the state transition in the Axis module FSM is given in the following table.

First  State = Disabled

Beginning State Event Ending State Action
Disabled enable() Enabling IAxisEnabling::startAxisEnablingAction
Enabling completed Enabled  
Normal stop() Stopping IAxis[plug]::stopAxis[plug]Action
Stopping completed Stopped  
Stopped reset() Resetting IAxisResetting::startAxisResettingAction
Resetting completed Disabled  
Enabled holdPosition() HoldingPosition See IAxisFollowingPosition for FSM specifics
HoldingPosition endServo() Enabled See IAxisFollowingPosition for FSM specifics
HoldingPosition holdVelocity() HoldingVelocity See IAxisFollowingPosition for FSM specifics
HoldingPosition holdTorque() HoldingTorque See IAxisFollowingPosition for FSM specifics
Enabled holdVelocity() HoldingVelocity See IAxisFollowingVelocity for FSM specifics
HoldingVelocity endServo() Enabled See IAxisFollowingVelocity for FSM specifics
HoldingVelocity holdPosition() HoldingPosition See IAxisFollowingVelocity for FSM specifics
HoldingVelocity holdTorque() HoldingTorque See IAxisFollowingVelocity for FSM specifics
Enabled holdTorque() HoldingTorque See IAxisFollowingTorque for FSM specifics
HoldingTorque endServo() Enabled See IAxisFollowingTorque for FSM specifics
HoldingTorque holdPosition() HoldingPosition See IAxisFollowingTorque for FSM specifics
HoldingTorque holdVelocity() HoldingVelocity See IAxisFollowingTorque for FSM specifics
HoldingPosition followingPosition() FollowingPosition See IAxisFollowingPosition for FSM specifics
HoldingVelocity followingVelocity() FollowingVelocity See IAxisFollowingVelocity for FSM specifics
HoldingTorque followingTorque() FollowingTorque See IAxisFollowingTorque for FSM specifics
FollowingPosition completed HoldingPosition See IAxisFollowingPosition for FSM specifics
FollowingVelocity completed HoldingVelocity See IAxisFollowingVelocity for FSM specifics
FollowingTorque completed HoldingTorque See IAxisFollowingTorque for FSM specifics
Whether below states assume FSM update or require events is open for discussion. Could be UML activities.
Resetting (state update) Resetting IAxisResetting::updateAxisResettingAction
Disabled (state update) Disabled IAxisDisabling::updateAxisDisabledAction
Enabled (state update) Enabled IAxisEnabling::updateAxisEnabledAction

Stop and and internal Failed events can occur in any state. The occurrence is valid, i.e., a transition should be defined for these events in all states, with the following special situations:

The State Definitions and Query Table supplements the behavior model described above by the state table. This table provides a detailed description of each state and identifies the query mechanism for determining if the Axis module is in that state. The Axis FSM states, state description, and query methods is described in the following table.

First  State = disabled

State Definition Query for State via
Disabled State is in Ready state after doing Omac FSM startup sequence. Ready state is equivalent to Disabled. Must be in this state before shutting down. Power is not enabled. isDisabled()|isReady()
Enabled State is Enabled. Power is enabled. isEnabled()
Faulted State is Faulted. isFaulted()
Resetting State is Resetting. isResetting()
Stopped State is Stopped. isStopped()
Stopping State is Stopping. isStopping()
FollowingPosition State is Following Position Servoing control mode. isFollowingPosition()
FollowingVelocity State is Following Velocity Servoing control mode. isFollowingVelocity()
FollowingTorque State is Following Torque Servoing control mode. isFollowingTorque()
FollowingPosition State is Holding Position Servoing control mode. isHoldingPosition()
FollowingVelocity State is Holding Velocity Servoing control mode. isHoldingVelocity()
FollowingTorque State is Holding Torque Servoing control mode. isHoldingTorque()

Operational Scenario

A typical multi-axis control system, such as a CNC or robot, would require an Axis module for each axis of motion. Although common enough, a system containing axis with multi-actuators, such as a robot with a parallel link joint, is not directly addressed and would require a specialization of the Axis module. Assume the application requiring to illustrate the various components within an Axis Module is a NC programmable, two-axis lathe. We will assume that both axis components are the same for each axis and consist of a PWM motor drive, an amplifier enable control, an amplifier fault status signal, an A-QUAD-B encoder with marker pulse and switches for home and axis limits. The Figure labeled "Sample Architecture Implementing Axis Module"  illustrates the relationship of the Axis Module, the internal consummate parts of the Axis Module (such as CommandedInput, CommandedOutput, SensedState, FollowingPosition,etc.) and the interaction with external objects such as IO points.

Figure 4. Sample Architecture Implementing Axis Module

As an illustration of Axis module operation, a typical scenario will be walked through. Assume that the scenario has an Axis Group in control of several axes, but to keep matters simple, we will only consider the Axis Group interaction with one axis. Further assume in the scenario, that the startup deployment phase has completed and the Axis Group and Axis module have been configured, integrated and enabled. At this point, the Axis Group would have an object reference to the Axis module, and all object references between the Axis components would have been resolved. Now, the Axis module should be in the MAC FSM READY state that corresponds to the Axis Module DISABLED state. 

To start the Axis position servoing, the Axis Group would issue an enable, a holdPosition and a followingPosition series of events to the put the Axis in followingPosition servoing. To do this, Axis Group uses an object reference to the Axis module to call the  IAxis methods enable(), holdPosition(), and followPosition() . For the followPosition() method case, this method causes the Axis module to internally queue a FOLLOW_POSITION event in the Axis module FSM. It is expected that an Axis module implementation would queue events, but not required, so that event queuing cannot be syntactically represented, only semantically annotated, for the Axis module API. (Note, the queue could be of length one, in which case, the queue acts like a communication mailbox.)

Although not required, event queuing may be preferred for the following reasons:

1. To shorten the response, not necessarily the operation. If the Axis module actually performed the followAcceleration service upon receiving this command, it would tie up both the Axis and the Axis Group module execution.
2. To prevent deadlocks. If Axis actually performed the followPosition service, it could require a call on the Axis Group which could result in deadlock if the Axis Group's methods are not thread-safe.
3. Use events since multiple threads are running in the system and it is desirable to protect the queuing of the event through mutual exclusion. An example of concurrent threads is the Task Coordinator sending Homing Events and the Axis FSM receiving the events. But HMI, or Axis Group could also send events and be in other threads. Some OMAC modules are typically aperiodic, such as Task Coordinator and HMI, and can run as separate threads.

External to the Axis and Axis Group, some scheduling mechanism causes the Axis module to cyclically execute by calling the update() method inherited from IOmac. The Axis module updates assisting Axis components and then uses the Axis module FSM to determine what Axis control strategy component action to invoke. For this case, the Axis FSM invokes action methods in the AxisPositioningServo component interface. After initially receiving the followPosition, the Axis FSM will invoke startFollowingPositionAction(). For subsequent cycles, the Axis FSM will invoke updateFollowingPositionAction() until a stopMotion() causes a StopFollowingPosition event. For the StopFollowingPosition event, the Axis FSM will invoke stopFollowingPositionAction() and updateStoppingFollowingPositionAction() until the following position has returned to holding position, most likely within one cycle. Any errors during following position control would result in invoking errorFollowingPositionAction() that the Axis module is responsible for monitoring and then responding to an error.

In lieu of an object interaction diagram, the following code illustrates the calling sequence to involved in following position servo control:

AxGrp->anAxis->followPosition()
Updater->anAxis->update()
  anAxis->AxisFSM->AxisPositioningServo->startFollowingPositionAction()
AxGrp->anAxis->getAxisCommandedInput()->setCommandedPosition(value)
Updater->anAxis->update()
     AxisSensedState->update()
     AxisCommandedInput->update()
     AxisFSM->AxisPositioningServo->updateFollowingPositionAction()
          AxisCommandedInput->getPositionCommand()
          AxisSensedState->getActualPosition()
          ControlLaw->(load parameters)
          ControlLaw->calcControlCmd()
          ControlLaw->(get results)
          AxisCommandedInput->setVelocityCommand()
          AxisCommandedOutput->setPositionCommand()
          AxisVelocityServo->updateFollowingVelocityAction() ...
              // Now perform velocity control loop
              AxisCommandedInput->getVelocityCommand()
              AxisSensedState->getActualVelocity()
              ...     
              AxisCommandedInput->setAccelerationCommand()
              AxisCommandedOutput->setVelocityCommand()
            
   AxisCommandedOutput->update() (acceleration goes to SERCOS drivers)  
       

Source

Axis Module IDL

Comments?

Comments concerning this module are solicited on the following topics. The split of Axis module into servoing and interpolating objects warrants an opinion. Is the coverage of all potential control strategies sufficient.  Comments on other issues are also welcome.

Submit Feedback

Issues/FAQ/TBD

Axis Module FAQ

Last Updated September 01, 2000 08:46:58

Interface IAxis

The Axis class is a container to manage a collection of axis submodule objects that also provides higher level FSM management of these submodules. Containers are as "a class that holds objects of some (other) type". The Axis class is a container that provides a means of storing Axis submodule references and then providing access to the references of the axis submodule objects. In addition, the Axis class coordinates motion using different motion control submodule depending on the commanded control strategy. The Axis submodule objects include: AxisCommandedInput, AxisCommandedOutput, AxisDyn, AxisEnabling, AxisKinematics, AxisLimits, AxisMaintenance, AxisPositioningServo, AxisRates, AxisSensedState, AxisSetup, AxisTorque Servo, and AxisVelocityServo.

The Axis class has an association with a FSM to manage several different motion control strategies. Each control strategy has an associated Axis motion control submodule that implements the control strategy. The motion control submodules include: AxisAccelerationServo, AxisEnabling, AxisPositioningServo, AxisTorque Servo, and AxisVelocityServo. Depending on the state, a different submodule is active, and the methods associated with each object are executed depending on the motion state. When active, a submodule is updated each cycle, by calling its update function.

The type of motion alogrithm that is controlling the axis is dependent on the state of the Axis FSM. The FSM itself is hidden, but the Axis interface offer methods for state query and for propogating events. The state query methods include: abort, Disable, disableAxis, Enable, enableAxis, estop, execute, followCommandedForce, followCommandedPosition, followCommandedTorque, followCommandedVelocity, home, jog, resetAxis, stopMotion, startup, stop, terminate, update, and updateAxis.

 
Methods in interface IAxis
currentStateName(BSTR * name), disableAxis(), enableAxis(), endCommandedPosition(), endCommandedTorque(), endCommandedVelocity(), estopAxis(), followCommandedAbsPosition(), followCommandedRelPosition(), followCommandedTorque(), followCommandedVelocity(), getCommandedInput(IAxisCommandedInput ** ppIAxisObject), getCommandedOutput(IAxisCommandedOutput** ppIAxisObject), getDisabling(IAxisDisabling ** ppIAxisObject), getDynamics(IAxisDyn ** ppIAxisObject), getEnabling(IAxisEnabling ** ppIAxisObject), getHomeOffset(double * pOffset), getKinematics(IAxisKinematics ** ppIAxisObject), getLimits(IAxisLimits ** ppIAxisObject), getMaintenance(IAxisMaintenance ** ppIAxisObject), getPositionControlLaw(IControlLaw ** ppIControlLawObject), getPositioningServo(IAxisPositioningServo ** ppIAxisObject), getResetting(IAxisResetting ** ppIAxisObject), getSensedState(IAxisSensedState ** ppIAxisObject), getSetup(IAxisSetup ** ppIAxisObject), getTorqueControlLaw(IControlLaw ** ppIControlLawObject), getTorqueServo(IAxisTorqueServo **ppIAxisObject), getVelocityControlLaw(IControlLaw ** ppIControlLawObject), getVelocityServo(IAxisVelocityServo ** ppIAxisObject), holdCommandedPosition(), holdCommandedTorque(), holdCommandedVelocity(), homed(), isDisabled(boolean * b), isDisabling(boolean * b), isEnabled(boolean * b), isEnabling(boolean * b), isEstopped(boolean * b), isEstopping(boolean * b), isFaulted(boolean * b), isFollowingPosition(boolean * b), isFollowingTorque(boolean * b), isFollowingVelocity(boolean * b), isHoldingPosition(boolean * b), isHoldingTorque(boolean * b), isHoldingVelocity(boolean * b), isHomed(boolean * b), isReady(boolean * b), isResetting(boolean * b), loseHome(), processServoLoop(), resetAxis(), setCommandedInput(IAxisCommandedInput * val), setCommandedOutput(IAxisCommandedOutput * val), setDisabling(IAxisDisabling * val), setEnabling(IAxisEnabling * val), setHomeOffset(double offset), setKinematics(IAxisKinematics * val), setLimits(IAxisLimits * val), setMaintenance(IAxisMaintenance * val), setPositionControlLaw(IControlLaw * val), setPositioningServo(IAxisPositioningServo * val), setResetting(IAxisResetting * val), setSensedState(IAxisSensedState * val), setSetup(IAxisSetup * val), setTorqueControlLaw(IControlLaw * val), setTorqueServo(IAxisTorqueServo * val), setVelocityControlLaw(IControlLaw * val), setVelocityServo(IAxisVelocityServo * val), stopAxis()
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

currentStateName

HRESULT currentStateName(/*[out,retval]*/ BSTR * name)
Axis module state accessor method that returns a BSTR containing current state name.
Parameters:
str - is a reference to a BSTR. Client (calling object) must SysFreeString() the returned BSTR wide character string.
Returns:
S_OK - successful execution string returned.
E_OUTOFMEMORY failed to allocate BSTR buffer.

disableAxis

HRESULT disableAxis()
Method to trigger event to disable a module. Upon handling, event will cause a transition from the disabled state to the enabled state within the Axis Module FSM. Note, there is a naming collision with Windows disable enumeration. This is the reason for the capitalization of the Disable method.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

enableAxis

HRESULT enableAxis()
Method to trigger event to enable a module. Upon handling, event will cause a transition from the disabled state to the enabled state within the Axis Module FSM. Note, there is a naming collision with Windows enable enumeration. This is the reason for the Capitalization of the Enable method.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue. FIXME.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)
See Also:
IOmac

endCommandedPosition

HRESULT endCommandedPosition()
Method to trigger a EndCommandedPosition event. Upon handling, event will cause a transition from a HoldingPosition state to an Enabled state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

endCommandedTorque

HRESULT endCommandedTorque()
Method to trigger a EndCommandedTorque event. Upon handling, event will cause a transition from a HoldingTorque state to an Enabled state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

endCommandedVelocity

HRESULT endCommandedVelocity()
Method to trigger a EndCommandedVelocity event. Upon handling, event will cause a transition from a HoldingTorque state to an Enabled state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

estopAxis

HRESULT estopAxis()
Method to trigger an estop event. Upon handling, event will cause a transition from any state to an estop state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since estop event Upon handling, event will be placed at the front of the queue to be handled immediately.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

followCommandedAbsPosition

HRESULT followCommandedAbsPosition()
Method to trigger a followCommandedAbsPosition event. Upon handling, event will cause a transition from a HoldingPosition state to a FOLLOWINGABSPOSITION state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

followCommandedRelPosition

HRESULT followCommandedRelPosition()
Method to trigger a followCommandedRelPosition event. Upon handling, event will cause a transition from a HoldingPosition state to a FOLLOWINGRELPOSITION state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

followCommandedTorque

HRESULT followCommandedTorque()
Method to trigger a FollowCommandedTorque event. Upon handling, event will cause a transition from a HoldingTorque state to a FOLLOWINGTORQUE state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

followCommandedVelocity

HRESULT followCommandedVelocity()
Method to trigger a FollowCommandedVelocity event. Upon handling, event will cause a transition from a HoldingTorque state to a FOLLOWINGVELOCITY state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

getCommandedInput

HRESULT getCommandedInput(/*[out,retval]*/ IAxisCommandedInput ** ppIAxisObject)
Gets the current commanded input OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the commanded input interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getCommandedOutput

HRESULT getCommandedOutput(/*[out,retval]*/ IAxisCommandedOutput** ppIAxisObject)
Gets the current commanded output OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the commanded output interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDisabling

HRESULT getDisabling(/*[out,retval]*/ IAxisDisabling ** ppIAxisObject)
Gets the current disabling COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the disabling interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDynamics

HRESULT getDynamics(/*[out,retval]*/ IAxisDyn ** ppIAxisObject)
Gets the current dynamics setup OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the dynamics setup interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getEnabling

HRESULT getEnabling(/*[out,retval]*/ IAxisEnabling ** ppIAxisObject)
Gets the current error and enabling COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the error and enabling interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getHomeOffset

HRESULT getHomeOffset(/*[out,retval]*/ double * pOffset)
Get the homed offset for the axis.
Parameters:
pOffset - pointer to double variable, with units in millimeters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - homing offset not implemented.

getKinematics

HRESULT getKinematics(/*[out,retval]*/ IAxisKinematics ** ppIAxisObject)
Gets the current kinematics setup OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis kinematics interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getLimits

HRESULT getLimits(/*[out,retval]*/ IAxisLimits ** ppIAxisObject)
Gets the current axis limits definition OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis limits definition interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getMaintenance

HRESULT getMaintenance(/*[out,retval]*/ IAxisMaintenance ** ppIAxisObject)
Gets the current axis maintenance OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis maintenance interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getPositionControlLaw

HRESULT getPositionControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
Get the current axis position control law OMAC object reference.
Parameters:
ppIControlLawObject - is the address of the pointer variable that receives the position control law interface pointer requested. Upon successful return, ppIControlLawObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIControlLawObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getPositioningServo

HRESULT getPositioningServo(/*[out,retval]*/ IAxisPositioningServo ** ppIAxisObject)
Gets the current axis position servoing OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis position servoing interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getResetting

HRESULT getResetting(/*[out,retval]*/ IAxisResetting ** ppIAxisObject)
Gets the current resetting COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the resetting interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getSensedState

HRESULT getSensedState(/*[out,retval]*/ IAxisSensedState ** ppIAxisObject)
Gets the current axis sensed state OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis sensed state interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getSetup

HRESULT getSetup(/*[out,retval]*/ IAxisSetup ** ppIAxisObject)
Gets the current axis setup OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis setup interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getTorqueControlLaw

HRESULT getTorqueControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
Get the current axis torque control law OMAC object reference.
Parameters:
ppIControlLawObject - is the address of the pointer variable that receives the torque control law interface pointer requested. Upon successful return, ppIControlLawObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIControlLawObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getTorqueServo

HRESULT getTorqueServo(/*[out,retval]*/ IAxisTorqueServo **ppIAxisObject)
Gets the current torque servoing OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the torque servoing interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getVelocityControlLaw

HRESULT getVelocityControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
Get the current axis velocity control law OMAC object reference.
Parameters:
ppIControlLawObject - is the address of the pointer variable that receives the velocity control law interface pointer requested. Upon successful return, ppIControlLawObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIControlLawObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getVelocityServo

HRESULT getVelocityServo(/*[out,retval]*/ IAxisVelocityServo ** ppIAxisObject)
Gets the current axis velocity servoing OMAC object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the velocity servoing interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the AxisModule does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

holdCommandedPosition

HRESULT holdCommandedPosition()
Method to trigger a HoldCommandedPosition event. Upon handling, event will cause a transition from an Enabled state to a holdingPosition state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

holdCommandedTorque

HRESULT holdCommandedTorque()
Method to trigger a HoldCommandedTorque event. Upon handling, event will cause a transition from an Enabled state to a holdingTorque state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

holdCommandedVelocity

HRESULT holdCommandedVelocity()
Method to trigger a HoldCommandedVelocity event. Upon handling, event will cause a transition from an Enabled state to a holdingVelocity state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

homed

HRESULT homed()
Set axis homed. Axis can now do absolute positioning.
Returns:
S_OK - successful.
E_FAIL - unsuccessful.

isDisabled

HRESULT isDisabled(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in disabled state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isDisabling

HRESULT isDisabling(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in disabling state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isEnabled

HRESULT isEnabled(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in enabled state as well as if in any state past enabled?
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isEnabling

HRESULT isEnabling(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in enabling state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isEstopped

HRESULT isEstopped(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "estopped" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isEstopping

HRESULT isEstopping(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "estopping" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isFaulted

HRESULT isFaulted(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "faulted" state after detecting internal error.
Parameters:
b -  boolean [out] flag, with true indicating in faulted state, false not in faulted state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isFollowingPosition

HRESULT isFollowingPosition(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "followingPosition" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isFollowingTorque

HRESULT isFollowingTorque(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in followingTorque state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isFollowingVelocity

HRESULT isFollowingVelocity(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "followingVelocity" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isHoldingPosition

HRESULT isHoldingPosition(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in holdingPosition state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isHoldingTorque

HRESULT isHoldingTorque(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in holdingTorque state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isHoldingVelocity

HRESULT isHoldingVelocity(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in holdingVelocity state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isHomed

HRESULT isHomed(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if Axis is homed.
Parameters:
b -  boolean [out] flag, with true indicating axis homed, false axis not homed.
Returns:
S_OK - successful homed determination.
E_FAIL - unsuccessful homed determination. Unspecified reason.

isReady

HRESULT isReady(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "ready" state. Ready state is equivalent to enabled state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Axis module state accessor method to determine if in "resetting" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

loseHome

HRESULT loseHome()
Set not homed. Axis can no longer do absolute positioning.
Returns:
S_OK - successful.
E_FAIL - unsuccessful.

processServoLoop

HRESULT processServoLoop()
The primary method. Runs a servo loop. Reads commanded input from AxisCommandedInput object. Reads current status from AxisSensedState. Computes the next setpoint using a combination of position, velocity, and acceleration control laws. Writes output to AxisCommandedOutput.
Returns:
S_OK - if successful.
E_FAIL - if servo loop failed.

resetAxis

HRESULT resetAxis()
Method to trigger a reset event. Upon handling, event will cause a transition from what state to a reset state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

setCommandedInput

HRESULT setCommandedInput(/*[in]*/ IAxisCommandedInput * val)
Sets the current axis commanded input OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle input commands.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisCommandedInput REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setCommandedOutput

HRESULT setCommandedOutput(/*[in]*/ IAxisCommandedOutput * val)
Sets the current axis commanded output OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle output commands.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisCommandedOutput REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setDisabling

HRESULT setDisabling(/*[in]*/ IAxisDisabling * val)
Sets the current axis disable handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle enable states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setEnabling

HRESULT setEnabling(/*[in]*/ IAxisEnabling * val)
Sets the current axis enable handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle enable states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setHomeOffset

HRESULT setHomeOffset(/*[in]*/ double offset)
Set the homed offset for the axis.
Parameters:
offset - is a double variable, with units in millimeters.
Returns:
S_OK - if successful.
E_FAIL - if unsuccessful.
E_NOTIMP - homing offset not implemented.

setKinematics

HRESULT setKinematics(/*[in]*/ IAxisKinematics * val)
Sets the current axis kinematics setup OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle kinematic representation.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisKinematics REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setLimits

HRESULT setLimits(/*[in]*/ IAxisLimits * val)
Sets the current axis limits setup OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle physical and motion limits.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisLimits REFID interface of the supplied object.
E_NOTIMP - if not implemented. .

setMaintenance

HRESULT setMaintenance(/*[in]*/ IAxisMaintenance * val)
Sets the current axis maintenance OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle maintenance.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisMaintenance REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setPositionControlLaw

HRESULT setPositionControlLaw(/*[in]*/ IControlLaw * val)
Sets the current axis position control law OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle positioning control law.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IControlLaw REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setPositioningServo

HRESULT setPositioningServo(/*[in]*/ IAxisPositioningServo * val)
Sets the current axis positioning servo OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle position-base servoing.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisPositioningServo REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setResetting

HRESULT setResetting(/*[in]*/ IAxisResetting * val)
Sets the current axis resetting handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle resetting states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setSensedState

HRESULT setSensedState(/*[in]*/ IAxisSensedState * val)
Sets the current axis sensed state OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle IO status.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisSensedState REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setSetup

HRESULT setSetup(/*[in]*/ IAxisSetup * val)
Sets the current axis setup OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle setup of values of current rates, maximum physical limits, and dynamic rates.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisSetup REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setTorqueControlLaw

HRESULT setTorqueControlLaw(/*[in]*/ IControlLaw * val)
Sets the current axis torque control law OMAC object reference.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IControlLaw REFID interface of the supplied object.
E_NOTIMP - if not implemented (or required?).

setTorqueServo

HRESULT setTorqueServo(/*[in]*/ IAxisTorqueServo * val)
Sets the current axis torque servoing OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle torque servoing.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisForceServo REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setVelocityControlLaw

HRESULT setVelocityControlLaw(/*[in]*/ IControlLaw * val)
Sets the current axis velocity control law OMAC object reference.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IControlLaw REFID interface of the supplied object.
E_NOTIMP - if not implemented (or required?).

setVelocityServo

HRESULT setVelocityServo(/*[in]*/ IAxisVelocityServo * val)
Sets the current axis velocity servoing OMAC object reference.
Parameters:
val - contains a reference to OMAC object to replace the currently assigned object to handle velocity-based servoing.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisVelocityServo REFID interface of the supplied object.
E_NOTIMP - if not implemented.

stopAxis

HRESULT stopAxis()
Method to trigger a stopMotion event. Upon handling, event will cause a transition from any motion state (jogging, moving_to, incrementing, homing, following position, following velocity, following acceleration, and following force) state to a stopping state within the Axis Module FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

Interface IAxisCommandedInput

Services for commanding desired setpoints. Setpoints can be position, velocity, acceleration, and force.

A new addition to the interface to handle the case that the Axis cannot do absolute servo positioning until the Axis has been "homed" the IAxisCommandedInput interface is the addition of a setAbsolutePositioning and setRelativePositioning method for commanded input position. Unclear if this is the wrong place for these methods.

 
Methods in interface IAxisCommandedInput
getAbsolutePositioning(boolean * pBoolean), getAccelerationCmdInput(AxisAccelCmd * pVal), getForceCmdInput(AxisForceCmd * pVal), getPositionCmdInput(AxisPositionCmd * pVal), getRelativePositioning(boolean * pBoolean), getVelocityCmdInput(AxisVelocityCmd * pVal), setAbsolutePositioning(boolean val), setAccelerationCmdInput(AxisAccelCmd accelerationCmd ), setForceCmdInput(AxisForceCmd forceCmd ), setPositionCmdInput(AxisPositionCmd positioningCmd ), setRelativePositioning(boolean val), setVelocityCmdInput(AxisVelocityCmd velocityCmd ), updateCommandedInput()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getAbsolutePositioning

HRESULT getAbsolutePositioning(/*[out,retval]*/ boolean * pBoolean)
Query to determine if in absolute positioning mode. Can be in either absolute positioning mode or relative positioning mode, but not both at same time. Default is relative positioning. Cannot do absolute positioning until Axis is homed.
Parameters:
pBoolean -  boolean [out] flag, with true indicating in absolute positioning mode, false not in absolute positioning mode.
Returns:
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
See Also:
getRelativePositioning, setAbsolutePositioning, setRelativePositioning, IAxis::setHomed

getAccelerationCmdInput

HRESULT getAccelerationCmdInput(/*[out,retval]*/ AxisAccelCmd * pVal)
Get the commanded input (or desired) acceleration for the axis.
Parameters:
pVal - pointer to AxisAccelCmd variable, with units in meters per second squared. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getForceCmdInput

HRESULT getForceCmdInput(/*[out,retval]*/ AxisForceCmd * pVal)
Get the commanded input (or desired) force for the axis.
Parameters:
pVal - pointer to AxisForceCmd variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getPositionCmdInput

HRESULT getPositionCmdInput(/*[out,retval]*/ AxisPositionCmd * pVal)
Get the commanded input (or desired) position for the axis.
Parameters:
pVal - pointer to AxisPositionCmd variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getRelativePositioning

HRESULT getRelativePositioning(/*[out,retval]*/ boolean * pBoolean)
Query to determine if in relative positioning mode. Can be in either absolute positioning mode or relative positioning mode, but not both at same time. Default is relative positioning. Cannot do absolute positioning until Axis is homed.
Parameters:
pBoolean -  boolean [out] flag, with true indicating in relative positioning mode, false not in relative positioning mode.
Returns:
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
See Also:
getAbsolutePositioning, setAbsolutePositioning, setRelativePositioning, IAxis::setHomed

getVelocityCmdInput

HRESULT getVelocityCmdInput(/*[out,retval]*/ AxisVelocityCmd * pVal)
Get the commanded input (or desired) velocity for the axis.
Parameters:
pVal - pointer to AxisVelocityCmd variable, with units in meters per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

setAbsolutePositioning

HRESULT setAbsolutePositioning(/*[in]*/ boolean val)
Set absolute positioning mode flag. Can be in either absolute positioning mode or relative positioning mode, but not both at same time. Setting absolute positioning to false, means setting relative positioning mode. Default is relative positioning. Cannot do absolute positioning until Axis is homed.
Parameters:
b -  boolean [in] flag, with true indicating set absolute positioning mode, false setting relative positioning mode.
Returns:
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
See Also:
getAbsolutePositioning, getRelativePositioning, setRelativePositioning, IAxis::setHomed

setAccelerationCmdInput

HRESULT setAccelerationCmdInput(/*[in]*/ AxisAccelCmd accelerationCmd )
Set the commanded input (or desired) acceleration for this axis.
Parameters:
accelerationCmd - is the new AxisAccelCmd value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setForceCmdInput

HRESULT setForceCmdInput(/*[in]*/ AxisForceCmd forceCmd )
Set the commanded input (or desired) force for this axis.
Parameters:
forceCmd - is the new AxisForceCmd value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setPositionCmdInput

HRESULT setPositionCmdInput(/*[in]*/ AxisPositionCmd positioningCmd )
Set the commanded input (or desired) position for this axis.
Parameters:
positioningCmd - is the new AxisPositionCmd value for this limit, with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setRelativePositioning

HRESULT setRelativePositioning(/*[in]*/ boolean val)
Set relative positioning mode flag. Can be in either absolute positioning mode or relative positioning mode, but not both at same time. Setting relative positioning to false, means setting absolute positioning mode. Default is relative positioning. Cannot do absolute positioning until Axis is homed.
Parameters:
b -  boolean [in] flag, with true indicating set relative positioning mode, false setting absolute positioning mode.
Returns:
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
See Also:
getAbsolutePositioning, getRelativePositioning, setAbsolutePositioning, IAxis::setHomed

setVelocityCmdInput

HRESULT setVelocityCmdInput(/*[in]*/ AxisVelocityCmd velocityCmd )
Set the commanded input (or desired) velocity for this axis.
Parameters:
velocityCmd - is the new AxisVelocityCmd value for this limit, with units in meters per second.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

updateCommandedInput

HRESULT updateCommandedInput()
Method to run an Axis Commanded Input module cycle. So far, this does nothing. FIXME: add cubic interpolation here?
Returns:
S_OK - cycle ran sucessfully
E_FAIL - cycle failed.

Interface IAxisCommandedOutput

Services for commanding actuator setpoints.
 
Methods in interface IAxisCommandedOutput
getForceCmdOutput(AxisForceCmd * pVal), getPositionCmdOutput(AxisPositionCmd * pVal), getTorqueCmdOutput(AxisTorqueCmd * pVal), getVelocityCmdOutput(AxisVelocityCmd * pVal), setForceCmdOutput(Force forceCmd ), setPositionCmdOutput(Length positioningCmd ), setTorqueCmdOutput(AxisTorqueCmd accelerationCmd ), setVelocityCmdOutput(Velocity velocityCmd ), updateCommandedOutput()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getForceCmdOutput

HRESULT getForceCmdOutput(/*[out,retval]*/ AxisForceCmd * pVal)
Get the commanded output force for the axis.
Parameters:
pVal - pointer to AxisForceCmd variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getPositionCmdOutput

HRESULT getPositionCmdOutput(/*[out,retval]*/ AxisPositionCmd * pVal)
Get the commanded output position for the axis.
Parameters:
pVal - pointer to AxisPositionCmd variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getTorqueCmdOutput

HRESULT getTorqueCmdOutput(/*[out,retval]*/ AxisTorqueCmd * pVal)
Get the commanded output torque for the axis.
Parameters:
pVal - pointer to AxisTorqueCmd variable. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getVelocityCmdOutput

HRESULT getVelocityCmdOutput(/*[out,retval]*/ AxisVelocityCmd * pVal)
Get the commanded output velocity for the axis.
Parameters:
pVal - pointer to AxisVelocityCmd variable, with units in meters per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

setForceCmdOutput

HRESULT setForceCmdOutput(/*[in]*/ Force forceCmd )
Set the commanded force for this axis.
Parameters:
forceCmd - is the new AxisForceCmd value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setPositionCmdOutput

HRESULT setPositionCmdOutput(/*[in]*/ Length positioningCmd )
Set the commanded output position for this axis.
Parameters:
positioningCmd - is the new AxisPositionCmd value for this limit, with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setTorqueCmdOutput

HRESULT setTorqueCmdOutput(/*[in]*/ AxisTorqueCmd accelerationCmd )
Set the commanded output torque for this axis.
Parameters:
torqueCmd - is the new AxisTorqueCmd value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setVelocityCmdOutput

HRESULT setVelocityCmdOutput(/*[in]*/ Velocity velocityCmd )
Set the commanded output velocity for this axis.
Parameters:
velocityCmd - is the new AxisVelocityCmd value for this limit, with units in meters per second.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

updateCommandedOutput

HRESULT updateCommandedOutput()
Method to run an Axis Commanded Output module cycle. Before writing output, clamp the servo output. The IO will scale output values and convert to raw units. Update will actually writing to output IO points. FIXME: does this module need to know if IO is enabled. IO writing will be done whether IO is enabled or not, although if not enabled, the outputs are all zero unless manually overridden. Assume output will not be set by any calculations if IO not enabled.
Returns:
S_OK - cycle ran sucessfully
E_FAIL - cycle failed.

Interface IAxisDyn

Note, much of the information accessible in this interface would not typically be used by the Axis module itself, but rather by clients of the Axis module, in querying the axis to determine its characteristics.
 
Methods in interface IAxisDyn
getAccelerationLimit(Acceleration *pVal), getAxmass(Mass * newVal), getBacklash(Length *pVal), getDamping(Force *pVal), getDeadband(Length *pVal), getDecelerationLimit(Acceleration *pVal), getInertia(Mass *pVal), getJerkLimit(Jerk *pVal), getLoadedCaseSpringRate(Stiffness *pVal), getMaxVelAccLim(Acceleration *pVal), getOvershootStepInput(Length *pVal), getQuasiStaticLoadLimit(Force *pVal), getRisingTimeStepInput(Time *pVal), getRunFriction(Force *pVal), getStaticFriction(Force *pVal), getTimeConstant(Time *pVal), getWorstCaseSpringRate(Stiffness *pVal), getZeroVelAccLim(Acceleration *pVal), setAccelerationLimit(Acceleration newVal), setAxmass(Mass *pVal), setBacklash(Length newVal), setDamping(Force newVal), setDeadband(Length newVal), setDecelerationLimit(Acceleration newVal), setInertia(Mass newVal), setJerkLimit(Jerk newVal), setLoadedCaseSpringRate(Stiffness newVal), setMaxVelAccLim(Acceleration newVal), setOvershootStepInput(Length newVal), setQuasiStaticLoadLimit(Force newVal), setRisingTimeStepInput(Time newVal), setRunFriction(Force newVal), setStaticFriction(Force newVal), setTimeConstant(Time newVal), setWorstCaseSpringRate(Stiffness newVal), setZeroVelAccLim(Acceleration newVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getAccelerationLimit

HRESULT getAccelerationLimit(/*[out, retval]*/ Acceleration *pVal)
Get the acceleration limit of this axis.
Parameters:
pVal - pointer to Acceleration variable, with units in meters per second squared. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getAxmass

HRESULT getAxmass(/*[out, retval]*/ Mass * newVal)
Get the mass of the axis.
Parameters:
pVal - pointer to Mass variable, with units in Newtons. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getBacklash

HRESULT getBacklash(/*[out, retval]*/ Length *pVal)
Get the backlash length of the axis. Backlash describes relative movement between interacting mechanical parts, resulting from looseness.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDamping

HRESULT getDamping(/*[out, retval]*/ Force *pVal)
Get the current damping value for this axis.
Parameters:
pVal - pointer to Force variable, with units in Newtons. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDeadband

HRESULT getDeadband(/*[out, retval]*/ Length *pVal)
Get the deadband value for this axis. Deadband is defined as the range of values of the controlled variable in which no corrective response is initiated.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDecelerationLimit

HRESULT getDecelerationLimit(/*[out, retval]*/ Acceleration *pVal)
Get the deceleration limit.
Parameters:
pVal - pointer to Acceleration variable, with units in meters per second squared. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getInertia

HRESULT getInertia(/*[out, retval]*/ Mass *pVal)
Get the inertia damping value of the axis. Inertial damping used as a means of providing a stabilizing force for servomechanisms, the force being opposite to that of the servomotor or main drive member and proportional to the acceleration of the system. (Differs from damping in that in the usual sense since inertia is proportional to velocity.) Inertial damping force is effective only during periods of acceleration and has no effect on the output speed under constant velocity conditions.
Parameters:
pVal - pointer to Mass variable, with units in Newtons. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getJerkLimit

HRESULT getJerkLimit(/*[out, retval]*/ Jerk *pVal)
Get the jerk limit of this axis.
Parameters:
pVal - pointer to Jerk variable, with units in meters per second cubed. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getLoadedCaseSpringRate

HRESULT getLoadedCaseSpringRate(/*[out, retval]*/ Stiffness *pVal)
Get the stiffness/spring/compliance of the axis under load.
Parameters:
pVal - pointer to Stiffness variable, with units in Newtons per meter. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getMaxVelAccLim

HRESULT getMaxVelAccLim(/*[out, retval]*/ Acceleration *pVal)
Get the maximum velocity acceleration limit. Why is this here?
Parameters:
pVal - pointer to Stiffness variable, with units in Newtons per meter. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getOvershootStepInput

HRESULT getOvershootStepInput(/*[out, retval]*/ Length *pVal)
Get the overshoot step input of this axis.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getQuasiStaticLoadLimit

HRESULT getQuasiStaticLoadLimit(/*[out, retval]*/ Force *pVal)
Get the quasi static load limit of this axis.
Parameters:
pVal - pointer to Force variable, with units in Newtons. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getRisingTimeStepInput

HRESULT getRisingTimeStepInput(/*[out, retval]*/ Time *pVal)
Get the rising time step input of this axis.
Parameters:
pVal - pointer to Time variable, with units in seconds. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getRunFriction

HRESULT getRunFriction(/*[out, retval]*/ Force *pVal)
Get the running friction of this axis. Running friction represents the retarding force that is a linear relationship between the applied force and velocity. FIXME: is this viscous or Coloumb friction?
Parameters:
pVal - pointer to Force variable, with units in Newtons per meter per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getStaticFriction

HRESULT getStaticFriction(/*[out, retval]*/ Force *pVal)
Get the static friction of this axis. Static friction represents the retarding force that tends to prevent motion from the beginning.
Parameters:
pVal - pointer to Force variable, with units in Newtons per meter per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getTimeConstant

HRESULT getTimeConstant(/*[out, retval]*/ Time *pVal)
Get the time constant for this axis. The time constant is defined as the time factor in the transfer function to model the dynamic response.
Parameters:
pVal - pointer to Time variable, with units in seconds. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getWorstCaseSpringRate

HRESULT getWorstCaseSpringRate(/*[out, retval]*/ Stiffness *pVal)
Get the worst case stiffness/spring/compliance of the axis.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getZeroVelAccLim

HRESULT getZeroVelAccLim(/*[out, retval]*/ Acceleration *pVal)
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

setAccelerationLimit

HRESULT setAccelerationLimit(/*[in]*/ Acceleration newVal)
Set the acceleration limit of this axis.
Parameters:
newVal - is the new Acceleration value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setAxmass

HRESULT setAxmass(/*[out, retval]*/ Mass *pVal)
Set the mass of the axis.
Parameters:
newVal - is the new Mass value for this limit, with units in kilograms.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setBacklash

HRESULT setBacklash(/*[in]*/ Length newVal)
Set the backlash length of the axis. Backlash describes relative movement between interacting mechanical parts, resulting from looseness.
Parameters:
newVal - is the new Length value for this limit, with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setDamping

HRESULT setDamping(/*[in]*/ Force newVal)
Set the current damping value for this axis.
Parameters:
newVal - is the new Force value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setDeadband

HRESULT setDeadband(/*[in]*/ Length newVal)
Set the deadband value for this axis. Deadband is defined as the range of values of the controlled variable in which no corrective response is initiated.
Parameters:
newVal - is the new Length value for this limit, with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setDecelerationLimit

HRESULT setDecelerationLimit(/*[in]*/ Acceleration newVal)
Set the deceleration limit of this axis.
Parameters:
newVal - is the new Acceleration value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setInertia

HRESULT setInertia(/*[in]*/ Mass newVal)
Set the inertia damping value of the axis. Inertial damping used as a means of providing a stabilizing force for servomechanisms, the force being opposite to that of the servomotor or main drive member and proportional to the acceleration of the system. (Differs from damping in that in the usual sense since inertia is proportional to velocity.) Inertial damping force is effective only during periods of acceleration and has no effect on the output speed under constant velocity conditions.
Parameters:
newVal - is the new Mass value for this limit, with units in kilograms.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setJerkLimit

HRESULT setJerkLimit(/*[in]*/ Jerk newVal)
Parameters:
newVal - is the new Jerk value for this limit, with units in meters per second cubed.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setLoadedCaseSpringRate

HRESULT setLoadedCaseSpringRate(/*[in]*/ Stiffness newVal)
Set the jerk limit of this axis.
Parameters:
newVal - is the new Stiffness value for this limit, with units in Newtons per meter.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setMaxVelAccLim

HRESULT setMaxVelAccLim(/*[in]*/ Acceleration newVal)
Set the acceleration limit at maximum velocity. FIXME: Why is this here?
Parameters:
newVal - is the new value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setOvershootStepInput

HRESULT setOvershootStepInput(/*[in]*/ Length newVal)
Set the overshoot step input of this axis.
Parameters:
newVal - is the new value for this limit, with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setQuasiStaticLoadLimit

HRESULT setQuasiStaticLoadLimit(/*[in]*/ Force newVal)
Set the quasi static load limit of this axis.
Parameters:
newVal - is the new value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setRisingTimeStepInput

HRESULT setRisingTimeStepInput(/*[in]*/ Time newVal)
Set the rising time step input of this axis.
Parameters:
newVal - is the new value for this limit, with units in seconds.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setRunFriction

HRESULT setRunFriction(/*[in]*/ Force newVal)
Set the running friction of this axis. Running friction represents the retarding force that is a linear relationship between the applied force and velocity. FIXME: is this viscous or Coloumb friction?
Parameters:
newVal - is the new value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setStaticFriction

HRESULT setStaticFriction(/*[in]*/ Force newVal)
Set the static friction of this axis. Static friction represents the retarding force that tends to prevent motion from the beginning.
Parameters:
newVal - is the new value for this limit, with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setTimeConstant

HRESULT setTimeConstant(/*[in]*/ Time newVal)
Set the time constant for this axis. The time constant is defined as the time factor in the transfer function to model the dynamic response.
Parameters:
newVal - is the new value for this limit, with units in seconds.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setWorstCaseSpringRate

HRESULT setWorstCaseSpringRate(/*[in]*/ Stiffness newVal)
Set the worst case stiffness/spring/compliance of the axis.
Parameters:
newVal - is the new value for this limit, with units in Newtons per meter.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

setZeroVelAccLim

HRESULT setZeroVelAccLim(/*[in]*/ Acceleration newVal)
Set the acceleration limit of this axis at zero velocity.
Parameters:
newVal - is the new value for this limit, with units in meters per second squared.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).

Interface IAxisKinematics

Interface to define a lower kinematic model and upper kinematic model consistent with ISO STEP standard services, which is close to the Denavit Hartenberg model. The Denavit-Hartenberg model is extended to model kinematic errors of motion, with variables posFeedBackGain and velFeedBackGain for characterizing geometric errors of motion, such as thermally induced errors. Note, this information would not typically be used by the Axis module itself, but by clients of the Axis module, in querying the axis to determine its characteristics.
 
Methods in interface IAxisKinematics
getKs(double *pVal), getLowerKinematicModel(LowerKinematicModel *pVal), getPlacement(CoordinateFrame *pVal), getPosFeedBackGain(double *pVal), getUpperKinematicModel(UpperKinematicModel *pVal), getVelFeedBackGain(double *pVal), setKs(double newVal), setLowerKinematicModel(LowerKinematicModel newVal), setPlacement(CoordinateFrame newVal), setPosFeedBackGain(double newVal), setUpperKinematicModel(UpperKinematicModel newVal), setVelFeedBackGain(double newVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getKs

HRESULT getKs(/*[out, retval]*/ double *pVal)

getLowerKinematicModel

HRESULT getLowerKinematicModel(/*[out, retval]*/ LowerKinematicModel *pVal)

getPlacement

HRESULT getPlacement(/*[out, retval]*/ CoordinateFrame *pVal)

getPosFeedBackGain

HRESULT getPosFeedBackGain(/*[out, retval]*/ double *pVal)

getUpperKinematicModel

HRESULT getUpperKinematicModel(/*[out, retval]*/ UpperKinematicModel *pVal)

getVelFeedBackGain

HRESULT getVelFeedBackGain(/*[out, retval]*/ double *pVal)

setKs

HRESULT setKs(/*[in]*/ double newVal)

setLowerKinematicModel

HRESULT setLowerKinematicModel(/*[in]*/ LowerKinematicModel newVal)

setPlacement

HRESULT setPlacement(/*[in]*/ CoordinateFrame newVal)

setPosFeedBackGain

HRESULT setPosFeedBackGain(/*[in]*/ double newVal)

setUpperKinematicModel

HRESULT setUpperKinematicModel(/*[in]*/ UpperKinematicModel newVal)

setVelFeedBackGain

HRESULT setVelFeedBackGain(/*[in]*/ double newVal)

Interface IAxisLimits

Limits to motion ranges.
 
Methods in interface IAxisLimits
getCutOffPosition(Length *pVal), getFollowingErrorViolationLim(Length *pVal), getFollowingErrorWarnLim(Length *pVal), getHardFwdOTravelLim(Length *pVal), getHardRevOTravelLim(Length *pVal), getJerkLimit(Jerk *pVal), getMaxForceLimit(Force *pVal), getMaxVelocity(Velocity *pVal), getOvershootViolationLim(Length *pVal), getOvershootWarnLevelLimit(Length *pVal), getSoftFwdOTravelLim(Length *pVal), getSoftRevOTravelLim(Length *pVal), getUndershootViolationLim(Length *pVal), getUndershootWarnLevelLimit(Length *pVal), getUsefulTravel(Length *pVal), setCutOffPosition(Length newVal), setFollowingErrorViolationLim(Length newVal), setFollowingErrorWarnLim(Length newVal), setHardFwdOTravelLim(Length newVal), setHardRevOTravelLim(Length newVal), setJerkLimit(Jerk newVal), setMaxForceLimit(Force newVal), setMaxVelocity(Velocity newVal), setOvershootViolationLim(Length newVal), setOvershootWarnLevelLimit(Length newVal), setSoftFwdOTravelLim(Length newVal), setSoftRevOTravelLim(Length newVal), setUndershootViolationLim(Length newVal), setUndershootWarnLevelLimit(Length newVal), setUsefulTravel(Length newVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getCutOffPosition

HRESULT getCutOffPosition(/*[out,retval]*/ Length *pVal)
Get the cutoff value for filtering position.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getFollowingErrorViolationLim

HRESULT getFollowingErrorViolationLim(/*[out,retval]*/ Length *pVal)
Get the violation limit for following error. Following error is defined as the difference between the desired process value and the actual process value.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getFollowingErrorWarnLim

HRESULT getFollowingErrorWarnLim(/*[out,retval]*/ Length *pVal)
Get the warning limit for following error. Following error is defined as the difference between the desired process value and the actual process value.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getHardFwdOTravelLim

HRESULT getHardFwdOTravelLim(/*[out,retval]*/ Length *pVal)
Get the value for the physical hard limit of axis travel in the forward direction.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getHardRevOTravelLim

HRESULT getHardRevOTravelLim(/*[out,retval]*/ Length *pVal)
Get the value for the physical hard limit of axis travel in the reverse direction.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getJerkLimit

HRESULT getJerkLimit(/*[out,retval]*/ Jerk *pVal)
Get the value of the jerk limit for axis motion.
Parameters:
pVal - pointer to Jerk variable, with units in meters per second cubed. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getMaxForceLimit

HRESULT getMaxForceLimit(/*[out,retval]*/ Force *pVal)
Get the limit or maximum force value of the axis motion.
Parameters:
pVal - pointer to Force variable, with units in Newton. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getMaxVelocity

HRESULT getMaxVelocity(/*[out,retval]*/ Velocity *pVal)
Get the limit or maximum value of velocity for axis motion.
Parameters:
pVal - pointer to Velocity variable, with units in meters per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getOvershootViolationLim

HRESULT getOvershootViolationLim(/*[out,retval]*/ Length *pVal)
Get the value of the maximum overshoot permitted. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Overshoot occurs when the system is underdamped and the output process variable value exceeds the setpoint.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getOvershootWarnLevelLimit

HRESULT getOvershootWarnLevelLimit(/*[out,retval]*/ Length *pVal)
Get the warning level limit for the overshoot difference between the error of the process variable (e.g., pos, vel) the desired setpoint, that when exceeded in a steady state condition causes a warning to be issued. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Overshoot occurs when the system is underdamped and the output process variable value exceeds the setpoint. FIXME: what happens upon error.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getSoftFwdOTravelLim

HRESULT getSoftFwdOTravelLim(/*[out,retval]*/ Length *pVal)
Get the value for the software detected axis over travel limit in the forward direction.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getSoftRevOTravelLim

HRESULT getSoftRevOTravelLim(/*[out,retval]*/ Length *pVal)
Get the value for the soft axis over travel limit in the forward direction.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getUndershootViolationLim

HRESULT getUndershootViolationLim(/*[out,retval]*/ Length *pVal)
Get the violation limit for the undershoot that signals an error condition. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Undershoot occurs when the system is overdamped and the output process variable value falls below the setpoint. FIXME: what happens upon error.
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getUndershootWarnLevelLimit

HRESULT getUndershootWarnLevelLimit(/*[out,retval]*/ Length *pVal)
Get the warning limit for the undershoot that signals an error condition. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Undershoot occurs when the system is overdamped and the output process variable value falls below the setpoint. FIXME: how is warning signalled?
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getUsefulTravel

HRESULT getUsefulTravel(/*[out,retval]*/ Length *pVal)
Get the length for the useful axis travel in the forward and reverse directions?
Parameters:
pVal - pointer to Length variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

setCutOffPosition

HRESULT setCutOffPosition(/*[in]*/ Length newVal)
Set the cutoff value to filter position.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setFollowingErrorViolationLim

HRESULT setFollowingErrorViolationLim(/*[in]*/ Length newVal)
Set the violation limit for following error. Following error is defined as the error between the process variable (e.g., pos, vel) and the desired setpoint. FIXME: ferror only for position What is done when a violation occurs?
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setFollowingErrorWarnLim

HRESULT setFollowingErrorWarnLim(/*[in]*/ Length newVal)
Set the warning limit for following error. Following error is defined as the error between the process variable (e.g., pos, vel) and the desired setpoint. FIXME: what is done when a warning is exceeded?
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setHardFwdOTravelLim

HRESULT setHardFwdOTravelLim(/*[in]*/ Length newVal)
Set the value for the physical hard limit of axis travel in the forward direction.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setHardRevOTravelLim

HRESULT setHardRevOTravelLim(/*[in]*/ Length newVal)
Set the value for the physical hard limit of axis travel in the reverse direction.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setJerkLimit

HRESULT setJerkLimit(/*[in]*/ Jerk newVal)
Set the value of the jerk limit for axis motion.
Parameters:
newVal - is the new value for the maximum jerk limit, with units in meters per second cubed.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setMaxForceLimit

HRESULT setMaxForceLimit(/*[in]*/ Force newVal)
Set the limit or maximum value of the force for axis motion.
Parameters:
newVal - is the new value for the maximum force limit with units in Newtons.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setMaxVelocity

HRESULT setMaxVelocity(/*[in]*/ Velocity newVal)
Set the limit or maximum value of velocity for axis motion.
Parameters:
newVal - is the new value for the velocity limit with units in meters per second.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setOvershootViolationLim

HRESULT setOvershootViolationLim(/*[in]*/ Length newVal)
Set the violation limit for overshoot. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Overshoot occurs when the system is underdamped and the output process variable value exceeds the setpoint. FIXME: what happens upon error.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setOvershootWarnLevelLimit

HRESULT setOvershootWarnLevelLimit(/*[in]*/ Length newVal)
Set the warning limit for overshoot. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Overshoot occurs when the system is underdamped and the output process variable value exceeds the setpoint.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setSoftFwdOTravelLim

HRESULT setSoftFwdOTravelLim(/*[in]*/ Length newVal)
Set the value for the software detected axis travel limit in the forward direction.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setSoftRevOTravelLim

HRESULT setSoftRevOTravelLim(/*[in]*/ Length newVal)
Set the value for the software detected axis travel limit in the reverse direction.
Parameters:
newVal - is the new value for this limit.
Returns:
S_OK - if value set successfully with units in meters.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setUndershootViolationLim

HRESULT setUndershootViolationLim(/*[in]*/ Length newVal)
Set the violation limit for the undershoot that signals an error condition. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Undershoot occurs when the system is overdamped and the output process variable value falls below the setpoint. FIXME: what happens upon error.
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setUndershootWarnLevelLimit

HRESULT setUndershootWarnLevelLimit(/*[in]*/ Length newVal)
Set the violation limit for the undershoot that signals an error condition. The axis is expected to reduce error in the controlling process variable as fast as possible in order to achieve a critically damped response. Undershoot occurs when the system is overdamped and the output process variable value falls below the setpoint. FIXME: how is warning signalled?
Parameters:
newVal - is the new value for this limit with units in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

setUsefulTravel

HRESULT setUsefulTravel(/*[in]*/ Length newVal)
Set the length for the useful axis travel in the forward and reverse directions?
Parameters:
newVal - is the new value for the travel length with unis in meters.
Returns:
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).

Interface IAxisMaintenance

This is a placeholder interface to define methods to run when the Axis is in a maintenance operation.
 
Methods in interface IAxisMaintenance
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

Interface IAxisPositioningServo

Services for position servoing. Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It it the clients responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = idle

Beginning State Event Ending State Action
ErrorFollowingPosition reset ResettingFollowingPosition to resolve error or estop
EstoppingFollowPosition completed EstoppedFollowPosition estoppedFollowingPositionAction
EstoppingFollowingPosition update EstoppingFollowingPosition updateEstoppingFollowingPositionAction
FollowingPosition update FollowingPosition updateFollowingPositionAction
FollowingPosition stop StoppingFollowingPosition stopFollowingPositionAction
FollowingPosition estop EstoppingFollowingPosition estopFollowingPositionAction
HoldingPosition update HoldingPosition updateHoldingFollowingPositionAction
HoldingPosition lose hold Idle loseFollowingPositionAction
HoldingPosition start servoing FollowingPosition startFollowingPositionAction
Idle holdPosition HoldingPosition holdFollowingPositionAction
StoppingFollowingPosition update StoppingFollowingPosition updateStoppingFollowingPositionAction
StoppingFollowingPosition completed HoldingPosition updateHoldingFollowingPositionAction
* error ErrorFollowingPosition  
Resetting update Resetting resettingAxisFollowingPositionAction
Resetting completed Idle  

The following table represents the states and its associated query method.
State Query Comments
errorFollowingPosition isFollowingPositionError() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
estoppedFollowPosition isEstopped() If estopped is true, then estopping completed. Power can now be disabled.
estoppingFollowPosition isEstopping() If true, performing panic stop. ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
Idle isIdle() Following Position idle waiting to start.
followingPosition isFollowingPosition Component is following position to generate new motion setpoints.
holdingPosition isHolding() Component is maintaining current position setpoint.
Resetting isResetting() Component is resetting the following position operation.
stoppingFollowingPosition isStoppingFollowingPosition() Component is stopping the following of new position setpoints.

 
Methods in interface IAxisPositioningServo
endFollowingPositionAction(), estopFollowingPositionAction(), holdFollowingPositionAction(), isCompleted(boolean * b), isEstopped(boolean * b), isEstopping(boolean * b), isFailed(boolean * b), isFollowingPosition(boolean * b), isFollowingPositionError(boolean * b), isHoldingPosition(boolean * b), isStoppingFollowingPosition(boolean * b), resetFollowingPositionAction(), startFollowingAbsPositionAction(), startFollowingRelPositionAction(), stopFollowingPositionAction(), updateEstoppingFollowingPositionAction(), updateFollowingPositionAction(), updateHoldingFollowingPositionAction(), updateResettingFollowingPositionAction(), updateStoppingFollowingPositionAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

endFollowingPositionAction

HRESULT endFollowingPositionAction()
Action to be taken when end following torque control. A endPosition event triggers this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

estopFollowingPositionAction

HRESULT estopFollowingPositionAction()
Action to be taken upon estop transition while under following position control. An estop event causes this action to be undertaken. Emergency but safe shutdown action will be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

holdFollowingPositionAction

HRESULT holdFollowingPositionAction()
Action to be taken on hold transition to start following torque control. A holdPosition event triggers this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out, retval]*/ boolean * b)
Determine if following positioning control intermediate state is done.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopped

HRESULT isEstopped(/*[out, retval]*/ boolean * b)
Determine if following positioning control is now estopped.
Parameters:
b - return true if estopped, false if not estopped.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopping

HRESULT isEstopping(/*[out, retval]*/ boolean * b)
Determine if following positioning control is estopping.
Parameters:
b - return true if estopping, false if not estopping.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFailed

HRESULT isFailed(/*[out, retval]*/ boolean * b)
Query to see if error occurred while servoing.
Parameters:
b - return true if error occurred while disabling, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingPosition

HRESULT isFollowingPosition(/*[out, retval]*/ boolean * b)
Determine if following positioning control is in following position state.
Parameters:
b - return true if following position state, false if not following position state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingPositionError

HRESULT isFollowingPositionError(/*[out, retval]*/ boolean * b)
Query to see if an error has occurred during following positioning control cycle.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHoldingPosition

HRESULT isHoldingPosition(/*[out, retval]*/ boolean * b)
Determine if following positioning control is holding position.
Parameters:
b - return true if holding position, false if not holding position.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStoppingFollowingPosition

HRESULT isStoppingFollowingPosition(/*[out, retval]*/ boolean * b)
Determine if following positioning control is stopping following position.
Parameters:
b - return true if stopping following position, false if not stopping following position.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetFollowingPositionAction

HRESULT resetFollowingPositionAction()
Action to be taken to reset following position control after error occurred.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startFollowingAbsPositionAction

HRESULT startFollowingAbsPositionAction()
Action to start following absoplute position motion control. If Axis FSM is in the holding state, a startFollowingPosition event causes this action to be undertaken and a transition to the FollowingPosition state. The Axis must be homed before following absolute position.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startFollowingRelPositionAction

HRESULT startFollowingRelPositionAction()
Action to start following relative position motion control. If Axis FSM is in the holding state, a startFollowingPosition event causes this action to be undertaken and a transition to the FollowingPosition state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopFollowingPositionAction

HRESULT stopFollowingPositionAction()
Action taken to stop following position motion control. If in the followingPosition state, a stopFollowingPosition event causes this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateEstoppingFollowingPositionAction

HRESULT updateEstoppingFollowingPositionAction()
Action to be taken in estopping state while under following position control. Emergency but safe shutdown action will be expected. Time limit?
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateFollowingPositionAction

HRESULT updateFollowingPositionAction()
Action associated to update axis motion in followingPosition state. There is debate as to whether calling this method requires an update event to be sent to the FSM (pure Mealy) or this method is called upon every FSM evaluation (Moore machine), while position servoing state is active, only extra actions would be associated with transitioining into and out of the state.
COM object dependencies include axis sensed state, position control law, axis commanded input and axis commanded output.
This method will get the sensed actual position, and use this as the actual position to the position control law. Will get the commanded position from the axis input command, and use this as the position control law setpoint. The position control law will be updated, and the new output will be read from it. The new output commanded velocity will be set in the AxisCommandOutput object.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHoldingFollowingPositionAction

HRESULT updateHoldingFollowingPositionAction()
Action to be taken while in holding position state under following position control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingFollowingPositionAction

HRESULT updateResettingFollowingPositionAction()
State-based action update to be taken in reseting following position control after error occurred. Emergency but safe shutdown action will be expected. Time limit?
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingFollowingPositionAction

HRESULT updateStoppingFollowingPositionAction()
Action to be taken in stopping state while under following position control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisSensedState

Services for determining actual or sensed axis state. Feedback data is handled by this component which is then shared among all classes requiring sensed data within the AxisModule purview. Determines operating conditions and values derived from raw measured data and other knowledge. For example, reads encoder data and may filter the data if required.

To handle different motion sensor hardware, a different AxisSensedState component would be used to interface to that hardware.

 
Methods in interface IAxisSensedState
getActualAcceleration(AxisAccelCmd * a), getActualForce(AxisForceCmd * a), getActualPosition(AxisPositionCmd * a), getActualVelocity(AxisVelocityCmd * a), getEnablingPrecondition(boolean * b), inPosition(boolean * pVal), isEnablingPrecondition(boolean * pVal), isFollowingErrorViolation(boolean * pVal), isFollowingErrorWarn(boolean * pVal), isHardFwdOTravel(boolean *pVal), isHardRevOTravel(boolean * pVal), isOverShootViolation(boolean * pVal), isSoftFwdOTravel(boolean *pVal), isSoftRevOTravel(boolean *pVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getActualAcceleration

HRESULT getActualAcceleration(/*[out,retval]*/ AxisAccelCmd * a)
Get the actual setpoint acceleration of the axis.
Parameters:
pVal - pointer to AxisAccelCmd variable, with units in meters per second per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getActualForce

HRESULT getActualForce(/*[out,retval]*/ AxisForceCmd * a)
Get the actual setpoint force of the axis.
Parameters:
pVal - pointer to AxisForceCmd variable, with units in Newtons per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getActualPosition

HRESULT getActualPosition(/*[out,retval]*/ AxisPositionCmd * a)
Get the actual setpoint position of the axis.
Parameters:
pVal - pointer to AxisPositionCmd variable, with units in meters. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getActualVelocity

HRESULT getActualVelocity(/*[out,retval]*/ AxisVelocityCmd * a)
Get the actual setpoint velocity of the axis.
Parameters:
pVal - pointer to AxisVelocityCmd variable, with units in meters per second. Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getEnablingPrecondition

HRESULT getEnablingPrecondition(/*[out,retval]*/ boolean * b)
Query to determine if the axis has power enabled.
Parameters:
pVal - pointer to boolean variable in which to store enabled flag. True means axis enabled, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

inPosition

HRESULT inPosition(/*[out,retval]*/ boolean * pVal)
Query to determine if the axis has attained desired setpoint, within tolerance.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means axis in position, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isEnablingPrecondition

HRESULT isEnablingPrecondition(/*[out,retval]*/ boolean * pVal)

isFollowingErrorViolation

HRESULT isFollowingErrorViolation(/*[out,retval]*/ boolean * pVal)
Query to determine if following error has occurred. Following error is defined as the difference between the desired process value and the actual process value.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following error violation, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isFollowingErrorWarn

HRESULT isFollowingErrorWarn(/*[out,retval]*/ boolean * pVal)
Query to determine if approaching following error violation. Following error is defined as the difference between the desired process value and the actual process value.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following error warning, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isHardFwdOTravel

HRESULT isHardFwdOTravel(/*[out,retval]*/ boolean *pVal)
Query to determine if the value for the physical hard limit of axis travel in the forward direction has been exceeded.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isHardRevOTravel

HRESULT isHardRevOTravel(/*[out,retval]*/ boolean * pVal)
Query to determine if the value for the physical hard limit of axis travel in the reverse direction has been exceeded.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isOverShootViolation

HRESULT isOverShootViolation(/*[out,retval]*/ boolean * pVal)
Query to determine if overshoot has occurred. Overshoot occurs when the system is underdamped and the output process variable value exceeds the setpoint.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means overshoot violation, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isSoftFwdOTravel

HRESULT isSoftFwdOTravel(/*[out,retval]*/ boolean *pVal)
Query to determine if the value for the software limit of axis travel in the forward direction has been exceeded.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

isSoftRevOTravel

HRESULT isSoftRevOTravel(/*[out,retval]*/ boolean *pVal)
Query to determine if the value for the software limit of axis travel in the reverse direction has been exceeded.
Parameters:
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
Returns:
S_OK - if successful.
E_FAIL - if not implemented.

Interface IAxisSetup

Services preparatory to operation that can be supplied before arrival of current command values. Includes capability and limits specified through AxisLimits and AxisDyn.

Clients of the Axis would prepare several setup components, and change setups to handle different applications needs, e.g., stiff versus compliant axis control. It has not determined under what states and conditions the setup can be changed.

 
Methods in interface IAxisSetup
getCurrentRates(IAxisRates **pVal), getDynamicRates(IAxisDyn **pVal), getPhysicalLimits(IAxisRates **pVal), setCurrentRates(IAxisRates * newVal), setDynamicRates(IAxisDyn * newVal), setPhysicalLimits(IAxisRates * newVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getCurrentRates

HRESULT getCurrentRates(/*[out,retval]*/ IAxisRates **pVal)

getDynamicRates

HRESULT getDynamicRates(/*[out,retval]*/ IAxisDyn **pVal)

getPhysicalLimits

HRESULT getPhysicalLimits(/*[out,retval]*/ IAxisRates **pVal)

setCurrentRates

HRESULT setCurrentRates(/*[in]*/ IAxisRates * newVal)

setDynamicRates

HRESULT setDynamicRates(/*[in]*/ IAxisDyn * newVal)

setPhysicalLimits

HRESULT setPhysicalLimits(/*[in]*/ IAxisRates * newVal)

Interface IAxisTorqueServo

Services for torque servoing. Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It it the clients responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = Idle

Beginning State Event Ending State Action
ErrorFollowingTorque | estoppedFollowTorque reset ResettingFollowingTorque use resetAxisFollowingTorqueAction to resolve error or estop.
EstoppingFollowTorque completed EstoppedFollowTorque estoppedFollowingTorqueAction
EstoppingFollowingTorque update EstoppingFollowingTorque updateEstoppingFollowingTorqueAction
FollowingTorque update followingTorque updateFollowingTorqueAction
FollowingTorque stop StoppingFollowingTorque stopFollowingTorqueAction
FollowingTorque estop EstoppingFollowingTorque estopFollowingTorqueAction
HoldingTorque update HoldingTorque updateHoldingFollowingTorqueAction
HoldingTorque lose hold Idle loseFollowingTorqueAction
HoldingTorque start servoing FollowingTorque startFollowingTorqueAction
Idle holdTorque HoldingTorque holdFollowingTorqueAction
* error ErrorFollowingTorque  
Resetting update Resetting resettingAxisFollowingTorqueAction
Resetting completed Idle  
StoppingFollowingTorque update StoppingFollowingTorque updateStoppingFollowingTorqueAction
StoppingFollowingTorque completed HoldingTorque updateHoldingFollowingTorqueAction

The following table represents the states and its associated query method.
State Query Comments
ErrorFollowingTorque isFollowingTorqueError() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
EstoppedFollowTorque isEstopped() If estopped is true, then estopping completed.  Power can now be disabled.
EstoppingFollowTorque isEstopping() If true, performing panic stop. ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
FollowingTorque isFollowingTorque() Component is following new torque setpoints to define motion.
HoldingTorque isHolding() Component is holding torque, no motion, but is generating new setpoints.
Idle isIdle() Following Torque component idle waiting to start.
Resetting isResetting() Component is resetting the following Torque operation.
StoppingFollowingTorque isStoppingFollowingTorque() Component will stop following torque motion, and return to holding torque.

 
Methods in interface IAxisTorqueServo
endFollowingTorqueAction(), estopFollowingTorqueAction(), holdFollowingTorqueAction(), isCompleted(boolean * b), isEstopped(boolean * b), isEstopping(boolean * b), isFailed(boolean * b), isFollowingTorque(boolean * b), isFollowingTorqueError(boolean * b), isHoldingTorque(boolean * b), isStoppingFollowingTorque(boolean * b), resetFollowingTorqueAction(), startFollowingTorqueAction(), stopFollowingTorqueAction(), updateEstoppingFollowingTorqueAction(), updateFollowingTorqueAction(), updateHoldingFollowingTorqueAction(), updateResettingFollowingTorqueAction(), updateStoppingFollowingTorqueAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

endFollowingTorqueAction

HRESULT endFollowingTorqueAction()
Action to be taken when end following torque control. A end event triggers this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

estopFollowingTorqueAction

HRESULT estopFollowingTorqueAction()
Action to be taken on estop transition while under following torque control. Emergency but safe shutdown action will be expected. Time limit? An estop event triggers this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

holdFollowingTorqueAction

HRESULT holdFollowingTorqueAction()
Action to be taken on hold transition to start following torque control. A holdTorque event triggers this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if following torque control is done.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopped

HRESULT isEstopped(/*[out, retval]*/ boolean * b)
Query to see if following torque control mode has completed estopping.
Parameters:
b - return true if estopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopping

HRESULT isEstopping(/*[out, retval]*/ boolean * b)
Query to see if following torque control mode is estopping.
Parameters:
b - return true if estopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFailed

HRESULT isFailed(/*[out, retval]*/ boolean * b)
Query to see if error occurred while servoing.
Parameters:
b - return true if error occurred while disabling, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingTorque

HRESULT isFollowingTorque(/*[out,retval]*/ boolean * b)
Query to see if performing motion under following torque control.
Parameters:
b - return true if following torque state, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingTorqueError

HRESULT isFollowingTorqueError(/*[out,retval]*/ boolean * b)
Query to see if error has occurred during following torque control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHoldingTorque

HRESULT isHoldingTorque(/*[out,retval]*/ boolean * b)
Query to see if holding motion under following torque control.
Parameters:
b - return true if holding motion under torque control, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStoppingFollowingTorque

HRESULT isStoppingFollowingTorque(/*[out, retval]*/ boolean * b)
Query to see if in stopping following torque motion.
Parameters:
b - return true if stopping following torque motion, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetFollowingTorqueAction

HRESULT resetFollowingTorqueAction()
Action to be taken to reset following torque control after error occurred.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startFollowingTorqueAction

HRESULT startFollowingTorqueAction()
Action to start following torque motion control. If Axis FSM is in the holdingTorque state, a startFollowingTorque event causes this action to be undertaken and a transition to the FollowingTorque state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopFollowingTorqueAction

HRESULT stopFollowingTorqueAction()
Action taken to stop following torque motion control. If in the following torque state, a stopFollowingTorque event causes this action to be undertaken, and the next state to holdingTorque state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateEstoppingFollowingTorqueAction

HRESULT updateEstoppingFollowingTorqueAction()
Action to be taken while in estopping state under following torque control. Emergency but safe shutdown action will be expected. Time limit?
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateFollowingTorqueAction

HRESULT updateFollowingTorqueAction()
Action to update axis motion under in followingTorque state. Action associated to a state precludes the need for an update event while in the following torque state to cause an update action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHoldingFollowingTorqueAction

HRESULT updateHoldingFollowingTorqueAction()
Action to be taken while in holding torque state under following torque control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingFollowingTorqueAction

HRESULT updateResettingFollowingTorqueAction()
Action to be taken while in resetting error state under following torque control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingFollowingTorqueAction

HRESULT updateStoppingFollowingTorqueAction()
Action to be taken while in stopping state under following torque control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisVelocityServo

Services for velocity servoing. Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It it the clients responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = idle

Beginning State Event Ending State Action
ErrorFollowingVelocity | EstoppedFollowVelocity reset ResettingFollowingVelocity use resetAxisFollowingVelocityAction to resolve error or estop.
EstoppingFollowVelocity completed EstoppedFollowVelocity estoppedFollowingVelocityAction
EstoppingFollowingVelocity update EstoppingFollowingVelocity updateEstoppingFollowingVelocityAction
FollowingVelocity update FollowingVelocity updateFollowingVelocityAction
FollowingVelocity stop StoppingFollowingVelocity stopFollowingVelocityAction
FollowingVelocity estop EstoppingFollowingVelocity estopFollowingVelocityAction
HoldingVelocity update holdingVelocity updateHoldingFollowingVelocityAction
HoldingVelocity lose hold Idle loseFollowingVelocityAction, either enabled or change servoing mode
HoldingVelocity start servoing followingVelocity startFollowingVelocityAction
Idle holdVelocity HoldingVelocity holdFollowingVelocityAction
StoppingFollowingVelocity update StoppingFollowingVelocity updateStoppingFollowingVelocityAction
StoppingFollowingVelocity completed HoldingVelocity updateHoldingFollowingVelocityAction
* error ErrorFollowingVelocity  
Resetting update Resetting resettingAxisIFollowingVelocityAction
Resetting completed Idle  

The following table represents the states and its associated query method.
State Query Comments
errorFollowVelocity isFollowingVelocityError() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
estoppedFollowVelocity isEstopped() If estopped is true, then estopping completed. Power can now be disabled.
estoppingFollowVelocity isEstopping() If true, performing panic stop. ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
Idle isIdle() Idle, waiting to start.
followingVelocity isFollowingVelocity Component is following velocity setpoint to generate motion.
holdingVelocity isHolding() Component is holding the current velocity setpoint.
Resetting isResetting() Component is resetting the following Velocity operation.
stoppingFollowingVelocity isStoppingFollowingVelocity() Component is stopping the velocity following motion.

 
Methods in interface IAxisVelocityServo
endFollowingVelocityAction(), estopFollowingVelocityAction(), holdFollowingVelocityAction(), isCompleted(boolean * b), isEstopped(boolean * b), isEstopping(boolean * b), isFailed(boolean * b), isFollowingVelocity(boolean * b), isFollowingVelocityError(boolean * b), isHoldingVelocity(boolean * b), isStoppingFollowingVelocity(boolean * b), resetFollowingVelocityAction(), startFollowingVelocityAction(), stopFollowingVelocityAction(), updateEstoppingFollowingVelocityAction(), updateFollowingVelocityAction(), updateHoldingFollowingVelocityAction(), updateResettingFollowingVelocityAction(), updateStoppingFollowingVelocityAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

endFollowingVelocityAction

HRESULT endFollowingVelocityAction()
Action to be taken to upon loss of following velocity control. An endVelocity event causes this transition action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

estopFollowingVelocityAction

HRESULT estopFollowingVelocityAction()
Action to be taken to estop while under following velocity control. An estop event causes this transition action to be undertaken. Emergency but safe shutdown action will be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

holdFollowingVelocityAction

HRESULT holdFollowingVelocityAction()
Action to be taken to hold to begin following velocity control. An holdVelocity event causes this transition action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out, retval]*/ boolean * b)
Determine if following velocity intermediate (...ing) control state is done.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopped

HRESULT isEstopped(/*[out, retval]*/ boolean * b)
Query to see if following velocity control mode has completed estopping.
Parameters:
b - return true if estopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isEstopping

HRESULT isEstopping(/*[out, retval]*/ boolean * b)
Query to see if following velocity control mode is estopping.
Parameters:
b - return true if estopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFailed

HRESULT isFailed(/*[out, retval]*/ boolean * b)
Query to see if error occurred while servoing.
Parameters:
b - return true if error occurred while disabling, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingVelocity

HRESULT isFollowingVelocity(/*[out, retval]*/ boolean * b)
Query to see if in following velocity state.
Parameters:
b - return true if following velocity, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFollowingVelocityError

HRESULT isFollowingVelocityError(/*[out, retval]*/ boolean * b)
Query to see if an error has occurred during following velocity control cycle.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHoldingVelocity

HRESULT isHoldingVelocity(/*[out, retval]*/ boolean * b)
Query to see if in holding following velocity state.
Parameters:
b - return true if holding following velocity, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStoppingFollowingVelocity

HRESULT isStoppingFollowingVelocity(/*[out, retval]*/ boolean * b)
Query to see if in stopping following velocity motion.
Parameters:
b - return true if stopping following velocity motion, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetFollowingVelocityAction

HRESULT resetFollowingVelocityAction()
Action to be taken to reset when error occurred when in following velocity control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startFollowingVelocityAction

HRESULT startFollowingVelocityAction()
Action to start following velocity motion control. If Axis FSM is in the holdingVelocity state, a startFollowingVelocity event causes this action to be undertaken and a transition to the FollowingVelocity state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopFollowingVelocityAction

HRESULT stopFollowingVelocityAction()
Action taken to stop following velocity motion control. If in the followingVelocity state, a stopFollowingVelocity event causes this action to be undertaken, and the next state is the holdingVelocity state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateEstoppingFollowingVelocityAction

HRESULT updateEstoppingFollowingVelocityAction()
Action to be taken while in estopping state while under following velocity control. Emergency but safe shutdown action will be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateFollowingVelocityAction

HRESULT updateFollowingVelocityAction()
Action to update axis motion in follow velocity state. An update event causes this action to be undertaken.
COM object dependencies include axis sensed state, position control law, axis commanded input and axis commanded output.
Will get the sensed actual velocity from the AxisSensedState object. This actual velocity will be set within the velocity ControlLaw object. Next, the commanded velocity from the AxisCommandedInput object, will be used so set the velocity ControlLaw setpoint. The velocity ControlLaw will be updated, and the new output acceleration will be read from velocity ControlLaw. The new commanded acceleration will be set in the AxisCommandedOutput object.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHoldingFollowingVelocityAction

HRESULT updateHoldingFollowingVelocityAction()
Action to be taken while in holding velocity state under following velocity control. Emergency but safe shutdown action will be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingFollowingVelocityAction

HRESULT updateResettingFollowingVelocityAction()
Action to be taken while in resetting state while under following velocity control. Emergency but safe shutdown action will be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingFollowingVelocityAction

HRESULT updateStoppingFollowingVelocityAction()
Action to be taken while in stopping state while under following velocity control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisSupervisor

The IAxisSupervisor interface is defined within the Axis Module in order to allow Axis modules to be deployed in standalone Axis operation under manual control. For autonomous control, the axis is expected to have an Axis Group module managing it and providing it trajectory-based setpoints. The reason this interpolator functionality was not just assimilated as part of the Axis Group was that it was not considered practical to expect vendors of Axis modules to include a complete realization of Axis Group module interfaces in deployment of "One-Axis" Axis Group - even if these interfaces were "stubbed" out. It was felt that if an Axis and Supervisor were bundled together, it would be a more practical commercial packaging. Axis bundled as part of a larger control system could assume that his functionality has been subsumed as part of the Axis Group module responsibility. (This is the current thinking.)

Realizations of Axis Supervisor handle single-axis trajectory responsibilities by managing a collection of interpolation "plugs", including homing, continuous jogging, incremental positioning and absolute positioning. Interpolation is achieved by coordinating the servoing activity of an Axis via an IAxis reference. The IAxisSupervisor interface defines a container mechanism to provide a means of storing interpolated-motion component references and then providing access to the interpolated-motion component references.

An IAxisSupervisor realization uses a FSM to coordinate among the different interpolated-motion control strategies, and then manages a selected interpolation strategy to achieve axis motion based on the FSM. Each control strategy has an associated "pluggable" Axis motion control component that implements the control strategy. See also the associated interpolated-motion control component interfaces:

IAxisSupervisor coordinates between the different servoing motion control strategies by means of a FSM. Based on the selected motion control strategy, a different plug is used to control the motion. (See the OmacModule for details on component realization and how the AxisSupervisor and each plug are connected.) These interpolated-motion plugs could provide their own interpolation service or could be share an underlying profile generator as illustrated in the following Figure Axis .

Axis Supervisor Class UML Figure

Behavior

An IAxisSupervisor component manages a set of interpolated-motion control components that implement basic single-axis motion trajectory strategies. Trajectory motion consists of a sequence of desired positions, velocities, and accelerations of an axis over time. An Axis Supervisor generates a time sequence of intermediate desired configurations for an axis that matches the given rates to attain the desired position, velocity or acceleration goal. For example, to achieve continuous jogging, the IAxisJogging component would place the axis in followingAbsPosition seroving and then update new positions for the axis to follow based on attaining the jogging velocity. All interpolated-motion control components must comply with underlying Axis state. Thus, for example, moving an axis to an absolute position could not be done until the Axis positioning has been calibrated by a homing sequence.

IAxisSupervisor coordinates between the different servoing motion control strategies by means of a FSM, including events, states, and state transitions, defined by the following diagram:

Axis Interpolator Class FSM Figure

Switching between interpolated motion control strategies is achieved by sending events to the Axis FSM. The FSM itself is hidden, but the Axis interface provides methods for event propagation and state query. The event propagating methods that cause FSM state transitions, which may result in changing control strategies, are: disableAxis, enableAxis, estopAxis, home, jog, resetAxis, and stopAxis. The relationship between state, events, next state and action associated with the state transition in the FSM is given in the following table, where XXX is a member of {AbsPositioning, Homing, Jogging, Incrementing}.

First State = Disabled

Beginning State Event Ending State Action
Disabled enable() Enabling IAxisEnabling::enablingAction
Disabled hardStop() HardStopping IAxisDisabling::hardStoppingAction
Enabled hardStop() HardStopped IAxisErrorAndEnable::hardStopAction
HardStopped reset() Disabled IAxisResetting::resetHardStopAction
Enabling completed Enabled IAxisEnabling::enabledAction
Enabled startXXX() XXX IAxisXXX::startXXXAction
XXX stop() XXXStopping IAxisXXX::stopXXXAction
XXX hardStop() XXXHardStopping IAxisXXX::hardStoppingXXXAction
XXX completed Enabled IAxisXXX::finishedXXXAction
except Jogging which can only be stopped
XXXStopping completed Enabled n/a
XXXHardStopping completed HardStopped n/a
XXX (state update) XXX IAxisXXX::updateXXXAction
XXXStopping (state update) XXXStopping IAxisXXX::updateXXXStoppingAction
XXXAbnormalStopping (state update) XXXAbnormalStopping IAxisXXX::updateXXXAbnormalStoppingAction
XXXHardStopping (state update) XXXHardStopping IAxisXXX::updateXXXHardStoppingAction

The State Definitions and Query Table supplements the behavior model described above by the state table. This table provides a detailed description of each state and identifies the query mechanism for determining if the Axis Interpolation component is in that state. The Axis Interpolation FSM states, state description, and query methods is described in the following table where XXX is a member of {AbsPositioning, Homing, Jogging, Incrementing}.

State Definition Query for State
AbsolutePositioning Module is moving to an absolute position. isAbsolutePositioning()
Disabled Module is Disabled. Connections and IO points are not enabled. isDisabled()
Enabled Module is enabled. Power on to amplifiers. isEnabled()
HardStopped Module is HardStopped. Power to equipment is off. isHardStopped()
Homing Module is Homing. isHoming()
IncrementingPosition Module is incrementally Jogging. isIncrementing()
Jogging Module is under Jogging control. isJogging()
Ready Module is ready. Part of outer OMAC API state definition. isReady()
Resetting Module is resetting hard or abnormal stop or resolving fault. isResetting()
StoppingXXX Module is stopping XXX. isStoppingXXX()
AbnormalStoppingXXX Module is abnormal stopping XXX. isAbnormalStoppingXXX()
HardStoppingXXX Module is hard stopping XXX. isHardStoppingXXX()

The Axis interpolator plugs provide a packaging mechanism for encapsulating the FSM functionality for a specific service: homing, jogging, incremental jogging, or absolute positioning. These plugs derive from IOmac so that they are connectable and could provide event service if necessary. To simplify develop and integration these plugs are simple. Each plug provides event and activity methods for transitioning and updating the varying states motion control in a generic FSM: start, stop, update, hardstop, abnormalstop, fail and completion. The Axis Supervisor controls the life of the plug by invoking the appropriate method given the current state of the FSM. For example, to start a homing sequence, the method startHomingAction is invoked on the AxisHoming plug. Subsequently, for each cycle the AxisSupervisor is in the Jogging state, the method updateAxisHomingAction is invoked until the isCompleted method returns true. Several modes of stopping are defined for each plug to accommodate different circumstances for velocity servoing to zero. The stopping modes that have been defined are:

Appropriate states, events and actions are associated with each state. The event stopping methods are: hardStopXXXAction, abnormalXXXStopAction, or stopXXX where XXX indicates the functionality provided by the plug. The stopping states are: hardStopping, hardStopped abornmalStopping, abornmalStopped, normalStopping and normalStopped. The stopping state queries are: isHardStopping, isHardStopped, isAbornmalStopping, isAbornmalStopped, isNormalStopping and isNormalStopped. as well as isStopping and isStopped to detect any stopping state. The updating actions are: updateHardStopping, updateAbornmalStopping, and updateStopping .

Estop is not a separate stopping mode, instead it is Resident Task that maps an Estop event into several events that can be tailored to accommodate domain-specific safety codes. For example, estop could be mapped into "stop as fast on each limit using the software limits as configured by OEM, put brakes on, cut power", or "cut power after certain time limit" depending on pertinent safety codes. To allow for the different domain-specific forms of estop, this functionality has been abstracted into a Resident Task and would use either a hard or abnormal stop to a achieve safe emergency stop as predicated by the domain-specific safety code.

As a final note, it is not encumbant on the system integrator or end-user to develop the Axis interpolator plugs. It would be expected that preconfigured Axis interpolator plugs would be provided by the axis vendor so that default functionality is available. End-users would only be expected to develop a new plug in response to satisfying some special need.

 
Methods in interface IAxisSupervisor
disableAxis(), enableAxis(), estopAxis(), getAbsolutePos(IAxisAbsolutePos ** ppIAxisObject), getDisabling(IAxisDisabling ** ppIAxisObject), getEnabling(IAxisEnabling ** ppIAxisObject), getHoming(IAxisHoming ** ppIAxisObject), getIncrementPosition(IAxisIncrementPos ** ppIAxisObject), getJogging(IAxisJogging ** ppIAxisObject), getResetting(IAxisResetting ** ppIAxisObject), getServoAxis(IAxis ** ppIAxisObject), home(double velocity), isAbnormalStopped(boolean * b), isAbnormalStopping(boolean * b), isCompleted(boolean * b), isDisabled(boolean * b), isEnabled(boolean * b), isFaulted(boolean * b), isFinished(boolean * b), isHardStopped(boolean * b), isHardStopping(boolean * b), isHoming(boolean * b), isIncrementingPosition(boolean * b), isJogging(boolean * b), isMovingto(boolean * b), isNormalStopped(boolean * b), isNormalStopping(boolean * b), isReady(boolean * b), isResetting(boolean * b), isStopped(boolean * b), isStopping(boolean * b), jog(double velocity), resetAxis(), runInterpolator(), setAbsolutePos(IAxisAbsolutePos * val), setDisabling(IAxisDisabling * val), setEnabling(IAxisEnabling * val), setHoming(IAxisHoming * val), setIncrementPosition(IAxisIncrementPos * val), setJogging(IAxisJogging * val), setResetting(IAxisResetting * val), setServoAxis(IAxis * val), stopAxis()
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

disableAxis

HRESULT disableAxis()
Method to trigger event to disable a Manual Interpolator. Upon handling, event will cause a transition from the disabled state to the enabled state within the Axis Manual Interpolator FSM. Note, there is a naming collision with Windows disable enumeration. This is the reason for the capitalization of the Disable method.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

enableAxis

HRESULT enableAxis()
Method to trigger event to enable a Manual Interpolator. Upon handling, event will cause a transition from the disabled state to the enabled state within the Axis Manual Interpolator FSM. Note, there is a naming collision with Windows enable enumeration. This is the reason for the Capitalization of the Enable method.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue. FIXME.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)
See Also:
IOmac

estopAxis

HRESULT estopAxis()
Method to trigger an estop event. Upon handling, event will cause a transition from any state to an estop state within the Axis Manual Interpolator FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since estop event Upon handling, event will be placed at the front of the queue to be handled immediately.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

getAbsolutePos

HRESULT getAbsolutePos(/*[out,retval]*/ IAxisAbsolutePos ** ppIAxisObject)
Gets the current absolute positioning COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the absolute positioning interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getDisabling

HRESULT getDisabling(/*[out,retval]*/ IAxisDisabling ** ppIAxisObject)
Gets the current disabling COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the disabling interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getEnabling

HRESULT getEnabling(/*[out,retval]*/ IAxisEnabling ** ppIAxisObject)
Gets the current error and enabling COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the error and enabling interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getHoming

HRESULT getHoming(/*[out,retval]*/ IAxisHoming ** ppIAxisObject)
Gets the current homing COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the homing interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getIncrementPosition

HRESULT getIncrementPosition(/*[out,retval]*/ IAxisIncrementPos ** ppIAxisObject)
Gets the current incrementing position COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the incrementing position interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getJogging

HRESULT getJogging(/*[out,retval]*/ IAxisJogging ** ppIAxisObject)
Gets the current axis COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the axis interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getResetting

HRESULT getResetting(/*[out,retval]*/ IAxisResetting ** ppIAxisObject)
Gets the current resetting COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the resetting interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

getServoAxis

HRESULT getServoAxis(/*[out,retval]*/ IAxis ** ppIAxisObject)
Gets the current servoing axis COM object reference.
Parameters:
ppIAxisObject - is the address of the pointer variable that receives the IAxis interface pointer requested. Upon successful return, ppIAxisObject contains the requested interface pointer to the object. If the Axis Supervisor does not have a reference to this object, ppIAxisObject is set to NULL, and an error code is returned.
Returns:
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.

home

HRESULT home(/*[in]*/ double velocity)
Method to trigger a homing event. Upon handling, event will cause a transition from an ENABLED state to a home state within the Axis Manual Interpolator FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

isAbnormalStopped

HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
Determine if axis control is in abnormally stopped state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopping

HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
Determine if axis control is in abnormally stopping state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if axis control is done with current transitioning state.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isDisabled

HRESULT isDisabled(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in disabled state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isEnabled

HRESULT isEnabled(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in enabled state as well as if in any state past enabled?
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isFaulted

HRESULT isFaulted(/*[out, retval]*/ boolean * b)
Query to see if fault has occurred during axis control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFinished

HRESULT isFinished(/*[out,retval]*/ boolean * b)
Determine if axis control is finished positioning.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopped

HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
Determine if axis control is in hard stopped state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopping

HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
Determine if axis control is in hard stopping state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHoming

HRESULT isHoming(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in "homing" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isIncrementingPosition

HRESULT isIncrementingPosition(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in "incrementingPosition" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isJogging

HRESULT isJogging(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in axis state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isMovingto

HRESULT isMovingto(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in "movingto" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isNormalStopped

HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
Query to see if axis control stopped normally.
Parameters:
b - return true if stopped normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopping

HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
Query to see if axis control is stopping normally.
Parameters:
b - return true if stopping normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isReady

HRESULT isReady(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in ENABLED state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Axis Manual Interpolator state accessor method to determine if in "disabled" state.
Parameters:
b -  boolean [out] flag, with true indicating in state, false not in state.
Returns:
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.

isStopped

HRESULT isStopped(/*[out,retval]*/ boolean * b)
Query to see if axis control is stopped.
Parameters:
b - return true if stopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopping

HRESULT isStopping(/*[out,retval]*/ boolean * b)
Query to see if axis control is in any state of stopping motion.
Parameters:
b - return true if stopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

jog

HRESULT jog(/*[in]*/ double velocity)
Method to trigger a axis event. Upon handling, event will cause a transition from an ENABLED state to a jog state within the Axis Manual Interpolator FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

resetAxis

HRESULT resetAxis()
Method to trigger a reset event. Upon handling, event will cause a transition from what state to a reset state within the Axis Manual Interpolator FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

runInterpolator

HRESULT runInterpolator()
The primary method. Runs a servo loop. Reads commanded input from AxisCommandedInput object. Reads current status from AxisSensedState. Computes the next setpoint using a combination of position, velocity, and acceleration control laws. Writes output to AxisCommandedOutput.
Returns:
S_OK - if successful.
E_FAIL - if servo loop failed.

setAbsolutePos

HRESULT setAbsolutePos(/*[in]*/ IAxisAbsolutePos * val)
Sets the current axis absolute positioning (abs axis) COM object reference.
Parameters:
val - contains a reference to a COM object to replace the currently assigned object to handle absolute position-based axis.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisAbsolutePos REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setDisabling

HRESULT setDisabling(/*[in]*/ IAxisDisabling * val)
Sets the current axis disable handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle enable states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setEnabling

HRESULT setEnabling(/*[in]*/ IAxisEnabling * val)
Sets the current axis enable handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle enable states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setHoming

HRESULT setHoming(/*[in]*/ IAxisHoming * val)
Sets the current axis homing COM object reference.
Parameters:
val - contains a reference to a COM object to replace the currently assigned object to handle homing.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisHoming REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setIncrementPosition

HRESULT setIncrementPosition(/*[in]*/ IAxisIncrementPos * val)
Sets the current axis incrementing position (rel axis) COM object reference.
Parameters:
val - contains a reference to a COM object to replace the currently assigned object to handle incremental axis/positioning.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisIncrementPos REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setJogging

HRESULT setJogging(/*[in]*/ IAxisJogging * val)
Sets the current axis axis COM object reference.
Parameters:
val - contains a reference to a COM object to replace the currently assigned object to handle axis.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisJogging REFID interface of the supplied object.
E_NOTIMP - if not implemented. .

setResetting

HRESULT setResetting(/*[in]*/ IAxisResetting * val)
Sets the current axis resetting handling OMAC object reference.
Parameters:
val - contains a reference to a OMAC object to replace the currently assigned object to handle resetting states.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxisEnabling REFID interface of the supplied object.
E_NOTIMP - if not implemented.

setServoAxis

HRESULT setServoAxis(/*[in]*/ IAxis * val)
Sets the current servoing axis COM object reference.
Parameters:
val - contains a reference to a COM object to replace the currently assigned object axis servoing object.
Returns:
S_OK - if successful.
E_INVALIDARG - if type mismatch. Method not required to do type checking based on IAxis REFID interface of the supplied object.

stopAxis

HRESULT stopAxis()
Method to trigger a stop event. Upon handling, event will cause a transition from any motion state (axis, moving_to, incrementing, homing, following position, following velocity, following acceleration, and following force) state to a stopping state within the Axis Manual Interpolator FSM.
Returns:
S_OK - sucessful event delivery. Generally, assume no real error checking since events can be queued, regardless of current state or event preceding this event in queue.
ERROR_BUFFER_OVERFLOW - assuming queuing of events, couldn't queue event.
E_INVALIDARG - invalid event based upon current or anticipated state when event is expected to be handled. (Should it be queued anyway?)

Interface IAxisAbsolutePos

Services for absolute positioning motion control. Axis class for control of motion to a specified absolute position relative to a fixed zero position as a reference point, as contrasted with incremental move.

Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It is the client's responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = *

Beginning State Event Ending State Action
AbnormalStopped reset Resetting resetAxisAbsPositioningAction
AbnormalStopping update AbnormalStopping updateAbnormalStoppingAxisAbsPositioningAction
AbnormalStopping completed AbnormalStopped n/a
HardStopping completed HardStopped n/a
HardStopping update HardStopping updateHardStoppingAxisAbsPositioningAction
* start AbsPositioning startAxisAbsPositioningAction
AbsPositioning update AbsPositioning updateAxisAbsPositioningAction
AbsPositioning hardstop HardStopping hardStopAbsPositioningAction
AbsPositioning stop Stopping stopAxisAbsPositioningAction
* error Faulted catastrophic error use special plug to resolve error
Resetting update Resetting resettingAxisAbsPositioningAction
Resetting completed (H) resumes from History state
Stopping update Stopping updateStoppingAxisAbsPositioningAction
Stopping completed Stopped n/a

The following table represents the states and its associated query method.

State Query Comments
Faulted isFaulted() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
HardStopped isHardStopped() If hardStopped is true, then hardStopping completed. Power can now be disabled.
HardStopping isHardStopping() If true, performing panic stop, exceed any limits, break any rules, stop as soon as possible. This is part of an ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
AbnormalStopped isAbnormalStopped() Abnormal stopped, can resume after issue with either internal failure or safety violation resolved.
AbnormalStopping isAbnormalStopping() Abnormal stop means stop as quickly as possible, but save the hardware. Internal failure or safety violation detected to triggers an abnormal stop.
Finished isFinished() AbsPositioning finished.
AbsPositioning isAbsPositioning() Component is performing a absolute positioning.
Resetting isResetting() Component is resetting the absolute positioning operation.
Stopping isNormalStoppingAbsPositioning() Component is normal stopping the absolute positioning.
Stopped isNormalStopped() Component has stopped absolute positioning normally.
Stopping|
AbnormalStopping|
HardStopping
isStoppingAbsPositioning() Component is stopping the absolute positioning in some form.
Stopping|
AbnormalStopping|
HardStopping
isStoppedAbsPositioning() Component has stopped absolute positioning in some form.
 
Methods in interface IAxisAbsolutePos
abnormalStopAbsolutePosAction(), finishedAbsolutePosAction(), hardStopAbsolutePosAction(), isAbnormalStopped(boolean * b), isAbnormalStopping(boolean * b), isCompleted(boolean * b), isFaulted(boolean * b), isFinished(boolean * b), isHardStopped(boolean * b), isHardStopping(boolean * b), isNormalStopped(boolean * b), isNormalStopping(boolean * b), isResetting(boolean * b), isStopped(boolean * b), isStopping(boolean * b), resetAbsolutePosAction(), startAbsolutePosAction(double position), stopAbsolutePosAction(), updateAbnormalStoppingAbsolutePosAction(), updateAbsolutePosAction(), updateHardStoppingAbsolutePosAction(), updateResettingAbsolutePosAction(), updateStoppingAbsolutePosAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

abnormalStopAbsolutePosAction

HRESULT abnormalStopAbsolutePosAction()
Action to be taken to abnormal stop while under absolute positioning control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

finishedAbsolutePosAction

HRESULT finishedAbsolutePosAction()
Action to be taken upon completion of an absolute position.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

hardStopAbsolutePosAction

HRESULT hardStopAbsolutePosAction()
Action to be taken to hard stop while under absolute positioning control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopped

HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is in abnormally stopped state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopping

HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is in abnormally stopping state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is done with current transitioning state.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFaulted

HRESULT isFaulted(/*[out, retval]*/ boolean * b)
Query to see if fault has occurred during absolute positioning control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFinished

HRESULT isFinished(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is finished positioning.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopped

HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is in hard stopped state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopping

HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
Determine if absolute positioning control is in hard stopping state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopped

HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
Query to see if absolute positioning control stopped normally.
Parameters:
b - return true if stopped normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopping

HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
Query to see if absolute positioning control is stopping normally.
Parameters:
b - return true if stopping normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Query to see if absolute positioning control is resetting from abnormal stopped state.
Parameters:
b - return true if state, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopped

HRESULT isStopped(/*[out,retval]*/ boolean * b)
Query to see if absolute positioning control is stopped.
Parameters:
b - return true if stopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopping

HRESULT isStopping(/*[out,retval]*/ boolean * b)
Query to see if absolute positioning control is in any state of stopping motion.
Parameters:
b - return true if stopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetAbsolutePosAction

HRESULT resetAbsolutePosAction()
Action to reset absolute positioning motion control after error occurred.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startAbsolutePosAction

HRESULT startAbsolutePosAction(/*[in]*/ double position)
Action to start absolute positioning motion control.
Parameters:
position -  absolute position to move to.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopAbsolutePosAction

HRESULT stopAbsolutePosAction()
Action taken to stop absolute positioning motion control. If in the absolutePositioning state, a stopAbsolutePosition event causes this action to be undertaken, and the next state to be stoppingAbsolutePositioning if multiple cycle required, or enabled state if transition takes only one cycle to stop. To determine if next state is to be enabled, query isCompleted();
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateAbnormalStoppingAbsolutePosAction

HRESULT updateAbnormalStoppingAbsolutePosAction()
State updating activity to be taken while in abnormal stopping state under absolute positioning control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateAbsolutePosAction

HRESULT updateAbsolutePosAction()
Action to update axis motion while absolute positioning state. An update event causes this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHardStoppingAbsolutePosAction

HRESULT updateHardStoppingAbsolutePosAction()
State updating activity to be taken while in estopping state under absolute positioning control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingAbsolutePosAction

HRESULT updateResettingAbsolutePosAction()
State updating activity to be taken while in resetting from abnoraml stopped state under absolute positioning control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingAbsolutePosAction

HRESULT updateStoppingAbsolutePosAction()
State updating activity to be taken while in stopping state under absolute positioning control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisHoming

IAxisHoming defines an interface in support of homing service. The homing process can vary greatly between different machines and is an obvious candidate to become a pluggable component. Numerous issues are involved in defining the homing process and will be briefly discussed to form the requirements of the Homing API.

Limit Switches. One issue concerning homing that varies greatly between machines is the number and types of homing switches. Some machines have separate switches for home, positive overtravel, and negative overtravel, 3 switches for each axis. Other machines use overtravel limit switches for homing, to save cost. Some even have a single switch for each axis, with cams at each end of the axis and perhaps another cam for the home position, so that you can't tell just by looking at the switch reading what caused the trip. A brief survey of handling homing switches will be reviewed.

The homing procedure begins as a linear move to a point whose distance away from the current point is twice the range of the axis. This guarantees that the move will hit the switch. Before homing, you don't know where you are, of course, so you have to give it some destination that you're sure will take you as far as you can possibly go.

The direction in which to move is problematic. On some machines, the home switch is at one end of the travel, so you can be sure that homing only needs to go in one direction. On other machines the home switch is in the middle of travel, so there are a couple of alternatives:

(a) manual adjusting: the operator jogs the axis to the start side of the switch, then presses the home button on the control panel. The axis moves in the fixed direction to the home switch. If the axis starts on the wrong side, the axis will move away from the switch and eventually hit an overtravel limit or hard stop.

(b) automatic: there is a long cam on the axis, such that when you're on one side of the home switch, it's always tripped; and if you're on the other, it's not. When the move starts out, the logic looks at the switch. If it's closed, a move is made in the off-the-cam direction until the switch is open. Then, the move is aborted, and a homing move is made toward the switch. If the switch starts out as open, then the first preparatory move is not made and homing proceeds toward the switch.

The home condition can be one of several things. On some servo machines there is an encoder that has an index pulse that occurs once each revolution. A revolution is roughly a tenth of an inch, so every tenth of an inch the index pulse goes high. The home condition can be:

  1. home switch only
  2. home switch AND index pulse (better accuracy)
  3. polarity selection combinations of the above, e.g., home switch open v. closed, falling edge of index pulse v. rising edge, where these just finesse the process.

The reason for using the index pulse is that the home switch can shift slightly over time, so as long as it doesn't move into the next index pulse trip region the home position will be the same.

Some machines don't have home switches, such as a PUMA robot. Instead, these machines use a rotary potentiometer that is geared so that it is swept through its range as the joint moves from one end of travel to the other. The encoder index pulse may trigger at 100 points along the joint range, so there is a table (the “Pot Cal” table) that associated each index pulse with a pot value. This is obtained during a calibration phase when the robot is installed or during maintenance. During homing, the joint moved in a fixed direction until the index pulse triggered, then the pot is read and looked up in the pot calibration table to get the nearest joint position. Only slight motion resulted since the index pulses were closely spaced given the gearing of the joint.

Some machines (for instance some Bridgeport knee mills) come with a single switch on each axis that is tripped by a cam on each end of travel. The switch is wired into the control, and signifies that an overtravel limit is reached but can't be distinguished between the positive or negative limit. The controller can then deduce which one based on the direction the axis was moving prior to the switch tripping. This does not work if the controller boots when the machine is on a limit.

To home a machine of this type, a common scenarios is to temporarily ignore overtravel limits (assuming the switches aren't wired into estop or anything, so if they tripped it is still possible for the controller to move the axis around). A home initiates a move to the limit switch, which is logically considered a home switch. Once the switch trips (and the index pulse triggers, if applicable), the move aborts, and another move off the switch in the reverse direction is made. This prevents the controller from seeing a limit switch trip once the homing move is done.

On very low-cost machines, three axis switches can be wired in series into a single digital input bit on the controller. Then, any overtravel limit causes an abort, and it's up to the operator to see which one is tripped and back the machine off. This can either be done manually with a hand crank, or by temporarily disabling limits by pressing an unlatched button while jogging off the limit.

Position Capture. Another homing related issue is the method used to capture the position upon the occurrence of the home condition. On more primitive servo boards, there is no separate latch register, only the encoder count register. In this case that the homing logic runs every 500 microseconds, the logic would poll the home switch and order the servo board to latch the occurrence of the index pulse (it goes high when the pulse goes by, and stays high until you tell it to go low, so that the pulse won't be missed). When the logic detects the home switch tripped and sees that the index pulse happened, it saves the value of the encoder count register, aborts the move, moves back to the saved value, then sets an offset so that the effective position is zero (or whatever value home is configured to be, usually zero).

More sophisticated boards have a second register to hold the latched encoder value. The board has a hardware input, tied to the home switch, and when the home switch trips (and index pulse occurs) the encoder count is copied into this register and left there. Later, the controller can read this out. This eliminates the latency between home condition and when the controller wakes up and sees this, reading out the position value that is some distance away from the true home position. It affects the software somewhat, since you have to read different flags and registers. So, in addition to the various switch configurations, the software needs to be provided with the type of latching to expect.

So, in summary, there are many ways to do the homing, and the controller needs to be apprised of the number of switches, how the switches are wired, which are ganged together, whether to use an index pulse, how much to back off from the home, etc. To handle these different hardware limit switch configurations and position capture, the Axis Homing is a plug that derives from the IOmac interface in support of design and runtime connection to IOPoints it needs in performing the homing process. As part of this procedure, the hardware setup for the Axis Homing plug is either hard-coded or configured. Then the Axis Homing plug advertises the names and types of IO it requires, including homing or limit switches, latches, encoder pulse count, and possibly even an operator IO point. Then, the Axis Homing plug is connected to these IOPoints and to the controlling object - either an Axis Group or Axis Supervisor depending on the type of machine. In some cases where hardware latching is not available and software sampling must be done, the Axis Homing plug could contain direct access to the hardware for better performance. The Figure titled “Axis Homing Examples” uses UML to illustrate some common AxisHoming configurations.

Axis Homing Examples Figure

Figure: Axis Homing Examples

Commanding Position. Another homing issue includes synchronizing a homed state before you can do certain operations (such as following an absolute position.) Currently, the IAxis interface supports a homed and not homed mode. A setHomeOffset() allows setting an offset from the current position as the homed position. Methods homed() and lostHome() tell the axis whether it is homed or not.

To handle the case that you cannot do absolute servo positioning until you are homed, the IAxisCommandedInput interface has both a setAbsolutePositioning and setRelativePositioning modes in which to handle commanded input position. See also: IAxis::homed() and IAxisCommandedInput methods getRelativePositioning, setAbsolutePositioning, setRelativePositioning, IAxis::setHomed for more discussion on homing.

Homing methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes. In the table below, external events are in bold font. The internal events are in italic font. It is the client's responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First State = *

Beginning State Event Ending State Action
AbnormalStopped reset Resetting resetAxisHomingAction
AbnormalStopping update AbnormalStopping updateAbnormalStoppingAxisHomingAction
AbnormalStopping completed AbnormalStopped n/a
HardStopping completed HardStopped n/a
HardStopping update HardStopping updateHardStoppingAxisHomingAction
* start Homing startAxisHomingAction
Homing update Homing updateAxisHomingAction
Homing hardstop HardStopping hardStopHomingAction
Homing stop Stopping stopAxisHomingAction
* error Faulted catastrophic error use special plug to resolve error
Resetting update Resetting resettingAxisHomingAction
Resetting completed (H) resumes from History state
Stopping update Stopping updateStoppingAxisHomingAction
Stopping completed Stopped n/a

The following table represents the states and its associated query method.

State Query Comments
Faulted isFaulted() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
HardStopped isHardStopped() If hardStopped is true, then hardStopping completed. Power can now be disabled.
HardStopping isHardStopping() If true, performing panic stop, exceed any limits, break any rules, stop as soon as possible. This is part of an ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
AbnormalStopped isAbnormalStopped() Abnormal stopped, can resume after issue with either internal failure or safety violation resolved.
AbnormalStopping isAbnormalStopping() Abnormal stop means stop as quickly as possible, but save the hardware. Internal failure or safety violation detected to triggers an abnormal stop.
Finished isFinished() Homing finished.
Homing isHoming() Component is performing a homing.
Resetting isResetting() Component is resetting the Homing operation.
Stopping isNormalStoppingHoming() Component is normal stopping the homing.
Stopped isNormalStopped() Component has stopped homing normally.
Stopping|
AbnormalStopping|
HardStopping
isStoppingHoming() Component is stopping the homing in some form.
Stopping|
AbnormalStopping|
HardStopping
isStoppedHoming() Component has stopped homing in some form.
 
Methods in interface IAxisHoming
abnormalStopHomingAction(), finishedHomingAction(), hardStopHomingAction(), isAbnormalStopped(boolean * b), isAbnormalStopping(boolean * b), isCompleted(boolean * b), isFaulted(boolean * b), isFinished(boolean * b), isHardStopped(boolean * b), isHardStopping(boolean * b), isNormalStopped(boolean * b), isNormalStopping(boolean * b), isResetting(boolean * b), isStopped(boolean * b), isStopping(boolean * b), resetHomingAction(), startHomingAction(), stopHomingAction(), updateAbnormalStoppingHomingAction(), updateHardStoppingHomingAction(), updateHomingAction(), updateResettingHomingAction(), updateStoppingHomingAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

abnormalStopHomingAction

HRESULT abnormalStopHomingAction()
Action to be taken to abnormal stop while under homing control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

finishedHomingAction

HRESULT finishedHomingAction()
Action upon transition from homing to enabled, when homing is completed
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

hardStopHomingAction

HRESULT hardStopHomingAction()
Action to be taken to hard stop while under homing control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopped

HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
Determine if homing control is in abnormally stopped state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopping

HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
Determine if homing control is in abnormally stopping state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if homing control is done with current transitioning state.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFaulted

HRESULT isFaulted(/*[out, retval]*/ boolean * b)
Query to see if fault has occurred during homing control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFinished

HRESULT isFinished(/*[out,retval]*/ boolean * b)
Determine if homing control is finished positioning.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopped

HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
Determine if homing control is in hard stopped state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopping

HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
Determine if homing control is in hard stopping state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopped

HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
Query to see if homing control stopped normally.
Parameters:
b - return true if stopped normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopping

HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
Query to see if homing control is stopping normally.
Parameters:
b - return true if stopping normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Query to see if homing control is resetting from abnormal stopped state.
Parameters:
b - return true if state, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopped

HRESULT isStopped(/*[out,retval]*/ boolean * b)
Query to see if homing control is stopped.
Parameters:
b - return true if stopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopping

HRESULT isStopping(/*[out,retval]*/ boolean * b)
Query to see if homing control is in any state of stopping motion.
Parameters:
b - return true if stopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetHomingAction

HRESULT resetHomingAction()
Action taken to reset homing motion control after abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startHomingAction

HRESULT startHomingAction()
Preparation action in order to start homing motion control. If Axis FSM is in the enabled state, a startHoming event causes this action to be undertaken and a transition to the Homing state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopHomingAction

HRESULT stopHomingAction()
Action taken to stop homing motion control. If in the Homing state, a stopHoming event causes this action to be undertaken, and the next state to be stoppingHoming if multiple cycle required, or enabled state if transition takes only one cycle to stop. To determine if next state is to be enabled, query isCompleted();
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateAbnormalStoppingHomingAction

HRESULT updateAbnormalStoppingHomingAction()
State updating activity to be taken while in abnormal stopping state under homing control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHardStoppingHomingAction

HRESULT updateHardStoppingHomingAction()
State updating activity to be taken while in estopping state under homing control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHomingAction

HRESULT updateHomingAction()
Action to update axis motion while homing state. An update event causes this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingHomingAction

HRESULT updateResettingHomingAction()
State updating activity to be taken while in resetting from abnoraml stopped state under homing control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingHomingAction

HRESULT updateStoppingHomingAction()
State updating activity to be taken while in stopping state under homing control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisIncrementPos

Incremental jogging service. Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It is the client's responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = *

Beginning State Event Ending State Action
AbnormalStopped reset Resetting resetAxisIncrementingAction
AbnormalStopping update AbnormalStopping updateAbnormalStoppingAxisIncrementingAction
AbnormalStopping completed AbnormalStopped n/a
HardStopping completed HardStopped n/a
HardStopping update HardStopping updateHardStoppingAxisIncrementingAction
* start Incrementing startAxisIncrementingAction
Incrementing update Incrementing updateAxisIncrementingAction
Incrementing hardstop HardStopping hardStopIncrementingAction
Incrementing stop Stopping stopAxisIncrementingAction
* error Faulted catastrophic error use special plug to resolve error
Resetting update Resetting resettingAxisIncrementingAction
Resetting completed (H) resumes from History state
Stopping update Stopping updateStoppingAxisIncrementingAction
Stopping completed Stopped n/a

The following table represents the states and its associated query method.

State Query Comments
Faulted isFaulted() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
HardStopped isHardStopped() If hardStopped is true, then hardStopping completed. Power can now be disabled.
HardStopping isHardStopping() If true, performing panic stop, exceed any limits, break any rules, stop as soon as possible. This is part of an ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
AbnormalStopped isAbnormalStopped() Abnormal stopped, can resume after issue with either internal failure or safety violation resolved.
AbnormalStopping isAbnormalStopping() Abnormal stop means stop as quickly as possible, but save the hardware. Internal failure or safety violation detected to triggers an abnormal stop.
Finished isFinished() Incrementing finished.
Incrementing isIncrementing() Component is performing a incrementing.
Resetting isResetting() Component is resetting the incrementing operation.
Stopping isNormalStoppingIncrementing() Component is normal stopping the incrementing.
Stopped isNormalStopped() Component has stopped incrementing normally.
Stopping|
AbnormalStopping|
HardStopping
isStoppingIncrementing() Component is stopping the incrementing in some form.
Stopping|
AbnormalStopping|
HardStopping
isStoppedIncrementing() Component has stopped incrementing in some form.
 
Methods in interface IAxisIncrementPos
abnormalStopIncrementingAction(), finishedIncrementingAction(), hardStopIncrementingAction(), isAbnormalStopped(boolean * b), isAbnormalStopping(boolean * b), isCompleted(boolean * b), isFaulted(boolean * b), isFinished(boolean * b), isHardStopped(boolean * b), isHardStopping(boolean * b), isNormalStopped(boolean * b), isNormalStopping(boolean * b), isResetting(boolean * b), isStopped(boolean * b), isStopping(boolean * b), resetIncrementingAction(), startIncrementingAction(double incrementalPosition), stopIncrementingAction(), updateAbnormalStoppingIncrementingAction(), updateHardStoppingIncrementingAction(), updateIncrementingAction(), updateResettingIncrementingAction(), updateStoppingIncrementingAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

abnormalStopIncrementingAction

HRESULT abnormalStopIncrementingAction()
Action to be taken to abnormal stop while under incrementing control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

finishedIncrementingAction

HRESULT finishedIncrementingAction()
Action upon transition from incrementing to enabled, when incrementing is completed
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

hardStopIncrementingAction

HRESULT hardStopIncrementingAction()
Action to be taken to hard stop while under incrementing control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopped

HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
Determine if incrementing control is in abnormally stopped state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopping

HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
Determine if incrementing control is in abnormally stopping state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if incrementing control is done with current transitioning state.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFaulted

HRESULT isFaulted(/*[out, retval]*/ boolean * b)
Query to see if fault has occurred during incrementing control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFinished

HRESULT isFinished(/*[out,retval]*/ boolean * b)
Determine if incrementing control is finished positioning.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopped

HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
Determine if incrementing control is in hard stopped state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopping

HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
Determine if incrementing control is in hard stopping state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopped

HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
Query to see if incrementing control stopped normally.
Parameters:
b - return true if stopped normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopping

HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
Query to see if incrementing control is stopping normally.
Parameters:
b - return true if stopping normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Query to see if incrementing control is resetting from abnormal stopped state.
Parameters:
b - return true if state, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopped

HRESULT isStopped(/*[out,retval]*/ boolean * b)
Query to see if incrementing control is stopped.
Parameters:
b - return true if stopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopping

HRESULT isStopping(/*[out,retval]*/ boolean * b)
Query to see if incrementing control is in any state of stopping motion.
Parameters:
b - return true if stopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetIncrementingAction

HRESULT resetIncrementingAction()
Action taken to reset incrementing motion control after abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startIncrementingAction

HRESULT startIncrementingAction(/*[in]*/ double incrementalPosition)
Preparation action in order to start incrementing motion control. If Axis FSM is in the enabled state, a startincrementing event causes this action to be undertaken and a transition to the incrementing state.
Parameters:
incrementalPosition - relative position to increment to.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopIncrementingAction

HRESULT stopIncrementingAction()
Action taken to stop incrementing motion control. If in the incrementing state, a stopincrementing event causes this action to be undertaken, and the next state to be stoppingincrementing if multiple cycle required, or enabled state if transition takes only one cycle to stop. To determine if next state is to be enabled, query isCompleted();
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateAbnormalStoppingIncrementingAction

HRESULT updateAbnormalStoppingIncrementingAction()
State updating activity to be taken while in abnormal stopping state under incrementing control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHardStoppingIncrementingAction

HRESULT updateHardStoppingIncrementingAction()
State updating activity to be taken while in estopping state under incrementing control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateIncrementingAction

HRESULT updateIncrementingAction()
Action to update axis motion while incrementing state. An update event causes this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingIncrementingAction

HRESULT updateResettingIncrementingAction()
State updating activity to be taken while in resetting from abnoraml stopped state under incrementing control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingIncrementingAction

HRESULT updateStoppingIncrementingAction()
State updating activity to be taken while in stopping state under incrementing control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisJogging

Continuous jogging service. Methods are used corresponding to the following FSM. There is no internal FSM. Methods are called by an external FSM corresponding to events it processes.

In the table below, external events are in bold font. The internal events are in italic font.  It is the client's responsibility to query the component to determine if an internal event has occurred. Upon detection of internal event, action associated with transition to new state should be executed.

First  State = *

Beginning State Event Ending State Action
AbnormalStopped reset Resetting resetAxisJoggingAction
AbnormalStopping update AbnormalStopping updateAbnormalStoppingAxisJoggingAction
AbnormalStopping completed AbnormalStopped n/a
HardStopping completed HardStopped n/a
HardStopping update HardStopping updateHardStoppingAxisJoggingAction
* start Jogging startAxisJoggingAction
Jogging update Jogging updateAxisJoggingAction
Jogging hardstop HardStopping hardStopJoggingAction
Jogging stop Stopping stopAxisJoggingAction
* error Faulted catastrophic error use special plug to resolve error
Resetting update Resetting resettingAxisJoggingAction
Resetting completed (H) resumes from History state
Stopping update Stopping updateStoppingAxisJoggingAction
Stopping completed Stopped n/a

The following table represents the states and its associated query method.

State Query Comments
Faulted isFaulted() Clients should query component each cycle to determine if internal error occurred.
* isCompleted() Clients should query component each cycle to determine if internal completion has occurred. Transition to next state, and associated action can be performed.
HardStopped isHardStopped() If hardStopped is true, then hardStopping completed. Power can now be disabled.
HardStopping isHardStopping() If true, performing panic stop, exceed any limits, break any rules, stop as soon as possible. This is part of an ESTOP is mapped into two events, first a hard stop event, then a disable power event after motion has ceased. Estopping may or may not take more than one cycle.
AbnormalStopped isAbnormalStopped() Abnormal stopped, can resume after issue with either internal failure or safety violation resolved.
AbnormalStopping isAbnormalStopping() Abnormal stop means stop as quickly as possible, but save the hardware. Internal failure or safety violation detected to triggers an abnormal stop.
Finished isFinished() Jogging finished.
Jogging isJogging() Component is performing a continuous jog.
Resetting isResetting() Component is resetting the Jogging operation.
Stopping isNormalStoppingJogging() Component is normal stopping the continuos jog.
Stopped isNormalStopped() Component has stopped jogging normally.
Stopping|
AbnormalStopping|
HardStopping
isStoppingJogging() Component is stopping the continuos jog in some form.
Stopping|
AbnormalStopping|
HardStopping
isStoppedJogging() Component has stopped jogging in some form.
 
Methods in interface IAxisJogging
abnormalStopJoggingAction(), finishedJoggingAction(), hardStopJoggingAction(), isAbnormalStopped(boolean * b), isAbnormalStopping(boolean * b), isCompleted(boolean * b), isFaulted(boolean * b), isFinished(boolean * b), isHardStopped(boolean * b), isHardStopping(boolean * b), isNormalStopped(boolean * b), isNormalStopping(boolean * b), isResetting(boolean * b), isStopped(boolean * b), isStopping(boolean * b), resetJoggingAction(), startJoggingAction(double targetVelocity), stopJoggingAction(), updateAbnormalStoppingJoggingAction(), updateHardStoppingJoggingAction(), updateJoggingAction(), updateResettingJoggingAction(), updateStoppingJoggingAction()
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

abnormalStopJoggingAction

HRESULT abnormalStopJoggingAction()
Action to be taken to abnormal stop while under jogging control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

finishedJoggingAction

HRESULT finishedJoggingAction()
Action upon transition from jogging to enabled, when jogging is completed
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

hardStopJoggingAction

HRESULT hardStopJoggingAction()
Action to be taken to hard stop while under jogging control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopped

HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
Determine if jogging control is in abnormally stopped state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isAbnormalStopping

HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
Determine if jogging control is in abnormally stopping state. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected to triggers an abnormal stop.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isCompleted

HRESULT isCompleted(/*[out,retval]*/ boolean * b)
Determine if jogging control is done with current transitioning state.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFaulted

HRESULT isFaulted(/*[out, retval]*/ boolean * b)
Query to see if fault has occurred during jogging control.
Parameters:
b - return true if error has occurred, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isFinished

HRESULT isFinished(/*[out,retval]*/ boolean * b)
Determine if jogging control is finished positioning.
Parameters:
b - return true if done, false if not done.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopped

HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
Determine if jogging control is in hard stopped state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isHardStopping

HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
Determine if jogging control is in hard stopping state.
Parameters:
b - return true if in state, false if not in state.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopped

HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
Query to see if jogging control stopped normally.
Parameters:
b - return true if stopped normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isNormalStopping

HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
Query to see if jogging control is stopping normally.
Parameters:
b - return true if stopping normally, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isResetting

HRESULT isResetting(/*[out,retval]*/ boolean * b)
Query to see if jogging control is resetting from abnormal stopped state.
Parameters:
b - return true if state, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopped

HRESULT isStopped(/*[out,retval]*/ boolean * b)
Query to see if jogging control is stopped.
Parameters:
b - return true if stopped, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

isStopping

HRESULT isStopping(/*[out,retval]*/ boolean * b)
Query to see if jogging control is in any state of stopping motion.
Parameters:
b - return true if stopping, false if not.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

resetJoggingAction

HRESULT resetJoggingAction()
Action taken to reset jogging motion control after abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

startJoggingAction

HRESULT startJoggingAction(/*[in]*/ double targetVelocity)
Preparation action in order to start jogging motion control. If Axis FSM is in the enabled state, a startjogging event causes this action to be undertaken and a transition to the jogging state.
Parameters:
targetVelocity - maximum velocity of jog
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

stopJoggingAction

HRESULT stopJoggingAction()
Action taken to stop jogging motion control. If in the jogging state, a stopjogging event causes this action to be undertaken, and the next state to be stoppingjogging if multiple cycle required, or enabled state if transition takes only one cycle to stop. To determine if next state is to be enabled, query isCompleted();
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateAbnormalStoppingJoggingAction

HRESULT updateAbnormalStoppingJoggingAction()
State updating activity to be taken while in abnormal stopping state under jogging control. Abnormal stop means stop as quickly as possible, but save the hardware.' Internal failure or safety violation detected and causes an abnormal stop.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateHardStoppingJoggingAction

HRESULT updateHardStoppingJoggingAction()
State updating activity to be taken while in estopping state under jogging control. Hard or panic stop means exceed any limits, break any rules, stop as soon as possible. Emergency but safe shutdown action will still be expected.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateJoggingAction

HRESULT updateJoggingAction()
Action to update axis motion while jogging state. An update event causes this action to be undertaken.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateResettingJoggingAction

HRESULT updateResettingJoggingAction()
State updating activity to be taken while in resetting from abnoraml stopped state under jogging control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

updateStoppingJoggingAction

HRESULT updateStoppingJoggingAction()
State updating activity to be taken while in stopping state under jogging control.
Returns:
S_OK - if successful.
E_FAIL - if unsucessful.

Interface IAxisRates

Motion profile description. Note, some information is used by the Axis module itself, and other by clients of the Axis module, in querying the axis to determine its characteristics.
 
Methods in interface IAxisRates
getMaxAcceleration(Acceleration *pVal), getMaxJerk(Jerk *pVal), getMaxTravel(Length *pVal), getMaxVelocity(Velocity *pVal), getPosErrRatioCutMoving(Length *pVal), getPosErrRatioIdleMoving(Length *pVal), getPosErrRatioIdleStationary(Length *pVal), getRepeatability(long *pVal), setMaxAcceleration(Acceleration newVal), setMaxJerk(Jerk newVal), setMaxTravel(Length newVal), setMaxVelocity(Velocity newVal), setPosErrRatioCutMoving(Length newVal), setPosErrRatioIdleMoving(Length newVal), setPosErrRatioIdleStationary(Length newVal), setRepeatability(long newVal)
 
Methods inherited from interface IOmacAxis
setAxisReference(IAxis *)
 
Methods inherited from interface IOmac
configToString(BSTR *), configure(BSTR,BSTR), doneConnecting(), donePublishing(), getIIDs(IEnumGUID **), getName(BSTR *), getOmacIID(_GUID *), init(), isConfigured(BSTR *), isFullyConfigured(boolean *), isNamed(BSTR,boolean *), prepare(), quit(), restore(), save(), setName(BSTR), shutdown(), start(), startConnecting(), startPublishing(), toString(BSTR *), update()
 
Methods inherited from interface IUnknown
AddRef(), QueryInterface(REFIID,void **), Release()

Method Detail

getMaxAcceleration

HRESULT getMaxAcceleration(/*[out,retval]*/ Acceleration *pVal)

getMaxJerk

HRESULT getMaxJerk(/*[out,retval]*/ Jerk *pVal)

getMaxTravel

HRESULT getMaxTravel(/*[out,retval]*/ Length *pVal)

getMaxVelocity

HRESULT getMaxVelocity(/*[out,retval]*/ Velocity *pVal)

getPosErrRatioCutMoving

HRESULT getPosErrRatioCutMoving(/*[out,retval]*/ Length *pVal)

getPosErrRatioIdleMoving

HRESULT getPosErrRatioIdleMoving(/*[out,retval]*/ Length *pVal)

getPosErrRatioIdleStationary

HRESULT getPosErrRatioIdleStationary(/*[out,retval]*/ Length *pVal)

getRepeatability

HRESULT getRepeatability(/*[out,retval]*/ long *pVal)

setMaxAcceleration

HRESULT setMaxAcceleration(/*[in]*/ Acceleration newVal)

setMaxJerk

HRESULT setMaxJerk(/*[in]*/ Jerk newVal)

setMaxTravel

HRESULT setMaxTravel(/*[in]*/ Length newVal)

setMaxVelocity

HRESULT setMaxVelocity(/*[in]*/ Velocity newVal)

setPosErrRatioCutMoving

HRESULT setPosErrRatioCutMoving(/*[in]*/ Length newVal)

setPosErrRatioIdleMoving

HRESULT setPosErrRatioIdleMoving(/*[in]*/ Length newVal)

setPosErrRatioIdleStationary

HRESULT setPosErrRatioIdleStationary(/*[in]*/ Length newVal)

setRepeatability

HRESULT setRepeatability(/*[in]*/ long newVal)

UNRESOLVED TODO/ISSUES/FAQ/TBD LIST FOR AXIS MODULE

RESOLVED ISSUES LIST FOR AXIS MODULE

AXIS MODULE FAQ

Axis Module Interface Summaries

Interface IAxis Summary

Method Summary
 HRESULT currentStateName(/*[out,retval]*/ BSTR * name)
           Axis module state accessor method that returns a BSTR containing current state name.
 HRESULT disableAxis()
           Method to trigger event to disable a module.
 HRESULT enableAxis()
           Method to trigger event to enable a module.
 HRESULT endCommandedPosition()
           Method to trigger a EndCommandedPosition event.
 HRESULT endCommandedTorque()
           Method to trigger a EndCommandedTorque event.
 HRESULT endCommandedVelocity()
           Method to trigger a EndCommandedVelocity event.
 HRESULT estopAxis()
           Method to trigger an estop event.
 HRESULT followCommandedAbsPosition()
           Method to trigger a followCommandedAbsPosition event.
 HRESULT followCommandedRelPosition()
           Method to trigger a followCommandedRelPosition event.
 HRESULT followCommandedTorque()
           Method to trigger a FollowCommandedTorque event.
 HRESULT followCommandedVelocity()
           Method to trigger a FollowCommandedVelocity event.
 HRESULT getCommandedInput(/*[out,retval]*/ IAxisCommandedInput ** ppIAxisObject)
           Gets the current commanded input OMAC object reference.
 HRESULT getCommandedOutput(/*[out,retval]*/ IAxisCommandedOutput** ppIAxisObject)
           Gets the current commanded output OMAC object reference.
 HRESULT getDisabling(/*[out,retval]*/ IAxisDisabling ** ppIAxisObject)
           Gets the current disabling COM object reference.
 HRESULT getDynamics(/*[out,retval]*/ IAxisDyn ** ppIAxisObject)
           Gets the current dynamics setup OMAC object reference.
 HRESULT getEnabling(/*[out,retval]*/ IAxisEnabling ** ppIAxisObject)
           Gets the current error and enabling COM object reference.
 HRESULT getHomeOffset(/*[out,retval]*/ double * pOffset)
           Get the homed offset for the axis.
 HRESULT getKinematics(/*[out,retval]*/ IAxisKinematics ** ppIAxisObject)
           Gets the current kinematics setup OMAC object reference.
 HRESULT getLimits(/*[out,retval]*/ IAxisLimits ** ppIAxisObject)
           Gets the current axis limits definition OMAC object reference.
 HRESULT getMaintenance(/*[out,retval]*/ IAxisMaintenance ** ppIAxisObject)
           Gets the current axis maintenance OMAC object reference.
 HRESULT getPositionControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
           Get the current axis position control law OMAC object reference.
 HRESULT getPositioningServo(/*[out,retval]*/ IAxisPositioningServo ** ppIAxisObject)
           Gets the current axis position servoing OMAC object reference.
 HRESULT getResetting(/*[out,retval]*/ IAxisResetting ** ppIAxisObject)
           Gets the current resetting COM object reference.
 HRESULT getSensedState(/*[out,retval]*/ IAxisSensedState ** ppIAxisObject)
           Gets the current axis sensed state OMAC object reference.
 HRESULT getSetup(/*[out,retval]*/ IAxisSetup ** ppIAxisObject)
           Gets the current axis setup OMAC object reference.
 HRESULT getTorqueControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
           Get the current axis torque control law OMAC object reference.
 HRESULT getTorqueServo(/*[out,retval]*/ IAxisTorqueServo **ppIAxisObject)
           Gets the current torque servoing OMAC object reference.
 HRESULT getVelocityControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
           Get the current axis velocity control law OMAC object reference.
 HRESULT getVelocityServo(/*[out,retval]*/ IAxisVelocityServo ** ppIAxisObject)
           Gets the current axis velocity servoing OMAC object reference.
 HRESULT holdCommandedPosition()
           Method to trigger a HoldCommandedPosition event.
 HRESULT holdCommandedTorque()
           Method to trigger a HoldCommandedTorque event.
 HRESULT holdCommandedVelocity()
           Method to trigger a HoldCommandedVelocity event.
 HRESULT homed()
           Set axis homed.
 HRESULT isDisabled(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in disabled state.
 HRESULT isDisabling(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in disabling state.
 HRESULT isEnabled(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in enabled state as well as if in any state past enabled?.
 HRESULT isEnabling(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in enabling state.
 HRESULT isEstopped(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "estopped" state.
 HRESULT isEstopping(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "estopping" state.
 HRESULT isFaulted(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "faulted" state after detecting internal error.
 HRESULT isFollowingPosition(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "followingPosition" state.
 HRESULT isFollowingTorque(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in followingTorque state.
 HRESULT isFollowingVelocity(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "followingVelocity" state.
 HRESULT isHoldingPosition(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in holdingPosition state.
 HRESULT isHoldingTorque(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in holdingTorque state.
 HRESULT isHoldingVelocity(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in holdingVelocity state.
 HRESULT isHomed(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if Axis is homed.
 HRESULT isReady(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "ready" state.
 HRESULT isResetting(/*[out,retval]*/ boolean * b)
           Axis module state accessor method to determine if in "resetting" state.
 HRESULT loseHome()
           Set not homed.
 HRESULT processServoLoop()
           The primary method.
 HRESULT resetAxis()
           Method to trigger a reset event.
 HRESULT setCommandedInput(/*[in]*/ IAxisCommandedInput * val)
           Sets the current axis commanded input OMAC object reference.
 HRESULT setCommandedOutput(/*[in]*/ IAxisCommandedOutput * val)
           Sets the current axis commanded output OMAC object reference.
 HRESULT setDisabling(/*[in]*/ IAxisDisabling * val)
           Sets the current axis disable handling OMAC object reference.
 HRESULT setEnabling(/*[in]*/ IAxisEnabling * val)
           Sets the current axis enable handling OMAC object reference.
 HRESULT setHomeOffset(/*[in]*/ double offset)
           Set the homed offset for the axis.
 HRESULT setKinematics(/*[in]*/ IAxisKinematics * val)
           Sets the current axis kinematics setup OMAC object reference.
 HRESULT setLimits(/*[in]*/ IAxisLimits * val)
           Sets the current axis limits setup OMAC object reference.
 HRESULT setMaintenance(/*[in]*/ IAxisMaintenance * val)
           Sets the current axis maintenance OMAC object reference.
 HRESULT setPositionControlLaw(/*[in]*/ IControlLaw * val)
           Sets the current axis position control law OMAC object reference.
 HRESULT setPositioningServo(/*[in]*/ IAxisPositioningServo * val)
           Sets the current axis positioning servo OMAC object reference.
 HRESULT setResetting(/*[in]*/ IAxisResetting * val)
           Sets the current axis resetting handling OMAC object reference.
 HRESULT setSensedState(/*[in]*/ IAxisSensedState * val)
           Sets the current axis sensed state OMAC object reference.
 HRESULT setSetup(/*[in]*/ IAxisSetup * val)
           Sets the current axis setup OMAC object reference.
 HRESULT setTorqueControlLaw(/*[in]*/ IControlLaw * val)
           Sets the current axis torque control law OMAC object reference.
 HRESULT setTorqueServo(/*[in]*/ IAxisTorqueServo * val)
           Sets the current axis torque servoing OMAC object reference.
 HRESULT setVelocityControlLaw(/*[in]*/ IControlLaw * val)
           Sets the current axis velocity control law OMAC object reference.
 HRESULT setVelocityServo(/*[in]*/ IAxisVelocityServo * val)
           Sets the current axis velocity servoing OMAC object reference.
 HRESULT stopAxis()
           Method to trigger a stopMotion event.

Interface IAxisCommandedInput Summary

Method Summary
 HRESULT getAbsolutePositioning(/*[out,retval]*/ boolean * pBoolean)
           Query to determine if in absolute positioning mode.
 HRESULT getAccelerationCmdInput(/*[out,retval]*/ AxisAccelCmd * pVal)
           Get the commanded input (or desired) acceleration for the axis.
 HRESULT getForceCmdInput(/*[out,retval]*/ AxisForceCmd * pVal)
           Get the commanded input (or desired) force for the axis.
 HRESULT getPositionCmdInput(/*[out,retval]*/ AxisPositionCmd * pVal)
           Get the commanded input (or desired) position for the axis.
 HRESULT getRelativePositioning(/*[out,retval]*/ boolean * pBoolean)
           Query to determine if in relative positioning mode.
 HRESULT getVelocityCmdInput(/*[out,retval]*/ AxisVelocityCmd * pVal)
           Get the commanded input (or desired) velocity for the axis.
 HRESULT setAbsolutePositioning(/*[in]*/ boolean val)
           Set absolute positioning mode flag.
 HRESULT setAccelerationCmdInput(/*[in]*/ AxisAccelCmd accelerationCmd )
           Set the commanded input (or desired) acceleration for this axis.
 HRESULT setForceCmdInput(/*[in]*/ AxisForceCmd forceCmd )
           Set the commanded input (or desired) force for this axis.
 HRESULT setPositionCmdInput(/*[in]*/ AxisPositionCmd positioningCmd )
           Set the commanded input (or desired) position for this axis.
 HRESULT setRelativePositioning(/*[in]*/ boolean val)
           Set relative positioning mode flag.
 HRESULT setVelocityCmdInput(/*[in]*/ AxisVelocityCmd velocityCmd )
           Set the commanded input (or desired) velocity for this axis.
 HRESULT updateCommandedInput()
           Method to run an Axis Commanded Input module cycle.

Interface IAxisCommandedOutput Summary

Method Summary
 HRESULT getForceCmdOutput(/*[out,retval]*/ AxisForceCmd * pVal)
           Get the commanded output force for the axis.
 HRESULT getPositionCmdOutput(/*[out,retval]*/ AxisPositionCmd * pVal)
           Get the commanded output position for the axis.
 HRESULT getTorqueCmdOutput(/*[out,retval]*/ AxisTorqueCmd * pVal)
           Get the commanded output torque for the axis.
 HRESULT getVelocityCmdOutput(/*[out,retval]*/ AxisVelocityCmd * pVal)
           Get the commanded output velocity for the axis.
 HRESULT setForceCmdOutput(/*[in]*/ Force forceCmd )
           Set the commanded force for this axis.
 HRESULT setPositionCmdOutput(/*[in]*/ Length positioningCmd )
           Set the commanded output position for this axis.
 HRESULT setTorqueCmdOutput(/*[in]*/ AxisTorqueCmd accelerationCmd )
           Set the commanded output torque for this axis.
 HRESULT setVelocityCmdOutput(/*[in]*/ Velocity velocityCmd )
           Set the commanded output velocity for this axis.
 HRESULT updateCommandedOutput()
           Method to run an Axis Commanded Output module cycle.

Interface IAxisDyn Summary

Method Summary
 HRESULT getAccelerationLimit(/*[out, retval]*/ Acceleration *pVal)
           Get the acceleration limit of this axis.
 HRESULT getAxmass(/*[out, retval]*/ Mass * newVal)
           Get the mass of the axis.
 HRESULT getBacklash(/*[out, retval]*/ Length *pVal)
           Get the backlash length of the axis.
 HRESULT getDamping(/*[out, retval]*/ Force *pVal)
           Get the current damping value for this axis.
 HRESULT getDeadband(/*[out, retval]*/ Length *pVal)
           Get the deadband value for this axis.
 HRESULT getDecelerationLimit(/*[out, retval]*/ Acceleration *pVal)
           Get the deceleration limit.
 HRESULT getInertia(/*[out, retval]*/ Mass *pVal)