Skip to content

Commit 74fac55

Browse files
committed
Merge branch 'feature/documentation_update' into develop
2 parents de3d15b + 2e08fb9 commit 74fac55

File tree

15 files changed

+539
-178
lines changed

15 files changed

+539
-178
lines changed

Documentation/docs/CodeReference/Objects/Mover.md

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Many of the motion related commands are chainable as noted below. This allows a
1212

1313
```javascript
1414
// chained motion command that sets velocity, acceleration and a destination in one line
15-
Mover[1].SetVelcotiy(1000).SetAcceleration(10e3).MoveToStation(Station[2]);
15+
Mover[1].SetVelocity(1000).SetAcceleration(1e3).MoveToStation(Station[2]);
1616
```
1717

1818
## Setup & Execution
@@ -23,19 +23,14 @@ It is recommended, but not required, to declare Movers as an array.
2323
Mover : ARRAY [1..GVL.NUM_MOVERS] OF Mover;
2424
```
2525

26-
Movers must also be added to the Mediator object. By default, this is handled already in the MAIN.Initialize ACTION.
26+
Movers must also be added to the Mediator object. By default, this is handled automatically.
2727

2828
```javascript
2929
// Example implementation
3030
Mediator.AddMover( Mover[1] );
3131
```
3232

3333

34-
!!! note
35-
36-
Prior to 1.4.0, it was necessary to cyclically call two methods: *Mover.Cyclic()* and *Mover.CyclicTrack()*. This process is now handled implicitly by the Mediator object, along with all other Objective cyclic calls.
37-
38-
3934
## Methods
4035

4136
### ActivateTrack
@@ -44,8 +39,9 @@ Mediator.AddMover( Mover[1] );
4439

4540
> Updates the mover's logical track.
4641
47-
This method is used with track management to change the track that the mover is assigned to. Two conditions should be considered when changing tracks.
48-
- A mover will stop immediately when ActivateTrack is called. It's recommended to only change tracks when the mover is in a stopped position.
42+
This method is used with track management to change the track that the mover is assigned to. Two conditions should be considered when changing tracks:
43+
44+
- A mover will stop immediately when ActivateTrack is called. It's recommended to only change tracks when the mover is in standstill
4945
- A mover's position can change when calling ActivateTrack. This will happen if the zero point for the current track and new track are different.
5046

5147
A track change takes several PLC and NC scans. Issuing a motion command while this change is in progress will cause the mover to throw an error. To check if the track change is complete monitor the `Mover.IsTrackReady` property.
@@ -201,13 +197,13 @@ To determine what type of movement ReissueCommand() will repeat, see Mover prope
201197
```javascript
202198
// Issue a primary command
203199
IF xInitialCommand THEN
204-
Mover[1].SetVelocity( 500 );
200+
Mover[1].MotionParameters.Velocity := 500; // mm/s
205201
Mover[1].MoveToPosition( 1000 );
206202
xInitialCommand := FALSE;
207203

208204
// Reissue the primary command, but with a new velocity parameter
209205
ELSIF xUpdateCommand THEN
210-
Mover[1].SetVelocity( 750 );
206+
Mover[1].MotionParemeters.Velocity := 750; // mm/s
211207
Mover[1].ReissueCommand();
212208
xUpdateCommand := FALSE;
213209
END_IF
@@ -223,11 +219,6 @@ END_IF
223219
224220
The mover's error properties will be cleared, and if and Axis error continues to exist after the reset, the error properties will continue to reflect this.
225221

226-
```javascript
227-
// mover has an error
228-
IF Mover[1].Error THEN
229-
Mover[1]
230-
```
231222

232223
### SetAcceleration
233224

@@ -244,6 +235,9 @@ IF xCommandHighAccel THEN
244235
END_IF
245236
```
246237

238+
!!! note "Notice"
239+
This method implicitly calls .ReissueCommand() in the background in order for the updated dynamics to take effect immediately. If this is not the intent, consider modifying the *Mover[x].MotionParameters* property instead.
240+
247241

248242
### SetDeceleration
249243

@@ -259,7 +253,8 @@ IF xCommandLowDecel THEN
259253
xCommandLowDecel := FALSE;
260254
END_IF
261255
```
262-
256+
!!! note "Notice"
257+
This method implicitly calls .ReissueCommand() in the background in order for the updated dynamics to take effect immediately. If this is not the intent, consider modifying the *Mover[x].MotionParameters* property instead.
263258

