Mover List Object
The Mover List object provides a way to group Movers together and issue commands to every Mover in the list. Alternatively, commands can be sent to individual movers within the list based on their geographic proximity to a track position.
Many of the methods and properties below are group commands based on corresponding methods available and documented in the singular Mover object.
Setup & Execution
1 2 | |
1 2 3 4 5 6 7 8 9 | |
MoverLists must also be added to the Mediator object. By default, this is handled already in the MAIN.Initialize ACTION.
1 2 | |
Chainability and related objects
The Track and Zone objects keep internal mover lists that can be accessed with the .CurrentMoverList property. And many of the methods below return mover lists.
Additionally a mover list is extended from Objective which provides two additional and very helpful properties .RegisteredMoverCount and .RegisteredMovers.
The combination of these functionalities can allow for powerful and concise handling of movers throughout the system. Some examples follow.
1 2 | |
1 2 | |
Methods
ActivateAllTrack
ActivateAllTrack( Track: Track)
Issues individual ActivateTrack commands to every mover registered with the list.
The property IsAllTrackReady can be used to query for the completion of this method. Note that ActivateAllTrack and IsAllTrackReady may need to operate on different lists when working with Zone and Track lists as both Zone and Track are track-aware and only return movers that are both assigned to the track that the track or zone is also assigned to.
See Mover.ActivateTrack and for additional notes about track management.
1 2 3 4 5 6 7 8 9 10 | |
ApplyAllParameterSet
ApplyAllParameterSet( ParameterSet : MotionParameters_typ )
Applies a set of motion paramaters to then entire mover list.
This only sets the motion parameters that will be used for the next motion command. Any in process motion will not be affected by this method. To immediately change motion paramaters use methods such as .SetAllVelocity or .SetAllAcceleration.
Contains
Contains( Mover: Mover )
Returns TRUE if the MoverList already contains the input Mover
1 2 3 | |
FilterDestinationStation
FilterDestinationStation( Destination : REFERENCE TO Station ) : MoverList
Filters the mover list to only include movers that have a destination that matches the parameter Destination.
Filtering a mover list by station can be helpful when workings with several movers in a zone. There are two typical use cases. The first is to avoid re-triggering a move to station command after code such as Zone[1].CurrentMoverList.MoveAllToStation(Station[2]) has executed, but movers are still accelerating out of this zone. The second is to ignore movers that may have a non-typical destination such as a rejected part in an otherwise normal flow of good parts.
DisableAll
DisableAll()
Calls the Disable() method for all movers in the list.
EnableAll
Calls the Enable() method for all movers in the list.
GetMoverByLocation
GetMoverByLocation( Index : USINT, Position : LREAL, Direction : Tc2_MC2.MC_Direction ) : REFERENCE TO Mover
Returns a reference to a singular mover from the Mover List, based on it's geographic location relative to a fixed track position.
Index specifies the number of movers that should lie between the selection and the Position input. Therefore Index = 1 would be the closest mover to the input position (in a given direction), Index = 2 would be the second closest, Index = 3 would be the third closest, etc.
Position specifies the target around which mover proximity should be considered.
Direction specifies the direction around the track from which the movers are indexed. Therefore MC_Positive_Direction will begin returning movers with the most positive absolute position values that are still less than the position input. In linear, non-closed tracks MC_Shortest_Way can be used to find movers in both directions using the absolute value of the difference between the fixed Position and the mover position.
1 2 3 4 5 6 7 8 9 10 11 | |
Halt All
HaltAll()
Calls the Halt() method for all movers in the list.
LogicalComplement
Removed
This method has been removed to help with better code readability and to make the LogicalXXX methods work with the same parameter signatures. The same functionality can be achieved with the use of LogicalDifference: MoverListA.LogicalDifference(XTS.System.CompleteMoverList).
LogicalDifference
LogicalDifference( MoverList : MoverList )
Returns the logical difference of the current MoverList and the provided MoverList. Thus the returned list will list all movers in the current MoverList (MoverListA) and not in the provided MoverList (MoverListB).
1 2 3 | |
LogicalIntersect
LogicalIntersect( MoverList : MoverList )
Returns the logical intersection of the current MoverList and the provided MoverList. Thus the returned list will list all movers in the current MoverList (MoverListA) that are also in the provided MoverList (MoverListB).
1 2 3 | |
LogicalUnion
LogicalUnion( MoverList : MoverList )
Returns the logical union of the current MoverList and the provided MoverList. Thus the returned list will list all movers in the current MoverList (MoverListA) and in the provided MoverList (MoverListB) deduplicated.
1 2 3 | |
MoveAllToPosition
MoveAllToPosition( DestinationPosition : LREAL )
Issues individual MoveToPosition commands to every mover registered with the list.
1 | |
MoveAllToStation
MoveAllToStation( DestinationStation: Station )
Issues individual MoveToStation commands to every mover registered with the list.
1 | |
MoveAllVelocity
MoveAllVelocity( DesiredVelocity : LREAL )
Issues individual MoveVelocity commands to every mover registered with the list.
1 | |
SetAllAcceleration
SetAllAcceleration( DesiredAcceleration : LREAL )
Sets the acceleration motion parameter equal to the input argument for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllDeceleration
SetAllDeceleration( DesiredDeceleration : LREAL )
Sets the deceleration motion parameter equal to the input argument for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllDirection
SetAllDirection( Direction : Tc3_Mc3Definitions.MC_DIRECTION )
Sets the direction motion parameter equal to the input argument for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllGap
SetAllGap( Gap : LREAL )
Sets the gap for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllGapMode
SetAllGapMode( Mode : Tc3_Mc3Definitions.MC_GAP_CONTROL_MODE )
Sets the gap mode for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllJerk
SetAllJerk( DesiredJerk : LREAL )
Sets the jerk motion parameter equal to the input argument for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
SetAllVelocity
SetAllVelocity( DesiredVelocity : LREAL )
Sets the velocity motion parameter equal to the input argument for every mover in the list
1 | |
Note
This method causes new motion commands to be issued for the dynamics to take effect immediately- potentially triggering a large number of motion commands to execute on the same scan. See the individual Mover command and consider the ramifications for your application.
UnregisterAll
UnregisterAll()
Unregisters every mover from the list immediately
1 | |
Properties
.AllMovers
ARRAY [1..Param.MAX_MOVERS] OF POINTER TO Mover
Returns an unordered list of pointers to all movers currently in the list.
Note
If you need to find a specific mover within the list, such as the leading mover see .GetMoverByLocation
This property is intended to allow you to run arbitrary code on a set of movers beyond what is currently provided by methods like MoveAllToStation(). This will return an array with pointers to movers in the list starting at index 1 and ending at index MoverList.RegisteredMoverCount. This is slightly different than .RegisteredMovers as that property may return a sparse array.
The example below gets a count of movers in a zone that are marked as rejects by the Payload data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
.IsAllMoversDisabled
BOOL
Queries all movers registered with the mover list for the their
.Readyproperty and returns true if all movers are not ready.
1 2 3 4 5 6 7 8 9 10 11 12 | |
.IsAllMoversHalted
BOOL
Queries all movers registered with the mover list for their
.Movingproperty and returns true if all movers are not moving.
Caution
Movers who can not reach their destination because of the gap and collision avoidance settings and are effectively queued will be considered halted for the property. If you need to confirm no commands are acting on the mover see .IsNoMoverBusy.
1 2 3 4 5 6 7 8 9 10 11 12 | |
.IsAllMoversReady
BOOL
Queries all movers registered with the mover list for their
.Readyproperty and returns true if all mover are ready.
1 2 3 4 5 6 7 8 9 10 11 12 | |
.IsAllTrackReady
BOOL
Queries all movers registered with the mover list for their IsTrackReady property and returns true when all movers have this property set true.
Note
This routine intentionally returns false if no movers are on the track. This is to handle the several scan delay between activating a track and the mover reporting the track is active. In a typical use case .ActivateAllTrack and .IsAllTrackReady are called back to back. Without this exception code folling .IsAllTrackReady would falsely assume the track switch is complete if the track was empty causing mover motion commands to throw errors.
See ActivateAllTrack() for an example.
.IsNoMoverBusy
BOOL
Returns true if all movers in the zone are not
.Busy.
This property can be used when it's necessary to confirm that all movers in a zone have reached their destination position. It's frequently used during recovery steps where movers are commanded back to their previous location after a safety event, and then before normal processing can continue waiting for this property will confirm all movers have reached a location and have stopped.
Note
This uses the Mover's .Busy flag. Busy will remain true if a mover is stopped, but unable to reach the destination station or position set by it's previous command. If you're only looking to see if all movers are stoppped see .IsAllMoversHalted.
.RegisteredMoverCount
USINT
Note
This property is part of Objective but is frequently used with mover lists and can be accessed as part of the MoverList object.
.RegisteredMovers
ARRAY OF POINTER TO Mover
Note
This property is part of Objective but is frequently used with mover lists and can be accessed as part of the mover list.