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:
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.
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:
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.
Figure: Axis Module Interface Hierarchy
Below is a description of Axis module interfaces shown in the UML diagram:
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.
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.
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.

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() |
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:
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)
Axis Module IDL
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.
Last Updated September 01, 2000 08:46:58
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 |
, 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 |
HRESULT currentStateName(/*[out,retval]*/ BSTR * name)
BSTR containing
current state name.
str - is a reference to a BSTR. Client (calling object) must
SysFreeString() the returned BSTR wide character string.
S_OK - successful execution string returned.
E_OUTOFMEMORY failed to allocate BSTR buffer.
HRESULT disableAxis()
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?)
HRESULT enableAxis()
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?)
HRESULT endCommandedPosition()
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?)
HRESULT endCommandedTorque()
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?)
HRESULT endCommandedVelocity()
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?)
HRESULT estopAxis()
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?)
HRESULT followCommandedAbsPosition()
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?)
HRESULT followCommandedRelPosition()
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?)
HRESULT followCommandedTorque()
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?)
HRESULT followCommandedVelocity()
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?)
HRESULT getCommandedInput(/*[out,retval]*/ IAxisCommandedInput ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getCommandedOutput(/*[out,retval]*/ IAxisCommandedOutput** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDisabling(/*[out,retval]*/ IAxisDisabling ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDynamics(/*[out,retval]*/ IAxisDyn ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getEnabling(/*[out,retval]*/ IAxisEnabling ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getHomeOffset(/*[out,retval]*/ double * pOffset)
pOffset - pointer to double variable, with units in millimeters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - homing offset not implemented.
HRESULT getKinematics(/*[out,retval]*/ IAxisKinematics ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getLimits(/*[out,retval]*/ IAxisLimits ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getMaintenance(/*[out,retval]*/ IAxisMaintenance ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getPositionControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getPositioningServo(/*[out,retval]*/ IAxisPositioningServo ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getResetting(/*[out,retval]*/ IAxisResetting ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getSensedState(/*[out,retval]*/ IAxisSensedState ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getSetup(/*[out,retval]*/ IAxisSetup ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getTorqueControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getTorqueServo(/*[out,retval]*/ IAxisTorqueServo **ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getVelocityControlLaw(/*[out,retval]*/ IControlLaw ** ppIControlLawObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getVelocityServo(/*[out,retval]*/ IAxisVelocityServo ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT holdCommandedPosition()
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?)
HRESULT holdCommandedTorque()
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?)
HRESULT holdCommandedVelocity()
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?)
HRESULT homed()
S_OK - successful.
E_FAIL - unsuccessful.
HRESULT isDisabled(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isDisabling(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isEnabled(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isEnabling(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isEstopped(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isEstopping(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isFaulted(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in faulted state, false not in faulted state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isFollowingPosition(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isFollowingTorque(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isFollowingVelocity(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isHoldingPosition(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isHoldingTorque(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isHoldingVelocity(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isHomed(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating axis homed, false axis not homed.
S_OK - successful homed determination.
E_FAIL - unsuccessful homed determination. Unspecified reason.
HRESULT isReady(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT loseHome()
S_OK - successful.
E_FAIL - unsuccessful.
HRESULT processServoLoop()
S_OK - if successful.
E_FAIL - if servo loop failed.
HRESULT resetAxis()
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?)
HRESULT setCommandedInput(/*[in]*/ IAxisCommandedInput * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle input commands.
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.
HRESULT setCommandedOutput(/*[in]*/ IAxisCommandedOutput * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle output commands.
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.
HRESULT setDisabling(/*[in]*/ IAxisDisabling * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle enable states.
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.
HRESULT setEnabling(/*[in]*/ IAxisEnabling * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle enable states.
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.
HRESULT setHomeOffset(/*[in]*/ double offset)
offset - is a double variable, with units in millimeters.
S_OK - if successful.
E_FAIL - if unsuccessful.
E_NOTIMP - homing offset not implemented.
HRESULT setKinematics(/*[in]*/ IAxisKinematics * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle kinematic representation.
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.
HRESULT setLimits(/*[in]*/ IAxisLimits * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle physical and motion limits.
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. .
HRESULT setMaintenance(/*[in]*/ IAxisMaintenance * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle maintenance.
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.
HRESULT setPositionControlLaw(/*[in]*/ IControlLaw * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle positioning control law.
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.
HRESULT setPositioningServo(/*[in]*/ IAxisPositioningServo * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle position-base servoing.
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.
HRESULT setResetting(/*[in]*/ IAxisResetting * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle resetting states.
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.
HRESULT setSensedState(/*[in]*/ IAxisSensedState * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle IO status.
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.
HRESULT setSetup(/*[in]*/ IAxisSetup * val)
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.
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.
HRESULT setTorqueControlLaw(/*[in]*/ IControlLaw * val)
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?).
HRESULT setTorqueServo(/*[in]*/ IAxisTorqueServo * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle torque servoing.
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.
HRESULT setVelocityControlLaw(/*[in]*/ IControlLaw * val)
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?).
HRESULT setVelocityServo(/*[in]*/ IAxisVelocityServo * val)
val - contains a reference to OMAC object to replace the currently assigned object
to handle velocity-based servoing.
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.
HRESULT stopAxis()
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?)
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 |
, 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 |
HRESULT getAbsolutePositioning(/*[out,retval]*/ boolean * pBoolean)
pBoolean - boolean [out] flag, with true indicating in absolute positioning mode, false not in absolute positioning mode.
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
getRelativePositioning, setAbsolutePositioning, setRelativePositioning, IAxis::setHomed
HRESULT getAccelerationCmdInput(/*[out,retval]*/ AxisAccelCmd * pVal)
pVal - pointer to AxisAccelCmd variable, with units in meters per second squared.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getForceCmdInput(/*[out,retval]*/ AxisForceCmd * pVal)
pVal - pointer to AxisForceCmd variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getPositionCmdInput(/*[out,retval]*/ AxisPositionCmd * pVal)
pVal - pointer to AxisPositionCmd variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getRelativePositioning(/*[out,retval]*/ boolean * pBoolean)
pBoolean - boolean [out] flag, with true indicating in relative positioning mode, false not in relative positioning mode.
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
getAbsolutePositioning, setAbsolutePositioning, setRelativePositioning, IAxis::setHomed
HRESULT getVelocityCmdInput(/*[out,retval]*/ AxisVelocityCmd * pVal)
pVal - pointer to AxisVelocityCmd variable, with units in meters per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT setAbsolutePositioning(/*[in]*/ boolean val)
b - boolean [in] flag, with true indicating set absolute positioning mode, false setting relative positioning mode.
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
getAbsolutePositioning, getRelativePositioning, setRelativePositioning, IAxis::setHomed
HRESULT setAccelerationCmdInput(/*[in]*/ AxisAccelCmd accelerationCmd )
accelerationCmd - is the new AxisAccelCmd value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setForceCmdInput(/*[in]*/ AxisForceCmd forceCmd )
forceCmd - is the new AxisForceCmd value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setPositionCmdInput(/*[in]*/ AxisPositionCmd positioningCmd )
positioningCmd - is the new AxisPositionCmd value for this limit, with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setRelativePositioning(/*[in]*/ boolean val)
b - boolean [in] flag, with true indicating set relative positioning mode, false setting absolute positioning mode.
S_OK - successful positioning determination.
E_FAIL - unsuccessful positioning determination.
getAbsolutePositioning, getRelativePositioning, setAbsolutePositioning, IAxis::setHomed
HRESULT setVelocityCmdInput(/*[in]*/ AxisVelocityCmd velocityCmd )
velocityCmd - is the new AxisVelocityCmd value for this limit, with units in meters per second.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT updateCommandedInput()
S_OK - cycle ran sucessfully
E_FAIL - cycle failed.
| Methods in interface IAxisCommandedOutput |
, 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 |
HRESULT getForceCmdOutput(/*[out,retval]*/ AxisForceCmd * pVal)
pVal - pointer to AxisForceCmd variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getPositionCmdOutput(/*[out,retval]*/ AxisPositionCmd * pVal)
pVal - pointer to AxisPositionCmd variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getTorqueCmdOutput(/*[out,retval]*/ AxisTorqueCmd * pVal)
pVal - pointer to AxisTorqueCmd variable.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getVelocityCmdOutput(/*[out,retval]*/ AxisVelocityCmd * pVal)
pVal - pointer to AxisVelocityCmd variable, with units in meters per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT setForceCmdOutput(/*[in]*/ Force forceCmd )
forceCmd - is the new AxisForceCmd value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setPositionCmdOutput(/*[in]*/ Length positioningCmd )
positioningCmd - is the new AxisPositionCmd value for this limit, with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setTorqueCmdOutput(/*[in]*/ AxisTorqueCmd accelerationCmd )
torqueCmd - is the new AxisTorqueCmd value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setVelocityCmdOutput(/*[in]*/ Velocity velocityCmd )
velocityCmd - is the new AxisVelocityCmd value for this limit, with units in meters per second.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT updateCommandedOutput()
S_OK - cycle ran sucessfully
E_FAIL - cycle failed.
| Methods in interface IAxisDyn |
, 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 |
HRESULT getAccelerationLimit(/*[out, retval]*/ Acceleration *pVal)
pVal - pointer to Acceleration variable, with units in meters per second squared.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getAxmass(/*[out, retval]*/ Mass * newVal)
pVal - pointer to Mass variable, with units in Newtons.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getBacklash(/*[out, retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDamping(/*[out, retval]*/ Force *pVal)
pVal - pointer to Force variable, with units in Newtons.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDeadband(/*[out, retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDecelerationLimit(/*[out, retval]*/ Acceleration *pVal)
pVal - pointer to Acceleration variable, with units in meters per second squared.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getInertia(/*[out, retval]*/ Mass *pVal)
pVal - pointer to Mass variable, with units in Newtons.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getJerkLimit(/*[out, retval]*/ Jerk *pVal)
pVal - pointer to Jerk variable, with units in meters per second cubed.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getLoadedCaseSpringRate(/*[out, retval]*/ Stiffness *pVal)
pVal - pointer to Stiffness variable, with units in Newtons per meter.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getMaxVelAccLim(/*[out, retval]*/ Acceleration *pVal)
pVal - pointer to Stiffness variable, with units in Newtons per meter.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getOvershootStepInput(/*[out, retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getQuasiStaticLoadLimit(/*[out, retval]*/ Force *pVal)
pVal - pointer to Force variable, with units in Newtons.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getRisingTimeStepInput(/*[out, retval]*/ Time *pVal)
pVal - pointer to Time variable, with units in seconds.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getRunFriction(/*[out, retval]*/ Force *pVal)
pVal - pointer to Force variable, with units in Newtons per meter per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getStaticFriction(/*[out, retval]*/ Force *pVal)
pVal - pointer to Force variable, with units in Newtons per meter per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getTimeConstant(/*[out, retval]*/ Time *pVal)
pVal - pointer to Time variable, with units in seconds.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getWorstCaseSpringRate(/*[out, retval]*/ Stiffness *pVal)
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getZeroVelAccLim(/*[out, retval]*/ Acceleration *pVal)
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT setAccelerationLimit(/*[in]*/ Acceleration newVal)
newVal - is the new Acceleration value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setAxmass(/*[out, retval]*/ Mass *pVal)
newVal - is the new Mass value for this limit, with units in kilograms.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setBacklash(/*[in]*/ Length newVal)
newVal - is the new Length value for this limit, with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setDamping(/*[in]*/ Force newVal)
newVal - is the new Force value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setDeadband(/*[in]*/ Length newVal)
newVal - is the new Length value for this limit, with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setDecelerationLimit(/*[in]*/ Acceleration newVal)
newVal - is the new Acceleration value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setInertia(/*[in]*/ Mass newVal)
newVal - is the new Mass value for this limit, with units in kilograms.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setJerkLimit(/*[in]*/ Jerk newVal)
newVal - is the new Jerk value for this limit, with units in meters per second cubed.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setLoadedCaseSpringRate(/*[in]*/ Stiffness newVal)
newVal - is the new Stiffness value for this limit, with units in Newtons per meter.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setMaxVelAccLim(/*[in]*/ Acceleration newVal)
newVal - is the new value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setOvershootStepInput(/*[in]*/ Length newVal)
newVal - is the new value for this limit, with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setQuasiStaticLoadLimit(/*[in]*/ Force newVal)
newVal - is the new value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setRisingTimeStepInput(/*[in]*/ Time newVal)
newVal - is the new value for this limit, with units in seconds.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setRunFriction(/*[in]*/ Force newVal)
newVal - is the new value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setStaticFriction(/*[in]*/ Force newVal)
newVal - is the new value for this limit, with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setTimeConstant(/*[in]*/ Time newVal)
newVal - is the new value for this limit, with units in seconds.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setWorstCaseSpringRate(/*[in]*/ Stiffness newVal)
newVal - is the new value for this limit, with units in Newtons per meter.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setZeroVelAccLim(/*[in]*/ Acceleration newVal)
newVal - is the new value for this limit, with units in meters per second squared.
S_OK - if value set successfully.
E_INVALIDARG - if value is not within valid numeric range.
E_NOTIMP - if not implemented (or required?).
| Methods in interface IAxisKinematics |
, 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 |
HRESULT getKs(/*[out, retval]*/ double *pVal)
HRESULT getLowerKinematicModel(/*[out, retval]*/ LowerKinematicModel *pVal)
HRESULT getPlacement(/*[out, retval]*/ CoordinateFrame *pVal)
HRESULT getPosFeedBackGain(/*[out, retval]*/ double *pVal)
HRESULT getUpperKinematicModel(/*[out, retval]*/ UpperKinematicModel *pVal)
HRESULT getVelFeedBackGain(/*[out, retval]*/ double *pVal)
HRESULT setKs(/*[in]*/ double newVal)
HRESULT setLowerKinematicModel(/*[in]*/ LowerKinematicModel newVal)
HRESULT setPlacement(/*[in]*/ CoordinateFrame newVal)
HRESULT setPosFeedBackGain(/*[in]*/ double newVal)
HRESULT setUpperKinematicModel(/*[in]*/ UpperKinematicModel newVal)
HRESULT setVelFeedBackGain(/*[in]*/ 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 |
HRESULT getCutOffPosition(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getFollowingErrorViolationLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getFollowingErrorWarnLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getHardFwdOTravelLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getHardRevOTravelLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getJerkLimit(/*[out,retval]*/ Jerk *pVal)
pVal - pointer to Jerk variable, with units in meters per second cubed.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getMaxForceLimit(/*[out,retval]*/ Force *pVal)
pVal - pointer to Force variable, with units in Newton.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getMaxVelocity(/*[out,retval]*/ Velocity *pVal)
pVal - pointer to Velocity variable, with units in meters per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getOvershootViolationLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getOvershootWarnLevelLimit(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getSoftFwdOTravelLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getSoftRevOTravelLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getUndershootViolationLim(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getUndershootWarnLevelLimit(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getUsefulTravel(/*[out,retval]*/ Length *pVal)
pVal - pointer to Length variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT setCutOffPosition(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setFollowingErrorViolationLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setFollowingErrorWarnLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setHardFwdOTravelLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setHardRevOTravelLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setJerkLimit(/*[in]*/ Jerk newVal)
newVal - is the new value for the maximum jerk limit, with units in meters per second cubed.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setMaxForceLimit(/*[in]*/ Force newVal)
newVal - is the new value for the maximum force limit with units in Newtons.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setMaxVelocity(/*[in]*/ Velocity newVal)
newVal - is the new value for the velocity limit with units in meters per second.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setOvershootViolationLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setOvershootWarnLevelLimit(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setSoftFwdOTravelLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setSoftRevOTravelLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit.
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?).
HRESULT setUndershootViolationLim(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setUndershootWarnLevelLimit(/*[in]*/ Length newVal)
newVal - is the new value for this limit with units in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
HRESULT setUsefulTravel(/*[in]*/ Length newVal)
newVal - is the new value for the travel length with unis in meters.
S_OK - if value set successfully.
E_INVALIDARG - if value is outside valid numeric range.
E_NOTIMP - if not implemented (or required?).
| 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 |
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 |
, 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 |
HRESULT endFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT estopFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT holdFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out, retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopped(/*[out, retval]*/ boolean * b)
b - return true if estopped, false if not estopped.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopping(/*[out, retval]*/ boolean * b)
b - return true if estopping, false if not estopping.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFailed(/*[out, retval]*/ boolean * b)
b - return true if error occurred while disabling, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingPosition(/*[out, retval]*/ boolean * b)
b - return true if following position state, false if not following position state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingPositionError(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHoldingPosition(/*[out, retval]*/ boolean * b)
b - return true if holding position, false if not holding position.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStoppingFollowingPosition(/*[out, retval]*/ boolean * b)
b - return true if stopping following position, false if not stopping following position.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startFollowingAbsPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startFollowingRelPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateEstoppingFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHoldingFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingFollowingPositionAction()
S_OK - if successful.
E_FAIL - if unsucessful.
To handle different motion sensor hardware, a different AxisSensedState component would be used to interface to that hardware.
| Methods in interface IAxisSensedState |
, 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 |
HRESULT getActualAcceleration(/*[out,retval]*/ AxisAccelCmd * a)
pVal - pointer to AxisAccelCmd variable, with units in meters per second per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getActualForce(/*[out,retval]*/ AxisForceCmd * a)
pVal - pointer to AxisForceCmd variable, with units in Newtons per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getActualPosition(/*[out,retval]*/ AxisPositionCmd * a)
pVal - pointer to AxisPositionCmd variable, with units in meters.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getActualVelocity(/*[out,retval]*/ AxisVelocityCmd * a)
pVal - pointer to AxisVelocityCmd variable, with units in meters per second.
Returned value is numeric_limitsS_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getEnablingPrecondition(/*[out,retval]*/ boolean * b)
pVal - pointer to boolean variable in which to store enabled flag. True means axis enabled, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT inPosition(/*[out,retval]*/ boolean * pVal)
pVal - pointer to boolean variable in which to store flag. True means axis in position, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isEnablingPrecondition(/*[out,retval]*/ boolean * pVal)
HRESULT isFollowingErrorViolation(/*[out,retval]*/ boolean * pVal)
pVal - pointer to boolean variable in which to store flag. True means following error violation, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isFollowingErrorWarn(/*[out,retval]*/ boolean * pVal)
pVal - pointer to boolean variable in which to store flag. True means following error warning, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isHardFwdOTravel(/*[out,retval]*/ boolean *pVal)
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isHardRevOTravel(/*[out,retval]*/ boolean * pVal)
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isOverShootViolation(/*[out,retval]*/ boolean * pVal)
pVal - pointer to boolean variable in which to store flag. True means overshoot violation, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isSoftFwdOTravel(/*[out,retval]*/ boolean *pVal)
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
S_OK - if successful.
E_FAIL - if not implemented.
HRESULT isSoftRevOTravel(/*[out,retval]*/ boolean *pVal)
pVal - pointer to boolean variable in which to store flag. True means following limit exceeded, false not.
S_OK - if successful.
E_FAIL - if not implemented.
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 |
, 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 |
HRESULT getCurrentRates(/*[out,retval]*/ IAxisRates **pVal)
HRESULT getDynamicRates(/*[out,retval]*/ IAxisDyn **pVal)
HRESULT getPhysicalLimits(/*[out,retval]*/ IAxisRates **pVal)
HRESULT setCurrentRates(/*[in]*/ IAxisRates * newVal)
HRESULT setDynamicRates(/*[in]*/ IAxisDyn * newVal)
HRESULT setPhysicalLimits(/*[in]*/ IAxisRates * newVal)
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 |
, 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 |
HRESULT endFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT estopFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT holdFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopped(/*[out, retval]*/ boolean * b)
b - return true if estopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopping(/*[out, retval]*/ boolean * b)
b - return true if estopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFailed(/*[out, retval]*/ boolean * b)
b - return true if error occurred while disabling, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingTorque(/*[out,retval]*/ boolean * b)
b - return true if following torque state, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingTorqueError(/*[out,retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHoldingTorque(/*[out,retval]*/ boolean * b)
b - return true if holding motion under torque control, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStoppingFollowingTorque(/*[out, retval]*/ boolean * b)
b - return true if stopping following torque motion, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateEstoppingFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHoldingFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingFollowingTorqueAction()
S_OK - if successful.
E_FAIL - if unsucessful.
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 |
, 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 |
HRESULT endFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT estopFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT holdFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out, retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopped(/*[out, retval]*/ boolean * b)
b - return true if estopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isEstopping(/*[out, retval]*/ boolean * b)
b - return true if estopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFailed(/*[out, retval]*/ boolean * b)
b - return true if error occurred while disabling, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingVelocity(/*[out, retval]*/ boolean * b)
b - return true if following velocity, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFollowingVelocityError(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHoldingVelocity(/*[out, retval]*/ boolean * b)
b - return true if holding following velocity, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStoppingFollowingVelocity(/*[out, retval]*/ boolean * b)
b - return true if stopping following velocity motion, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateEstoppingFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHoldingFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingFollowingVelocityAction()
S_OK - if successful.
E_FAIL - if unsucessful.
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 .

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:

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 |
, 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 |
HRESULT disableAxis()
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?)
HRESULT enableAxis()
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?)
HRESULT estopAxis()
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?)
HRESULT getAbsolutePos(/*[out,retval]*/ IAxisAbsolutePos ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getDisabling(/*[out,retval]*/ IAxisDisabling ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getEnabling(/*[out,retval]*/ IAxisEnabling ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getHoming(/*[out,retval]*/ IAxisHoming ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getIncrementPosition(/*[out,retval]*/ IAxisIncrementPos ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getJogging(/*[out,retval]*/ IAxisJogging ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getResetting(/*[out,retval]*/ IAxisResetting ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT getServoAxis(/*[out,retval]*/ IAxis ** ppIAxisObject)
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.
S_OK - if successful.
E_FAIL - if implemented but not defined.
E_NOTIMP - if not implemented.
HRESULT home(/*[in]*/ double velocity)
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?)
HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isDisabled(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isEnabled(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isFaulted(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFinished(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHoming(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isIncrementingPosition(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isJogging(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isMovingto(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isReady(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - boolean [out] flag, with true indicating in state, false not in state.
S_OK - successful state determination.
E_FAIL - unsuccessful state determination. Unspecified reason.
HRESULT isStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT jog(/*[in]*/ double velocity)
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?)
HRESULT resetAxis()
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?)
HRESULT runInterpolator()
S_OK - if successful.
E_FAIL - if servo loop failed.
HRESULT setAbsolutePos(/*[in]*/ IAxisAbsolutePos * val)
val - contains a reference to a COM object to replace the currently assigned object
to handle absolute position-based axis.
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.
HRESULT setDisabling(/*[in]*/ IAxisDisabling * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle enable states.
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.
HRESULT setEnabling(/*[in]*/ IAxisEnabling * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle enable states.
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.
HRESULT setHoming(/*[in]*/ IAxisHoming * val)
val - contains a reference to a COM object to replace the currently assigned object
to handle homing.
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.
HRESULT setIncrementPosition(/*[in]*/ IAxisIncrementPos * val)
val - contains a reference to a COM object to replace the currently assigned object
to handle incremental axis/positioning.
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.
HRESULT setJogging(/*[in]*/ IAxisJogging * val)
val - contains a reference to a COM object to replace the currently assigned object
to handle axis.
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. .
HRESULT setResetting(/*[in]*/ IAxisResetting * val)
val - contains a reference to a OMAC object to replace the currently assigned object
to handle resetting states.
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.
HRESULT setServoAxis(/*[in]*/ IAxis * val)
val - contains a reference to a COM object to replace the currently assigned object
axis servoing object.
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.
HRESULT stopAxis()
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?)
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 |
, 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 |
HRESULT abnormalStopAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT finishedAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT hardStopAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFaulted(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFinished(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - return true if state, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startAbsolutePosAction(/*[in]*/ double position)
position - absolute position to move to.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateAbnormalStoppingAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHardStoppingAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingAbsolutePosAction()
S_OK - if successful.
E_FAIL - if unsucessful.
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:
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.

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 |
, 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 |
HRESULT abnormalStopHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT finishedHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT hardStopHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFaulted(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFinished(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - return true if state, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateAbnormalStoppingHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHardStoppingHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingHomingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
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 |
, 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 |
HRESULT abnormalStopIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT finishedIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT hardStopIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFaulted(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFinished(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - return true if state, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startIncrementingAction(/*[in]*/ double incrementalPosition)
incrementalPosition - relative position to increment to.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateAbnormalStoppingIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHardStoppingIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingIncrementingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
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 |
, 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 |
HRESULT abnormalStopJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT finishedJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT hardStopJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isAbnormalStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isCompleted(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFaulted(/*[out, retval]*/ boolean * b)
b - return true if error has occurred, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isFinished(/*[out,retval]*/ boolean * b)
b - return true if done, false if not done.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopped(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isHardStopping(/*[out,retval]*/ boolean * b)
b - return true if in state, false if not in state.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isNormalStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping normally, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isResetting(/*[out,retval]*/ boolean * b)
b - return true if state, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopped(/*[out,retval]*/ boolean * b)
b - return true if stopped, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT isStopping(/*[out,retval]*/ boolean * b)
b - return true if stopping, false if not.
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT resetJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT startJoggingAction(/*[in]*/ double targetVelocity)
targetVelocity - maximum velocity of jog
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT stopJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateAbnormalStoppingJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateHardStoppingJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateResettingJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
HRESULT updateStoppingJoggingAction()
S_OK - if successful.
E_FAIL - if unsucessful.
| Methods in interface IAxisRates |
, 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 |
HRESULT getMaxAcceleration(/*[out,retval]*/ Acceleration *pVal)
HRESULT getMaxJerk(/*[out,retval]*/ Jerk *pVal)
HRESULT getMaxTravel(/*[out,retval]*/ Length *pVal)
HRESULT getMaxVelocity(/*[out,retval]*/ Velocity *pVal)
HRESULT getPosErrRatioCutMoving(/*[out,retval]*/ Length *pVal)
HRESULT getPosErrRatioIdleMoving(/*[out,retval]*/ Length *pVal)
HRESULT getPosErrRatioIdleStationary(/*[out,retval]*/ Length *pVal)
HRESULT getRepeatability(/*[out,retval]*/ long *pVal)
HRESULT setMaxAcceleration(/*[in]*/ Acceleration newVal)
HRESULT setMaxJerk(/*[in]*/ Jerk newVal)
HRESULT setMaxTravel(/*[in]*/ Length newVal)
HRESULT setMaxVelocity(/*[in]*/ Velocity newVal)
HRESULT setPosErrRatioCutMoving(/*[in]*/ Length newVal)
HRESULT setPosErrRatioIdleMoving(/*[in]*/ Length newVal)
HRESULT setPosErrRatioIdleStationary(/*[in]*/ Length newVal)
HRESULT setRepeatability(/*[in]*/ long newVal)
- add torque, load limits. Need plus/minus limits on all
following modes
- verify parameter components definitions are complete
virtual STDMETHODIMP getActualPosition(/*[out,retval]*/ Length * a);
Should rotational and translational Axis or at least Parametric components be defined?
Axis may be of two kinds: rotational and translational, modeled as respective subclasses. Each subclass may be further specialized, corresponding to constituent physical components and control components and their interconnections. The properties of an axis of motion may be derived from its constituent model, at the time of configuration, setup, or calibration. Such a modeling framework allows uniform integration of design information into control information.
TODO: This has not been integrated into API.
This must all be predetermined. The outer level servo loop is responsible for sequencing the position servo, then the velocity servo, etc. This would have to be specialized to account for the type of hardware the servos are attached to and the kind of setpoints they expect to receive (e.g., velocity or torque). The only other option is configuration through lots of innsies/outsies "switches".
errorFollowingAccelerationAction()
for cleanup (FIXME: this cycle or next?)
/*
* Get the commanded input (or desired) position for the axis.
* @parameter pVal pointer to AxisPositionCmd variable, with units in meters.
* Returned value is numeric_limits::quiet_NaN() if undefined or not implemented.
* @return S_OK - if successful.
* @return E_FAIL - if implemented but not defined.
* @return E_NOTIMP - if not implemented.
*/
STDMETHODIMP CAxisCommandedInput::getPositionCmdInput(/*[out,retval]*/ AxisPositionCmd * pVal)
STDMETHODIMP CAxisCommandedInput::updateCommandedInput()
IOPoint->isEnabled()?
If so, does it throw an error? Who does scaling and conversion?
* 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 write to output IO points.
* FIXME: does this module need to know if IO is enabled.
* Action to update axis motion under incrementing control.
* FIXME: At a higher level, an update event causes this action to be undertaken.
* Is this true.
Not sure.
Some ask axis to home.
Some command axis that this is home. Someone smarter that the axis can tell some offset
from the current position to use as home. Provide better axis homing API. Maybe UnsetHome().
Setting zero position. Problem comes in when you are in the ENABLED, you want to be
servoing. This can lead to a problem when you go into enabled. Should, be holding
position. Difficult to do. Stop following velocity, causes velocity to go to zero. Now,
holding zero velocity.
interface AxisAccelerationServo;
interface CAxisAcclerationServo() : IAxisAccelerationServo
{ IControlLaw acclerationcontrollaw;
};
double getAbsolutePosition() removed from API? Therefore, took getAbsolutePosition() out of API. Use frames instead of
datum to modify origin.
HRESULT _stdcall getMaxAcceleration([out, retval] LinearAcceleration *pVal);
is no longer a problem. Assume marshal by value, not reference. (Receive a copy of the value.)
Approach says to define a specialization of axis base container class.
Now have an axis actuator class specialization. It is felt that this case is common enough (especially in robotics) to be added into the reference architecture.
isDone()? Does stopFollowingPosition stop
within one cycle? Yes, added Stopping state and stoppingAction to most pluggable motion control components (e.g., followPosition, jogging, etc.).
To localize parameter information. Although used by Axis Group, is accessible via Axis.
Assume higher level component is monitoring for these errors. But, should we assume/specify some sort of safeguards for some and not for others? For example, if a limit has been exceeded, Axis will automatically go into a certain mode and ignore further commands?
The dynamics is in the Axis only for informative purposes, to localize information about the axis and to allow others to query it about its capabilities/limits.
| 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. |
| 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. |
| 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. |
| 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) |