264259
### SetDirection
265260

@@ -269,8 +264,8 @@ END_IF
269264

270265
> Updates the Mover's internal Motion Parameter for Direction and immediately reissues any currently executing motion blocks so that the parameter update takes effect immediately
271266
272-
!!! Caution
273-
This method should only be used with care, and an understanding that a mover enroute can immediately reverse course and execute a motion command in the opposite direction when this method is called.
267+
!!! warning "Caution"
268+
This method implicitly calls .ReissueCommand() in the background in order for the updated dynamics to take effect immediately. If this is not the intent, consider modifying the *Mover[x].MotionParameters* property instead. This method should only be used with care, and an understanding that a mover enroute can immediately reverse course and execute a motion command in the opposite direction when this method is called.
274269

275270
```javascript
276271
// For supported directions, see Infosys
@@ -288,7 +283,7 @@ END_IF
288283

289284
> Sets the collision avoidance gap for the specified mover in mm. This takes effect immediately.
290285
291-
!!! Caution
286+
!!! warning "Caution"
292287
This method can cause unexpected motion. If setting a larger gap for a mover that currently has movers within the new gap distance (on either side of the mover). Each affected mover will immediately attempt to adjust for the new gap which may result in movers moving forwards or backwards.
293288

294289
When increasing the gap between movers it's recommended to do this one mover at a time only when the space in front of the mover is clear for at least the new gap distance. This can be accomplished with either a PositionTrigger or Zone.
@@ -334,10 +329,12 @@ Mover[1].SetGapMode( mcGapControlModeStandard );
334329
335330
```javascript
336331
IF xUpdateJerk THEN
337-
Mover[1].UpdateJerk( 1e5 );
332+
Mover[1].SetJerk( 1e5 );
338333
xUpdateJerk := FALSE;
339334
END_IF
340335
```
336+
!!! note "Notice"
337+
This method implicitly calls .ReissueCommand() in the background in order for the updated dynamics to take effect immediately. If this is not the intent, consider modifying the *Mover[x].MotionParameters* property instead.
341338

342339

343340
### SetVelocity
@@ -354,6 +351,9 @@ IF xCommandSlowMode THEN
354351
xCommandSlowMode := FALSE;
355352
END_IF
356353
```
354+
!!! note "Notice"
355+
This method implicitly calls .ReissueCommand() in the background in order for the updated dynamics to take effect immediately. If this is not the intent, consider modifying the *Mover[x].MotionParameters* property instead.
356+
357357

358358
### SyncToAxis
359359

@@ -555,7 +555,7 @@ It is recommended that all evaluations are nested inside IF checks for .IsSynced
555555
> Defines a structure containing the dynamics settings for the Mover. Any new motion commands issued will utilize these values.
556556
557557
!!! Note
558-
Despite listing this value as a Property here in the documentation, MotionParameters are actually defined as a regular Input to the Mover object. This allows component access to the members of the STRUCT, which is not possible for Properties.*
558+
Despite listing this value as a Property here in the documentation, MotionParameters are actually defined as a regular Input to the Mover object. This allows component access to the members of the STRUCT, which is not possible for Properties.
559559

560560
```javascript
561561
STRUCT
@@ -569,7 +569,9 @@ STRUCT
569569
END_STRUCT
570570
```
571571

572-
It is also possible to alter motion paramaters with mover methods such as `.SetVelocity()` or `.SetAcceleration()` and others.
572+
Modifying a mover's Motion Parameters will not affect the current dynamics of a mover enroute. Updated dynamics properties will only take effect when the next motion command is issued.
573+
574+
It is also possible to alter motion paramaters with mover methods such as `.SetVelocity()`, `.SetAcceleration()` and others. These methods implicitly call .ReissueCommand() and therefore take effect immediately.
573575

574576
### .NextMover
575577

@@ -642,7 +644,7 @@ END_IF;
642644
> Returns information provided by MC_ReadTrackPositions for use with track management.
643645
644646
!!! Note
645-
Despite listing this value as a Property here in the documentation, TrackInfo is actually defined as a regular Output from the Mover object. This allows component access to the members of the STRUCT, which is not possible for Properties.*
647+
Despite listing this value as a Property here in the documentation, TrackInfo is actually defined as a regular Output from the Mover object. This allows component access to the members of the STRUCT, which is not possible for Properties.
646648

647649
| Member | Type | Description |
648650
|---|---|---|
@@ -652,12 +654,3 @@ END_IF;
652654
| PartPosition | LREAL | Position of the mover measured from the zero point of the part the mover is physically on|
653655

654656

655-
## Extra Examples
656-
657-
Below are simple examples of different operations utilizing the Mover object:
658-
659-
```javascript
660-
// Mover: ARRAY [1..GVL.NUM_MOVERS] OF Mover
661-
Mover[1].SetVelocity( 2500 );
662-
Mover[1].MoveToPosition( 1200 );
663-
```

Documentation/docs/CodeReference/Objects/MoverList.md

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
> 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.
55
6-
Many of the methods and properties below are are based on corresponding methods available and documented in the [Mover](./Mover.md) object.
6+
Many of the methods and properties below are group commands based on corresponding methods available and documented in the singular [Mover](./Mover.md) object.
77

88
## Setup & Execution
99

@@ -114,7 +114,7 @@ Filtering a mover list by station can be helpful when workings with several move
114114

115115
> Returns a reference to a singular mover from the Mover List, based on it's geographic location relative to a fixed track position.
116116
117-
**Index** specifies the number of movers that should lie between the selection and the Position input. Therefore Index = 0 would be the closest mover to the input position (in a given direction), Index = 1 would be the second closest, Index = 2 would be the third closest, etc.
117+
**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.
118118

119119
**Position** specifies the target around which mover proximity should be considered.
120120

@@ -125,13 +125,13 @@ Filtering a mover list by station can be helpful when workings with several move
125125
// Which is the first closest mover to position 900
126126
// And which has a position less than 900
127127
// Then sends it to a station
128-
MoverListA.GetMoverByLocation( 0, 900, MC_Positive_Direction ).MoveToStation( Station[3] );
128+
MoverListA.GetMoverByLocation( 1, 900, MC_Positive_Direction ).MoveToStation( Station[3] );
129129

130130
// Select a mover in the MoverList
131131
// Which is the third closest mover to position 2000
132132
// And which has a position greater than 3000
133133
// Then sets its acceleration
134-
MoverListA.GetMoverByLocation( 2, 3000, MC_Negative_Direction ).SetAcceleration( 1E4 );
134+
MoverListA.GetMoverByLocation( 3, 3000, MC_Negative_Direction ).SetAcceleration( 1E4 );
135135

136136
```
137137
### Halt All
@@ -140,11 +140,11 @@ MoverListA.GetMoverByLocation( 2, 3000, MC_Negative_Direction ).SetAcceleration(
140140

141141
> Calls the Halt() method for all movers in the list.
142142
143-
### LogicalCompliment
143+
### LogicalComplement
144144

145-
*LogicalCompliment()*
145+
*LogicalComplement()*
146146

147-
> Returns the logical compliment of the current MoverList. Thus the returned list will list all movers not in the current MoverList.
147+
> Returns the logical complement of the current MoverList. Thus the returned list will list all movers not in the current MoverList.
148148
149149
```javascript
150150
// System contains: M1, M2, M3, M4, M5
@@ -235,6 +235,9 @@ MoverListA.MoveAllVelocity( 300 );
235235
MoverListA.SetAllAcceleration( 1E3 );
236236
```
237237

238+
!!! note
239+
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.
240+
238241

239242
### SetAllDeceleration
240243

@@ -246,6 +249,9 @@ MoverListA.SetAllAcceleration( 1E3 );
246249
MoverListA.SetAllDeceleration( 15000 );
247250
```
248251

252+
!!! note
253+
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.
254+
249255

250256
### SetAllDirection
251257

@@ -257,6 +263,8 @@ MoverListA.SetAllDeceleration( 15000 );
257263
MoverListA.SetAllDirection( mcDirectionPositive );
258264
```
259265

266+
!!! note
267+
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.
260268

261269
### SetAllGap
262270

@@ -268,16 +276,22 @@ MoverListA.SetAllDirection( mcDirectionPositive );
268276
MoverListA.Gap( 65.0 );
269277
```
270278

279+
!!! note
280+
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.
281+
271282
### SetAllGapMode
272283

273284
*SetAllGapMode( Mode : Tc3_Mc3Definitions.MC_GAP_CONTROL_MODE )*
274285

275286
> Sets the gap mode for every mover in the list
276287
277288
```javascript
278-
MoverListA.Gap( 65.0 );
289+
MoverListA.SetAllGapMode( mcGapControlModeStandard );
279290
```
280291

292+
!!! note
293+
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.
294+
281295
### SetAllJerk
282296

283297
*SetAllJerk( DesiredJerk : LREAL )*
@@ -288,6 +302,9 @@ MoverListA.Gap( 65.0 );
288302
MoverListA.SetAllJerk( 1e5 );
289303
```
290304

305+
!!! note
306+
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.
307+
291308

292309
### SetAllVelocity
293310

@@ -299,6 +316,8 @@ MoverListA.SetAllJerk( 1e5 );
299316
MoverListA.SetAllVelocity( 2000 );
300317
```
301318

319+
!!! note
320+
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.
302321

303322
### UnregisterAll
304323

Documentation/docs/CodeReference/Objects/Objective.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Objectives
22

3-
*Objective* is an umbrella term used by the project, that includes the following objects:
3+
*Objective* is an ABSTRACT base class used by the project, whose child objects include the following:
44

55
- [Stations](Station.md)
66
- [Zones](Zone.md)

Documentation/docs/CodeReference/Objects/Station.md

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Station[1].Position := 250;
1717
Station[2].Position := 500;
1818
Station[3].Position := 750;
1919
```
20-
Stations must also be added to the Mediator object. By default, this is handled in the MAIN.Initialize ACTION.
20+
Stations must also be added to the Mediator object. By default, this is handled automatically.
2121

2222
```javascript
2323
// Example implementation
@@ -34,14 +34,14 @@ Mover[2].MoveToStation( Station[3] );
3434
Station[3].RegisterMover( Mover[2] ); // unnecessary
3535
```
3636

37-
Stations also automatically *unregister* movers that have been redirected with another move command, even if that command's destination is the same as the Station.
37+
Stations also automatically *unregister* movers that have been redirected with another move command, even if that command's destination is the same location as the Station.
3838

3939
```javascript
4040
Mover[2].MoveToStation( Station[3] );
4141
Mover[2].MoveToPosition( Station[3].Position );
4242
```
4343

44-
Here, the Station will not report *MoverInPosition*.
44+
Here, the Station will not report *MoverInPosition* when it arrives because the original command is interrupted by one where the *CurrentMoveType* is not `MOVETYPE_STATION`.
4545

4646

4747
## Methods
@@ -90,6 +90,14 @@ When no mover is present in the Station, .CurrentMover is an invalid reference.
9090

9191
It is recommended that all evaluations are nested inside IF checks for [.MoverInPosition](#moverinposition).
9292

93+
### .Description
94+
95+
*STRING*
96+
97+
> A text description of the station that is passed to the visualization tools. It's also visible within within the TwinCAT debugging tools for easier identification of stations.
98+
99+
This value can be changed at runtime and will update on the visualization. This offers the opportunity to put dynamic data on the XTS visualization such as a station part count.
100+
93101
### .GroupSize
94102

95103
*DINT*
@@ -115,7 +123,6 @@ This value is only used to help calculate throughput `.Statistics` on the mover
115123
!!! Note
116124
This property is part of [Objective](./Objective.md#trackedmovercount) but is frequently used with stations and can be accessed as part of the Station object.
117125

118-
119126
### .Position
120127

121128
*LREAL*
@@ -146,12 +153,22 @@ This value is also used to place a marker on the visualization tools representin
146153
| ThrottledThreshold | LREAL | A high throttled threshold (Blocked to Empty ratio) indicates a potential bottleneck station |
147154
| ProcessedMoverCount | UDINT | Total number of movers processed by this station |
148155

149-
#### .Track
156+
### .Track
150157

151158
*REFERENCE TO Track*
152159

153160
> Track that the station is assigned to when using track management. See the [Track](Track.md) object.
154161
162+
### .TrackId
163+
164+
*DINT*
165+
166+
> The numeric id of the track that this station is assigned to.
167+
168+
This value is read-only. Use the method `.SetTrack()` to set the station's assigned track.
169+
170+
171+
155172

156173
## Extra Examples
157174

@@ -175,6 +192,6 @@ FOR i := 0 TO Station[0].TrackedMoverCount-1 DO
175192
targetMover^.MoveToStation( Station[1] );
176193
END_FOR
177194
```
178-
# Station Labeling In Viewing Tools
195+
### Station Labeling In Viewing Tools
179196

180197
See [Visualization](../../GettingStarted/Visualization.md)

0 commit comments

Comments
 (0)